From 70f5e96546446aae6a1273059d2368a3aa426e4f Mon Sep 17 00:00:00 2001 From: masseo <125076223+matte-oss@users.noreply.github.com> Date: Sat, 9 Nov 2024 20:43:35 +0100 Subject: [PATCH 01/42] Create mail.masseo.json --- domains/mail.masseo.json | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 domains/mail.masseo.json diff --git a/domains/mail.masseo.json b/domains/mail.masseo.json new file mode 100644 index 000000000..b4cd34de6 --- /dev/null +++ b/domains/mail.masseo.json @@ -0,0 +1,11 @@ +{ + "owner": { + "username": "matte-oss", + "email": "7sz8jlw6h@mozmail.com" + }, + "record": { + "TXT": [ + "mail.masseo.zoho-verification=zb53346473.zmverify.zoho.eu" + ] + } +} From c557e94ca035ef2817567a6843a83769c19c8045 Mon Sep 17 00:00:00 2001 From: "kzk.hitoru" Date: Sun, 10 Nov 2024 11:47:58 +0700 Subject: [PATCH 02/42] Create _discord.betaprj.akk1to.json --- domains/_discord.betaprj.akk1to.json | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 domains/_discord.betaprj.akk1to.json diff --git a/domains/_discord.betaprj.akk1to.json b/domains/_discord.betaprj.akk1to.json new file mode 100644 index 000000000..3fbd209cf --- /dev/null +++ b/domains/_discord.betaprj.akk1to.json @@ -0,0 +1,10 @@ +{ + "owner": { + "username": "akk1to", + "email": "akk1to.dev@gmail.com", + "discord": "727497287777124414" + }, + "record": { + "TXT": ["dh=e1e17c98197b35ff9ed4eef8a473fa86fa3106b8"] + } +} From 991d6f5a89bd2959eab5dd380cf66313dc5b781d Mon Sep 17 00:00:00 2001 From: Arfiano Jordhy Ramadhan <100340517+ukinon@users.noreply.github.com> Date: Sun, 10 Nov 2024 15:19:02 +0700 Subject: [PATCH 03/42] Create _vercel.ukino.json --- domains/_vercel.ukino.json | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 domains/_vercel.ukino.json diff --git a/domains/_vercel.ukino.json b/domains/_vercel.ukino.json new file mode 100644 index 000000000..8540ac80e --- /dev/null +++ b/domains/_vercel.ukino.json @@ -0,0 +1,9 @@ +{ + "owner": { + "username": "ukinon", + "email": "arfianoj@gmail.com" + }, + "record": { + "TXT": ["vc-domain-verify=ukino.is-a.dev,abcf9c3157f2470d8c51"] + } +} From f1ba22828a2315a89bebf50e429dba3abc0d2154 Mon Sep 17 00:00:00 2001 From: Arfiano Jordhy Ramadhan <100340517+ukinon@users.noreply.github.com> Date: Sun, 10 Nov 2024 15:19:24 +0700 Subject: [PATCH 04/42] Create ukino.json --- domains/ukino.json | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 domains/ukino.json diff --git a/domains/ukino.json b/domains/ukino.json new file mode 100644 index 000000000..cf8775b36 --- /dev/null +++ b/domains/ukino.json @@ -0,0 +1,8 @@ +{ + "owner": { + "username": "ukinon" + }, + "record": { + "CNAME": "ukino.vercel.app" + } +} From 67c96b28fa1598580d21559ab58d7dd4dae72a7a Mon Sep 17 00:00:00 2001 From: abiapp789 Date: Sun, 10 Nov 2024 15:45:23 +0530 Subject: [PATCH 05/42] Update abiapp789.json --- domains/abiapp789.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/domains/abiapp789.json b/domains/abiapp789.json index 8d7a8b8bc..4472f5420 100644 --- a/domains/abiapp789.json +++ b/domains/abiapp789.json @@ -5,6 +5,6 @@ "email": "abiapp2024@gmail.com" }, "record": { - "CNAME": "abiapp789.github.io" + "CNAME": "trytodownloadme.rf.gd" } } From b4da40866883733e7dc42ba6d45a69ac8e0c9503 Mon Sep 17 00:00:00 2001 From: xzrci Date: Sun, 10 Nov 2024 16:02:50 +0500 Subject: [PATCH 06/42] Create _vercel.jake.json --- domains/_vercel.jake.json | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 domains/_vercel.jake.json diff --git a/domains/_vercel.jake.json b/domains/_vercel.jake.json new file mode 100644 index 000000000..d38b4ed5b --- /dev/null +++ b/domains/_vercel.jake.json @@ -0,0 +1,8 @@ +{ + "owner": { + "username": "xzrci" + }, + "record": { + "TXT": ["vc-domain-verify=jake.is-a.dev,1075ab07de85fa87e8cd"] + } +} From 07db14b0c6089375b380fad5af14302ae6614a87 Mon Sep 17 00:00:00 2001 From: xzrci Date: Sun, 10 Nov 2024 16:08:00 +0500 Subject: [PATCH 07/42] Update jake.json --- domains/jake.json | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/domains/jake.json b/domains/jake.json index 091329342..e0f07046a 100644 --- a/domains/jake.json +++ b/domains/jake.json @@ -1,11 +1,8 @@ { - "description": "Jake's personal website and blog.", - "repo": "https://github.com/j-eo/j-eo.github.io", "owner": { - "username": "j-eo", - "email": "website-contact.nem2h@silomails.com" + "username": "xzrci" }, "record": { - "CNAME": "jakeanto.pages.dev" + "CNAME": "xzrci.vercel.app" } } From 67d62a7f0c075377813532f4908de3c4fbe5e795 Mon Sep 17 00:00:00 2001 From: xzrci Date: Sun, 10 Nov 2024 16:20:40 +0500 Subject: [PATCH 08/42] Update _vercel.jake.json --- domains/_vercel.jake.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/domains/_vercel.jake.json b/domains/_vercel.jake.json index d38b4ed5b..79e94eafe 100644 --- a/domains/_vercel.jake.json +++ b/domains/_vercel.jake.json @@ -1,6 +1,7 @@ { "owner": { - "username": "xzrci" + "username": "xzrci", + "email": "xzrci@mail.ru" }, "record": { "TXT": ["vc-domain-verify=jake.is-a.dev,1075ab07de85fa87e8cd"] From a5eefd52e6c911d1e7a082d3706fa27f15ac6d9c Mon Sep 17 00:00:00 2001 From: xzrci Date: Sun, 10 Nov 2024 16:22:09 +0500 Subject: [PATCH 09/42] Update jake.json --- domains/jake.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/domains/jake.json b/domains/jake.json index e0f07046a..92bfa7038 100644 --- a/domains/jake.json +++ b/domains/jake.json @@ -1,6 +1,7 @@ { "owner": { - "username": "xzrci" + "username": "xzrci", + "email": "xzrci@mail.ru" }, "record": { "CNAME": "xzrci.vercel.app" From 83486961b75e67a1e50536ecad5ac06dc7a8cec0 Mon Sep 17 00:00:00 2001 From: cgd <70825723+cupglassDEV@users.noreply.github.com> Date: Sun, 10 Nov 2024 18:56:25 +0700 Subject: [PATCH 10/42] Create formatter.yml --- .github/workflows/formatter.yml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 .github/workflows/formatter.yml diff --git a/.github/workflows/formatter.yml b/.github/workflows/formatter.yml new file mode 100644 index 000000000..3310cebfc --- /dev/null +++ b/.github/workflows/formatter.yml @@ -0,0 +1,22 @@ +name: Formatter +on: + push: + branches: + - main +jobs: + format: + name: "Format" + runs-on: ubuntu-latest + steps: + - uses: actions/setup-node@v4 + with: + node-version: 20.x + - name: Run prettier + # Use -y, like npm install -y + run: npx -y prettier ./domains -w --tab-width 2 --print-width 120 + - name: Commit + run: | + git config --global user.name 'is-a.dev' + git config --global user.email 'actions@github.com' + git commit -am "Format domains" + git push From a2eb1fbce740210e358c7de883b6f498ed356b52 Mon Sep 17 00:00:00 2001 From: masseo <125076223+matte-oss@users.noreply.github.com> Date: Sun, 10 Nov 2024 12:56:49 +0100 Subject: [PATCH 11/42] Create masseo.json --- domains/masseo.json | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 domains/masseo.json diff --git a/domains/masseo.json b/domains/masseo.json new file mode 100644 index 000000000..c47cca342 --- /dev/null +++ b/domains/masseo.json @@ -0,0 +1,9 @@ +{ + "owner": { + "username": "matte-oss", + "email": "7sz8jlw6h@mozmail.co" + }, + "record": { + "CNAME": "hashnode.network" + } +} From 017bc03999266d215a07ba026ffd219bf12d54dd Mon Sep 17 00:00:00 2001 From: William Harrison <87287585+wdhdev@users.noreply.github.com> Date: Sun, 10 Nov 2024 20:07:24 +0800 Subject: [PATCH 12/42] Update and rename formatter.yml to prettier.yml --- .github/workflows/formatter.yml | 22 ---------------------- .github/workflows/prettier.yml | 27 +++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 22 deletions(-) delete mode 100644 .github/workflows/formatter.yml create mode 100644 .github/workflows/prettier.yml diff --git a/.github/workflows/formatter.yml b/.github/workflows/formatter.yml deleted file mode 100644 index 3310cebfc..000000000 --- a/.github/workflows/formatter.yml +++ /dev/null @@ -1,22 +0,0 @@ -name: Formatter -on: - push: - branches: - - main -jobs: - format: - name: "Format" - runs-on: ubuntu-latest - steps: - - uses: actions/setup-node@v4 - with: - node-version: 20.x - - name: Run prettier - # Use -y, like npm install -y - run: npx -y prettier ./domains -w --tab-width 2 --print-width 120 - - name: Commit - run: | - git config --global user.name 'is-a.dev' - git config --global user.email 'actions@github.com' - git commit -am "Format domains" - git push diff --git a/.github/workflows/prettier.yml b/.github/workflows/prettier.yml new file mode 100644 index 000000000..8f494707a --- /dev/null +++ b/.github/workflows/prettier.yml @@ -0,0 +1,27 @@ +name: Prettier + +on: + push: + branches: [main] + paths: + - "domains/*" + +jobs: + format: + name: Format + runs-on: ubuntu-latest + + steps: + - uses: actions/setup-node@v4 + with: + node-version: 20.x + + - name: Run Prettier + run: npx -y prettier ./domains -w --tab-width 2 --print-width 120 + + - name: Commit + run: | + git config --global user.email "actions@github.com" + git config --global user.name "GitHub Actions" + git commit -am "Format domains" + git push From 7cdbdbc37e4ca857d220dde60c6c924e22684ff8 Mon Sep 17 00:00:00 2001 From: xzrci Date: Sun, 10 Nov 2024 17:10:11 +0500 Subject: [PATCH 13/42] Update _vercel.jake.json --- domains/_vercel.jake.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/domains/_vercel.jake.json b/domains/_vercel.jake.json index 79e94eafe..08c660da0 100644 --- a/domains/_vercel.jake.json +++ b/domains/_vercel.jake.json @@ -1,7 +1,7 @@ { "owner": { "username": "xzrci", - "email": "xzrci@mail.ru" + "email": "" }, "record": { "TXT": ["vc-domain-verify=jake.is-a.dev,1075ab07de85fa87e8cd"] From a14a35f3090141ddfe7aeac008b7397b6ef2f5e2 Mon Sep 17 00:00:00 2001 From: cgd <70825723+cupglassDEV@users.noreply.github.com> Date: Sun, 10 Nov 2024 19:11:13 +0700 Subject: [PATCH 14/42] use github action push to whatever --- .github/workflows/prettier.yml | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/.github/workflows/prettier.yml b/.github/workflows/prettier.yml index 8f494707a..eb9442bcf 100644 --- a/.github/workflows/prettier.yml +++ b/.github/workflows/prettier.yml @@ -20,8 +20,12 @@ jobs: run: npx -y prettier ./domains -w --tab-width 2 --print-width 120 - name: Commit - run: | - git config --global user.email "actions@github.com" - git config --global user.name "GitHub Actions" - git commit -am "Format domains" - git push + uses: cpina/github-action-push-to-another-repository@main + with: + source-directory: "register" + destination-github-username: is-a-dev + destination-repository-name: register + user-email: actions@github.com + user-name: "GitHub Actions" + env: + API_TOKEN_GITHUB: ${{ secrets.BOT }} From 98d0f8c95907249285df72fe20abfd59360bc260 Mon Sep 17 00:00:00 2001 From: xzrci Date: Sun, 10 Nov 2024 17:11:13 +0500 Subject: [PATCH 15/42] Update jake.json --- domains/jake.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/domains/jake.json b/domains/jake.json index 92bfa7038..2e5c97792 100644 --- a/domains/jake.json +++ b/domains/jake.json @@ -1,7 +1,7 @@ { "owner": { "username": "xzrci", - "email": "xzrci@mail.ru" + "email": "" }, "record": { "CNAME": "xzrci.vercel.app" From 07be06fa111b2d9ef7de6c392c357b875cb6e1b5 Mon Sep 17 00:00:00 2001 From: William Harrison <87287585+wdhdev@users.noreply.github.com> Date: Sun, 10 Nov 2024 20:13:35 +0800 Subject: [PATCH 16/42] Update raw-api.yml --- .github/workflows/raw-api.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/raw-api.yml b/.github/workflows/raw-api.yml index 35680dc72..4ba2bd85d 100644 --- a/.github/workflows/raw-api.yml +++ b/.github/workflows/raw-api.yml @@ -40,7 +40,7 @@ jobs: source-directory: "raw-api" destination-github-username: is-a-dev destination-repository-name: raw-api - user-email: actions@github.com + user-email: "actions@github.com" user-name: "GitHub Actions" env: API_TOKEN_GITHUB: ${{ secrets.BOT }} From 670af4f62efa88a1a48ca55125f807d2628731f2 Mon Sep 17 00:00:00 2001 From: William Harrison <87287585+wdhdev@users.noreply.github.com> Date: Sun, 10 Nov 2024 20:13:56 +0800 Subject: [PATCH 17/42] Update prettier.yml --- .github/workflows/prettier.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/prettier.yml b/.github/workflows/prettier.yml index eb9442bcf..bd00c134d 100644 --- a/.github/workflows/prettier.yml +++ b/.github/workflows/prettier.yml @@ -25,7 +25,7 @@ jobs: source-directory: "register" destination-github-username: is-a-dev destination-repository-name: register - user-email: actions@github.com + user-email: "actions@github.com" user-name: "GitHub Actions" env: API_TOKEN_GITHUB: ${{ secrets.BOT }} From 0a8af169daab9d3d8051bec293570daabc8911fa Mon Sep 17 00:00:00 2001 From: William Harrison <87287585+wdhdev@users.noreply.github.com> Date: Sun, 10 Nov 2024 20:15:22 +0800 Subject: [PATCH 18/42] Update prettier.yml --- .github/workflows/prettier.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/prettier.yml b/.github/workflows/prettier.yml index bd00c134d..f555d457e 100644 --- a/.github/workflows/prettier.yml +++ b/.github/workflows/prettier.yml @@ -5,6 +5,7 @@ on: branches: [main] paths: - "domains/*" + - ".github/workflows/prettier.yml" jobs: format: From db52535770fe53073c06a5f3219f009c04b600f2 Mon Sep 17 00:00:00 2001 From: William Harrison <87287585+wdhdev@users.noreply.github.com> Date: Sun, 10 Nov 2024 20:17:01 +0800 Subject: [PATCH 19/42] Update prettier.yml --- .github/workflows/prettier.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/prettier.yml b/.github/workflows/prettier.yml index f555d457e..4379c24c7 100644 --- a/.github/workflows/prettier.yml +++ b/.github/workflows/prettier.yml @@ -17,8 +17,10 @@ jobs: with: node-version: 20.x + - run: ls + - name: Run Prettier - run: npx -y prettier ./domains -w --tab-width 2 --print-width 120 + run: npx -y prettier domains/*.json -w --tab-width 2 --print-width 120 - name: Commit uses: cpina/github-action-push-to-another-repository@main From 4df3d9afd29ccc216888295ae64eb0e5ee22b283 Mon Sep 17 00:00:00 2001 From: William Harrison <87287585+wdhdev@users.noreply.github.com> Date: Sun, 10 Nov 2024 20:18:22 +0800 Subject: [PATCH 20/42] add checkout --- .github/workflows/prettier.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/prettier.yml b/.github/workflows/prettier.yml index 4379c24c7..f67a561c4 100644 --- a/.github/workflows/prettier.yml +++ b/.github/workflows/prettier.yml @@ -13,14 +13,14 @@ jobs: runs-on: ubuntu-latest steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version: 20.x - - run: ls - - name: Run Prettier - run: npx -y prettier domains/*.json -w --tab-width 2 --print-width 120 + run: npx -y prettier ./domains -w --tab-width 2 --print-width 120 - name: Commit uses: cpina/github-action-push-to-another-repository@main From 64e5cfe428df758ad432ba1464db6aa82916dfdd Mon Sep 17 00:00:00 2001 From: William Harrison <87287585+wdhdev@users.noreply.github.com> Date: Sun, 10 Nov 2024 20:19:21 +0800 Subject: [PATCH 21/42] Update prettier.yml --- .github/workflows/prettier.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/prettier.yml b/.github/workflows/prettier.yml index f67a561c4..3f0f2eafc 100644 --- a/.github/workflows/prettier.yml +++ b/.github/workflows/prettier.yml @@ -25,7 +25,7 @@ jobs: - name: Commit uses: cpina/github-action-push-to-another-repository@main with: - source-directory: "register" + source-directory: "." destination-github-username: is-a-dev destination-repository-name: register user-email: "actions@github.com" From e4209a6e565afa1ce07482a23e1c88cc5d2e1880 Mon Sep 17 00:00:00 2001 From: William Harrison <87287585+wdhdev@users.noreply.github.com> Date: Sun, 10 Nov 2024 20:31:36 +0800 Subject: [PATCH 22/42] Update prettier.yml --- .github/workflows/prettier.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/prettier.yml b/.github/workflows/prettier.yml index 3f0f2eafc..5b7c696d1 100644 --- a/.github/workflows/prettier.yml +++ b/.github/workflows/prettier.yml @@ -28,7 +28,7 @@ jobs: source-directory: "." destination-github-username: is-a-dev destination-repository-name: register - user-email: "actions@github.com" - user-name: "GitHub Actions" + user-email: "bot@is-a.dev" + user-name: "is-a-dev-bot" env: API_TOKEN_GITHUB: ${{ secrets.BOT }} From 1760d7f82e8b0bff8475790e65af10a8a57bc10d Mon Sep 17 00:00:00 2001 From: William Harrison <87287585+wdhdev@users.noreply.github.com> Date: Sun, 10 Nov 2024 20:38:37 +0800 Subject: [PATCH 23/42] Update prettier.yml --- .github/workflows/prettier.yml | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/.github/workflows/prettier.yml b/.github/workflows/prettier.yml index 5b7c696d1..bd79468c8 100644 --- a/.github/workflows/prettier.yml +++ b/.github/workflows/prettier.yml @@ -22,13 +22,31 @@ jobs: - name: Run Prettier run: npx -y prettier ./domains -w --tab-width 2 --print-width 120 - - name: Commit - uses: cpina/github-action-push-to-another-repository@main - with: - source-directory: "." - destination-github-username: is-a-dev - destination-repository-name: register - user-email: "bot@is-a.dev" - user-name: "is-a-dev-bot" + - name: Create and switch to new branch + run: | + BRANCH_NAME="prettier-$(date +%s)" + git checkout -b "$BRANCH_NAME" + + - name: Commit changes + run: | + git config --local user.email "bot@is-a.dev" + git config --local user.name "is-a-dev-bot" + git add . + git commit -m "chore: apply Prettier formatting" + + - name: Push changes to new branch env: API_TOKEN_GITHUB: ${{ secrets.BOT }} + run: | + git push -u origin "$BRANCH_NAME" + + - name: Create Pull Request + id: create_pr + uses: peter-evans/create-pull-request@v5 + with: + token: ${{ secrets.BOT }} + head: "$BRANCH_NAME" + base: main + title: "$BRANCH_NAME" + body: "Generated from https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}." + auto-merge: true From ad908df09465bbf8e24a8209c65aae0543ca3aa9 Mon Sep 17 00:00:00 2001 From: Lungu Stefan-Gabriel Date: Sun, 10 Nov 2024 14:39:19 +0200 Subject: [PATCH 24/42] Update lungustefan.json --- domains/lungustefan.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/domains/lungustefan.json b/domains/lungustefan.json index d2e3d12b9..b9a1eff55 100644 --- a/domains/lungustefan.json +++ b/domains/lungustefan.json @@ -1,7 +1,7 @@ { "owner": { - "username": "InterJadify", - "email": "", + "username": "lungustefan", + "email": "hi@lungustefan.ro", "discord": "753179409682399332", "OWL": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.ZerVkVuk5RE7iT8ymXVcKhUkihyAdAbufacrfxq1u7NKQ4Hd0_PbY5FYDAR5uuVd-sCe7fOztiSKV7f9q1OI4HNGDqQxiaWqzom_lQsrIMW-gWUDsBG4Vo8gsq0wrw2th797i-JfsXy2crWaeXlX7X1kROV5KZhGwlSusnUrMp3jlN-uUM3b4hxUyEs3grbh4BiZ9CWShm-kLUs572OBpMigXh3aO0DcUl-BdYdlpSEdRQe8zwylJbFnetxG3qBaMcciGwImixY6V4qaqFwH18isGjDknsHB2WvXM8ekMZmSxgMyRtv1VRSbC22grzMeBazgWoj3x65KU3Z8C7KNmw.w-d8n6WalLAvFcWHqlRkcw.W7GJTwpNRB9pUehhfBXVlkOR1knSNSjvJWeDViV6u2h6AyBdwyaAyILEQzC5ishw0f209VgdyaCqocC7nJp_ZjWjAfcyw0ICLiUXM37Sn3Q.xQOo4RjPMh6dBbWiF1Polw" }, From 040cd6f5bc56e673e1063e350917cd56b02b79f6 Mon Sep 17 00:00:00 2001 From: William Harrison <87287585+wdhdev@users.noreply.github.com> Date: Sun, 10 Nov 2024 20:41:36 +0800 Subject: [PATCH 25/42] Update prettier.yml --- .github/workflows/prettier.yml | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/.github/workflows/prettier.yml b/.github/workflows/prettier.yml index bd79468c8..c2634b0d1 100644 --- a/.github/workflows/prettier.yml +++ b/.github/workflows/prettier.yml @@ -22,25 +22,30 @@ jobs: - name: Run Prettier run: npx -y prettier ./domains -w --tab-width 2 --print-width 120 - - name: Create and switch to new branch + - name: Create branch run: | BRANCH_NAME="prettier-$(date +%s)" + echo "Generated branch name: $BRANCH_NAME" + if [ -z "$BRANCH_NAME" ]; then + echo "Error: Branch name is empty." + exit 1 + fi git checkout -b "$BRANCH_NAME" - - name: Commit changes + - name: Commit run: | git config --local user.email "bot@is-a.dev" git config --local user.name "is-a-dev-bot" git add . - git commit -m "chore: apply Prettier formatting" + git commit -m "chore: apply formatting" - - name: Push changes to new branch + - name: Push env: API_TOKEN_GITHUB: ${{ secrets.BOT }} run: | git push -u origin "$BRANCH_NAME" - - name: Create Pull Request + - name: Create pull request id: create_pr uses: peter-evans/create-pull-request@v5 with: From cef7f280bfcf5362a290b60a5db7c2514ae1e355 Mon Sep 17 00:00:00 2001 From: William Harrison <87287585+wdhdev@users.noreply.github.com> Date: Sun, 10 Nov 2024 20:45:29 +0800 Subject: [PATCH 26/42] Update prettier.yml --- .github/workflows/prettier.yml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.github/workflows/prettier.yml b/.github/workflows/prettier.yml index c2634b0d1..b5f8c496c 100644 --- a/.github/workflows/prettier.yml +++ b/.github/workflows/prettier.yml @@ -25,11 +25,8 @@ jobs: - name: Create branch run: | BRANCH_NAME="prettier-$(date +%s)" - echo "Generated branch name: $BRANCH_NAME" - if [ -z "$BRANCH_NAME" ]; then - echo "Error: Branch name is empty." - exit 1 - fi + echo "Generated branch: $BRANCH_NAME" + echo "BRANCH_NAME=$BRANCH_NAME" >> $GITHUB_ENV git checkout -b "$BRANCH_NAME" - name: Commit From db4d3a80fcb8cde84bf753b910e6578582a7ff43 Mon Sep 17 00:00:00 2001 From: William Harrison <87287585+wdhdev@users.noreply.github.com> Date: Sun, 10 Nov 2024 20:53:05 +0800 Subject: [PATCH 27/42] Update prettier.yml --- .github/workflows/prettier.yml | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/.github/workflows/prettier.yml b/.github/workflows/prettier.yml index b5f8c496c..fce9694dc 100644 --- a/.github/workflows/prettier.yml +++ b/.github/workflows/prettier.yml @@ -44,11 +44,18 @@ jobs: - name: Create pull request id: create_pr - uses: peter-evans/create-pull-request@v5 + uses: peter-evans/create-pull-request@v7 with: token: ${{ secrets.BOT }} - head: "$BRANCH_NAME" + branch: "$BRANCH_NAME" base: main title: "$BRANCH_NAME" body: "Generated from https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}." - auto-merge: true + + - name: Merge pull request + if: steps.create_pr.outputs.pull-request-operation == "created" + uses: peter-evans/enable-pull-request-automerge@v3 + with: + token: ${{ secrets.BOT }} + pull-request-number: ${{ steps.create_pr.outputs.pull-request-number }} + merge-method: squash From c14f375941c5d30b9b8101ab02112690186c0148 Mon Sep 17 00:00:00 2001 From: William Harrison <87287585+wdhdev@users.noreply.github.com> Date: Sun, 10 Nov 2024 20:53:47 +0800 Subject: [PATCH 28/42] Update prettier.yml --- .github/workflows/prettier.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/prettier.yml b/.github/workflows/prettier.yml index fce9694dc..dddd372ea 100644 --- a/.github/workflows/prettier.yml +++ b/.github/workflows/prettier.yml @@ -53,7 +53,7 @@ jobs: body: "Generated from https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}." - name: Merge pull request - if: steps.create_pr.outputs.pull-request-operation == "created" + if: steps.create_pr.outputs.pull-request-operation == 'created' uses: peter-evans/enable-pull-request-automerge@v3 with: token: ${{ secrets.BOT }} From 6b83aa151cddcdb16ecb2c105fc7cf286e5eef3f Mon Sep 17 00:00:00 2001 From: William Harrison <87287585+wdhdev@users.noreply.github.com> Date: Sun, 10 Nov 2024 20:59:17 +0800 Subject: [PATCH 29/42] Update prettier.yml --- .github/workflows/prettier.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/prettier.yml b/.github/workflows/prettier.yml index dddd372ea..2358a963f 100644 --- a/.github/workflows/prettier.yml +++ b/.github/workflows/prettier.yml @@ -47,6 +47,7 @@ jobs: uses: peter-evans/create-pull-request@v7 with: token: ${{ secrets.BOT }} + author: is-a-dev-bot branch: "$BRANCH_NAME" base: main title: "$BRANCH_NAME" From 90ed139ffaa73176065ea64d6cdca87611d6aec9 Mon Sep 17 00:00:00 2001 From: William Harrison <87287585+wdhdev@users.noreply.github.com> Date: Sun, 10 Nov 2024 21:00:37 +0800 Subject: [PATCH 30/42] Delete .github/workflows/prettier.yml --- .github/workflows/prettier.yml | 62 ---------------------------------- 1 file changed, 62 deletions(-) delete mode 100644 .github/workflows/prettier.yml diff --git a/.github/workflows/prettier.yml b/.github/workflows/prettier.yml deleted file mode 100644 index 2358a963f..000000000 --- a/.github/workflows/prettier.yml +++ /dev/null @@ -1,62 +0,0 @@ -name: Prettier - -on: - push: - branches: [main] - paths: - - "domains/*" - - ".github/workflows/prettier.yml" - -jobs: - format: - name: Format - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - - uses: actions/setup-node@v4 - with: - node-version: 20.x - - - name: Run Prettier - run: npx -y prettier ./domains -w --tab-width 2 --print-width 120 - - - name: Create branch - run: | - BRANCH_NAME="prettier-$(date +%s)" - echo "Generated branch: $BRANCH_NAME" - echo "BRANCH_NAME=$BRANCH_NAME" >> $GITHUB_ENV - git checkout -b "$BRANCH_NAME" - - - name: Commit - run: | - git config --local user.email "bot@is-a.dev" - git config --local user.name "is-a-dev-bot" - git add . - git commit -m "chore: apply formatting" - - - name: Push - env: - API_TOKEN_GITHUB: ${{ secrets.BOT }} - run: | - git push -u origin "$BRANCH_NAME" - - - name: Create pull request - id: create_pr - uses: peter-evans/create-pull-request@v7 - with: - token: ${{ secrets.BOT }} - author: is-a-dev-bot - branch: "$BRANCH_NAME" - base: main - title: "$BRANCH_NAME" - body: "Generated from https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}." - - - name: Merge pull request - if: steps.create_pr.outputs.pull-request-operation == 'created' - uses: peter-evans/enable-pull-request-automerge@v3 - with: - token: ${{ secrets.BOT }} - pull-request-number: ${{ steps.create_pr.outputs.pull-request-number }} - merge-method: squash From f1b5993ba71c35f3d5ceb943e92ed37c07644d6a Mon Sep 17 00:00:00 2001 From: masseo <125076223+matte-oss@users.noreply.github.com> Date: Sun, 10 Nov 2024 14:59:23 +0100 Subject: [PATCH 31/42] Update mail.masseo.json --- domains/mail.masseo.json | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/domains/mail.masseo.json b/domains/mail.masseo.json index b4cd34de6..7ae148af7 100644 --- a/domains/mail.masseo.json +++ b/domains/mail.masseo.json @@ -4,8 +4,12 @@ "email": "7sz8jlw6h@mozmail.com" }, "record": { - "TXT": [ - "mail.masseo.zoho-verification=zb53346473.zmverify.zoho.eu" - ] + "MX": [ + "mx.zoho.eu", + "mx2.zoho.eu", + "mx3.zoho.eu" + ], + "SPF": "v=spf1 include:zohomail.eu ~all", + "DKIM": "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCBdKJ9pgi76G8kOhX1v4hDt3jros0cBQMLMeKc8L6F8iLBUz78XwP4qRO/1sfdl1vSavi+KsybaNotnLfA2+vA+txPzR/zUEdPWTZhz/Q7iQqo7AuX8hZDY2emDA/0wAkSVAQ1i/KKmSnnR1q6RvJcjPmVCW2gjpw9MOfCwt7PAwIDAQAB" } } From 8748e5ce80890c5e90de371b3b146ff0c0e540e1 Mon Sep 17 00:00:00 2001 From: masseo <125076223+matte-oss@users.noreply.github.com> Date: Sun, 10 Nov 2024 15:20:21 +0100 Subject: [PATCH 32/42] Update mail.masseo.json --- domains/mail.masseo.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/domains/mail.masseo.json b/domains/mail.masseo.json index 7ae148af7..ceee2e4b5 100644 --- a/domains/mail.masseo.json +++ b/domains/mail.masseo.json @@ -9,7 +9,9 @@ "mx2.zoho.eu", "mx3.zoho.eu" ], - "SPF": "v=spf1 include:zohomail.eu ~all", + "TXT": [ + "v=spf1 include:zohomail.eu ~all" + ], "DKIM": "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCBdKJ9pgi76G8kOhX1v4hDt3jros0cBQMLMeKc8L6F8iLBUz78XwP4qRO/1sfdl1vSavi+KsybaNotnLfA2+vA+txPzR/zUEdPWTZhz/Q7iQqo7AuX8hZDY2emDA/0wAkSVAQ1i/KKmSnnR1q6RvJcjPmVCW2gjpw9MOfCwt7PAwIDAQAB" } } From 67ab9f9408d5c34f22e3121905995f43930d16d1 Mon Sep 17 00:00:00 2001 From: masseo <125076223+matte-oss@users.noreply.github.com> Date: Sun, 10 Nov 2024 15:26:44 +0100 Subject: [PATCH 33/42] Update mail.masseo.json --- domains/mail.masseo.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/domains/mail.masseo.json b/domains/mail.masseo.json index ceee2e4b5..5a42cbbb9 100644 --- a/domains/mail.masseo.json +++ b/domains/mail.masseo.json @@ -10,8 +10,8 @@ "mx3.zoho.eu" ], "TXT": [ - "v=spf1 include:zohomail.eu ~all" - ], - "DKIM": "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCBdKJ9pgi76G8kOhX1v4hDt3jros0cBQMLMeKc8L6F8iLBUz78XwP4qRO/1sfdl1vSavi+KsybaNotnLfA2+vA+txPzR/zUEdPWTZhz/Q7iQqo7AuX8hZDY2emDA/0wAkSVAQ1i/KKmSnnR1q6RvJcjPmVCW2gjpw9MOfCwt7PAwIDAQAB" + "v=spf1 include:zohomail.eu ~all", + "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCBdKJ9pgi76G8kOhX1v4hDt3jros0cBQMLMeKc8L6F8iLBUz78XwP4qRO/1sfdl1vSavi+KsybaNotnLfA2+vA+txPzR/zUEdPWTZhz/Q7iQqo7AuX8hZDY2emDA/0wAkSVAQ1i/KKmSnnR1q6RvJcjPmVCW2gjpw9MOfCwt7PAwIDAQAB" + ] } } From 2b171a9a887df3258f0c0bb2abbe61d44d508f52 Mon Sep 17 00:00:00 2001 From: Iacopo Sbalchiero Date: Sun, 10 Nov 2024 16:02:36 +0100 Subject: [PATCH 34/42] Create iacoposb.json --- domains/iacoposb.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 domains/iacoposb.json diff --git a/domains/iacoposb.json b/domains/iacoposb.json new file mode 100644 index 000000000..2871d3aef --- /dev/null +++ b/domains/iacoposb.json @@ -0,0 +1,12 @@ +{ + "owner": { + "username": "IacopoSb", + "email": "", + "discord": "442322290206703628", + "OWL": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.Hn0wg5RpzADaJvecwSHu8KpOj-Z_oG7i08e9Z62Give15eiaNXJzezQ9d7noux00NeBYHyoAWfBB5IQ4_XXWy75cLfR2N0A80Lod8D9f6zaWhH6HOcKrauCVolIJBBrzMfTXkWpi-yt74WFtQtfkjlOYren1QB6T_EqyLps5kEJxM08Vubn49m7ckSkNh2bRNJ5NfprPwjrGrHwrdsQqCDiVWn7SL7Dp-Qs-9X1m6nsbyr4shb1BA9X3embdAeL34Yq4GMaIje2tj991jpzq0lW1wGDAZweffw2cJf4xtzC1V0BBWPJDm3ye8eWWrhyOlOmVmK5xqduHk_GJ4jB__g.C50OguoaaY8-9Y9OheaUJw.pc_1FvYpLmydbLCQBa262CG2ROnCFJl-oxfguFWsFv7xDqFr5dRyEZVdEkO8J1UxQFAbO4fm3uEKV1JXDPqdl-6xZF9cpsEkOTZ72Gb2PiY.hYU41zXsd0lJbcQwO59cwA" + }, + + "record": { + "NS": ["marge.ns.cloudflare.com", "dan.ns.cloudflare.com"] + } +} From d802e58b2946b2ba81fe81c61717406cd6cbe7b2 Mon Sep 17 00:00:00 2001 From: Prince Prajapati <72757203+NotReallyPrince@users.noreply.github.com> Date: Sun, 10 Nov 2024 20:55:33 +0530 Subject: [PATCH 35/42] Create _vercel.princeprajapati.is-a.dev --- domains/_vercel.princeprajapati.is-a.dev | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 domains/_vercel.princeprajapati.is-a.dev diff --git a/domains/_vercel.princeprajapati.is-a.dev b/domains/_vercel.princeprajapati.is-a.dev new file mode 100644 index 000000000..5c838ece0 --- /dev/null +++ b/domains/_vercel.princeprajapati.is-a.dev @@ -0,0 +1,9 @@ +{ + "owner": { + "username": "notreallyprince", + "email": "prince30112001@gmail.com" + }, + "record": { + "TXT": "vc-domain-verify=princeprajapati.is-a.dev,9b919407776e11ecff7a" + } + } From 2cd2143e10133db210d3465bb5dea92f641659e1 Mon Sep 17 00:00:00 2001 From: Prince Prajapati <72757203+NotReallyPrince@users.noreply.github.com> Date: Sun, 10 Nov 2024 21:23:07 +0530 Subject: [PATCH 36/42] Create princeprajapati.json --- domains/princeprajapati.json | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 domains/princeprajapati.json diff --git a/domains/princeprajapati.json b/domains/princeprajapati.json new file mode 100644 index 000000000..b4eef0e5a --- /dev/null +++ b/domains/princeprajapati.json @@ -0,0 +1,9 @@ +{ + "owner": { + "username": "notreallyprince", + "email": "prince30112001@gmail.com" + }, + "record": { + "CNAME": "princexd.vercel.app" + } + } From 90ac0391a7a4808725423e12a2b821bc5596286d Mon Sep 17 00:00:00 2001 From: Prince Prajapati <72757203+NotReallyPrince@users.noreply.github.com> Date: Sun, 10 Nov 2024 21:26:02 +0530 Subject: [PATCH 37/42] Rename _vercel.princeprajapati.is-a.dev to _vercel.princeprajapati.json --- ...rcel.princeprajapati.is-a.dev => _vercel.princeprajapati.json} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename domains/{_vercel.princeprajapati.is-a.dev => _vercel.princeprajapati.json} (100%) diff --git a/domains/_vercel.princeprajapati.is-a.dev b/domains/_vercel.princeprajapati.json similarity index 100% rename from domains/_vercel.princeprajapati.is-a.dev rename to domains/_vercel.princeprajapati.json From c978ba4a722b67a481d4775ef9241d44146a72ec Mon Sep 17 00:00:00 2001 From: qxb3 Date: Sun, 10 Nov 2024 23:09:28 +0000 Subject: [PATCH 38/42] add qxb3 subdomain --- domains/qxb3.json | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 domains/qxb3.json diff --git a/domains/qxb3.json b/domains/qxb3.json new file mode 100644 index 000000000..8f0a5a7eb --- /dev/null +++ b/domains/qxb3.json @@ -0,0 +1,11 @@ +{ + "owner": { + "username": "qxb3", + "email": "qxbthree@gmail.com" + }, + "record": { + "A": [ + "75.2.60.5" + ] + } +} From 0b10c4094ad24df5bb94c2c2dbf292769ee9e23a Mon Sep 17 00:00:00 2001 From: William Harrison <87287585+wdhdev@users.noreply.github.com> Date: Mon, 11 Nov 2024 11:28:57 +0800 Subject: [PATCH 39/42] Update iacoposb.json --- domains/iacoposb.json | 1 - 1 file changed, 1 deletion(-) diff --git a/domains/iacoposb.json b/domains/iacoposb.json index 2871d3aef..ab236adac 100644 --- a/domains/iacoposb.json +++ b/domains/iacoposb.json @@ -1,7 +1,6 @@ { "owner": { "username": "IacopoSb", - "email": "", "discord": "442322290206703628", "OWL": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.Hn0wg5RpzADaJvecwSHu8KpOj-Z_oG7i08e9Z62Give15eiaNXJzezQ9d7noux00NeBYHyoAWfBB5IQ4_XXWy75cLfR2N0A80Lod8D9f6zaWhH6HOcKrauCVolIJBBrzMfTXkWpi-yt74WFtQtfkjlOYren1QB6T_EqyLps5kEJxM08Vubn49m7ckSkNh2bRNJ5NfprPwjrGrHwrdsQqCDiVWn7SL7Dp-Qs-9X1m6nsbyr4shb1BA9X3embdAeL34Yq4GMaIje2tj991jpzq0lW1wGDAZweffw2cJf4xtzC1V0BBWPJDm3ye8eWWrhyOlOmVmK5xqduHk_GJ4jB__g.C50OguoaaY8-9Y9OheaUJw.pc_1FvYpLmydbLCQBa262CG2ROnCFJl-oxfguFWsFv7xDqFr5dRyEZVdEkO8J1UxQFAbO4fm3uEKV1JXDPqdl-6xZF9cpsEkOTZ72Gb2PiY.hYU41zXsd0lJbcQwO59cwA" }, From dfa2b0e54153815b39fa26d2d341135a9bf938be Mon Sep 17 00:00:00 2001 From: William Harrison <87287585+wdhdev@users.noreply.github.com> Date: Mon, 11 Nov 2024 12:12:22 +0800 Subject: [PATCH 40/42] various changes + new proxy test --- dnsconfig.js | 49 +- domains/6.json | 3 +- package-lock.json | 2437 +++++++++++++++++++++++++++++++++++++++++ tests/domains.test.js | 5 +- tests/json.test.js | 27 +- tests/proxy.test.js | 28 + tests/records.test.js | 233 +++- utils/functions.js | 51 +- utils/records.js | 112 -- 9 files changed, 2756 insertions(+), 189 deletions(-) create mode 100644 package-lock.json create mode 100644 tests/proxy.test.js delete mode 100644 utils/records.js diff --git a/dnsconfig.js b/dnsconfig.js index 7f631d406..c8f21c793 100644 --- a/dnsconfig.js +++ b/dnsconfig.js @@ -29,14 +29,18 @@ for (var subdomain in domains) { // Handle A records if (domainData.record.A) { for (var a in domainData.record.A) { - records.push(A(subdomainName, IP(domainData.record.A[a]), proxyState)); + records.push( + A(subdomainName, IP(domainData.record.A[a]), proxyState) + ); } } // Handle AAAA records if (domainData.record.AAAA) { for (var aaaa in domainData.record.AAAA) { - records.push(AAAA(subdomainName, domainData.record.AAAA[aaaa], proxyState)); + records.push( + AAAA(subdomainName, domainData.record.AAAA[aaaa], proxyState) + ); } } @@ -44,7 +48,14 @@ for (var subdomain in domains) { if (domainData.record.CAA) { for (var caa in domainData.record.CAA) { var caaRecord = domainData.record.CAA[caa]; - records.push(CAA(subdomainName, caaRecord.flags, caaRecord.tag, caaRecord.value)); + records.push( + CAA( + subdomainName, + caaRecord.flags, + caaRecord.tag, + caaRecord.value + ) + ); } } @@ -52,9 +63,13 @@ for (var subdomain in domains) { if (domainData.record.CNAME) { // Allow CNAME record on root if (subdomainName === "@") { - records.push(ALIAS(subdomainName, domainData.record.CNAME + ".", proxyState)); + records.push( + ALIAS(subdomainName, domainData.record.CNAME + ".", proxyState) + ); } else { - records.push(CNAME(subdomainName, domainData.record.CNAME + ".", proxyState)); + records.push( + CNAME(subdomainName, domainData.record.CNAME + ".", proxyState) + ); } } @@ -63,7 +78,13 @@ for (var subdomain in domains) { for (var ds in domainData.record.DS) { var dsRecord = domainData.record.DS[ds]; records.push( - DS(subdomainName, dsRecord.key_tag, dsRecord.algorithm, dsRecord.digest_type, dsRecord.digest) + DS( + subdomainName, + dsRecord.key_tag, + dsRecord.algorithm, + dsRecord.digest_type, + dsRecord.digest + ) ); } } @@ -71,7 +92,13 @@ for (var subdomain in domains) { // Handle MX records if (domainData.record.MX) { for (var mx in domainData.record.MX) { - records.push(MX(subdomainName, 10 + parseInt(mx), domainData.record.MX[mx] + ".")); + records.push( + MX( + subdomainName, + 10 + parseInt(mx), + domainData.record.MX[mx] + "." + ) + ); } } @@ -87,7 +114,13 @@ for (var subdomain in domains) { for (var srv in domainData.record.SRV) { var srvRecord = domainData.record.SRV[srv]; records.push( - SRV(subdomainName, srvRecord.priority, srvRecord.weight, srvRecord.port, srvRecord.target + ".") + SRV( + subdomainName, + srvRecord.priority, + srvRecord.weight, + srvRecord.port, + srvRecord.target + "." + ) ); } } diff --git a/domains/6.json b/domains/6.json index e603767b7..ecafdb143 100644 --- a/domains/6.json +++ b/domains/6.json @@ -5,6 +5,5 @@ }, "record": { "URL": "https://shockbs.is-a.dev/" - }, - "proxied": true + } } diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..b471fdeb1 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2437 @@ +{ + "name": "register", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "devDependencies": { + "ava": "^6.2.0", + "fs-extra": "^11.2.0" + } + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vercel/nft": { + "version": "0.27.6", + "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.27.6.tgz", + "integrity": "sha512-mwuyUxskdcV8dd7N7JnxBgvFEz1D9UOePI/WyLLzktv6HSCwgPNQGit/UJ2IykAWGlypKw4pBQjOKWvIbXITSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.11", + "@rollup/pluginutils": "^4.0.0", + "acorn": "^8.6.0", + "acorn-import-attributes": "^1.9.5", + "async-sema": "^3.1.1", + "bindings": "^1.4.0", + "estree-walker": "2.0.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.8", + "node-gyp-build": "^4.2.2", + "resolve-from": "^5.0.0" + }, + "bin": { + "nft": "out/cli.js" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true, + "license": "ISC" + }, + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arrgv": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arrgv/-/arrgv-1.0.2.tgz", + "integrity": "sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/arrify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz", + "integrity": "sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/async-sema": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/async-sema/-/async-sema-3.1.1.tgz", + "integrity": "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/ava": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ava/-/ava-6.2.0.tgz", + "integrity": "sha512-+GZk5PbyepjiO/68hzCZCUepQOQauKfNnI7sA4JukBTg97jD7E+tDKEA7OhGOGr6EorNNMM9+jqvgHVOTOzG4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vercel/nft": "^0.27.5", + "acorn": "^8.13.0", + "acorn-walk": "^8.3.4", + "ansi-styles": "^6.2.1", + "arrgv": "^1.0.2", + "arrify": "^3.0.0", + "callsites": "^4.2.0", + "cbor": "^9.0.2", + "chalk": "^5.3.0", + "chunkd": "^2.0.1", + "ci-info": "^4.0.0", + "ci-parallel-vars": "^1.0.1", + "cli-truncate": "^4.0.0", + "code-excerpt": "^4.0.0", + "common-path-prefix": "^3.0.0", + "concordance": "^5.0.4", + "currently-unhandled": "^0.4.1", + "debug": "^4.3.7", + "emittery": "^1.0.3", + "figures": "^6.1.0", + "globby": "^14.0.2", + "ignore-by-default": "^2.1.0", + "indent-string": "^5.0.0", + "is-plain-object": "^5.0.0", + "is-promise": "^4.0.0", + "matcher": "^5.0.0", + "memoize": "^10.0.0", + "ms": "^2.1.3", + "p-map": "^7.0.2", + "package-config": "^5.0.0", + "picomatch": "^4.0.2", + "plur": "^5.1.0", + "pretty-ms": "^9.1.0", + "resolve-cwd": "^3.0.0", + "stack-utils": "^2.0.6", + "strip-ansi": "^7.1.0", + "supertap": "^3.0.1", + "temp-dir": "^3.0.0", + "write-file-atomic": "^6.0.0", + "yargs": "^17.7.2" + }, + "bin": { + "ava": "entrypoints/cli.mjs" + }, + "engines": { + "node": "^18.18 || ^20.8 || ^22 || >=23" + }, + "peerDependencies": { + "@ava/typescript": "*" + }, + "peerDependenciesMeta": { + "@ava/typescript": { + "optional": true + } + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/blueimp-md5": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz", + "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/callsites": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-4.2.0.tgz", + "integrity": "sha512-kfzR4zzQtAE9PC7CzZsjl3aBNbXWuXiSeOCdLcPpBfGW8YuCqQHcRPFDbr/BPVmd3EEPVpuFzLyuT/cUhPr4OQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cbor": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-9.0.2.tgz", + "integrity": "sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "nofilter": "^3.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/chunkd": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/chunkd/-/chunkd-2.0.1.tgz", + "integrity": "sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/ci-info": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz", + "integrity": "sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ci-parallel-vars": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ci-parallel-vars/-/ci-parallel-vars-1.0.1.tgz", + "integrity": "sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/code-excerpt": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/code-excerpt/-/code-excerpt-4.0.0.tgz", + "integrity": "sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==", + "dev": true, + "license": "MIT", + "dependencies": { + "convert-to-spaces": "^2.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "license": "ISC", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true, + "license": "ISC" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/concordance": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/concordance/-/concordance-5.0.4.tgz", + "integrity": "sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "date-time": "^3.1.0", + "esutils": "^2.0.3", + "fast-diff": "^1.2.0", + "js-string-escape": "^1.0.1", + "lodash": "^4.17.15", + "md5-hex": "^3.0.1", + "semver": "^7.3.2", + "well-known-symbols": "^2.0.0" + }, + "engines": { + "node": ">=10.18.0 <11 || >=12.14.0 <13 || >=14" + } + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/convert-to-spaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz", + "integrity": "sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-find-index": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/date-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/date-time/-/date-time-3.1.0.tgz", + "integrity": "sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "time-zone": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/emittery": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-1.0.3.tgz", + "integrity": "sha512-tJdCJitoy2lrC2ldJcqN4vkqJ00lT+tOWNT1hBJjO/3FDMJa5TTIiYGCKGkn/WfCyOzUMObeohbVTj00fhiLiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/figures": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up-simple": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.0.tgz", + "integrity": "sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gauge/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/gauge/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/gauge/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/gauge/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/gauge/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", + "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globby": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", + "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-by-default": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-2.1.0.tgz", + "integrity": "sha512-yiWd4GVmJp0Q6ghmM2B/V3oZGRmjrKLXvHR3TE1nfoXsmoggllfZUQe74EN0fJdPFZu2NIvNdrMMLm3OsV7Ohw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10 <11 || >=12 <13 || >=14" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/irregular-plurals": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.5.0.tgz", + "integrity": "sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/js-string-escape": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", + "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/load-json-file": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-7.0.1.tgz", + "integrity": "sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/matcher": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-5.0.0.tgz", + "integrity": "sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/md5-hex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-3.0.1.tgz", + "integrity": "sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==", + "dev": true, + "license": "MIT", + "dependencies": { + "blueimp-md5": "^2.10.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/memoize": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/memoize/-/memoize-10.0.0.tgz", + "integrity": "sha512-H6cBLgsi6vMWOcCpvVCdFFnl3kerEXbrYh9q+lY6VXvQSmM6CkmV08VOwT+WE2tzIEqRPFfAq3fm4v/UIW6mSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sindresorhus/memoize?sponsor=1" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.2.tgz", + "integrity": "sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==", + "dev": true, + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/nofilter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", + "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.19" + } + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-map": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.2.tgz", + "integrity": "sha512-z4cYYMMdKHzw4O5UkWJImbZynVIo0lSGTXc7bzB1e/rrDqkgGUNysK/o4bTr+0+xKvvLoTyGqYC4Fgljy9qe1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-config": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/package-config/-/package-config-5.0.0.tgz", + "integrity": "sha512-GYTTew2slBcYdvRHqjhwaaydVMvn/qrGC323+nKclYioNSLTDUM/lGgtGTgyHVtYcozb+XkE8CNhwcraOmZ9Mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up-simple": "^1.0.0", + "load-json-file": "^7.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-type": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/plur": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/plur/-/plur-5.1.0.tgz", + "integrity": "sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "irregular-plurals": "^3.3.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-ms": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.1.0.tgz", + "integrity": "sha512-o1piW0n3tgKIKCwk2vpM/vOV13zjJzvP37Ioze54YlTHE06m4tjEbzg9WsKkvTuyYln2DHjo5pY4qrZGI0otpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse-ms": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.13.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true, + "license": "ISC" + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/supertap": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/supertap/-/supertap-3.0.1.tgz", + "integrity": "sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw==", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^5.0.0", + "js-yaml": "^3.14.1", + "serialize-error": "^7.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/temp-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", + "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + } + }, + "node_modules/time-zone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz", + "integrity": "sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/well-known-symbols": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/well-known-symbols/-/well-known-symbols-2.0.0.tgz", + "integrity": "sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=6" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wide-align/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wide-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wide-align/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wide-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wide-align/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-6.0.0.tgz", + "integrity": "sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + } + } +} diff --git a/tests/domains.test.js b/tests/domains.test.js index eddb7833c..14dc45ad6 100644 --- a/tests/domains.test.js +++ b/tests/domains.test.js @@ -12,7 +12,10 @@ t("Nested subdomains should not exist without a parent subdomain", (t) => { if (subdomain.split(".").length > 1) { const parentSubdomain = subdomain.split(".").pop(); - t.true(files.includes(`${parentSubdomain}.json`), `${file}: Parent subdomain does not exist`); + t.true( + files.includes(`${parentSubdomain}.json`), + `${file}: Parent subdomain does not exist` + ); } }); diff --git a/tests/json.test.js b/tests/json.test.js index a9486349a..2aec31c87 100644 --- a/tests/json.test.js +++ b/tests/json.test.js @@ -4,36 +4,41 @@ const path = require("path"); const requiredFields = { owner: "object", - record: "object" + record: "object", }; const optionalFields = { proxied: "boolean", - reserved: "boolean" + reserved: "boolean", }; const requiredOwnerFields = { - username: "string" + username: "string", }; const optionalOwnerFields = { - email: "string" + email: "string", }; const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; -const hostnameRegex = /^(?=.{1,253}$)(?:(?:[_a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)\.)+[a-zA-Z]{2,63}$/; +const hostnameRegex = + /^(?=.{1,253}$)(?:(?:[_a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)\.)+[a-zA-Z]{2,63}$/; const domainsPath = path.resolve("domains"); const files = fs.readdirSync(domainsPath); -const validateRequiredFields = (t, obj, requiredFields, file) => { +function validateRequiredFields(t, obj, requiredFields, file) { Object.keys(requiredFields).forEach((key) => { t.true(obj.hasOwnProperty(key), `${file}: Missing required field: ${key}`); - t.is(typeof obj[key], requiredFields[key], `${file}: Field ${key} should be of type ${requiredFields[key]}`); + t.is( + typeof obj[key], + requiredFields[key], + `${file}: Field ${key} should be of type ${requiredFields[key]}` + ); }); }; -const validateOptionalFields = (t, obj, optionalFields, file) => { +function validateOptionalFields(t, obj, optionalFields, file) { Object.keys(optionalFields).forEach((key) => { if (obj.hasOwnProperty(key)) { t.is( @@ -89,7 +94,11 @@ t("All files should have valid optional fields", (t) => { validateOptionalFields(t, data.owner, optionalOwnerFields, file); if (data.owner.email) { - t.regex(data.owner.email, emailRegex, `${file}: Owner email should be a valid email address`); + t.regex( + data.owner.email, + emailRegex, + `${file}: Owner email should be a valid email address` + ); } }); }); diff --git a/tests/proxy.test.js b/tests/proxy.test.js new file mode 100644 index 000000000..89b35eb07 --- /dev/null +++ b/tests/proxy.test.js @@ -0,0 +1,28 @@ +const t = require("ava"); +const fs = require("fs-extra"); +const path = require("path"); + +const requiredRecordsToProxy = [ + "A", + "AAAA", + "CNAME" +]; + +function validateProxiedRecords(t, data, file) { + if (data.proxied) { + const hasProxiedRecord = Object.keys(data.record).some((key) => requiredRecordsToProxy.includes(key)); + + t.true(hasProxiedRecord, `${file}: Proxied is true but there are no records that can be proxied`); + } +}; + +const domainsPath = path.resolve("domains"); +const files = fs.readdirSync(domainsPath); + +t("Domains with proxy enabled should have have at least one record that can be proxied", (t) => { + files.forEach((file) => { + const domain = fs.readJsonSync(path.join(domainsPath, file)); + + validateProxiedRecords(t, domain, file); + }) +}); diff --git a/tests/records.test.js b/tests/records.test.js index 2dc8fa4f0..7cfd618a8 100644 --- a/tests/records.test.js +++ b/tests/records.test.js @@ -2,19 +2,15 @@ const t = require("ava"); const fs = require("fs-extra"); const path = require("path"); -const { - checkCNAME, - checkNSAndDS, - validateHostname, - validateIPv4, - validateIPv6, - validateSpecialRecords, - validateTXT, - validateURL -} = require("../utils/records"); +const { expandIPv6, isPublicIPv4, isPublicIPv6 } = require("../utils/functions"); const validRecordTypes = ["A", "AAAA", "CAA", "CNAME", "DS", "MX", "NS", "SRV", "TXT", "URL"]; +const hostnameRegex = /^(?=.{1,253}$)(?:(?:[_a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)\.)+[a-zA-Z]{2,63}$/; +const ipv4Regex = /^(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}$/; +const ipv6Regex = + /^(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$|^::(?:[0-9a-fA-F]{1,4}:){0,6}[0-9a-fA-F]{1,4}$|^(?:[0-9a-fA-F]{1,4}:){1,7}:$|^(?:[0-9a-fA-F]{1,4}:){0,6}::(?:[0-9a-fA-F]{1,4}:){0,5}[0-9a-fA-F]{1,4}$/; + const domainsPath = path.resolve("domains"); const files = fs.readdirSync(domainsPath); @@ -27,14 +23,30 @@ t("All files should have valid record types", (t) => { t.true(validRecordTypes.includes(key), `${file}: Invalid record type: ${key}`); }); - checkCNAME(t, file, recordKeys); - checkNSAndDS(t, file, recordKeys); + // CNAME records cannot be combined with any other record type + if (recordKeys.includes("CNAME")) { + t.is(recordKeys.length, Number(1), `${file}: CNAME records cannot be combined with other records`); + } + + // NS records cannot be combined with any other record type, except for DS records + if (recordKeys.includes("NS")) { + t.true( + recordKeys.length === 1 || (recordKeys.length === 2 && recordKeys.includes("DS")), + `${file}: NS records cannot be combined with other records, except for DS records` + ); + } + + // DS records must be combined with NS records + if (recordKeys.includes("DS")) { + t.true(recordKeys.includes("NS"), `${file}: DS records must be combined with NS records`); + } }); }); t("All files should not have duplicate record keys", (t) => { files.forEach((file) => { const data = fs.readJsonSync(path.join(domainsPath, file)); + const recordKeys = Object.keys(data.record); const uniqueRecordKeys = new Set(recordKeys); @@ -45,34 +57,199 @@ t("All files should not have duplicate record keys", (t) => { t("All files should have valid record values", (t) => { files.forEach((file) => { const data = fs.readJsonSync(path.join(domainsPath, file)); + Object.keys(data.record).forEach((key) => { const value = data.record[key]; + // *: string[] if (["A", "AAAA", "MX", "NS"].includes(key)) { t.true(Array.isArray(value), `${file}: Record value should be an array for ${key}`); - value.forEach((record) => - t.true(typeof record === "string", `${file}: Record value should be a string for ${key}`) - ); + value.forEach((record) => { + t.true(typeof record === "string", `${file}: Record value should be a string for ${key}`); + }); - if (key === "A") validateIPv4(t, file, key, value, data); - if (key === "AAAA") validateIPv6(t, file, key, value); - if (["MX", "NS"].includes(key)) validateHostname(t, file, key, value); - } else if (["CNAME", "URL"].includes(key)) { + // A: string[] + if (key === "A") { + value.forEach((record) => { + t.regex( + record, + ipv4Regex, + `${file}: Record value should be a valid IPv4 address for ${key} at index ${value.indexOf( + record + )}` + ); + + t.true( + isPublicIPv4(record, data.proxied), + `${file}: Record value should be a public IPv4 address for ${key} at index ${value.indexOf( + record + )}` + ); + }); + } + + // AAAA: string[] + if (key === "AAAA") { + value.forEach((record) => { + t.regex( + expandIPv6(record), + ipv6Regex, + `${file}: Record value should be a valid IPv6 address for ${key} at index ${value.indexOf( + record + )}` + ); + + t.true( + isPublicIPv6(record), + `${file}: Record value should be a public IPv6 address for ${key} at index ${value.indexOf( + record + )}` + ); + }); + } + + // *: string[] + if (["MX", "NS"].includes(key)) { + value.forEach((record) => { + t.regex( + record, + hostnameRegex, + `${file}: Record value should be a valid hostname for ${key} at index ${value.indexOf( + record + )}` + ); + }); + } + } + + // *: string + if (["CNAME", "URL"].includes(key)) { t.true(typeof value === "string", `${file}: Record value should be a string for ${key}`); - if (key === "CNAME") validateHostname(t, file, key, [value]); - if (key === "URL") validateURL(t, file, key, value); - } else if (["CAA", "DS", "SRV"].includes(key)) { + if (key === "CNAME") { + t.regex(value, hostnameRegex, `${file}: Record value should be a valid hostname for ${key}`); + } + + if (key === "URL") { + t.notThrows(() => new URL(value), `${file}: Record value should be a valid URL for ${key}`); + } + } + + // *: {}[] + if (["CAA", "DS", "SRV"].includes(key)) { t.true(Array.isArray(value), `${file}: Record value should be an array for ${key}`); - value.forEach((record) => - t.true(typeof record === "object", `${file}: Record value should be an object for ${key}`) - ); + value.forEach((record) => { + t.true( + typeof record === "object", + `${file}: Record value should be an object for ${key} at index ${value.indexOf(record)}` + ); + }); - validateSpecialRecords(t, file, key, value); - } else if (key === "TXT") { - validateTXT(t, file, key, value); + // CAA: { flags: number, tag: string, value: string }[] + if (key === "CAA") { + value.forEach((record) => { + t.true( + typeof record.flags === "number", + `${file}: CAA record value should have a number for flags at index ${value.indexOf(record)}` + ); + + t.true( + typeof record.tag === "string", + `${file}: CAA record value should have a string for tag at index ${value.indexOf(record)}` + ); + + t.true( + typeof record.value === "string", + `${file}: CAA record value should have a string for value at index ${value.indexOf(record)}` + ); + }); + } + + // DS: { key_tag: number, algorithm: number, digest_type: number, digest: string }[] + if (key === "DS") { + value.forEach((record) => { + t.true( + typeof record.key_tag === "number", + `${file}: DS record value should have a number for key_tag at index ${value.indexOf( + record + )}` + ); + + t.true( + typeof record.algorithm === "number", + `${file}: DS record value should have a number for algorithm at index ${value.indexOf( + record + )}` + ); + + t.true( + typeof record.digest_type === "number", + `${file}: DS record value should have a number for digest_type at index ${value.indexOf( + record + )}` + ); + + t.true( + typeof record.digest === "string", + `${file}: DS record value should have a string for digest at index ${value.indexOf(record)}` + ); + }); + } + + // SRV: { priority: number, weight: number, port: number, target: string }[] + if (key === "SRV") { + value.forEach((record) => { + t.true( + typeof record.priority === "number", + `${file}: SRV record value should have a number for priority at index ${value.indexOf( + record + )}` + ); + + t.true( + typeof record.weight === "number", + `${file}: SRV record value should have a number for weight at index ${value.indexOf( + record + )}` + ); + + t.true( + typeof record.port === "number", + `${file}: SRV record value should have a number for port at index ${value.indexOf(record)}` + ); + + t.true( + typeof record.target === "string", + `${file}: SRV record value should have a string for target at index ${value.indexOf( + record + )}` + ); + + t.regex( + value.target, + hostnameRegex, + `${file}: SRV record value should be a valid hostname for target at index ${value.indexOf( + record + )}` + ); + }); + } + } + + // TXT: string | string[] + if (key === "TXT") { + if (Array.isArray(value)) { + value.forEach((record) => { + t.true( + typeof record === "string", + `${file}: Record value should be a string for ${key} at index ${value.indexOf(record)}` + ); + }); + } else { + t.true(typeof value === "string", `${file}: Record value should be a string for ${key}`); + } } }); }); diff --git a/utils/functions.js b/utils/functions.js index ce15acdd4..85a49a005 100644 --- a/utils/functions.js +++ b/utils/functions.js @@ -8,13 +8,9 @@ module.exports.expandIPv6 = function (ip) { // Calculate how many "0000" segments are missing const nonEmptySegments = segments.filter((seg) => seg !== ""); const missingSegments = 8 - nonEmptySegments.length; - + // Insert the missing "0000" segments into the position of the empty segment - segments = [ - ...nonEmptySegments.slice(0, emptyIndex), - ...Array(missingSegments).fill("0000"), - ...nonEmptySegments.slice(emptyIndex) - ]; + segments = [...nonEmptySegments.slice(0, emptyIndex), ...Array(missingSegments).fill("0000"), ...nonEmptySegments.slice(emptyIndex)]; } // Expand each segment to 4 characters, padding with leading zeros @@ -25,10 +21,10 @@ module.exports.expandIPv6 = function (ip) { }; module.exports.isPublicIPv4 = function (ip, proxied) { - const parts = ip.split(".").map(Number); + const parts = ip.split('.').map(Number); // Validate IPv4 address format - if (parts.length !== 4 || parts.some((part) => isNaN(part) || part < 0 || part > 255)) { + if (parts.length !== 4 || parts.some(part => isNaN(part) || part < 0 || part > 255)) { return false; } @@ -40,20 +36,19 @@ module.exports.isPublicIPv4 = function (ip, proxied) { // Check for private and reserved IPv4 ranges return !( // Private ranges - ( - parts[0] === 10 || - (parts[0] === 172 && parts[1] >= 16 && parts[1] <= 31) || - (parts[0] === 192 && parts[1] === 168) || - // Reserved or special-use ranges - (parts[0] === 100 && parts[1] >= 64 && parts[1] <= 127) || // Carrier-grade NAT - (parts[0] === 169 && parts[1] === 254) || // Link-local - (parts[0] === 192 && parts[1] === 0 && parts[2] === 0) || // IETF Protocol Assignments - (parts[0] === 192 && parts[1] === 0 && parts[2] === 2) || // Documentation (TEST-NET-1) - (parts[0] === 198 && parts[1] === 18) || // Network Interconnect Devices - (parts[0] === 198 && parts[1] === 51 && parts[2] === 100) || // Documentation (TEST-NET-2) - (parts[0] === 203 && parts[1] === 0 && parts[2] === 113) || // Documentation (TEST-NET-3) - parts[0] >= 224 - ) // Multicast and reserved ranges + parts[0] === 10 || + (parts[0] === 172 && parts[1] >= 16 && parts[1] <= 31) || + (parts[0] === 192 && parts[1] === 168) || + + // Reserved or special-use ranges + (parts[0] === 100 && parts[1] >= 64 && parts[1] <= 127) || // Carrier-grade NAT + (parts[0] === 169 && parts[1] === 254) || // Link-local + (parts[0] === 192 && parts[1] === 0 && parts[2] === 0) || // IETF Protocol Assignments + (parts[0] === 192 && parts[1] === 0 && parts[2] === 2) || // Documentation (TEST-NET-1) + (parts[0] === 198 && parts[1] === 18) || // Network Interconnect Devices + (parts[0] === 198 && parts[1] === 51 && parts[2] === 100) || // Documentation (TEST-NET-2) + (parts[0] === 203 && parts[1] === 0 && parts[2] === 113) || // Documentation (TEST-NET-3) + (parts[0] >= 224) // Multicast and reserved ranges ); }; @@ -62,12 +57,10 @@ module.exports.isPublicIPv6 = function (ip) { // Check for private or special-use IPv6 ranges return !( - ( - normalizedIP.startsWith("fc") || // Unique Local Address (ULA) - normalizedIP.startsWith("fd") || // Unique Local Address (ULA) - normalizedIP.startsWith("fe80") || // Link-local - normalizedIP.startsWith("::1") || // Loopback address (::1) - normalizedIP.startsWith("2001:db8") - ) // Documentation range + normalizedIP.startsWith("fc") || // Unique Local Address (ULA) + normalizedIP.startsWith("fd") || // Unique Local Address (ULA) + normalizedIP.startsWith("fe80") || // Link-local + normalizedIP.startsWith("::1") || // Loopback address (::1) + normalizedIP.startsWith("2001:db8") // Documentation range ); }; diff --git a/utils/records.js b/utils/records.js deleted file mode 100644 index 3840157bb..000000000 --- a/utils/records.js +++ /dev/null @@ -1,112 +0,0 @@ -const { expandIPv6, isPublicIPv4, isPublicIPv6 } = require("./functions"); - -const hostnameRegex = /^(?=.{1,253}$)(?:(?:[_a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)\.)+[a-zA-Z]{2,63}$/; -const ipv4Regex = /^(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}$/; -const ipv6Regex = - /^(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$|^::(?:[0-9a-fA-F]{1,4}:){0,6}[0-9a-fA-F]{1,4}$|^(?:[0-9a-fA-F]{1,4}:){1,7}:$|^(?:[0-9a-fA-F]{1,4}:){0,6}::(?:[0-9a-fA-F]{1,4}:){0,5}[0-9a-fA-F]{1,4}$/; - -// Check CNAME records -function checkCNAME(t, file, recordKeys) { - if (recordKeys.includes("CNAME")) { - t.is(recordKeys.length, 1, `${file}: CNAME records cannot be combined with other records`); - } -} - -// Check NS and DS records -function checkNSAndDS(t, file, recordKeys) { - if (recordKeys.includes("NS")) { - t.true( - recordKeys.length === 1 || (recordKeys.length === 2 && recordKeys.includes("DS")), - `${file}: NS records cannot be combined with other records, except for DS records` - ); - } - - if (recordKeys.includes("DS")) { - t.true(recordKeys.includes("NS"), `${file}: DS records must be combined with NS records`); - } -} - -// Validate IPv4 record -function validateIPv4(t, file, key, value, data) { - value.forEach((record) => { - t.regex(record, ipv4Regex, `${file}: Record value should be a valid IPv4 address for ${key}`); - t.true(isPublicIPv4(record, data.proxied), `${file}: Record value should be a public IPv4 address for ${key}`); - }); -} - -// Validate IPv6 record -function validateIPv6(t, file, key, value) { - value.forEach((record) => { - t.regex(expandIPv6(record), ipv6Regex, `${file}: Record value should be a valid IPv6 address for ${key}`); - t.true(isPublicIPv6(record), `${file}: Record value should be a public IPv6 address for ${key}`); - }); -} - -// Validate hostname record -function validateHostname(t, file, key, value) { - value.forEach((record) => { - t.regex(record, hostnameRegex, `${file}: Record value should be a valid hostname for ${key}`); - }); -} - -// Validate URL record -function validateURL(t, file, key, value) { - try { - new URL(value); - } catch (error) { - t.fail(`${file}: Record value should be a valid URL for ${key}`); - } -} - -// Validate special records (CAA, DS, SRV) -function validateSpecialRecords(t, file, key, value) { - if (key === "CAA") { - value.forEach((record) => { - t.true(typeof record.flags === "number", `${file}: CAA record value should have a number for flags`); - t.true(typeof record.tag === "string", `${file}: CAA record value should have a string for tag`); - t.true(typeof record.value === "string", `${file}: CAA record value should have a string for value`); - }); - } - if (key === "DS") { - value.forEach((record) => { - t.true(typeof record.key_tag === "number", `${file}: DS record value should have a number for key_tag`); - t.true(typeof record.algorithm === "number", `${file}: DS record value should have a number for algorithm`); - t.true( - typeof record.digest_type === "number", - `${file}: DS record value should have a number for digest_type` - ); - t.true(typeof record.digest === "string", `${file}: DS record value should have a string for digest`); - }); - } - if (key === "SRV") { - value.forEach((record) => { - t.true(typeof record.priority === "number", `${file}: SRV record value should have a number for priority`); - t.true(typeof record.weight === "number", `${file}: SRV record value should have a number for weight`); - t.true(typeof record.port === "number", `${file}: SRV record value should have a number for port`); - t.true(typeof record.target === "string", `${file}: SRV record value should have a string for target`); - t.regex(record.target, hostnameRegex, `${file}: SRV record value should have a valid hostname for target`); - }); - } -} - -// Validate TXT record -function validateTXT(t, file, key, value) { - if (Array.isArray(value)) { - value.forEach((record) => - t.true(typeof record === "string", `${file}: Record value should be a string for ${key}`) - ); - } else { - t.true(typeof value === "string", `${file}: Record value should be a string for ${key}`); - } -} - -module.exports = { - checkCNAME, - checkNSAndDS, - validateIPv4, - validateIPv6, - validateHostname, - validateURL, - validateSpecialRecords, - validateTXT -}; From 4aece7eed3e64470f1bd3fa92432922907102977 Mon Sep 17 00:00:00 2001 From: William Harrison <87287585+wdhdev@users.noreply.github.com> Date: Mon, 11 Nov 2024 12:22:22 +0800 Subject: [PATCH 41/42] prettier + move some stuff --- tests/domains.test.js | 5 +-- tests/json.test.js | 27 ++++++---------- tests/proxy.test.js | 11 +++---- tests/records.test.js | 74 +++++++++++++++++++++++++++++++++++++++++++ utils/functions.js | 66 -------------------------------------- 5 files changed, 88 insertions(+), 95 deletions(-) delete mode 100644 utils/functions.js diff --git a/tests/domains.test.js b/tests/domains.test.js index 14dc45ad6..eddb7833c 100644 --- a/tests/domains.test.js +++ b/tests/domains.test.js @@ -12,10 +12,7 @@ t("Nested subdomains should not exist without a parent subdomain", (t) => { if (subdomain.split(".").length > 1) { const parentSubdomain = subdomain.split(".").pop(); - t.true( - files.includes(`${parentSubdomain}.json`), - `${file}: Parent subdomain does not exist` - ); + t.true(files.includes(`${parentSubdomain}.json`), `${file}: Parent subdomain does not exist`); } }); diff --git a/tests/json.test.js b/tests/json.test.js index 2aec31c87..1a737900e 100644 --- a/tests/json.test.js +++ b/tests/json.test.js @@ -4,25 +4,24 @@ const path = require("path"); const requiredFields = { owner: "object", - record: "object", + record: "object" }; const optionalFields = { proxied: "boolean", - reserved: "boolean", + reserved: "boolean" }; const requiredOwnerFields = { - username: "string", + username: "string" }; const optionalOwnerFields = { - email: "string", + email: "string" }; const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; -const hostnameRegex = - /^(?=.{1,253}$)(?:(?:[_a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)\.)+[a-zA-Z]{2,63}$/; +const hostnameRegex = /^(?=.{1,253}$)(?:(?:[_a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)\.)+[a-zA-Z]{2,63}$/; const domainsPath = path.resolve("domains"); const files = fs.readdirSync(domainsPath); @@ -30,13 +29,9 @@ const files = fs.readdirSync(domainsPath); function validateRequiredFields(t, obj, requiredFields, file) { Object.keys(requiredFields).forEach((key) => { t.true(obj.hasOwnProperty(key), `${file}: Missing required field: ${key}`); - t.is( - typeof obj[key], - requiredFields[key], - `${file}: Field ${key} should be of type ${requiredFields[key]}` - ); + t.is(typeof obj[key], requiredFields[key], `${file}: Field ${key} should be of type ${requiredFields[key]}`); }); -}; +} function validateOptionalFields(t, obj, optionalFields, file) { Object.keys(optionalFields).forEach((key) => { @@ -48,7 +43,7 @@ function validateOptionalFields(t, obj, optionalFields, file) { ); } }); -}; +} t("All files should be valid JSON", (t) => { files.forEach((file) => { @@ -94,11 +89,7 @@ t("All files should have valid optional fields", (t) => { validateOptionalFields(t, data.owner, optionalOwnerFields, file); if (data.owner.email) { - t.regex( - data.owner.email, - emailRegex, - `${file}: Owner email should be a valid email address` - ); + t.regex(data.owner.email, emailRegex, `${file}: Owner email should be a valid email address`); } }); }); diff --git a/tests/proxy.test.js b/tests/proxy.test.js index 89b35eb07..7e8299c70 100644 --- a/tests/proxy.test.js +++ b/tests/proxy.test.js @@ -2,11 +2,8 @@ const t = require("ava"); const fs = require("fs-extra"); const path = require("path"); -const requiredRecordsToProxy = [ - "A", - "AAAA", - "CNAME" -]; +const requiredRecordsToProxy = ["A", "AAAA", "CNAME"]; +// URL records are not listed here because they are proxied by default, so they don't need the proxied flag function validateProxiedRecords(t, data, file) { if (data.proxied) { @@ -14,7 +11,7 @@ function validateProxiedRecords(t, data, file) { t.true(hasProxiedRecord, `${file}: Proxied is true but there are no records that can be proxied`); } -}; +} const domainsPath = path.resolve("domains"); const files = fs.readdirSync(domainsPath); @@ -24,5 +21,5 @@ t("Domains with proxy enabled should have have at least one record that can be p const domain = fs.readJsonSync(path.join(domainsPath, file)); validateProxiedRecords(t, domain, file); - }) + }); }); diff --git a/tests/records.test.js b/tests/records.test.js index 7cfd618a8..56039e741 100644 --- a/tests/records.test.js +++ b/tests/records.test.js @@ -14,6 +14,80 @@ const ipv6Regex = const domainsPath = path.resolve("domains"); const files = fs.readdirSync(domainsPath); +function expandIPv6(ip) { + // Split into segments by ":" + let segments = ip.split(":"); + + // Count the number of segments that are empty due to "::" shorthand + const emptyIndex = segments.indexOf(""); + if (emptyIndex !== -1) { + // Calculate how many "0000" segments are missing + const nonEmptySegments = segments.filter((seg) => seg !== ""); + const missingSegments = 8 - nonEmptySegments.length; + + // Insert the missing "0000" segments into the position of the empty segment + segments = [ + ...nonEmptySegments.slice(0, emptyIndex), + ...Array(missingSegments).fill("0000"), + ...nonEmptySegments.slice(emptyIndex) + ]; + } + + // Expand each segment to 4 characters, padding with leading zeros + const expandedSegments = segments.map((segment) => segment.padStart(4, "0")); + + // Join the segments back together + return expandedSegments.join(":"); +} + +function isPublicIPv4(ip, proxied) { + const parts = ip.split(".").map(Number); + + // Validate IPv4 address format + if (parts.length !== 4 || parts.some((part) => isNaN(part) || part < 0 || part > 255)) { + return false; + } + + // Exception for 192.0.2.1, assuming the domain is proxied + if (ip === "192.0.2.1" && proxied) { + return true; + } + + // Check for private and reserved IPv4 ranges + return !( + // Private ranges + ( + parts[0] === 10 || + (parts[0] === 172 && parts[1] >= 16 && parts[1] <= 31) || + (parts[0] === 192 && parts[1] === 168) || + // Reserved or special-use ranges + (parts[0] === 100 && parts[1] >= 64 && parts[1] <= 127) || // Carrier-grade NAT + (parts[0] === 169 && parts[1] === 254) || // Link-local + (parts[0] === 192 && parts[1] === 0 && parts[2] === 0) || // IETF Protocol Assignments + (parts[0] === 192 && parts[1] === 0 && parts[2] === 2) || // Documentation (TEST-NET-1) + (parts[0] === 198 && parts[1] === 18) || // Network Interconnect Devices + (parts[0] === 198 && parts[1] === 51 && parts[2] === 100) || // Documentation (TEST-NET-2) + (parts[0] === 203 && parts[1] === 0 && parts[2] === 113) || // Documentation (TEST-NET-3) + parts[0] >= 224 + ) // Multicast and reserved ranges + ); +} + +function isPublicIPv6(ip) { + const normalizedIP = ip.toLowerCase(); + + // Check for private or special-use IPv6 ranges + return !( + ( + normalizedIP.startsWith("fc") || // Unique Local Address (ULA) + normalizedIP.startsWith("fd") || // Unique Local Address (ULA) + normalizedIP.startsWith("fe80") || // Link-local + normalizedIP.startsWith("::1") || // Loopback address (::1) + normalizedIP.startsWith("2001:db8") + ) // Documentation range + ); +} + t("All files should have valid record types", (t) => { files.forEach((file) => { const data = fs.readJsonSync(path.join(domainsPath, file)); diff --git a/utils/functions.js b/utils/functions.js deleted file mode 100644 index 85a49a005..000000000 --- a/utils/functions.js +++ /dev/null @@ -1,66 +0,0 @@ -module.exports.expandIPv6 = function (ip) { - // Split into segments by ":" - let segments = ip.split(":"); - - // Count the number of segments that are empty due to "::" shorthand - const emptyIndex = segments.indexOf(""); - if (emptyIndex !== -1) { - // Calculate how many "0000" segments are missing - const nonEmptySegments = segments.filter((seg) => seg !== ""); - const missingSegments = 8 - nonEmptySegments.length; - - // Insert the missing "0000" segments into the position of the empty segment - segments = [...nonEmptySegments.slice(0, emptyIndex), ...Array(missingSegments).fill("0000"), ...nonEmptySegments.slice(emptyIndex)]; - } - - // Expand each segment to 4 characters, padding with leading zeros - const expandedSegments = segments.map((segment) => segment.padStart(4, "0")); - - // Join the segments back together - return expandedSegments.join(":"); -}; - -module.exports.isPublicIPv4 = function (ip, proxied) { - const parts = ip.split('.').map(Number); - - // Validate IPv4 address format - if (parts.length !== 4 || parts.some(part => isNaN(part) || part < 0 || part > 255)) { - return false; - } - - // Exception for 192.0.2.1, assuming the domain is proxied - if (ip === "192.0.2.1" && proxied) { - return true; - } - - // Check for private and reserved IPv4 ranges - return !( - // Private ranges - parts[0] === 10 || - (parts[0] === 172 && parts[1] >= 16 && parts[1] <= 31) || - (parts[0] === 192 && parts[1] === 168) || - - // Reserved or special-use ranges - (parts[0] === 100 && parts[1] >= 64 && parts[1] <= 127) || // Carrier-grade NAT - (parts[0] === 169 && parts[1] === 254) || // Link-local - (parts[0] === 192 && parts[1] === 0 && parts[2] === 0) || // IETF Protocol Assignments - (parts[0] === 192 && parts[1] === 0 && parts[2] === 2) || // Documentation (TEST-NET-1) - (parts[0] === 198 && parts[1] === 18) || // Network Interconnect Devices - (parts[0] === 198 && parts[1] === 51 && parts[2] === 100) || // Documentation (TEST-NET-2) - (parts[0] === 203 && parts[1] === 0 && parts[2] === 113) || // Documentation (TEST-NET-3) - (parts[0] >= 224) // Multicast and reserved ranges - ); -}; - -module.exports.isPublicIPv6 = function (ip) { - const normalizedIP = ip.toLowerCase(); - - // Check for private or special-use IPv6 ranges - return !( - normalizedIP.startsWith("fc") || // Unique Local Address (ULA) - normalizedIP.startsWith("fd") || // Unique Local Address (ULA) - normalizedIP.startsWith("fe80") || // Link-local - normalizedIP.startsWith("::1") || // Loopback address (::1) - normalizedIP.startsWith("2001:db8") // Documentation range - ); -}; From 2b4d5cf17fc1f86c165b2973774073061b56f137 Mon Sep 17 00:00:00 2001 From: William Harrison <87287585+wdhdev@users.noreply.github.com> Date: Mon, 11 Nov 2024 12:23:02 +0800 Subject: [PATCH 42/42] fix records.test.js error --- tests/records.test.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/records.test.js b/tests/records.test.js index 56039e741..a6a15cd3d 100644 --- a/tests/records.test.js +++ b/tests/records.test.js @@ -2,8 +2,6 @@ const t = require("ava"); const fs = require("fs-extra"); const path = require("path"); -const { expandIPv6, isPublicIPv4, isPublicIPv6 } = require("../utils/functions"); - const validRecordTypes = ["A", "AAAA", "CAA", "CNAME", "DS", "MX", "NS", "SRV", "TXT", "URL"]; const hostnameRegex = /^(?=.{1,253}$)(?:(?:[_a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)\.)+[a-zA-Z]{2,63}$/;