From d55bef49ab335605a6bab69cd556d7f45ad39158 Mon Sep 17 00:00:00 2001 From: Rohit Khanduri Date: Fri, 7 Feb 2025 18:03:53 +0100 Subject: [PATCH 01/38] feat: updated getSubstackFeedByLink method signature now returns raw XML string when no callback is passed --- .github/workflows/test_format.yml | 2 +- README.md | 27 +- lib/main.ts | 19 +- package-lock.json | 786 +++++++++++++++++------------- package.json | 2 +- src/main.ts | 10 +- 6 files changed, 480 insertions(+), 366 deletions(-) diff --git a/.github/workflows/test_format.yml b/.github/workflows/test_format.yml index 0b00ad1..59aaea8 100644 --- a/.github/workflows/test_format.yml +++ b/.github/workflows/test_format.yml @@ -24,7 +24,7 @@ jobs: - run: npm run build --if-present # Commit changes - name: Commit changes using git-auto-commit-action@v5 - uses: stefanzweifel/git-auto-commit-action@v5 + uses: stefanzweifel/git-auto-commit-action@v5.0.1 id: auto-commit-action with: commit_message: Prettier format \ No newline at end of file diff --git a/README.md b/README.md index eadeb01..73cad16 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ npm install substack-feed-api 2. Import the API into your project: ```typescript -import { SubstackFeedApi } from 'substack-feed-api'; +import { getSubstackFeed } from 'substack-feed-api'; ``` ### Usage @@ -37,15 +37,28 @@ import { SubstackFeedApi } from 'substack-feed-api'; Here's a quick example to get you started: ```typescript -const api = new SubstackFeedApi(); +getSubstackFeed('your-substack-newsletter-name') + .then((feed) => { + console.log(feed); + }) + .catch((error) => { + console.error(error); + }); +``` + +There is also a possibility to pass your own callback function to the `getSubstackFeed` function. +This function will be called with the parsed feed data as an argument: -api.fetchNewsletter('your-substack-newsletter-name').then(feed => { - console.info(feed); -}).catch(error => { - console.error('Error fetching newsletter:', error); +```typescript +getSubstackFeed('your-substack-newsletter-name', (err, result) => { + console.log(result); }); ``` +You can also use the other exported functions from the package: +- `getFeedByLink`: Fetch a specific feed by its link. +- `getPosts`: Get all posts from a feed. + Replace `'your-substack-newsletter-name'` with the name of the Substack newsletter you wish to fetch. ## Development @@ -87,4 +100,4 @@ Contributions are welcome! Feel free to open an issue or submit a pull request i ## License This project is licensed under the MIT License. -``` \ No newline at end of file +``` diff --git a/lib/main.ts b/lib/main.ts index 5f9a65a..3491875 100644 --- a/lib/main.ts +++ b/lib/main.ts @@ -1,14 +1,17 @@ import * as parser from "xml2js"; -import { RawFeedChannel, RawItem, SubstackItem } from "./types"; import { isRawFeed, isRawFeedChannel } from "./typeguards"; +import { RawFeedChannel, RawItem, SubstackItem } from "./types"; -const CORS_PROXY = "https://corsproxy.io/?"; +const CORS_PROXY = "https://api.allorigins.win/get?url="; // Internal API -const getRawXMLSubstackFeed = async (feedUrl: string) => { +const getRawXMLSubstackFeed = async (feedUrl: string, proxy = false) => { try { - const promise = await fetch(`${CORS_PROXY}${encodeURIComponent(feedUrl)}`); + const path = proxy + ? `${CORS_PROXY}${encodeURIComponent(feedUrl)}` + : feedUrl; + const promise = await fetch(path); if (promise.ok) return promise.text(); } catch (e) { throw new Error("Error occurred fetching Feed from Substack"); @@ -36,10 +39,12 @@ const transformRawItem = (item: RawItem): SubstackItem => { export const getSubstackFeed = async ( feedUrl: string, + proxy = false, /* eslint-disable @typescript-eslint/no-explicit-any */ - callback: (err: Error | null, result: any) => void, -): Promise => { - const rawXML = await getRawXMLSubstackFeed(feedUrl); + callback?: (err: Error | null, result: any) => void, +): Promise => { + const rawXML = await getRawXMLSubstackFeed(feedUrl, proxy); + if (!callback) return rawXML; await parseXML(rawXML, callback); }; export const getFeedByLink = ( diff --git a/package-lock.json b/package-lock.json index 8895303..2e58ce6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,14 +16,14 @@ "prettier": "3.3.2", "typescript": "^5.4.5", "typescript-eslint": "^7.13.1", - "vite": "^5.2.10", + "vite": "6.0.9", "xml2js": "^0.6.2" } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", + "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", "cpu": [ "ppc64" ], @@ -33,13 +33,13 @@ "aix" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", + "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", "cpu": [ "arm" ], @@ -49,13 +49,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", + "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", "cpu": [ "arm64" ], @@ -65,13 +65,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", + "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", "cpu": [ "x64" ], @@ -81,13 +81,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", + "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", "cpu": [ "arm64" ], @@ -97,13 +97,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", + "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", "cpu": [ "x64" ], @@ -113,13 +113,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", + "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", "cpu": [ "arm64" ], @@ -129,13 +129,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", + "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", "cpu": [ "x64" ], @@ -145,13 +145,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", + "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", "cpu": [ "arm" ], @@ -161,13 +161,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", + "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", "cpu": [ "arm64" ], @@ -177,13 +177,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", + "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", "cpu": [ "ia32" ], @@ -193,13 +193,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", + "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", "cpu": [ "loong64" ], @@ -209,13 +209,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", + "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", "cpu": [ "mips64el" ], @@ -225,13 +225,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", + "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", "cpu": [ "ppc64" ], @@ -241,13 +241,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", + "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", "cpu": [ "riscv64" ], @@ -257,13 +257,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", + "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", "cpu": [ "s390x" ], @@ -273,13 +273,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", + "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", "cpu": [ "x64" ], @@ -289,13 +289,29 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", + "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", + "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", "cpu": [ "x64" ], @@ -305,13 +321,29 @@ "netbsd" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", + "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", + "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", "cpu": [ "x64" ], @@ -321,13 +353,13 @@ "openbsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", + "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", "cpu": [ "x64" ], @@ -337,13 +369,13 @@ "sunos" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", + "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", "cpu": [ "arm64" ], @@ -353,13 +385,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", + "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", "cpu": [ "ia32" ], @@ -369,13 +401,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", + "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", "cpu": [ "x64" ], @@ -385,28 +417,31 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.1.tgz", - "integrity": "sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -436,22 +471,22 @@ } }, "node_modules/@eslint/js": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.5.0.tgz", - "integrity": "sha512-A7+AOT2ICkodvtsWnxZP4Xxk3NbZ3VMHd8oihydLRGrJgqqdEz1qSeEgXYyT/Cu8h1TWWsQRejIx48mtjZ5y1w==", + "version": "9.19.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.19.0.tgz", + "integrity": "sha512-rbq9/g38qjfqFLOVPvwjIvFFdNziEC5S65jmjPw5r6A//QH+W91akh9irMwjDN8zKUTak6W9EsAv4m/7Wnw0UQ==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", "deprecated": "Use @eslint/config-array instead", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", + "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", "minimatch": "^3.0.5" }, @@ -515,9 +550,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz", - "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==", + "version": "4.34.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.4.tgz", + "integrity": "sha512-gGi5adZWvjtJU7Axs//CWaQbQd/vGy8KGcnEaCWiyCqxWYDxwIlAHFuSe6Guoxtd0SRvSfVTDMPd5H+4KE2kKA==", "cpu": [ "arm" ], @@ -528,9 +563,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz", - "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==", + "version": "4.34.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.4.tgz", + "integrity": "sha512-1aRlh1gqtF7vNPMnlf1vJKk72Yshw5zknR/ZAVh7zycRAGF2XBMVDAHmFQz/Zws5k++nux3LOq/Ejj1WrDR6xg==", "cpu": [ "arm64" ], @@ -541,9 +576,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz", - "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==", + "version": "4.34.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.4.tgz", + "integrity": "sha512-drHl+4qhFj+PV/jrQ78p9ch6A0MfNVZScl/nBps5a7u01aGf/GuBRrHnRegA9bP222CBDfjYbFdjkIJ/FurvSQ==", "cpu": [ "arm64" ], @@ -554,9 +589,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz", - "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==", + "version": "4.34.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.4.tgz", + "integrity": "sha512-hQqq/8QALU6t1+fbNmm6dwYsa0PDD4L5r3TpHx9dNl+aSEMnIksHZkSO3AVH+hBMvZhpumIGrTFj8XCOGuIXjw==", "cpu": [ "x64" ], @@ -566,10 +601,36 @@ "darwin" ] }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.34.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.4.tgz", + "integrity": "sha512-/L0LixBmbefkec1JTeAQJP0ETzGjFtNml2gpQXA8rpLo7Md+iXQzo9kwEgzyat5Q+OG/C//2B9Fx52UxsOXbzw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.34.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.4.tgz", + "integrity": "sha512-6Rk3PLRK+b8L/M6m/x6Mfj60LhAUcLJ34oPaxufA+CfqkUrDoUPQYFdRrhqyOvtOKXLJZJwxlOLbQjNYQcRQfw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz", - "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==", + "version": "4.34.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.4.tgz", + "integrity": "sha512-kmT3x0IPRuXY/tNoABp2nDvI9EvdiS2JZsd4I9yOcLCCViKsP0gB38mVHOhluzx+SSVnM1KNn9k6osyXZhLoCA==", "cpu": [ "arm" ], @@ -580,9 +641,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz", - "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==", + "version": "4.34.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.4.tgz", + "integrity": "sha512-3iSA9tx+4PZcJH/Wnwsvx/BY4qHpit/u2YoZoXugWVfc36/4mRkgGEoRbRV7nzNBSCOgbWMeuQ27IQWgJ7tRzw==", "cpu": [ "arm" ], @@ -593,9 +654,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz", - "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==", + "version": "4.34.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.4.tgz", + "integrity": "sha512-7CwSJW+sEhM9sESEk+pEREF2JL0BmyCro8UyTq0Kyh0nu1v0QPNY3yfLPFKChzVoUmaKj8zbdgBxUhBRR+xGxg==", "cpu": [ "arm64" ], @@ -606,9 +667,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz", - "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==", + "version": "4.34.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.4.tgz", + "integrity": "sha512-GZdafB41/4s12j8Ss2izofjeFXRAAM7sHCb+S4JsI9vaONX/zQ8cXd87B9MRU/igGAJkKvmFmJJBeeT9jJ5Cbw==", "cpu": [ "arm64" ], @@ -618,10 +679,23 @@ "linux" ] }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.34.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.4.tgz", + "integrity": "sha512-uuphLuw1X6ur11675c2twC6YxbzyLSpWggvdawTUamlsoUv81aAXRMPBC1uvQllnBGls0Qt5Siw8reSIBnbdqQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz", - "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==", + "version": "4.34.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.4.tgz", + "integrity": "sha512-KvLEw1os2gSmD6k6QPCQMm2T9P2GYvsMZMRpMz78QpSoEevHbV/KOUbI/46/JRalhtSAYZBYLAnT9YE4i/l4vg==", "cpu": [ "ppc64" ], @@ -632,9 +706,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz", - "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==", + "version": "4.34.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.4.tgz", + "integrity": "sha512-wcpCLHGM9yv+3Dql/CI4zrY2mpQ4WFergD3c9cpRowltEh5I84pRT/EuHZsG0In4eBPPYthXnuR++HrFkeqwkA==", "cpu": [ "riscv64" ], @@ -645,9 +719,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz", - "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==", + "version": "4.34.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.4.tgz", + "integrity": "sha512-nLbfQp2lbJYU8obhRQusXKbuiqm4jSJteLwfjnunDT5ugBKdxqw1X9KWwk8xp1OMC6P5d0WbzxzhWoznuVK6XA==", "cpu": [ "s390x" ], @@ -658,9 +732,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", - "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", + "version": "4.34.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.4.tgz", + "integrity": "sha512-JGejzEfVzqc/XNiCKZj14eb6s5w8DdWlnQ5tWUbs99kkdvfq9btxxVX97AaxiUX7xJTKFA0LwoS0KU8C2faZRg==", "cpu": [ "x64" ], @@ -671,9 +745,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz", - "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==", + "version": "4.34.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.4.tgz", + "integrity": "sha512-/iFIbhzeyZZy49ozAWJ1ZR2KW6ZdYUbQXLT4O5n1cRZRoTpwExnHLjlurDXXPKEGxiAg0ujaR9JDYKljpr2fDg==", "cpu": [ "x64" ], @@ -684,9 +758,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz", - "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==", + "version": "4.34.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.4.tgz", + "integrity": "sha512-qORc3UzoD5UUTneiP2Afg5n5Ti1GAW9Gp5vHPxzvAFFA3FBaum9WqGvYXGf+c7beFdOKNos31/41PRMUwh1tpA==", "cpu": [ "arm64" ], @@ -697,9 +771,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz", - "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==", + "version": "4.34.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.4.tgz", + "integrity": "sha512-5g7E2PHNK2uvoD5bASBD9aelm44nf1w4I5FEI7MPHLWcCSrR8JragXZWgKPXk5i2FU3JFfa6CGZLw2RrGBHs2Q==", "cpu": [ "ia32" ], @@ -710,9 +784,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz", - "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==", + "version": "4.34.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.4.tgz", + "integrity": "sha512-p0scwGkR4kZ242xLPBuhSckrJ734frz6v9xZzD+kHVYRAkSUmdSLCIJRfql6H5//aF8Q10K+i7q8DiPfZp0b7A==", "cpu": [ "x64" ], @@ -723,9 +797,9 @@ ] }, "node_modules/@types/eslint": { - "version": "8.56.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", - "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", "dev": true, "dependencies": { "@types/estree": "*", @@ -742,9 +816,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", "dev": true }, "node_modules/@types/json-schema": { @@ -754,12 +828,12 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.14.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.6.tgz", - "integrity": "sha512-JbA0XIJPL1IiNnU7PFxDXyfAwcwVVrOoqyzzyQTyMeVhBzkJVMSkC1LlVsRQ2lpqiY4n6Bb9oCS6lzDKVQxbZw==", + "version": "22.13.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.1.tgz", + "integrity": "sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==", "dev": true, "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.20.0" } }, "node_modules/@types/xml2js": { @@ -772,16 +846,16 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.13.1.tgz", - "integrity": "sha512-kZqi+WZQaZfPKnsflLJQCz6Ze9FFSMfXrrIOcyargekQxG37ES7DJNpJUE9Q/X5n3yTIP/WPutVNzgknQ7biLg==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", + "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.13.1", - "@typescript-eslint/type-utils": "7.13.1", - "@typescript-eslint/utils": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/type-utils": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -805,15 +879,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.13.1.tgz", - "integrity": "sha512-1ELDPlnLvDQ5ybTSrMhRTFDfOQEOXNM+eP+3HT/Yq7ruWpciQw+Avi73pdEbA4SooCawEWo3dtYbF68gN7Ed1A==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.13.1", - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/typescript-estree": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4" }, "engines": { @@ -833,13 +907,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.1.tgz", - "integrity": "sha512-adbXNVEs6GmbzaCpymHQ0MB6E4TqoiVbC0iqG3uijR8ZYfpAXMGttouQzF4Oat3P2GxDVIrg7bMI/P65LiQZdg==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1" + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -850,13 +924,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.13.1.tgz", - "integrity": "sha512-aWDbLu1s9bmgPGXSzNCxELu+0+HQOapV/y+60gPXafR8e2g1Bifxzevaa+4L2ytCWm+CHqpELq4CSoN9ELiwCg==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", + "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.13.1", - "@typescript-eslint/utils": "7.13.1", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/utils": "7.18.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -877,9 +951,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.1.tgz", - "integrity": "sha512-7K7HMcSQIAND6RBL4kDl24sG/xKM13cA85dc7JnmQXw2cBDngg7c19B++JzvJHRG3zG36n9j1i451GBzRuHchw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -890,13 +964,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.1.tgz", - "integrity": "sha512-uxNr51CMV7npU1BxZzYjoVz9iyjckBduFBP0S5sLlh1tXYzHzgZ3BR9SVsNed+LmwKrmnqN3Kdl5t7eZ5TS1Yw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -927,9 +1001,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -942,15 +1016,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.13.1.tgz", - "integrity": "sha512-h5MzFBD5a/Gh/fvNdp9pTfqJAbuQC4sCN2WzuXme71lqFJsZtLbjxfSk4r3p02WIArOF9N94pdsLiGutpDbrXQ==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", + "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.13.1", - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/typescript-estree": "7.13.1" + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -964,12 +1038,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.1.tgz", - "integrity": "sha512-k/Bfne7lrP7hcb7m9zSsgcBmo+8eicqqfNAJ7uUY+jkTFpKeH2FSkWpFRtimBxgkyvqfu9jTPRbYOvud6isdXA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.13.1", + "@typescript-eslint/types": "7.18.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -981,15 +1055,15 @@ } }, "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", "dev": true }, "node_modules/acorn": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz", - "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -1140,9 +1214,9 @@ "dev": true }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "dependencies": { "path-key": "^3.1.0", @@ -1154,12 +1228,12 @@ } }, "node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -1201,41 +1275,43 @@ } }, "node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz", + "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==", "dev": true, "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" + "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" + "@esbuild/aix-ppc64": "0.24.2", + "@esbuild/android-arm": "0.24.2", + "@esbuild/android-arm64": "0.24.2", + "@esbuild/android-x64": "0.24.2", + "@esbuild/darwin-arm64": "0.24.2", + "@esbuild/darwin-x64": "0.24.2", + "@esbuild/freebsd-arm64": "0.24.2", + "@esbuild/freebsd-x64": "0.24.2", + "@esbuild/linux-arm": "0.24.2", + "@esbuild/linux-arm64": "0.24.2", + "@esbuild/linux-ia32": "0.24.2", + "@esbuild/linux-loong64": "0.24.2", + "@esbuild/linux-mips64el": "0.24.2", + "@esbuild/linux-ppc64": "0.24.2", + "@esbuild/linux-riscv64": "0.24.2", + "@esbuild/linux-s390x": "0.24.2", + "@esbuild/linux-x64": "0.24.2", + "@esbuild/netbsd-arm64": "0.24.2", + "@esbuild/netbsd-x64": "0.24.2", + "@esbuild/openbsd-arm64": "0.24.2", + "@esbuild/openbsd-x64": "0.24.2", + "@esbuild/sunos-x64": "0.24.2", + "@esbuild/win32-arm64": "0.24.2", + "@esbuild/win32-ia32": "0.24.2", + "@esbuild/win32-x64": "0.24.2" } }, "node_modules/escape-string-regexp": { @@ -1251,16 +1327,17 @@ } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -1334,9 +1411,9 @@ } }, "node_modules/eslint/node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1360,9 +1437,9 @@ } }, "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -1417,16 +1494,16 @@ "dev": true }, "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==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, "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" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" @@ -1457,9 +1534,9 @@ "dev": true }, "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.0.tgz", + "integrity": "sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -1520,9 +1597,9 @@ } }, "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", "dev": true }, "node_modules/fs.realpath": { @@ -1629,18 +1706,18 @@ } }, "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "engines": { "node": ">= 4" } }, "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "dependencies": { "parent-module": "^1.0.0", @@ -1807,9 +1884,9 @@ } }, "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "dependencies": { "braces": "^3.0.3", @@ -1832,15 +1909,15 @@ } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "dev": true, "funding": [ { @@ -1966,9 +2043,9 @@ } }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true }, "node_modules/picomatch": { @@ -1984,9 +2061,9 @@ } }, "node_modules/postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz", + "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==", "dev": true, "funding": [ { @@ -2003,9 +2080,9 @@ } ], "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" @@ -2100,12 +2177,12 @@ } }, "node_modules/rollup": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz", - "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", + "version": "4.34.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.4.tgz", + "integrity": "sha512-spF66xoyD7rz3o08sHP7wogp1gZ6itSq22SGa/IZTcUDXDlOyrShwMwkVSB+BUxFRZZCUYqdb3KWDEOMVQZxuw==", "dev": true, "dependencies": { - "@types/estree": "1.0.5" + "@types/estree": "1.0.6" }, "bin": { "rollup": "dist/bin/rollup" @@ -2115,22 +2192,25 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.18.0", - "@rollup/rollup-android-arm64": "4.18.0", - "@rollup/rollup-darwin-arm64": "4.18.0", - "@rollup/rollup-darwin-x64": "4.18.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.18.0", - "@rollup/rollup-linux-arm-musleabihf": "4.18.0", - "@rollup/rollup-linux-arm64-gnu": "4.18.0", - "@rollup/rollup-linux-arm64-musl": "4.18.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0", - "@rollup/rollup-linux-riscv64-gnu": "4.18.0", - "@rollup/rollup-linux-s390x-gnu": "4.18.0", - "@rollup/rollup-linux-x64-gnu": "4.18.0", - "@rollup/rollup-linux-x64-musl": "4.18.0", - "@rollup/rollup-win32-arm64-msvc": "4.18.0", - "@rollup/rollup-win32-ia32-msvc": "4.18.0", - "@rollup/rollup-win32-x64-msvc": "4.18.0", + "@rollup/rollup-android-arm-eabi": "4.34.4", + "@rollup/rollup-android-arm64": "4.34.4", + "@rollup/rollup-darwin-arm64": "4.34.4", + "@rollup/rollup-darwin-x64": "4.34.4", + "@rollup/rollup-freebsd-arm64": "4.34.4", + "@rollup/rollup-freebsd-x64": "4.34.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.34.4", + "@rollup/rollup-linux-arm-musleabihf": "4.34.4", + "@rollup/rollup-linux-arm64-gnu": "4.34.4", + "@rollup/rollup-linux-arm64-musl": "4.34.4", + "@rollup/rollup-linux-loongarch64-gnu": "4.34.4", + "@rollup/rollup-linux-powerpc64le-gnu": "4.34.4", + "@rollup/rollup-linux-riscv64-gnu": "4.34.4", + "@rollup/rollup-linux-s390x-gnu": "4.34.4", + "@rollup/rollup-linux-x64-gnu": "4.34.4", + "@rollup/rollup-linux-x64-musl": "4.34.4", + "@rollup/rollup-win32-arm64-msvc": "4.34.4", + "@rollup/rollup-win32-ia32-msvc": "4.34.4", + "@rollup/rollup-win32-x64-msvc": "4.34.4", "fsevents": "~2.3.2" } }, @@ -2164,9 +2244,9 @@ "dev": true }, "node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -2206,9 +2286,9 @@ } }, "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, "engines": { "node": ">=0.10.0" @@ -2269,9 +2349,9 @@ } }, "node_modules/ts-api-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", + "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", "dev": true, "engines": { "node": ">=16" @@ -2305,9 +2385,9 @@ } }, "node_modules/typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -2318,14 +2398,14 @@ } }, "node_modules/typescript-eslint": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.13.1.tgz", - "integrity": "sha512-pvLEuRs8iS9s3Cnp/Wt//hpK8nKc8hVa3cLljHqzaJJQYP8oys8GUyIFqtlev+2lT/fqMPcyQko+HJ6iYK3nFA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.18.0.tgz", + "integrity": "sha512-PonBkP603E3tt05lDkbOMyaxJjvKqQrXsnow72sVeOFINDE/qNmnnd+f9b4N+U7W6MXnnYyrhtmF2t08QWwUbA==", "dev": true, "dependencies": { - "@typescript-eslint/eslint-plugin": "7.13.1", - "@typescript-eslint/parser": "7.13.1", - "@typescript-eslint/utils": "7.13.1" + "@typescript-eslint/eslint-plugin": "7.18.0", + "@typescript-eslint/parser": "7.18.0", + "@typescript-eslint/utils": "7.18.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -2344,9 +2424,9 @@ } }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", "dev": true }, "node_modules/uri-js": { @@ -2359,20 +2439,20 @@ } }, "node_modules/vite": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.1.tgz", - "integrity": "sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ==", + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.9.tgz", + "integrity": "sha512-MSgUxHcaXLtnBPktkbUSoQUANApKYuxZ6DrbVENlIorbhL2dZydTLaZ01tjUoE3szeFzlFk9ANOKk0xurh4MKA==", "dev": true, "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.38", - "rollup": "^4.13.0" + "esbuild": "^0.24.2", + "postcss": "^8.4.49", + "rollup": "^4.23.0" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^18.0.0 || >=20.0.0" + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" @@ -2381,18 +2461,25 @@ "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", + "sass-embedded": "*", "stylus": "*", "sugarss": "*", - "terser": "^5.4.0" + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" }, "peerDependenciesMeta": { "@types/node": { "optional": true }, + "jiti": { + "optional": true + }, "less": { "optional": true }, @@ -2402,6 +2489,9 @@ "sass": { "optional": true }, + "sass-embedded": { + "optional": true + }, "stylus": { "optional": true }, @@ -2410,6 +2500,12 @@ }, "terser": { "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true } } }, diff --git a/package.json b/package.json index c20aa84..3c765c8 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "prettier": "3.3.2", "typescript": "^5.4.5", "typescript-eslint": "^7.13.1", - "vite": "^5.2.10", + "vite": "6.0.9", "xml2js": "^0.6.2" } } diff --git a/src/main.ts b/src/main.ts index 9e9fb89..1f21c6b 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,23 +1,23 @@ +import { getFeedByLink, getPosts, getSubstackFeed } from "../lib/main.ts"; +import viteLogo from "../public/vite.svg"; import "./style.css"; import typescriptLogo from "./typescript.svg"; -import viteLogo from "../public/vite.svg"; -import { getSubstackFeed, getFeedByLink, getPosts } from "../lib/main.ts"; document.querySelector("#app")!.innerHTML = `

An API which fetches articles from Substack

-

Built with +

Built with Typescript Logo Vite Logo

- +

This page displays a list of articles from https://rohitkhanduri.substack.com

`; const SUBSTACK_FEED_URL = "https://rohitkhanduri.substack.com"; -getSubstackFeed(`${SUBSTACK_FEED_URL}/feed`, (err, rawRes) => { +getSubstackFeed(`${SUBSTACK_FEED_URL}/feed`, true, (err, rawRes) => { if (err) throw err; const feedChannel = getFeedByLink(rawRes, SUBSTACK_FEED_URL); const posts = getPosts(feedChannel); From bb2178748059999c7a83289e1fae6269c0ee6d26 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Fri, 7 Feb 2025 20:51:27 +0000 Subject: [PATCH 02/38] 1.0.3 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2e58ce6..da57e04 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "substack-feed-api", - "version": "1.0.2", + "version": "1.0.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "substack-feed-api", - "version": "1.0.2", + "version": "1.0.3", "devDependencies": { "@eslint/js": "^9.5.0", "@types/eslint__js": "^8.42.3", diff --git a/package.json b/package.json index 3c765c8..8b7931c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "substack-feed-api", - "version": "1.0.2", + "version": "1.0.3", "type": "module", "files": [ "dist", From d119c6ed077c90b0bc3d0e7ac52fa8c29765ee37 Mon Sep 17 00:00:00 2001 From: Rohit Khanduri Date: Fri, 7 Feb 2025 22:06:04 +0100 Subject: [PATCH 03/38] fix: updated declaration file --- index.d.ts | 21 ++++----------------- lib/main.ts | 2 +- 2 files changed, 5 insertions(+), 18 deletions(-) diff --git a/index.d.ts b/index.d.ts index d86b960..d8c4d9a 100644 --- a/index.d.ts +++ b/index.d.ts @@ -83,23 +83,10 @@ export type SubstackItem = { content: string; }; -export function isRawFeed( - feed: any, -): feed is { rss: { channel: RawFeedChannel[] } }; -export function isRawFeedChannel(channel: any): channel is RawFeedChannel; - -export const CORS_PROXY: string; - -export function getRawXMLSubstackFeed(feedUrl: string): Promise; -export function parseXML( - xml?: string, - callback?: (err: Error | null, result: any) => void, -): Promise; -export function transformRawItem(item: RawItem): SubstackItem; - export function getSubstackFeed( feedUrl: string, - callback: (err: Error | null, result: any) => void, -): Promise; -export function getFeedByLink(rawFeed: any, link: string): RawFeedChannel[]; + proxy: boolean, + callback: (err: Error | null, result: unknown) => void, +): Promise; +export function getFeedByLink(rawFeed: unknown, link: string): RawFeedChannel[]; export function getPosts(channels: RawFeedChannel[]): SubstackItem[]; diff --git a/lib/main.ts b/lib/main.ts index 3491875..15f5f07 100644 --- a/lib/main.ts +++ b/lib/main.ts @@ -41,7 +41,7 @@ export const getSubstackFeed = async ( feedUrl: string, proxy = false, /* eslint-disable @typescript-eslint/no-explicit-any */ - callback?: (err: Error | null, result: any) => void, + callback?: (err: Error | null, result: unknown) => void, ): Promise => { const rawXML = await getRawXMLSubstackFeed(feedUrl, proxy); if (!callback) return rawXML; From 47fa5bffeb7f022f79717800fe94546a2df46479 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Fri, 7 Feb 2025 21:06:24 +0000 Subject: [PATCH 04/38] 1.0.4 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index da57e04..423d929 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "substack-feed-api", - "version": "1.0.3", + "version": "1.0.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "substack-feed-api", - "version": "1.0.3", + "version": "1.0.4", "devDependencies": { "@eslint/js": "^9.5.0", "@types/eslint__js": "^8.42.3", diff --git a/package.json b/package.json index 8b7931c..f2b4138 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "substack-feed-api", - "version": "1.0.3", + "version": "1.0.4", "type": "module", "files": [ "dist", From 79d260324d9554bcf90e0d6323992af5ccd24266 Mon Sep 17 00:00:00 2001 From: Rohit Khanduri Date: Fri, 7 Feb 2025 22:25:26 +0100 Subject: [PATCH 05/38] fix: updated declaration --- index.d.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.d.ts b/index.d.ts index d8c4d9a..615f89f 100644 --- a/index.d.ts +++ b/index.d.ts @@ -85,8 +85,8 @@ export type SubstackItem = { export function getSubstackFeed( feedUrl: string, - proxy: boolean, - callback: (err: Error | null, result: unknown) => void, + proxy?: boolean, + callback?: (err: Error | null, result: unknown) => void, ): Promise; export function getFeedByLink(rawFeed: unknown, link: string): RawFeedChannel[]; export function getPosts(channels: RawFeedChannel[]): SubstackItem[]; From 1b8456bbfa1469b7f1f9f07d786485ae6f47f79b Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Fri, 7 Feb 2025 21:25:43 +0000 Subject: [PATCH 06/38] 1.0.5 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 423d929..771790a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "substack-feed-api", - "version": "1.0.4", + "version": "1.0.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "substack-feed-api", - "version": "1.0.4", + "version": "1.0.5", "devDependencies": { "@eslint/js": "^9.5.0", "@types/eslint__js": "^8.42.3", diff --git a/package.json b/package.json index f2b4138..3aeb9bf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "substack-feed-api", - "version": "1.0.4", + "version": "1.0.5", "type": "module", "files": [ "dist", From 11f249ee0d76d49b4dbac9810cc7244992e6b357 Mon Sep 17 00:00:00 2001 From: Rohit Khanduri Date: Sat, 8 Feb 2025 00:23:25 +0100 Subject: [PATCH 07/38] fix: updated parsing for non browser calls - updated non browser calls - added jest config and test --- jest.config.ts | 11 + lib/__tests__/app.test.ts | 151 ++ lib/main.ts | 8 +- lib/typeguards.ts | 4 + package-lock.json | 4210 ++++++++++++++++++++++++++++++------- package.json | 8 + 6 files changed, 3598 insertions(+), 794 deletions(-) create mode 100644 jest.config.ts create mode 100644 lib/__tests__/app.test.ts diff --git a/jest.config.ts b/jest.config.ts new file mode 100644 index 0000000..044033c --- /dev/null +++ b/jest.config.ts @@ -0,0 +1,11 @@ +require("tsconfig-paths/register"); + +// jest.config.js +module.exports = { + preset: "ts-jest", + testEnvironment: "node", + testMatch: ["**/__tests__/**/*.test.ts"], + moduleNameMapper: { + "^@/(.*)$": "/src/$1", + }, +}; diff --git a/lib/__tests__/app.test.ts b/lib/__tests__/app.test.ts new file mode 100644 index 0000000..b3b8d31 --- /dev/null +++ b/lib/__tests__/app.test.ts @@ -0,0 +1,151 @@ +import { getFeedByLink, getPosts, getSubstackFeed } from "../main"; +import { RawFeedChannel } from "../types"; + +describe("getSubstackFeed", () => { + it("should throw an error for invalid Substack feed", async () => { + const invalidFeedUrl = "https://example.com/invalid-feed"; + await expect(getSubstackFeed(invalidFeedUrl)).rejects.toThrow( + "Error occurred fetching Feed from Substack", + ); + }); +}); + +describe("getFeedByLink", () => { + it("should throw an error for incorrect feed format", () => { + const invalidFeed = { invalid: "format" }; + expect(() => getFeedByLink(invalidFeed, "https://example.com")).toThrow( + "Feed is not in the correct format", + ); + }); +}); + +describe("getPosts", () => { + const mockChannels: RawFeedChannel[] = [ + { + title: ["Post 1"], + description: ["Description 1"], + link: ["https://example.com/post1"], + image: [ + { + url: ["https://example.com/image1"], + title: ["Image 1"], + link: ["https://example.com/image1"], + }, + ], + generator: ["Substack"], + lastBuildDate: ["2023-01-01"], + "atom:link": [ + { + $: { + href: "https://example.com/feed", + rel: "self", + type: "application/rss+xml", + }, + }, + ], + copyright: ["© 2023"], + language: ["en"], + webMaster: ["some"], + "itunes:owner": [ + { "itunes:email": ["some@some.com"], "itunes:name": ["Some Name"] }, + ], + "itunes:author": ["Some Author"], + "googleplay:owner": ["Some Owner"], + "googleplay:email": ["some@some.com"], + "googleplay:author": ["Some Author"], + item: [ + { + title: ["Post 1"], + description: ["Description 1"], + link: ["https://example.com/post1"], + guid: [ + { _: "https://example.com/post1", $: { isPermaLink: "true" } }, + ], + "dc:creator": ["Some Author"], + pubDate: ["2023-01-01"], + enclosure: [ + { + $: { + url: "https://example.com/image1", + length: "123", + type: "image/jpeg", + }, + }, + ], + "content:encoded": ["

Content 1

"], + }, + ], + }, + { + title: ["Post 2"], + description: ["Description 2"], + link: ["https://example.com/post1"], + image: [ + { + url: ["https://example.com/image1"], + title: ["Image 1"], + link: ["https://example.com/image1"], + }, + ], + generator: ["Substack"], + lastBuildDate: ["2023-01-01"], + "atom:link": [ + { + $: { + href: "https://example.com/feed", + rel: "self", + type: "application/rss+xml", + }, + }, + ], + copyright: ["© 2023"], + language: ["en"], + webMaster: ["some"], + "itunes:owner": [ + { "itunes:email": ["some@some.com"], "itunes:name": ["Some Name"] }, + ], + "itunes:author": ["Some Author"], + "googleplay:owner": ["Some Owner"], + "googleplay:email": ["some@some.com"], + "googleplay:author": ["Some Author"], + item: [ + { + title: ["Post 1"], + description: ["Description 1"], + link: ["https://example.com/post1"], + guid: [ + { _: "https://example.com/post1", $: { isPermaLink: "true" } }, + ], + "dc:creator": ["Some Author"], + pubDate: ["2023-01-01"], + enclosure: [ + { + $: { + url: "https://example.com/image1", + length: "123", + type: "image/jpeg", + }, + }, + ], + "content:encoded": ["

Content 1

"], + }, + ], + }, + ]; + + it("should transform raw items to SubstackItems", () => { + const result = getPosts(mockChannels); + expect(result).toHaveLength(1); + expect(result[0]).toEqual({ + title: "Post 1", + description: "Description 1", + link: "https://example.com/post1", + pubDate: "2023-01-01", + content: "

Content 1

", + }); + }); + + it("should handle empty channels array", () => { + expect(() => getPosts([])).toThrow(); + }); +}); diff --git a/lib/main.ts b/lib/main.ts index 15f5f07..72151ee 100644 --- a/lib/main.ts +++ b/lib/main.ts @@ -1,5 +1,5 @@ import * as parser from "xml2js"; -import { isRawFeed, isRawFeedChannel } from "./typeguards"; +import { isRawFeed, isRawFeedChannel, isValidSubstackFeed } from "./typeguards"; import { RawFeedChannel, RawItem, SubstackItem } from "./types"; const CORS_PROXY = "https://api.allorigins.win/get?url="; @@ -12,7 +12,7 @@ const getRawXMLSubstackFeed = async (feedUrl: string, proxy = false) => { ? `${CORS_PROXY}${encodeURIComponent(feedUrl)}` : feedUrl; const promise = await fetch(path); - if (promise.ok) return promise.text(); + if (promise.ok) return promise.json(); } catch (e) { throw new Error("Error occurred fetching Feed from Substack"); } @@ -44,8 +44,10 @@ export const getSubstackFeed = async ( callback?: (err: Error | null, result: unknown) => void, ): Promise => { const rawXML = await getRawXMLSubstackFeed(feedUrl, proxy); + if (!isValidSubstackFeed(rawXML)) + throw new Error("Error occurred fetching Feed from Substack"); if (!callback) return rawXML; - await parseXML(rawXML, callback); + await parseXML(rawXML.contents, callback); }; export const getFeedByLink = ( rawFeed: unknown, diff --git a/lib/typeguards.ts b/lib/typeguards.ts index d08bcf6..67b0fa4 100644 --- a/lib/typeguards.ts +++ b/lib/typeguards.ts @@ -160,3 +160,7 @@ export const isEnclosure = (data: any): data is Enclosure => { typeof data.$.type === "string" ); }; + +export const isValidSubstackFeed = (data: any): boolean => { + return data && data.contents && data.status.http_code == 200; +}; diff --git a/package-lock.json b/package-lock.json index 771790a..e160897 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,418 +7,553 @@ "": { "name": "substack-feed-api", "version": "1.0.5", + "dependencies": { + "ts-node": "^10.9.2", + "tsconfig-paths": "^4.2.0" + }, "devDependencies": { "@eslint/js": "^9.5.0", "@types/eslint__js": "^8.42.3", + "@types/jest": "^29.5.14", "@types/xml2js": "^0.4.14", "eslint": "^8.57.0", "events": "^3.3.0", + "jest": "^29.7.0", "prettier": "3.3.2", + "ts-jest": "^29.2.5", "typescript": "^5.4.5", "typescript-eslint": "^7.13.1", "vite": "6.0.9", "xml2js": "^0.6.2" } }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", - "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", - "cpu": [ - "ppc64" - ], + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, - "optional": true, - "os": [ - "aix" - ], + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, "engines": { - "node": ">=18" + "node": ">=6.0.0" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", - "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", - "cpu": [ - "arm" - ], + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/android-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", - "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/compat-data": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz", + "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==", "dev": true, - "optional": true, - "os": [ - "android" - ], "engines": { - "node": ">=18" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/android-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", - "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", - "cpu": [ - "x64" - ], + "node_modules/@babel/core": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.7.tgz", + "integrity": "sha512-SRijHmF0PSPgLIBYlWnG0hyeJLwXE2CgpsXaMOrtt2yp9/86ALw6oUlj9KYuZ0JN07T4eBMVIW4li/9S1j2BGA==", "dev": true, - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.5", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.7", + "@babel/parser": "^7.26.7", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.26.7", + "@babel/types": "^7.26.7", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", - "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/core/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, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", - "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", - "cpu": [ - "x64" - ], + "node_modules/@babel/generator": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz", + "integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "@babel/parser": "^7.26.5", + "@babel/types": "^7.26.5", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", - "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/helper-compilation-targets": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", + "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], + "dependencies": { + "@babel/compat-data": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", - "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", - "cpu": [ - "x64" - ], + "node_modules/@babel/helper-compilation-targets/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, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@esbuild/linux-arm": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", - "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", - "cpu": [ - "arm" - ], + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", - "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", - "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", - "cpu": [ - "ia32" - ], + "node_modules/@babel/helper-plugin-utils": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", "dev": true, - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", - "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", - "cpu": [ - "loong64" - ], + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", - "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", - "cpu": [ - "mips64el" - ], + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true, - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", - "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", - "cpu": [ - "ppc64" - ], + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", "dev": true, - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", - "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", - "cpu": [ - "riscv64" - ], + "node_modules/@babel/helpers": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.7.tgz", + "integrity": "sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.7" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", - "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", - "cpu": [ - "s390x" - ], + "node_modules/@babel/parser": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.7.tgz", + "integrity": "sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@babel/types": "^7.26.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, "engines": { - "node": ">=18" + "node": ">=6.0.0" } }, - "node_modules/@esbuild/linux-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", - "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", - "cpu": [ - "x64" - ], + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", - "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", - "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", - "cpu": [ - "x64" - ], + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", - "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, - "optional": true, - "os": [ - "openbsd" - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", - "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", - "cpu": [ - "x64" - ], + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", "dev": true, - "optional": true, - "os": [ - "openbsd" - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", - "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", - "cpu": [ - "x64" - ], + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", - "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", - "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", - "cpu": [ - "ia32" - ], + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/win32-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", - "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", - "cpu": [ - "x64" - ], + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.7.tgz", + "integrity": "sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.5", + "@babel/parser": "^7.26.7", + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.7", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.7.tgz", + "integrity": "sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", + "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.1", @@ -514,287 +649,570 @@ "deprecated": "Use @eslint/object-schema instead", "dev": true }, - "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==", + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" }, "engines": { - "node": ">= 8" + "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==", + "node_modules/@istanbuljs/load-nyc-config/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, - "engines": { - "node": ">= 8" + "dependencies": { + "sprintf-js": "~1.0.2" } }, - "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==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.4.tgz", - "integrity": "sha512-gGi5adZWvjtJU7Axs//CWaQbQd/vGy8KGcnEaCWiyCqxWYDxwIlAHFuSe6Guoxtd0SRvSfVTDMPd5H+4KE2kKA==", - "cpu": [ - "arm" - ], + "node_modules/@istanbuljs/load-nyc-config/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, - "optional": true, - "os": [ - "android" - ] + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.4.tgz", - "integrity": "sha512-1aRlh1gqtF7vNPMnlf1vJKk72Yshw5zknR/ZAVh7zycRAGF2XBMVDAHmFQz/Zws5k++nux3LOq/Ejj1WrDR6xg==", - "cpu": [ - "arm64" - ], + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "optional": true, - "os": [ - "android" - ] + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.4.tgz", - "integrity": "sha512-drHl+4qhFj+PV/jrQ78p9ch6A0MfNVZScl/nBps5a7u01aGf/GuBRrHnRegA9bP222CBDfjYbFdjkIJ/FurvSQ==", - "cpu": [ - "arm64" - ], + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, - "optional": true, - "os": [ - "darwin" - ] + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.4.tgz", - "integrity": "sha512-hQqq/8QALU6t1+fbNmm6dwYsa0PDD4L5r3TpHx9dNl+aSEMnIksHZkSO3AVH+hBMvZhpumIGrTFj8XCOGuIXjw==", - "cpu": [ - "x64" - ], + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "optional": true, - "os": [ - "darwin" - ] + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.4.tgz", - "integrity": "sha512-/L0LixBmbefkec1JTeAQJP0ETzGjFtNml2gpQXA8rpLo7Md+iXQzo9kwEgzyat5Q+OG/C//2B9Fx52UxsOXbzw==", - "cpu": [ - "arm64" - ], + "node_modules/@istanbuljs/load-nyc-config/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, - "optional": true, - "os": [ - "freebsd" - ] + "engines": { + "node": ">=8" + } }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.4.tgz", - "integrity": "sha512-6Rk3PLRK+b8L/M6m/x6Mfj60LhAUcLJ34oPaxufA+CfqkUrDoUPQYFdRrhqyOvtOKXLJZJwxlOLbQjNYQcRQfw==", - "cpu": [ - "x64" - ], + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, - "optional": true, - "os": [ - "freebsd" - ] + "engines": { + "node": ">=8" + } }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.4.tgz", - "integrity": "sha512-kmT3x0IPRuXY/tNoABp2nDvI9EvdiS2JZsd4I9yOcLCCViKsP0gB38mVHOhluzx+SSVnM1KNn9k6osyXZhLoCA==", - "cpu": [ - "arm" - ], + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.4.tgz", - "integrity": "sha512-3iSA9tx+4PZcJH/Wnwsvx/BY4qHpit/u2YoZoXugWVfc36/4mRkgGEoRbRV7nzNBSCOgbWMeuQ27IQWgJ7tRzw==", - "cpu": [ - "arm" - ], + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.4.tgz", - "integrity": "sha512-7CwSJW+sEhM9sESEk+pEREF2JL0BmyCro8UyTq0Kyh0nu1v0QPNY3yfLPFKChzVoUmaKj8zbdgBxUhBRR+xGxg==", - "cpu": [ - "arm64" - ], + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.4.tgz", - "integrity": "sha512-GZdafB41/4s12j8Ss2izofjeFXRAAM7sHCb+S4JsI9vaONX/zQ8cXd87B9MRU/igGAJkKvmFmJJBeeT9jJ5Cbw==", - "cpu": [ - "arm64" - ], + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "dev": true, - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.4.tgz", - "integrity": "sha512-uuphLuw1X6ur11675c2twC6YxbzyLSpWggvdawTUamlsoUv81aAXRMPBC1uvQllnBGls0Qt5Siw8reSIBnbdqQ==", - "cpu": [ - "loong64" - ], + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.4.tgz", - "integrity": "sha512-KvLEw1os2gSmD6k6QPCQMm2T9P2GYvsMZMRpMz78QpSoEevHbV/KOUbI/46/JRalhtSAYZBYLAnT9YE4i/l4vg==", - "cpu": [ - "ppc64" - ], + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.4.tgz", - "integrity": "sha512-wcpCLHGM9yv+3Dql/CI4zrY2mpQ4WFergD3c9cpRowltEh5I84pRT/EuHZsG0In4eBPPYthXnuR++HrFkeqwkA==", - "cpu": [ - "riscv64" - ], + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.4.tgz", - "integrity": "sha512-nLbfQp2lbJYU8obhRQusXKbuiqm4jSJteLwfjnunDT5ugBKdxqw1X9KWwk8xp1OMC6P5d0WbzxzhWoznuVK6XA==", - "cpu": [ - "s390x" - ], + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.4.tgz", - "integrity": "sha512-JGejzEfVzqc/XNiCKZj14eb6s5w8DdWlnQ5tWUbs99kkdvfq9btxxVX97AaxiUX7xJTKFA0LwoS0KU8C2faZRg==", - "cpu": [ - "x64" - ], + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.4.tgz", - "integrity": "sha512-/iFIbhzeyZZy49ozAWJ1ZR2KW6ZdYUbQXLT4O5n1cRZRoTpwExnHLjlurDXXPKEGxiAg0ujaR9JDYKljpr2fDg==", - "cpu": [ - "x64" - ], + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "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, + "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, + "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, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { + "node_modules/@rollup/rollup-darwin-arm64": { "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.4.tgz", - "integrity": "sha512-qORc3UzoD5UUTneiP2Afg5n5Ti1GAW9Gp5vHPxzvAFFA3FBaum9WqGvYXGf+c7beFdOKNos31/41PRMUwh1tpA==", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.4.tgz", + "integrity": "sha512-drHl+4qhFj+PV/jrQ78p9ch6A0MfNVZScl/nBps5a7u01aGf/GuBRrHnRegA9bP222CBDfjYbFdjkIJ/FurvSQ==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ - "win32" + "darwin" ] }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.4.tgz", - "integrity": "sha512-5g7E2PHNK2uvoD5bASBD9aelm44nf1w4I5FEI7MPHLWcCSrR8JragXZWgKPXk5i2FU3JFfa6CGZLw2RrGBHs2Q==", - "cpu": [ - "ia32" - ], + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, - "optional": true, - "os": [ - "win32" - ] + "dependencies": { + "type-detect": "4.0.8" + } }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.4.tgz", - "integrity": "sha512-p0scwGkR4kZ242xLPBuhSckrJ734frz6v9xZzD+kHVYRAkSUmdSLCIJRfql6H5//aF8Q10K+i7q8DiPfZp0b7A==", - "cpu": [ - "x64" - ], + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, - "optional": true, - "os": [ - "win32" - ] + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } }, "node_modules/@types/eslint": { "version": "9.6.1", @@ -821,6 +1239,49 @@ "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", "dev": true }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", + "dev": true, + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -831,11 +1292,16 @@ "version": "22.13.1", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.1.tgz", "integrity": "sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==", - "dev": true, "dependencies": { "undici-types": "~6.20.0" } }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true + }, "node_modules/@types/xml2js": { "version": "0.4.14", "resolved": "https://registry.npmjs.org/@types/xml2js/-/xml2js-0.4.14.tgz", @@ -845,6 +1311,21 @@ "@types/node": "*" } }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "7.18.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", @@ -1064,7 +1545,6 @@ "version": "8.14.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -1081,6 +1561,17 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -1097,6 +1588,33 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -1121,7 +1639,25 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/argparse": { + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + }, + "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", @@ -1136,6 +1672,131 @@ "node": ">=8" } }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/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, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", + "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1164,6 +1825,65 @@ "node": ">=8" } }, + "node_modules/browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -1173,6 +1893,35 @@ "node": ">=6" } }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001698", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001698.tgz", + "integrity": "sha512-xJ3km2oiG/MbNU8G6zIq6XRZ6HtAOVXsbOrP/blGazi52kc5Yy7b6sDA5O+FbROzRrV7BSTllLHuNvmawYUJjw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1189,6 +1938,66 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "dev": true + }, + "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, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -1213,6 +2022,38 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -1244,12 +2085,61 @@ } } }, + "node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -1274,6 +2164,54 @@ "node": ">=6.0.0" } }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.96", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.96.tgz", + "integrity": "sha512-8AJUW6dh75Fm/ny8+kZKJzI1pgoE8bKLZlzDU2W1ENd+DXKJrx7I7l9hb8UWR4ojlnb5OlixMt00QWiYJoVw1w==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "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 + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, "node_modules/esbuild": { "version": "0.24.2", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz", @@ -1314,6 +2252,15 @@ "@esbuild/win32-x64": "0.24.2" } }, + "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, + "engines": { + "node": ">=6" + } + }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -1416,389 +2363,1285 @@ "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "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, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "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.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/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, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.0.tgz", + "integrity": "sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "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, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", + "dev": true + }, + "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 + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "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, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "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, + "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": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "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 + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "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, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "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, + "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 + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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, + "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, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, "dependencies": { - "estraverse": "^5.1.0" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": ">=0.10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, "dependencies": { - "estraverse": "^5.2.0" + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" }, "engines": { - "node": ">=4.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, "engines": { - "node": ">=4.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, "engines": { - "node": ">=0.8.x" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, "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.8" + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">=8.6.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/fast-glob/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==", + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, "dependencies": { - "is-glob": "^4.0.1" + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": ">= 6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.0.tgz", - "integrity": "sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==", + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, - "dependencies": { - "reusify": "^1.0.4" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, "dependencies": { - "flat-cache": "^3.0.4" + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "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==", + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, "dependencies": { - "to-regex-range": "^5.0.1" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/flatted": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", - "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", - "dev": true - }, - "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 - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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", + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, - "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": "*" + "node": ">=6" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } } }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, "engines": { - "node": ">=10.13.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, "dependencies": { - "type-fest": "^0.20.2" + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, "engines": { - "node": ">= 4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } - }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, "engines": { - "node": ">=0.8.19" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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.", + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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 - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "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==", + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, "dependencies": { - "is-extglob": "^2.1.1" + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.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==", + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, "engines": { - "node": ">=0.12.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, "node_modules/js-yaml": { @@ -1813,12 +3656,30 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -1831,6 +3692,17 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -1840,6 +3712,24 @@ "json-buffer": "3.0.1" } }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -1853,6 +3743,12 @@ "node": ">= 0.8.0" } }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -1868,12 +3764,62 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -1896,6 +3842,15 @@ "node": ">=8.6" } }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -1908,6 +3863,14 @@ "node": "*" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -1938,6 +3901,39 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -1947,6 +3943,21 @@ "wrappy": "1" } }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -1994,6 +4005,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -2006,6 +4026,24 @@ "node": ">=6" } }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -2033,6 +4071,12 @@ "node": ">=8" } }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -2060,6 +4104,79 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/postcss": { "version": "8.5.1", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz", @@ -2102,14 +4219,53 @@ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "node": ">= 6" } }, "node_modules/punycode": { @@ -2121,6 +4277,22 @@ "node": ">=6" } }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -2141,6 +4313,62 @@ } ] }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/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, + "engines": { + "node": ">=8" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -2150,6 +4378,15 @@ "node": ">=4" } }, + "node_modules/resolve.exports": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -2276,6 +4513,18 @@ "node": ">=8" } }, + "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 + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -2285,6 +4534,15 @@ "node": ">=8" } }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -2294,6 +4552,70 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "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 + }, + "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, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "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, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -2306,6 +4628,24 @@ "node": ">=8" } }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -2330,12 +4670,44 @@ "node": ">=8" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -2360,6 +4732,117 @@ "typescript": ">=4.2.0" } }, + "node_modules/ts-jest": { + "version": "29.2.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.5.tgz", + "integrity": "sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==", + "dev": true, + "dependencies": { + "bs-logger": "^0.2.6", + "ejs": "^3.1.10", + "fast-json-stable-stringify": "^2.1.0", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.6.3", + "yargs-parser": "^21.1.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/transform": "^29.0.0", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/transform": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "engines": { + "node": ">=4" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -2372,6 +4855,15 @@ "node": ">= 0.8.0" } }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -2388,7 +4880,6 @@ "version": "5.7.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", - "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -2426,8 +4917,37 @@ "node_modules/undici-types": { "version": "6.20.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", - "dev": true + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==" + }, + "node_modules/update-browserslist-db": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", + "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } }, "node_modules/uri-js": { "version": "4.4.1", @@ -2438,6 +4958,25 @@ "punycode": "^2.1.0" } }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, "node_modules/vite": { "version": "6.0.9", "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.9.tgz", @@ -2509,6 +5048,15 @@ } } }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -2533,12 +5081,42 @@ "node": ">=0.10.0" } }, + "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, + "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/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 }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/xml2js": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", @@ -2561,6 +5139,56 @@ "node": ">=4.0" } }, + "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, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "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, + "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, + "engines": { + "node": ">=12" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "engines": { + "node": ">=6" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 3aeb9bf..29e75a6 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "build": "tsc && vite build", "lint": "eslint **/*.ts", "format": "prettier --write **/*.ts", + "test": "jest --runInBand", "pack:test": "npm run build && npm pack", "version:patch": "npm version patch", "version:minor": "npm version minor", @@ -27,13 +28,20 @@ "devDependencies": { "@eslint/js": "^9.5.0", "@types/eslint__js": "^8.42.3", + "@types/jest": "^29.5.14", "@types/xml2js": "^0.4.14", "eslint": "^8.57.0", "events": "^3.3.0", + "jest": "^29.7.0", "prettier": "3.3.2", + "ts-jest": "^29.2.5", "typescript": "^5.4.5", "typescript-eslint": "^7.13.1", "vite": "6.0.9", "xml2js": "^0.6.2" + }, + "dependencies": { + "ts-node": "^10.9.2", + "tsconfig-paths": "^4.2.0" } } From d48a505bfee5542fb711b8b164ba00322d2a5981 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Fri, 7 Feb 2025 23:23:43 +0000 Subject: [PATCH 08/38] 1.0.6 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index e160897..055e33c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "substack-feed-api", - "version": "1.0.5", + "version": "1.0.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "substack-feed-api", - "version": "1.0.5", + "version": "1.0.6", "dependencies": { "ts-node": "^10.9.2", "tsconfig-paths": "^4.2.0" diff --git a/package.json b/package.json index 29e75a6..833d47b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "substack-feed-api", - "version": "1.0.5", + "version": "1.0.6", "type": "module", "files": [ "dist", From 77539839418747b42d40ff343e0249910eb4ed9f Mon Sep 17 00:00:00 2001 From: Rohit Khanduri Date: Sat, 8 Feb 2025 00:26:28 +0100 Subject: [PATCH 09/38] fix: updated parsing for non browser calls --- lib/main.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/main.ts b/lib/main.ts index 72151ee..366704d 100644 --- a/lib/main.ts +++ b/lib/main.ts @@ -12,7 +12,7 @@ const getRawXMLSubstackFeed = async (feedUrl: string, proxy = false) => { ? `${CORS_PROXY}${encodeURIComponent(feedUrl)}` : feedUrl; const promise = await fetch(path); - if (promise.ok) return promise.json(); + if (promise.ok) return proxy ? promise.json() : promise.text(); } catch (e) { throw new Error("Error occurred fetching Feed from Substack"); } From 0d872ee6989818256b4928dde3d1f79ca548a837 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Fri, 7 Feb 2025 23:26:48 +0000 Subject: [PATCH 10/38] 1.0.7 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 055e33c..104e0d3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "substack-feed-api", - "version": "1.0.6", + "version": "1.0.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "substack-feed-api", - "version": "1.0.6", + "version": "1.0.7", "dependencies": { "ts-node": "^10.9.2", "tsconfig-paths": "^4.2.0" diff --git a/package.json b/package.json index 833d47b..c8348ca 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "substack-feed-api", - "version": "1.0.6", + "version": "1.0.7", "type": "module", "files": [ "dist", From 648e8cd8a57e992e0ae1e7e1bde06d788b0dcb63 Mon Sep 17 00:00:00 2001 From: Rohit Khanduri Date: Sat, 8 Feb 2025 00:56:57 +0100 Subject: [PATCH 11/38] fix: determine client or server call --- lib/__tests__/app.test.ts | 11 +---------- lib/main.ts | 18 ++++++++++++------ src/main.ts | 2 +- 3 files changed, 14 insertions(+), 17 deletions(-) diff --git a/lib/__tests__/app.test.ts b/lib/__tests__/app.test.ts index b3b8d31..bfa6a85 100644 --- a/lib/__tests__/app.test.ts +++ b/lib/__tests__/app.test.ts @@ -1,15 +1,6 @@ -import { getFeedByLink, getPosts, getSubstackFeed } from "../main"; +import { getFeedByLink, getPosts } from "../main"; import { RawFeedChannel } from "../types"; -describe("getSubstackFeed", () => { - it("should throw an error for invalid Substack feed", async () => { - const invalidFeedUrl = "https://example.com/invalid-feed"; - await expect(getSubstackFeed(invalidFeedUrl)).rejects.toThrow( - "Error occurred fetching Feed from Substack", - ); - }); -}); - describe("getFeedByLink", () => { it("should throw an error for incorrect feed format", () => { const invalidFeed = { invalid: "format" }; diff --git a/lib/main.ts b/lib/main.ts index 366704d..4b86dd7 100644 --- a/lib/main.ts +++ b/lib/main.ts @@ -3,16 +3,17 @@ import { isRawFeed, isRawFeedChannel, isValidSubstackFeed } from "./typeguards"; import { RawFeedChannel, RawItem, SubstackItem } from "./types"; const CORS_PROXY = "https://api.allorigins.win/get?url="; +const isBrowser = typeof document !== "undefined"; // Internal API -const getRawXMLSubstackFeed = async (feedUrl: string, proxy = false) => { +const getRawXMLSubstackFeed = async (feedUrl: string) => { try { - const path = proxy + const path = isBrowser ? `${CORS_PROXY}${encodeURIComponent(feedUrl)}` : feedUrl; const promise = await fetch(path); - if (promise.ok) return proxy ? promise.json() : promise.text(); + if (promise.ok) return isBrowser ? promise.json() : promise.text(); } catch (e) { throw new Error("Error occurred fetching Feed from Substack"); } @@ -39,14 +40,19 @@ const transformRawItem = (item: RawItem): SubstackItem => { export const getSubstackFeed = async ( feedUrl: string, - proxy = false, /* eslint-disable @typescript-eslint/no-explicit-any */ callback?: (err: Error | null, result: unknown) => void, ): Promise => { - const rawXML = await getRawXMLSubstackFeed(feedUrl, proxy); + const rawXML = await getRawXMLSubstackFeed(feedUrl); + if (!callback) return rawXML; + // NOTE: server side call + if (!isBrowser) { + await parseXML(rawXML, callback); + return; + } + // NOTE: client side call if (!isValidSubstackFeed(rawXML)) throw new Error("Error occurred fetching Feed from Substack"); - if (!callback) return rawXML; await parseXML(rawXML.contents, callback); }; export const getFeedByLink = ( diff --git a/src/main.ts b/src/main.ts index 1f21c6b..d3ddcf3 100644 --- a/src/main.ts +++ b/src/main.ts @@ -17,7 +17,7 @@ document.querySelector("#app")!.innerHTML = ` `; const SUBSTACK_FEED_URL = "https://rohitkhanduri.substack.com"; -getSubstackFeed(`${SUBSTACK_FEED_URL}/feed`, true, (err, rawRes) => { +getSubstackFeed(`${SUBSTACK_FEED_URL}/feed`, (err, rawRes) => { if (err) throw err; const feedChannel = getFeedByLink(rawRes, SUBSTACK_FEED_URL); const posts = getPosts(feedChannel); From 7211c50c4fdcd4988f1f26c4f29d6867da57e5c6 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Fri, 7 Feb 2025 23:57:15 +0000 Subject: [PATCH 12/38] 1.0.8 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 104e0d3..9cdd47a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "substack-feed-api", - "version": "1.0.7", + "version": "1.0.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "substack-feed-api", - "version": "1.0.7", + "version": "1.0.8", "dependencies": { "ts-node": "^10.9.2", "tsconfig-paths": "^4.2.0" diff --git a/package.json b/package.json index c8348ca..acc1861 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "substack-feed-api", - "version": "1.0.7", + "version": "1.0.8", "type": "module", "files": [ "dist", From 1f06c498859268d3174aac031911bcad6e54d9cb Mon Sep 17 00:00:00 2001 From: Rohit Khanduri Date: Sat, 8 Feb 2025 01:01:41 +0100 Subject: [PATCH 13/38] chore: fixed error in package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0ca7ee4..acc1861 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "substack-feed-api", - "version": "1.0.8" + "version": "1.0.8", "type": "module", "files": [ "dist", From e9e18af8a7839ce78aaa9c19664206751705ba5d Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Sat, 8 Feb 2025 00:01:57 +0000 Subject: [PATCH 14/38] 1.0.9 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9cdd47a..5f6a5ac 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "substack-feed-api", - "version": "1.0.8", + "version": "1.0.9", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "substack-feed-api", - "version": "1.0.8", + "version": "1.0.9", "dependencies": { "ts-node": "^10.9.2", "tsconfig-paths": "^4.2.0" diff --git a/package.json b/package.json index acc1861..75bff48 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "substack-feed-api", - "version": "1.0.8", + "version": "1.0.9", "type": "module", "files": [ "dist", From bed654961f18071abc953308eb8ebc744167548d Mon Sep 17 00:00:00 2001 From: Rohit Khanduri Date: Sat, 8 Feb 2025 01:06:45 +0100 Subject: [PATCH 15/38] chore: fixed build issues --- package-lock.json | 770 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 709 insertions(+), 61 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5f6a5ac..d468478 100644 --- a/package-lock.json +++ b/package-lock.json @@ -93,15 +93,6 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/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, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/generator": { "version": "7.26.5", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz", @@ -134,15 +125,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-compilation-targets/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, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/helper-module-imports": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", @@ -539,6 +521,70 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", + "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", + "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", + "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", + "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/darwin-arm64": { "version": "0.24.2", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", @@ -555,6 +601,326 @@ "node": ">=18" } }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", + "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", + "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", + "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", + "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", + "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", + "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", + "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", + "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", + "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", + "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", + "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", + "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", + "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", + "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", + "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", + "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", + "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", + "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", + "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", + "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", @@ -606,9 +972,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.19.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.19.0.tgz", - "integrity": "sha512-rbq9/g38qjfqFLOVPvwjIvFFdNziEC5S65jmjPw5r6A//QH+W91akh9irMwjDN8zKUTak6W9EsAv4m/7Wnw0UQ==", + "version": "9.20.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.20.0.tgz", + "integrity": "sha512-iZA07H9io9Wn836aVTytRaNqh00Sad+EamwOVJT12GTLw1VGMFV/4JaME+JjLtr9fiGaoWgYnS54wrfWsSs4oQ==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1116,10 +1482,36 @@ "node": ">= 8" } }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.6.tgz", + "integrity": "sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.6.tgz", + "integrity": "sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.4.tgz", - "integrity": "sha512-drHl+4qhFj+PV/jrQ78p9ch6A0MfNVZScl/nBps5a7u01aGf/GuBRrHnRegA9bP222CBDfjYbFdjkIJ/FurvSQ==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.6.tgz", + "integrity": "sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg==", "cpu": [ "arm64" ], @@ -1129,6 +1521,214 @@ "darwin" ] }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.6.tgz", + "integrity": "sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.6.tgz", + "integrity": "sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.6.tgz", + "integrity": "sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.6.tgz", + "integrity": "sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.6.tgz", + "integrity": "sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.6.tgz", + "integrity": "sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.6.tgz", + "integrity": "sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.6.tgz", + "integrity": "sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.6.tgz", + "integrity": "sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.6.tgz", + "integrity": "sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.6.tgz", + "integrity": "sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.6.tgz", + "integrity": "sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.6.tgz", + "integrity": "sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.6.tgz", + "integrity": "sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.6.tgz", + "integrity": "sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.6.tgz", + "integrity": "sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -1496,6 +2096,18 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@typescript-eslint/utils": { "version": "7.18.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", @@ -1731,15 +2343,6 @@ "node": ">=8" } }, - "node_modules/babel-plugin-istanbul/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, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/babel-plugin-jest-hoist": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", @@ -3024,6 +3627,18 @@ "node": ">=10" } }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/istanbul-lib-report": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", @@ -3543,6 +4158,18 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/jest-util": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", @@ -3800,6 +4427,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -4414,9 +5053,9 @@ } }, "node_modules/rollup": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.4.tgz", - "integrity": "sha512-spF66xoyD7rz3o08sHP7wogp1gZ6itSq22SGa/IZTcUDXDlOyrShwMwkVSB+BUxFRZZCUYqdb3KWDEOMVQZxuw==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.6.tgz", + "integrity": "sha512-wc2cBWqJgkU3Iz5oztRkQbfVkbxoz5EhnCGOrnJvnLnQ7O0WhQUYyv18qQI79O8L7DdHrrlJNeCHd4VGpnaXKQ==", "dev": true, "dependencies": { "@types/estree": "1.0.6" @@ -4429,25 +5068,25 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.34.4", - "@rollup/rollup-android-arm64": "4.34.4", - "@rollup/rollup-darwin-arm64": "4.34.4", - "@rollup/rollup-darwin-x64": "4.34.4", - "@rollup/rollup-freebsd-arm64": "4.34.4", - "@rollup/rollup-freebsd-x64": "4.34.4", - "@rollup/rollup-linux-arm-gnueabihf": "4.34.4", - "@rollup/rollup-linux-arm-musleabihf": "4.34.4", - "@rollup/rollup-linux-arm64-gnu": "4.34.4", - "@rollup/rollup-linux-arm64-musl": "4.34.4", - "@rollup/rollup-linux-loongarch64-gnu": "4.34.4", - "@rollup/rollup-linux-powerpc64le-gnu": "4.34.4", - "@rollup/rollup-linux-riscv64-gnu": "4.34.4", - "@rollup/rollup-linux-s390x-gnu": "4.34.4", - "@rollup/rollup-linux-x64-gnu": "4.34.4", - "@rollup/rollup-linux-x64-musl": "4.34.4", - "@rollup/rollup-win32-arm64-msvc": "4.34.4", - "@rollup/rollup-win32-ia32-msvc": "4.34.4", - "@rollup/rollup-win32-x64-msvc": "4.34.4", + "@rollup/rollup-android-arm-eabi": "4.34.6", + "@rollup/rollup-android-arm64": "4.34.6", + "@rollup/rollup-darwin-arm64": "4.34.6", + "@rollup/rollup-darwin-x64": "4.34.6", + "@rollup/rollup-freebsd-arm64": "4.34.6", + "@rollup/rollup-freebsd-x64": "4.34.6", + "@rollup/rollup-linux-arm-gnueabihf": "4.34.6", + "@rollup/rollup-linux-arm-musleabihf": "4.34.6", + "@rollup/rollup-linux-arm64-gnu": "4.34.6", + "@rollup/rollup-linux-arm64-musl": "4.34.6", + "@rollup/rollup-linux-loongarch64-gnu": "4.34.6", + "@rollup/rollup-linux-powerpc64le-gnu": "4.34.6", + "@rollup/rollup-linux-riscv64-gnu": "4.34.6", + "@rollup/rollup-linux-s390x-gnu": "4.34.6", + "@rollup/rollup-linux-x64-gnu": "4.34.6", + "@rollup/rollup-linux-x64-musl": "4.34.6", + "@rollup/rollup-win32-arm64-msvc": "4.34.6", + "@rollup/rollup-win32-ia32-msvc": "4.34.6", + "@rollup/rollup-win32-x64-msvc": "4.34.6", "fsevents": "~2.3.2" } }, @@ -4481,15 +5120,12 @@ "dev": true }, "node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" } }, "node_modules/shebang-command": { @@ -4780,6 +5416,18 @@ } } }, + "node_modules/ts-jest/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", From 00c062beaaf89bb2a101b5707465de089e978a75 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Sat, 8 Feb 2025 00:07:05 +0000 Subject: [PATCH 16/38] 1.0.10 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index d468478..30cf4d6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "substack-feed-api", - "version": "1.0.9", + "version": "1.0.10", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "substack-feed-api", - "version": "1.0.9", + "version": "1.0.10", "dependencies": { "ts-node": "^10.9.2", "tsconfig-paths": "^4.2.0" diff --git a/package.json b/package.json index 75bff48..d9383f4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "substack-feed-api", - "version": "1.0.9", + "version": "1.0.10", "type": "module", "files": [ "dist", From b92c550ed1e6535b3032382756e8ff7c1aebb45b Mon Sep 17 00:00:00 2001 From: Rohit Khanduri Date: Sat, 8 Feb 2025 20:59:08 +0100 Subject: [PATCH 17/38] fix: fixed issues with client and server fetching --- lib/__tests__/app.test.ts | 145 +-------------------- lib/main.ts | 11 +- package-lock.json | 240 +++++++++++++++++++++++++++++++++++ package.json | 2 + substack-feed-api-1.0.10.tgz | Bin 0 -> 60959 bytes 5 files changed, 251 insertions(+), 147 deletions(-) create mode 100644 substack-feed-api-1.0.10.tgz diff --git a/lib/__tests__/app.test.ts b/lib/__tests__/app.test.ts index bfa6a85..4709e3d 100644 --- a/lib/__tests__/app.test.ts +++ b/lib/__tests__/app.test.ts @@ -1,142 +1,3 @@ -import { getFeedByLink, getPosts } from "../main"; -import { RawFeedChannel } from "../types"; - -describe("getFeedByLink", () => { - it("should throw an error for incorrect feed format", () => { - const invalidFeed = { invalid: "format" }; - expect(() => getFeedByLink(invalidFeed, "https://example.com")).toThrow( - "Feed is not in the correct format", - ); - }); -}); - -describe("getPosts", () => { - const mockChannels: RawFeedChannel[] = [ - { - title: ["Post 1"], - description: ["Description 1"], - link: ["https://example.com/post1"], - image: [ - { - url: ["https://example.com/image1"], - title: ["Image 1"], - link: ["https://example.com/image1"], - }, - ], - generator: ["Substack"], - lastBuildDate: ["2023-01-01"], - "atom:link": [ - { - $: { - href: "https://example.com/feed", - rel: "self", - type: "application/rss+xml", - }, - }, - ], - copyright: ["© 2023"], - language: ["en"], - webMaster: ["some"], - "itunes:owner": [ - { "itunes:email": ["some@some.com"], "itunes:name": ["Some Name"] }, - ], - "itunes:author": ["Some Author"], - "googleplay:owner": ["Some Owner"], - "googleplay:email": ["some@some.com"], - "googleplay:author": ["Some Author"], - item: [ - { - title: ["Post 1"], - description: ["Description 1"], - link: ["https://example.com/post1"], - guid: [ - { _: "https://example.com/post1", $: { isPermaLink: "true" } }, - ], - "dc:creator": ["Some Author"], - pubDate: ["2023-01-01"], - enclosure: [ - { - $: { - url: "https://example.com/image1", - length: "123", - type: "image/jpeg", - }, - }, - ], - "content:encoded": ["

Content 1

"], - }, - ], - }, - { - title: ["Post 2"], - description: ["Description 2"], - link: ["https://example.com/post1"], - image: [ - { - url: ["https://example.com/image1"], - title: ["Image 1"], - link: ["https://example.com/image1"], - }, - ], - generator: ["Substack"], - lastBuildDate: ["2023-01-01"], - "atom:link": [ - { - $: { - href: "https://example.com/feed", - rel: "self", - type: "application/rss+xml", - }, - }, - ], - copyright: ["© 2023"], - language: ["en"], - webMaster: ["some"], - "itunes:owner": [ - { "itunes:email": ["some@some.com"], "itunes:name": ["Some Name"] }, - ], - "itunes:author": ["Some Author"], - "googleplay:owner": ["Some Owner"], - "googleplay:email": ["some@some.com"], - "googleplay:author": ["Some Author"], - item: [ - { - title: ["Post 1"], - description: ["Description 1"], - link: ["https://example.com/post1"], - guid: [ - { _: "https://example.com/post1", $: { isPermaLink: "true" } }, - ], - "dc:creator": ["Some Author"], - pubDate: ["2023-01-01"], - enclosure: [ - { - $: { - url: "https://example.com/image1", - length: "123", - type: "image/jpeg", - }, - }, - ], - "content:encoded": ["

Content 1

"], - }, - ], - }, - ]; - - it("should transform raw items to SubstackItems", () => { - const result = getPosts(mockChannels); - expect(result).toHaveLength(1); - expect(result[0]).toEqual({ - title: "Post 1", - description: "Description 1", - link: "https://example.com/post1", - pubDate: "2023-01-01", - content: "

Content 1

", - }); - }); - - it("should handle empty channels array", () => { - expect(() => getPosts([])).toThrow(); - }); -}); +import fetchMock from "fetch-mock-jest"; +// TODO: Add tests +fetchMock.sandbox(); diff --git a/lib/main.ts b/lib/main.ts index 4b86dd7..34b2b72 100644 --- a/lib/main.ts +++ b/lib/main.ts @@ -13,6 +13,7 @@ const getRawXMLSubstackFeed = async (feedUrl: string) => { ? `${CORS_PROXY}${encodeURIComponent(feedUrl)}` : feedUrl; const promise = await fetch(path); + console.log(`isBrowser - ${isBrowser}, path - ${path}`); if (promise.ok) return isBrowser ? promise.json() : promise.text(); } catch (e) { throw new Error("Error occurred fetching Feed from Substack"); @@ -21,8 +22,9 @@ const getRawXMLSubstackFeed = async (feedUrl: string) => { const parseXML = async ( xml = "", /* eslint-disable @typescript-eslint/no-explicit-any */ - callback: (err: Error | null, result: any) => void, + callback?: (err: Error | null, result: any) => void, ) => { + if (!callback) return parser.parseStringPromise(xml); parser.parseString(xml, callback); }; // Utils @@ -42,13 +44,12 @@ export const getSubstackFeed = async ( feedUrl: string, /* eslint-disable @typescript-eslint/no-explicit-any */ callback?: (err: Error | null, result: unknown) => void, -): Promise => { +): Promise => { const rawXML = await getRawXMLSubstackFeed(feedUrl); - if (!callback) return rawXML; + console.log(`rawXML - ${rawXML}`); // NOTE: server side call if (!isBrowser) { - await parseXML(rawXML, callback); - return; + return parseXML(rawXML, callback); } // NOTE: client side call if (!isValidSubstackFeed(rawXML)) diff --git a/package-lock.json b/package-lock.json index 30cf4d6..c158e99 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "substack-feed-api", "version": "1.0.10", "dependencies": { + "node-fetch": "^3.3.2", "ts-node": "^10.9.2", "tsconfig-paths": "^4.2.0" }, @@ -18,6 +19,7 @@ "@types/xml2js": "^0.4.14", "eslint": "^8.57.0", "events": "^3.3.0", + "fetch-mock-jest": "^1.5.1", "jest": "^29.7.0", "prettier": "3.3.2", "ts-jest": "^29.2.5", @@ -441,6 +443,18 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/runtime": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.7.tgz", + "integrity": "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/template": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", @@ -2631,6 +2645,17 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, + "node_modules/core-js": { + "version": "3.40.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.40.0.tgz", + "integrity": "sha512-7vsMc/Lty6AGnn7uFpYT56QesI5D2Y/UkgKounk87OP9Z2H9Z8kj6jzcSGAxFmUtDOS0ntK6lbQz+Nsa0Jj6mQ==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, "node_modules/create-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", @@ -2671,6 +2696,14 @@ "node": ">= 8" } }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "engines": { + "node": ">= 12" + } + }, "node_modules/debug": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", @@ -3162,6 +3195,86 @@ "bser": "2.1.1" } }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/fetch-mock": { + "version": "9.11.0", + "resolved": "https://registry.npmjs.org/fetch-mock/-/fetch-mock-9.11.0.tgz", + "integrity": "sha512-PG1XUv+x7iag5p/iNHD4/jdpxL9FtVSqRMUQhPab4hVDt80T1MH5ehzVrL2IdXO9Q2iBggArFvPqjUbHFuI58Q==", + "dev": true, + "dependencies": { + "@babel/core": "^7.0.0", + "@babel/runtime": "^7.0.0", + "core-js": "^3.0.0", + "debug": "^4.1.1", + "glob-to-regexp": "^0.4.0", + "is-subset": "^0.1.1", + "lodash.isequal": "^4.5.0", + "path-to-regexp": "^2.2.1", + "querystring": "^0.2.0", + "whatwg-url": "^6.5.0" + }, + "engines": { + "node": ">=4.0.0" + }, + "funding": { + "type": "charity", + "url": "https://www.justgiving.com/refugee-support-europe" + }, + "peerDependencies": { + "node-fetch": "*" + }, + "peerDependenciesMeta": { + "node-fetch": { + "optional": true + } + } + }, + "node_modules/fetch-mock-jest": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/fetch-mock-jest/-/fetch-mock-jest-1.5.1.tgz", + "integrity": "sha512-+utwzP8C+Pax1GSka3nFXILWMY3Er2L+s090FOgqVNrNCPp0fDqgXnAHAJf12PLHi0z4PhcTaZNTz8e7K3fjqQ==", + "deprecated": "Use https://www.npmjs.com/package/@fetch-mock/jest instead. The underlying version of fetch-mock will also need upgrading: see https://www.wheresrhys.co.uk/fetch-mock/docs/Usage/upgrade-guide", + "dev": true, + "dependencies": { + "fetch-mock": "^9.11.0" + }, + "engines": { + "node": ">=8.0.0" + }, + "funding": { + "type": "charity", + "url": "https://www.justgiving.com/refugee-support-europe" + }, + "peerDependencies": { + "node-fetch": "*" + }, + "peerDependenciesMeta": { + "node-fetch": { + "optional": true + } + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -3252,6 +3365,17 @@ "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", "dev": true }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3353,6 +3477,12 @@ "node": ">=10.13.0" } }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, "node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", @@ -3596,6 +3726,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-subset": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", + "integrity": "sha512-6Ybun0IkarhmEqxXCNw/C0bna6Zb/TkfUX9UbwJtK6ObwAVCxmAP308WWTHviM/zAqXk05cdhYsUsZeGQh99iw==", + "dev": true + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -4391,6 +4527,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "dev": true + }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -4403,6 +4546,12 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "dev": true + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -4540,6 +4689,41 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -4716,6 +4900,12 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "node_modules/path-to-regexp": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.4.0.tgz", + "integrity": "sha512-G6zHoVqC6GGTQkZwF4lkuEyMbVOjoBKAEybQUypI1WTkqinCOrq2x6U2+phkJ1XsEMTy4LjtwPI7HW+NVrRR2w==", + "dev": true + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -4932,6 +5122,16 @@ } ] }, + "node_modules/querystring": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", + "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -4958,6 +5158,12 @@ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -5356,6 +5562,15 @@ "node": ">=8.0" } }, + "node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, "node_modules/ts-api-utils": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", @@ -5705,6 +5920,31 @@ "makeerror": "1.0.12" } }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index d9383f4..f8cba72 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "@types/xml2js": "^0.4.14", "eslint": "^8.57.0", "events": "^3.3.0", + "fetch-mock-jest": "^1.5.1", "jest": "^29.7.0", "prettier": "3.3.2", "ts-jest": "^29.2.5", @@ -41,6 +42,7 @@ "xml2js": "^0.6.2" }, "dependencies": { + "node-fetch": "^3.3.2", "ts-node": "^10.9.2", "tsconfig-paths": "^4.2.0" } diff --git a/substack-feed-api-1.0.10.tgz b/substack-feed-api-1.0.10.tgz new file mode 100644 index 0000000000000000000000000000000000000000..f20b85ec1828edd9fd5e97cff0c2282b6af5e65e GIT binary patch literal 60959 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 literal 0 HcmV?d00001 From 95fa7b1fafa0553a2943e1739ea248156ea323d3 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Sat, 8 Feb 2025 19:59:27 +0000 Subject: [PATCH 18/38] 1.0.11 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index c158e99..54aba66 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "substack-feed-api", - "version": "1.0.10", + "version": "1.0.11", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "substack-feed-api", - "version": "1.0.10", + "version": "1.0.11", "dependencies": { "node-fetch": "^3.3.2", "ts-node": "^10.9.2", diff --git a/package.json b/package.json index f8cba72..8d270a9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "substack-feed-api", - "version": "1.0.10", + "version": "1.0.11", "type": "module", "files": [ "dist", From f2dffec0907d1b954fd36fb4e64b7f73c3c40e30 Mon Sep 17 00:00:00 2001 From: Rohit Khanduri Date: Sat, 8 Feb 2025 21:02:37 +0100 Subject: [PATCH 19/38] chore: removed .tgz --- substack-feed-api-1.0.10.tgz | Bin 60959 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 substack-feed-api-1.0.10.tgz diff --git a/substack-feed-api-1.0.10.tgz b/substack-feed-api-1.0.10.tgz deleted file mode 100644 index f20b85ec1828edd9fd5e97cff0c2282b6af5e65e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60959 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 From 715447129de5e59ffed0b1210ed40d6fa0d0c80c Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Sat, 8 Feb 2025 20:02:57 +0000 Subject: [PATCH 20/38] 1.0.12 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 54aba66..cd28284 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "substack-feed-api", - "version": "1.0.11", + "version": "1.0.12", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "substack-feed-api", - "version": "1.0.11", + "version": "1.0.12", "dependencies": { "node-fetch": "^3.3.2", "ts-node": "^10.9.2", diff --git a/package.json b/package.json index 8d270a9..6cca730 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "substack-feed-api", - "version": "1.0.11", + "version": "1.0.12", "type": "module", "files": [ "dist", From 7fa92be5a9b170215274229a1f2c7a1bbb26fa0a Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Sat, 8 Feb 2025 20:05:03 +0000 Subject: [PATCH 21/38] Pre-version bump changes --- package-lock.json | 208 ---------------------------------------------- 1 file changed, 208 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3e4950b..cd28284 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1743,214 +1743,6 @@ "win32" ] }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.6.tgz", - "integrity": "sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.6.tgz", - "integrity": "sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.6.tgz", - "integrity": "sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.6.tgz", - "integrity": "sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.6.tgz", - "integrity": "sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.6.tgz", - "integrity": "sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.6.tgz", - "integrity": "sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.6.tgz", - "integrity": "sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.6.tgz", - "integrity": "sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.6.tgz", - "integrity": "sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.6.tgz", - "integrity": "sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.6.tgz", - "integrity": "sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.6.tgz", - "integrity": "sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.6.tgz", - "integrity": "sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.6.tgz", - "integrity": "sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.6.tgz", - "integrity": "sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", From f6f262b329bbe5e2cba0067cdbfc44c400c47718 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Sat, 8 Feb 2025 20:05:03 +0000 Subject: [PATCH 22/38] 1.0.13 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index cd28284..8cb00d0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "substack-feed-api", - "version": "1.0.12", + "version": "1.0.13", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "substack-feed-api", - "version": "1.0.12", + "version": "1.0.13", "dependencies": { "node-fetch": "^3.3.2", "ts-node": "^10.9.2", diff --git a/package.json b/package.json index 6cca730..54817ae 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "substack-feed-api", - "version": "1.0.12", + "version": "1.0.13", "type": "module", "files": [ "dist", From c20c39ae343226110cf339facf92f00e1f812027 Mon Sep 17 00:00:00 2001 From: Rohit Khanduri Date: Sat, 8 Feb 2025 21:17:07 +0100 Subject: [PATCH 23/38] chore: cleanup removed logs --- lib/main.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/main.ts b/lib/main.ts index 34b2b72..f0922b3 100644 --- a/lib/main.ts +++ b/lib/main.ts @@ -13,7 +13,6 @@ const getRawXMLSubstackFeed = async (feedUrl: string) => { ? `${CORS_PROXY}${encodeURIComponent(feedUrl)}` : feedUrl; const promise = await fetch(path); - console.log(`isBrowser - ${isBrowser}, path - ${path}`); if (promise.ok) return isBrowser ? promise.json() : promise.text(); } catch (e) { throw new Error("Error occurred fetching Feed from Substack"); @@ -46,7 +45,6 @@ export const getSubstackFeed = async ( callback?: (err: Error | null, result: unknown) => void, ): Promise => { const rawXML = await getRawXMLSubstackFeed(feedUrl); - console.log(`rawXML - ${rawXML}`); // NOTE: server side call if (!isBrowser) { return parseXML(rawXML, callback); From b6644a3a5ba52803c3ef88c09761e8bfbf933e9b Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Sat, 8 Feb 2025 20:17:42 +0000 Subject: [PATCH 24/38] 1.0.14 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8cb00d0..74ab51b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "substack-feed-api", - "version": "1.0.13", + "version": "1.0.14", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "substack-feed-api", - "version": "1.0.13", + "version": "1.0.14", "dependencies": { "node-fetch": "^3.3.2", "ts-node": "^10.9.2", diff --git a/package.json b/package.json index 54817ae..4b56de6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "substack-feed-api", - "version": "1.0.13", + "version": "1.0.14", "type": "module", "files": [ "dist", From b52b327d59151f79cd4614cbbb1ecf30680906c4 Mon Sep 17 00:00:00 2001 From: Rohit Khanduri Date: Tue, 11 Feb 2025 11:05:35 +0100 Subject: [PATCH 25/38] chore: updated types --- index.d.ts | 14 +++++++------- lib/types.ts | 6 ------ 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/index.d.ts b/index.d.ts index 3c0d207..4d798dd 100644 --- a/index.d.ts +++ b/index.d.ts @@ -94,14 +94,14 @@ export function getPosts(channels: RawFeedChannel[]): SubstackItem[]; // Goodreads RSS Feed Parser // Goodreads Public Types -export interface GoodreadsItem { - title: string[]; - link: string[]; - book_image_url: string[]; - author_name: string[]; - book_description: string[]; +export type GoodreadsItem = { + title: string; + link: string; + book_image_url: string; + author_name: string; + book_description: string; [key: string]: unknown; -} +}; // Goodreads Public API export const getGoodreadsFeed: ( diff --git a/lib/types.ts b/lib/types.ts index d92a560..cec34b5 100644 --- a/lib/types.ts +++ b/lib/types.ts @@ -1,7 +1,6 @@ export type RawFeed = { rss: { channel: RawFeedChannel[]; - // eslint-disable-next-line @typescript-eslint/no-explicit-any [key: string]: unknown; }; }; @@ -93,14 +92,12 @@ export type RawGoodreadsFeed = { export type RawGoodreadsFeedRSS = { channel: RawGoodreadsFeedChannel[]; - // eslint-disable-next-line @typescript-eslint/no-explicit-any [key: string]: unknown; }; export type RawGoodreadsFeedChannel = { title: string[]; item: RawGoodreadsItem[]; - // eslint-disable-next-line @typescript-eslint/no-explicit-any [key: string]: unknown; }; @@ -110,14 +107,12 @@ export type RawGoodreadsItem = { book_image_url: string[]; author_name: string[]; book_description: string[]; - // eslint-disable-next-line @typescript-eslint/no-explicit-any [key: string]: unknown; }; export type GoodreadsFeedChannel = { title: string; item: GoodreadsItem[]; - // eslint-disable-next-line @typescript-eslint/no-explicit-any [key: string]: unknown; }; @@ -127,6 +122,5 @@ export type GoodreadsItem = { book_image_url: string; author_name: string; book_description: string; - // eslint-disable-next-line @typescript-eslint/no-explicit-any [key: string]: unknown; }; From ce377dd5a986da0728e9b0330f721dcd27f7ccc4 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Tue, 11 Feb 2025 10:06:11 +0000 Subject: [PATCH 26/38] 1.1.1 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 595d687..1c2b922 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "substack-feed-api", - "version": "1.1.0", + "version": "1.1.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "substack-feed-api", - "version": "1.1.0", + "version": "1.1.1", "dependencies": { "node-fetch": "^3.3.2", "ts-node": "^10.9.2", diff --git a/package.json b/package.json index 0673e30..37bc0af 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "substack-feed-api", - "version": "1.1.0", + "version": "1.1.1", "type": "module", "files": [ "dist", From 0a14fb3229b27d91b7069dbe6d39d40ea7d81d90 Mon Sep 17 00:00:00 2001 From: Rohit Khanduri Date: Tue, 11 Feb 2025 17:39:01 +0100 Subject: [PATCH 27/38] chore: added property to goodreads feed added book_large_image_url to goodreads feed --- lib/main.ts | 11 ++++++----- lib/typeguards.ts | 1 + lib/types.ts | 1 + 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/lib/main.ts b/lib/main.ts index 146ad0f..f9fb7a6 100644 --- a/lib/main.ts +++ b/lib/main.ts @@ -17,7 +17,7 @@ import { SubstackItem, } from "./types"; -const CORS_PROXY = "https://api.allorigins.win/get?url="; +const CORS_PROXY = "https://www.whateverorigin.org/get?url="; const isBrowser = typeof document !== "undefined"; // Internal API @@ -95,16 +95,16 @@ const transformRawGoodreadsItem = (item: RawGoodreadsItem): GoodreadsItem => { return { title: item.title[0], link: item.link[0], - book_image_url: item["book_image_url"][0], + book_image_url: item["book_large_image_url"][0], author_name: item["author_name"][0], book_description: item["book_description"][0], }; }; // Internal API -const getRawXMLGoodreadsFeed = async (feedUrl: string) => { +const getRawXMLGoodreadsFeed = async (feedUrl: string, proxy?: string) => { try { const path = isBrowser - ? `${CORS_PROXY}${encodeURIComponent(feedUrl)}` + ? `${proxy ?? CORS_PROXY}${encodeURIComponent(feedUrl)}` : feedUrl; const promise = await fetch(path); if (promise.ok) return isBrowser ? promise.json() : promise.text(); @@ -118,8 +118,9 @@ export const getGoodreadsFeed = async ( feedUrl: string, /* eslint-disable @typescript-eslint/no-explicit-any */ callback?: (err: Error | null, result: unknown) => void, + proxy?: string, ): Promise => { - const rawXML = await getRawXMLGoodreadsFeed(feedUrl); + const rawXML = await getRawXMLGoodreadsFeed(feedUrl, proxy); // NOTE: server side call if (!isBrowser) { return parseXML(rawXML, callback); diff --git a/lib/typeguards.ts b/lib/typeguards.ts index d1bfda8..7e549cf 100644 --- a/lib/typeguards.ts +++ b/lib/typeguards.ts @@ -202,6 +202,7 @@ export const isRawGoodreadsItem = (item: unknown): item is RawGoodreadsItem => { item.hasOwnProperty("title") && item.hasOwnProperty("link") && item.hasOwnProperty("book_image_url") && + item.hasOwnProperty("book_large_image_url") && item.hasOwnProperty("author_name") && item.hasOwnProperty("book_description") ); diff --git a/lib/types.ts b/lib/types.ts index cec34b5..b06c240 100644 --- a/lib/types.ts +++ b/lib/types.ts @@ -105,6 +105,7 @@ export type RawGoodreadsItem = { title: string[]; link: string[]; book_image_url: string[]; + book_large_image_url: string[]; author_name: string[]; book_description: string[]; [key: string]: unknown; From d9e951c66cfb18a7580e43c4985f06f900d9a578 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Tue, 11 Feb 2025 16:41:44 +0000 Subject: [PATCH 28/38] 1.1.2 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1c2b922..ca49a9c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "substack-feed-api", - "version": "1.1.1", + "version": "1.1.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "substack-feed-api", - "version": "1.1.1", + "version": "1.1.2", "dependencies": { "node-fetch": "^3.3.2", "ts-node": "^10.9.2", diff --git a/package.json b/package.json index 37bc0af..36fd5a5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "substack-feed-api", - "version": "1.1.1", + "version": "1.1.2", "type": "module", "files": [ "dist", From 2a41a94054768ad17a8a87d9c7506d3ab44f19d8 Mon Sep 17 00:00:00 2001 From: Rohit Khanduri Date: Mon, 19 May 2025 17:16:59 +0200 Subject: [PATCH 29/38] fix: updated proxy --- lib/main.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/main.ts b/lib/main.ts index f9fb7a6..9444a1a 100644 --- a/lib/main.ts +++ b/lib/main.ts @@ -17,7 +17,7 @@ import { SubstackItem, } from "./types"; -const CORS_PROXY = "https://www.whateverorigin.org/get?url="; +const CORS_PROXY = "https://lol-origin-84f24d4beb26.herokuapp.com/get?url="; const isBrowser = typeof document !== "undefined"; // Internal API From 0d9e92259a283d1ba6a9c4dc8526de69e23bd558 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Mon, 19 May 2025 15:19:16 +0000 Subject: [PATCH 30/38] 1.1.3 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index ca49a9c..36deff1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "substack-feed-api", - "version": "1.1.2", + "version": "1.1.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "substack-feed-api", - "version": "1.1.2", + "version": "1.1.3", "dependencies": { "node-fetch": "^3.3.2", "ts-node": "^10.9.2", diff --git a/package.json b/package.json index 36fd5a5..566af94 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "substack-feed-api", - "version": "1.1.2", + "version": "1.1.3", "type": "module", "files": [ "dist", From 241aad161a501761ec1d7f6afdf4bfe821c5fcce Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Mon, 19 May 2025 15:31:44 +0000 Subject: [PATCH 31/38] 1.1.3 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index ca49a9c..36deff1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "substack-feed-api", - "version": "1.1.2", + "version": "1.1.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "substack-feed-api", - "version": "1.1.2", + "version": "1.1.3", "dependencies": { "node-fetch": "^3.3.2", "ts-node": "^10.9.2", diff --git a/package.json b/package.json index 36fd5a5..566af94 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "substack-feed-api", - "version": "1.1.2", + "version": "1.1.3", "type": "module", "files": [ "dist", From 84795521852c2044511eb399727c1fa57d92b095 Mon Sep 17 00:00:00 2001 From: Rohit Khanduri Date: Mon, 19 May 2025 18:02:05 +0200 Subject: [PATCH 32/38] feat: udpated proxy - updated proxy - updated libs --- jest.config.ts | 1 + lib/goodreads/goodreads.ts | 5 +- lib/goodreads/types.ts | 5 - lib/main.ts | 16 +- package-lock.json | 2073 ++++++++++++++++++++++-------------- package.json | 15 +- 6 files changed, 1309 insertions(+), 806 deletions(-) diff --git a/jest.config.ts b/jest.config.ts index 044033c..7026212 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -1,3 +1,4 @@ +// eslint-disable-next-line @typescript-eslint/no-require-imports require("tsconfig-paths/register"); // jest.config.js diff --git a/lib/goodreads/goodreads.ts b/lib/goodreads/goodreads.ts index 030bb9b..1f613e4 100644 --- a/lib/goodreads/goodreads.ts +++ b/lib/goodreads/goodreads.ts @@ -41,15 +41,14 @@ const getRawXMLGoodreadsFeed = async (feedUrl: string) => { : feedUrl; const promise = await fetch(path); if (promise.ok) return isBrowser ? promise.json() : promise.text(); - } catch (e) { - throw new Error("Error occurred fetching Feed from Goodreads"); + } catch (error) { + throw new Error("Error occurred fetching Feed from Goodreads", error); } }; // Goodreads Public API export const getGoodreadsFeed = async ( feedUrl: string, - /* eslint-disable @typescript-eslint/no-explicit-any */ callback?: (err: Error | null, result: unknown) => void, ): Promise => { const rawXML = await getRawXMLGoodreadsFeed(feedUrl); diff --git a/lib/goodreads/types.ts b/lib/goodreads/types.ts index 7cf74ed..b4e4932 100644 --- a/lib/goodreads/types.ts +++ b/lib/goodreads/types.ts @@ -7,14 +7,12 @@ export type RawGoodreadsFeed = { export type RawGoodreadsFeedRSS = { channel: RawGoodreadsFeedChannel[]; - // eslint-disable-next-line @typescript-eslint/no-explicit-any [key: string]: unknown; }; export type RawGoodreadsFeedChannel = { title: string[]; item: RawGoodreadsItem[]; - // eslint-disable-next-line @typescript-eslint/no-explicit-any [key: string]: unknown; }; @@ -24,14 +22,12 @@ export type RawGoodreadsItem = { book_image_url: string[]; author_name: string[]; book_description: string[]; - // eslint-disable-next-line @typescript-eslint/no-explicit-any [key: string]: unknown; }; export type GoodreadsFeedChannel = { title: string; item: GoodreadsItem[]; - // eslint-disable-next-line @typescript-eslint/no-explicit-any [key: string]: unknown; }; @@ -41,6 +37,5 @@ export type GoodreadsItem = { book_image_url: string; author_name: string; book_description: string; - // eslint-disable-next-line @typescript-eslint/no-explicit-any [key: string]: unknown; }; diff --git a/lib/main.ts b/lib/main.ts index f9fb7a6..2b7c8a8 100644 --- a/lib/main.ts +++ b/lib/main.ts @@ -17,7 +17,7 @@ import { SubstackItem, } from "./types"; -const CORS_PROXY = "https://www.whateverorigin.org/get?url="; +const CORS_PROXY = "https://lol-origin-84f24d4beb26.herokuapp.com/get?url="; const isBrowser = typeof document !== "undefined"; // Internal API @@ -29,7 +29,8 @@ const getRawXMLSubstackFeed = async (feedUrl: string) => { : feedUrl; const promise = await fetch(path); if (promise.ok) return isBrowser ? promise.json() : promise.text(); - } catch (e) { + } catch (error) { + console.error(error); throw new Error("Error occurred fetching Feed from Substack"); } }; @@ -56,7 +57,6 @@ const transformRawItem = (item: RawItem): SubstackItem => { export const getSubstackFeed = async ( feedUrl: string, - /* eslint-disable @typescript-eslint/no-explicit-any */ callback?: (err: Error | null, result: unknown) => void, ): Promise => { const rawXML = await getRawXMLSubstackFeed(feedUrl); @@ -78,8 +78,10 @@ export const getFeedByLink = ( return rawFeed.rss.channel .filter(isRawFeedChannel) .filter((channel) => channel.link[0] === link); - } catch (e) { - throw new Error(`Error occurred fetching Feed by Link: ${link}`); + } catch (e: unknown) { + const error = new Error(`Error occurred fetching Feed by Link: ${link}`); + (error as any).cause = e; + throw error; } }; export const getPosts = (channels: RawFeedChannel[]) => { @@ -108,7 +110,8 @@ const getRawXMLGoodreadsFeed = async (feedUrl: string, proxy?: string) => { : feedUrl; const promise = await fetch(path); if (promise.ok) return isBrowser ? promise.json() : promise.text(); - } catch (e) { + } catch (error) { + console.error(error); throw new Error("Error occurred fetching Feed from Goodreads"); } }; @@ -116,7 +119,6 @@ const getRawXMLGoodreadsFeed = async (feedUrl: string, proxy?: string) => { // Public API export const getGoodreadsFeed = async ( feedUrl: string, - /* eslint-disable @typescript-eslint/no-explicit-any */ callback?: (err: Error | null, result: unknown) => void, proxy?: string, ): Promise => { diff --git a/package-lock.json b/package-lock.json index ca49a9c..e7e9046 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,19 +13,18 @@ "tsconfig-paths": "^4.2.0" }, "devDependencies": { - "@eslint/js": "^9.5.0", - "@types/eslint__js": "^8.42.3", + "@eslint/js": "^9.27.0", "@types/jest": "^29.5.14", "@types/xml2js": "^0.4.14", - "eslint": "^8.57.0", + "eslint": "^9.27.0", "events": "^3.3.0", "fetch-mock-jest": "^1.5.1", "jest": "^29.7.0", - "prettier": "3.3.2", - "ts-jest": "^29.2.5", - "typescript": "^5.4.5", - "typescript-eslint": "^7.13.1", - "vite": "6.0.9", + "prettier": "^3.5.3", + "ts-jest": "^29.3.4", + "typescript": "^5.8.3", + "typescript-eslint": "^8.32.1", + "vite": "^6.3.5", "xml2js": "^0.6.2" } }, @@ -34,6 +33,7 @@ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" @@ -43,44 +43,47 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz", - "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.2.tgz", + "integrity": "sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.7.tgz", - "integrity": "sha512-SRijHmF0PSPgLIBYlWnG0hyeJLwXE2CgpsXaMOrtt2yp9/86ALw6oUlj9KYuZ0JN07T4eBMVIW4li/9S1j2BGA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.1.tgz", + "integrity": "sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==", "dev": true, + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.5", - "@babel/helper-compilation-targets": "^7.26.5", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.7", - "@babel/parser": "^7.26.7", - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.26.7", - "@babel/types": "^7.26.7", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.1", + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helpers": "^7.27.1", + "@babel/parser": "^7.27.1", + "@babel/template": "^7.27.1", + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -96,13 +99,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz", - "integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz", + "integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/parser": "^7.26.5", - "@babel/types": "^7.26.5", + "@babel/parser": "^7.27.1", + "@babel/types": "^7.27.1", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -112,13 +116,14 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", - "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.26.5", - "@babel/helper-validator-option": "^7.25.9", + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -128,27 +133,29 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz", + "integrity": "sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -158,61 +165,67 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", - "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.7.tgz", - "integrity": "sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.1.tgz", + "integrity": "sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.7" + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.7.tgz", - "integrity": "sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz", + "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.26.7" + "@babel/types": "^7.27.1" }, "bin": { "parser": "bin/babel-parser.js" @@ -226,6 +239,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -238,6 +252,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -250,6 +265,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -262,6 +278,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -273,12 +290,13 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", - "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -292,6 +310,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -304,6 +323,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -312,12 +332,13 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", - "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -331,6 +352,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -343,6 +365,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -355,6 +378,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -367,6 +391,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -379,6 +404,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -391,6 +417,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -403,6 +430,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -418,6 +446,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -429,12 +458,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", - "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -444,42 +474,42 @@ } }, "node_modules/@babel/runtime": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.7.tgz", - "integrity": "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.1.tgz", + "integrity": "sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==", "dev": true, - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", - "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.7.tgz", - "integrity": "sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.1.tgz", + "integrity": "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.5", - "@babel/parser": "^7.26.7", - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.7", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.1", + "@babel/parser": "^7.27.1", + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -492,18 +522,20 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/@babel/types": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.7.tgz", - "integrity": "sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", + "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -513,12 +545,14 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -530,19 +564,21 @@ "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", - "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz", + "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==", "cpu": [ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "aix" @@ -552,13 +588,14 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", - "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz", + "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -568,13 +605,14 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", - "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz", + "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -584,13 +622,14 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", - "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz", + "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -600,13 +639,14 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", - "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", + "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -616,13 +656,14 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", - "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz", + "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -632,13 +673,14 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", - "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz", + "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -648,13 +690,14 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", - "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz", + "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -664,13 +707,14 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", - "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz", + "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -680,13 +724,14 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", - "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz", + "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -696,13 +741,14 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", - "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz", + "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -712,13 +758,14 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", - "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz", + "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==", "cpu": [ "loong64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -728,13 +775,14 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", - "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz", + "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==", "cpu": [ "mips64el" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -744,13 +792,14 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", - "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz", + "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==", "cpu": [ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -760,13 +809,14 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", - "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz", + "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==", "cpu": [ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -776,13 +826,14 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", - "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz", + "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==", "cpu": [ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -792,13 +843,14 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", - "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", + "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -808,13 +860,14 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", - "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz", + "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "netbsd" @@ -824,13 +877,14 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", - "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz", + "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "netbsd" @@ -840,13 +894,14 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", - "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz", + "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openbsd" @@ -856,13 +911,14 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", - "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz", + "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openbsd" @@ -872,13 +928,14 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", - "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz", + "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "sunos" @@ -888,13 +945,14 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", - "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz", + "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -904,13 +962,14 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", - "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz", + "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -920,13 +979,14 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", - "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz", + "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -936,10 +996,11 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", - "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", "dev": true, + "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.4.3" }, @@ -953,25 +1014,78 @@ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@eslint-community/regexpp": { "version": "4.12.1", "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/config-array": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz", + "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz", + "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz", + "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -979,34 +1093,85 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/@eslint/js": { - "version": "9.20.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.20.0.tgz", - "integrity": "sha512-iZA07H9io9Wn836aVTytRaNqh00Sad+EamwOVJT12GTLw1VGMFV/4JaME+JjLtr9fiGaoWgYnS54wrfWsSs4oQ==", + "version": "9.27.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.27.0.tgz", + "integrity": "sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", + "node_modules/@eslint/plugin-kit": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz", + "integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "@eslint/core": "^0.14.0", + "levn": "^0.4.1" }, "engines": { - "node": ">=10.10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, "node_modules/@humanwhocodes/module-importer": { @@ -1014,6 +1179,7 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -1022,18 +1188,26 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "dev": true + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -1050,6 +1224,7 @@ "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" } @@ -1059,6 +1234,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -1072,6 +1248,7 @@ "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" @@ -1085,6 +1262,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -1097,6 +1275,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -1112,6 +1291,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -1124,6 +1304,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1133,6 +1314,7 @@ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1142,6 +1324,7 @@ "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -1159,6 +1342,7 @@ "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/reporters": "^29.7.0", @@ -1206,6 +1390,7 @@ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", @@ -1221,6 +1406,7 @@ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "dev": true, + "license": "MIT", "dependencies": { "expect": "^29.7.0", "jest-snapshot": "^29.7.0" @@ -1234,6 +1420,7 @@ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, + "license": "MIT", "dependencies": { "jest-get-type": "^29.6.3" }, @@ -1246,6 +1433,7 @@ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", @@ -1263,6 +1451,7 @@ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", @@ -1278,6 +1467,7 @@ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, + "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "^29.7.0", @@ -1321,6 +1511,7 @@ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, + "license": "MIT", "dependencies": { "@sinclair/typebox": "^0.27.8" }, @@ -1333,6 +1524,7 @@ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", @@ -1347,6 +1539,7 @@ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/types": "^29.6.3", @@ -1362,6 +1555,7 @@ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/test-result": "^29.7.0", "graceful-fs": "^4.2.9", @@ -1377,6 +1571,7 @@ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@jest/types": "^29.6.3", @@ -1403,6 +1598,7 @@ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -1420,6 +1616,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -1433,6 +1630,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -1442,6 +1640,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -1449,13 +1648,15 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -1466,6 +1667,7 @@ "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" @@ -1479,6 +1681,7 @@ "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" } @@ -1488,6 +1691,7 @@ "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" @@ -1497,247 +1701,280 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.6.tgz", - "integrity": "sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.0.tgz", + "integrity": "sha512-KxN+zCjOYHGwCl4UCtSfZ6jrq/qi88JDUtiEFk8LELEHq2Egfc/FgW+jItZiOLRuQfb/3xJSgFuNPC9jzggX+A==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.6.tgz", - "integrity": "sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.0.tgz", + "integrity": "sha512-yDvqx3lWlcugozax3DItKJI5j05B0d4Kvnjx+5mwiUpWramVvmAByYigMplaoAQ3pvdprGCTCE03eduqE/8mPQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.6.tgz", - "integrity": "sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.0.tgz", + "integrity": "sha512-2KOU574vD3gzcPSjxO0eyR5iWlnxxtmW1F5CkNOHmMlueKNCQkxR6+ekgWyVnz6zaZihpUNkGxjsYrkTJKhkaw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.6.tgz", - "integrity": "sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.0.tgz", + "integrity": "sha512-gE5ACNSxHcEZyP2BA9TuTakfZvULEW4YAOtxl/A/YDbIir/wPKukde0BNPlnBiP88ecaN4BJI2TtAd+HKuZPQQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.6.tgz", - "integrity": "sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.0.tgz", + "integrity": "sha512-GSxU6r5HnWij7FoSo7cZg3l5GPg4HFLkzsFFh0N/b16q5buW1NAWuCJ+HMtIdUEi6XF0qH+hN0TEd78laRp7Dg==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.6.tgz", - "integrity": "sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.0.tgz", + "integrity": "sha512-KGiGKGDg8qLRyOWmk6IeiHJzsN/OYxO6nSbT0Vj4MwjS2XQy/5emsmtoqLAabqrohbgLWJ5GV3s/ljdrIr8Qjg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.6.tgz", - "integrity": "sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.0.tgz", + "integrity": "sha512-46OzWeqEVQyX3N2/QdiU/CMXYDH/lSHpgfBkuhl3igpZiaB3ZIfSjKuOnybFVBQzjsLwkus2mjaESy8H41SzvA==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.6.tgz", - "integrity": "sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.0.tgz", + "integrity": "sha512-lfgW3KtQP4YauqdPpcUZHPcqQXmTmH4nYU0cplNeW583CMkAGjtImw4PKli09NFi2iQgChk4e9erkwlfYem6Lg==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.6.tgz", - "integrity": "sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.0.tgz", + "integrity": "sha512-nn8mEyzMbdEJzT7cwxgObuwviMx6kPRxzYiOl6o/o+ChQq23gfdlZcUNnt89lPhhz3BYsZ72rp0rxNqBSfqlqw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.6.tgz", - "integrity": "sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.0.tgz", + "integrity": "sha512-l+QK99je2zUKGd31Gh+45c4pGDAqZSuWQiuRFCdHYC2CSiO47qUWsCcenrI6p22hvHZrDje9QjwSMAFL3iwXwQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.6.tgz", - "integrity": "sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.0.tgz", + "integrity": "sha512-WbnJaxPv1gPIm6S8O/Wg+wfE/OzGSXlBMbOe4ie+zMyykMOeqmgD1BhPxZQuDqwUN+0T/xOFtL2RUWBspnZj3w==", "cpu": [ "loong64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.6.tgz", - "integrity": "sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.0.tgz", + "integrity": "sha512-eRDWR5t67/b2g8Q/S8XPi0YdbKcCs4WQ8vklNnUYLaSWF+Cbv2axZsp4jni6/j7eKvMLYCYdcsv8dcU+a6QNFg==", "cpu": [ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.6.tgz", - "integrity": "sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.0.tgz", + "integrity": "sha512-TWrZb6GF5jsEKG7T1IHwlLMDRy2f3DPqYldmIhnA2DVqvvhY2Ai184vZGgahRrg8k9UBWoSlHv+suRfTN7Ua4A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.0.tgz", + "integrity": "sha512-ieQljaZKuJpmWvd8gW87ZmSFwid6AxMDk5bhONJ57U8zT77zpZ/TPKkU9HpnnFrM4zsgr4kiGuzbIbZTGi7u9A==", "cpu": [ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.6.tgz", - "integrity": "sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.0.tgz", + "integrity": "sha512-/L3pW48SxrWAlVsKCN0dGLB2bi8Nv8pr5S5ocSM+S0XCn5RCVCXqi8GVtHFsOBBCSeR+u9brV2zno5+mg3S4Aw==", "cpu": [ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.6.tgz", - "integrity": "sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.0.tgz", + "integrity": "sha512-XMLeKjyH8NsEDCRptf6LO8lJk23o9wvB+dJwcXMaH6ZQbbkHu2dbGIUindbMtRN6ux1xKi16iXWu6q9mu7gDhQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.6.tgz", - "integrity": "sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.0.tgz", + "integrity": "sha512-m/P7LycHZTvSQeXhFmgmdqEiTqSV80zn6xHaQ1JSqwCtD1YGtwEK515Qmy9DcB2HK4dOUVypQxvhVSy06cJPEg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.6.tgz", - "integrity": "sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.0.tgz", + "integrity": "sha512-4yodtcOrFHpbomJGVEqZ8fzD4kfBeCbpsUy5Pqk4RluXOdsWdjLnjhiKy2w3qzcASWd04fp52Xz7JKarVJ5BTg==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.6.tgz", - "integrity": "sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.0.tgz", + "integrity": "sha512-tmazCrAsKzdkXssEc65zIE1oC6xPHwfy9d5Ta25SRCDOZS+I6RypVVShWALNuU9bxIfGA0aqrmzlzoM5wO5SPQ==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.6.tgz", - "integrity": "sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.0.tgz", + "integrity": "sha512-h1J+Yzjo/X+0EAvR2kIXJDuTuyT7drc+t2ALY0nIcGPbTatNOf0VWdhEA2Z4AAjv6X1NJV7SYo5oCTYRJhSlVA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -1747,13 +1984,15 @@ "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@sinonjs/commons": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } @@ -1763,6 +2002,7 @@ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0" } @@ -1770,28 +2010,33 @@ "node_modules/@tsconfig/node10": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==" + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "license": "MIT" }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", @@ -1801,10 +2046,11 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" } @@ -1814,50 +2060,35 @@ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__traverse": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", - "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", + "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.20.7" } }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint__js": { - "version": "8.42.3", - "resolved": "https://registry.npmjs.org/@types/eslint__js/-/eslint__js-8.42.3.tgz", - "integrity": "sha512-alfG737uhmPdnvkrLdZLcEKJ/B8s9Y4hrZ+YAdzUeoArBlSUERA2E87ROfOaS4jd/C45fzOoZzidLc1IPwLqOw==", - "dev": true, - "dependencies": { - "@types/eslint": "*" - } - }, "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "dev": true + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true, + "license": "MIT" }, "node_modules/@types/graceful-fs": { "version": "4.1.9", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -1866,13 +2097,15 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } @@ -1882,6 +2115,7 @@ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } @@ -1891,6 +2125,7 @@ "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", "dev": true, + "license": "MIT", "dependencies": { "expect": "^29.0.0", "pretty-format": "^29.0.0" @@ -1900,27 +2135,31 @@ "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/node": { - "version": "22.13.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.1.tgz", - "integrity": "sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==", + "version": "22.15.19", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.19.tgz", + "integrity": "sha512-3vMNr4TzNQyjHcRZadojpRaD9Ofr6LsonZAoQ+HMUa/9ORTPoxVIw0e0mpqWpdjj8xybyCM+oKOUH2vwFu/oEw==", + "license": "MIT", "dependencies": { - "undici-types": "~6.20.0" + "undici-types": "~6.21.0" } }, "node_modules/@types/stack-utils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/xml2js": { "version": "0.4.14", "resolved": "https://registry.npmjs.org/@types/xml2js/-/xml2js-0.4.14.tgz", "integrity": "sha512-4YnrRemBShWRO2QjvUin8ESA41rH+9nQGLUGZV/1IDhi3SL9OhdpNC/MrulTWuptXKwhx/aDxE7toV0f/ypIXQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -1930,6 +2169,7 @@ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -1938,80 +2178,86 @@ "version": "21.0.3", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", - "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.32.1.tgz", + "integrity": "sha512-6u6Plg9nP/J1GRpe/vcjjabo6Uc5YQPAMxsgQyGC/I0RuukiG1wIe3+Vtg3IrSCVJDmqK3j8adrtzXSENRtFgg==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/type-utils": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", + "@typescript-eslint/scope-manager": "8.32.1", + "@typescript-eslint/type-utils": "8.32.1", + "@typescript-eslint/utils": "8.32.1", + "@typescript-eslint/visitor-keys": "8.32.1", "graphemer": "^1.4.0", - "ignore": "^5.3.1", + "ignore": "^7.0.0", "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.1.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.4.tgz", + "integrity": "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" } }, "node_modules/@typescript-eslint/parser": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", - "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.32.1.tgz", + "integrity": "sha512-LKMrmwCPoLhM45Z00O1ulb6jwyVr2kr3XJp+G+tSEZcbauNnScewcQwtJqXDhXeYPDEjZ8C1SjXm015CirEmGg==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", + "@typescript-eslint/scope-manager": "8.32.1", + "@typescript-eslint/types": "8.32.1", + "@typescript-eslint/typescript-estree": "8.32.1", + "@typescript-eslint/visitor-keys": "8.32.1", "debug": "^4.3.4" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", - "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.32.1.tgz", + "integrity": "sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" + "@typescript-eslint/types": "8.32.1", + "@typescript-eslint/visitor-keys": "8.32.1" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -2019,39 +2265,37 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", - "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.32.1.tgz", + "integrity": "sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/typescript-estree": "8.32.1", + "@typescript-eslint/utils": "8.32.1", "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.1.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.32.1.tgz", + "integrity": "sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==", "dev": true, + "license": "MIT", "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -2059,31 +2303,30 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", - "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.32.1.tgz", + "integrity": "sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", + "@typescript-eslint/types": "8.32.1", + "@typescript-eslint/visitor-keys": "8.32.1", "debug": "^4.3.4", - "globby": "^11.1.0", + "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.1.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { @@ -2091,6 +2334,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -2100,6 +2344,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -2111,10 +2356,11 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -2123,54 +2369,52 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", - "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.32.1.tgz", + "integrity": "sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA==", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0" + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.32.1", + "@typescript-eslint/types": "8.32.1", + "@typescript-eslint/typescript-estree": "8.32.1" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", - "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.32.1.tgz", + "integrity": "sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.18.0", - "eslint-visitor-keys": "^3.4.3" + "@typescript-eslint/types": "8.32.1", + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", - "dev": true - }, "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -2183,6 +2427,7 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -2191,6 +2436,7 @@ "version": "8.3.4", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "license": "MIT", "dependencies": { "acorn": "^8.11.0" }, @@ -2203,6 +2449,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -2219,6 +2466,7 @@ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -2229,23 +2477,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "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" } @@ -2255,6 +2492,7 @@ "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" }, @@ -2270,6 +2508,7 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -2281,34 +2520,29 @@ "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, - "engines": { - "node": ">=8" - } + "license": "Python-2.0" }, "node_modules/async": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/babel-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", @@ -2330,6 +2564,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", @@ -2346,6 +2581,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -2362,6 +2598,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -2377,6 +2614,7 @@ "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", @@ -2403,6 +2641,7 @@ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, + "license": "MIT", "dependencies": { "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" @@ -2418,13 +2657,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "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" @@ -2435,6 +2676,7 @@ "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" }, @@ -2443,9 +2685,9 @@ } }, "node_modules/browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "version": "4.24.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.5.tgz", + "integrity": "sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==", "dev": true, "funding": [ { @@ -2461,11 +2703,12 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", + "caniuse-lite": "^1.0.30001716", + "electron-to-chromium": "^1.5.149", "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" + "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" @@ -2479,6 +2722,7 @@ "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, + "license": "MIT", "dependencies": { "fast-json-stable-stringify": "2.x" }, @@ -2491,6 +2735,7 @@ "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "node-int64": "^0.4.0" } @@ -2499,13 +2744,15 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2515,14 +2762,15 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001698", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001698.tgz", - "integrity": "sha512-xJ3km2oiG/MbNU8G6zIq6XRZ6HtAOVXsbOrP/blGazi52kc5Yy7b6sDA5O+FbROzRrV7BSTllLHuNvmawYUJjw==", + "version": "1.0.30001718", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001718.tgz", + "integrity": "sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==", "dev": true, "funding": [ { @@ -2537,13 +2785,15 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2560,6 +2810,7 @@ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -2575,6 +2826,7 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], + "license": "MIT", "engines": { "node": ">=8" } @@ -2583,13 +2835,15 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", - "dev": true + "dev": true, + "license": "MIT" }, "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", @@ -2604,6 +2858,7 @@ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, + "license": "MIT", "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" @@ -2613,13 +2868,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true + "dev": true, + "license": "MIT" }, "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" }, @@ -2631,26 +2888,30 @@ "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 + "dev": true, + "license": "MIT" }, "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 + "dev": true, + "license": "MIT" }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/core-js": { - "version": "3.40.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.40.0.tgz", - "integrity": "sha512-7vsMc/Lty6AGnn7uFpYT56QesI5D2Y/UkgKounk87OP9Z2H9Z8kj6jzcSGAxFmUtDOS0ntK6lbQz+Nsa0Jj6mQ==", + "version": "3.42.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.42.0.tgz", + "integrity": "sha512-Sz4PP4ZA+Rq4II21qkNqOEDTDrCvcANId3xpIgB34NDkWc3UduWj2dqEtN9yZIq8Dk3HyPI33x9sqqU5C8sr0g==", "dev": true, "hasInstallScript": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" @@ -2661,6 +2922,7 @@ "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", @@ -2680,13 +2942,15 @@ "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "license": "MIT" }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -2700,15 +2964,17 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", "engines": { "node": ">= 12" } }, "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -2722,10 +2988,11 @@ } }, "node_modules/dedent": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", - "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", + "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", "dev": true, + "license": "MIT", "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, @@ -2739,13 +3006,15 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/deepmerge": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2755,6 +3024,7 @@ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2763,6 +3033,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -2772,39 +3043,17 @@ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/ejs": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "jake": "^10.8.5" }, @@ -2816,16 +3065,18 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.96", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.96.tgz", - "integrity": "sha512-8AJUW6dh75Fm/ny8+kZKJzI1pgoE8bKLZlzDU2W1ENd+DXKJrx7I7l9hb8UWR4ojlnb5OlixMt00QWiYJoVw1w==", - "dev": true + "version": "1.5.155", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.155.tgz", + "integrity": "sha512-ps5KcGGmwL8VaeJlvlDlu4fORQpv3+GIcF5I3f9tUKUlJ/wsysh6HU8P5L1XWRYeXfA0oJd4PyM8ds8zTFf6Ng==", + "dev": true, + "license": "ISC" }, "node_modules/emittery": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -2837,23 +3088,26 @@ "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 + "dev": true, + "license": "MIT" }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/esbuild": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz", - "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", + "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -2861,31 +3115,31 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.24.2", - "@esbuild/android-arm": "0.24.2", - "@esbuild/android-arm64": "0.24.2", - "@esbuild/android-x64": "0.24.2", - "@esbuild/darwin-arm64": "0.24.2", - "@esbuild/darwin-x64": "0.24.2", - "@esbuild/freebsd-arm64": "0.24.2", - "@esbuild/freebsd-x64": "0.24.2", - "@esbuild/linux-arm": "0.24.2", - "@esbuild/linux-arm64": "0.24.2", - "@esbuild/linux-ia32": "0.24.2", - "@esbuild/linux-loong64": "0.24.2", - "@esbuild/linux-mips64el": "0.24.2", - "@esbuild/linux-ppc64": "0.24.2", - "@esbuild/linux-riscv64": "0.24.2", - "@esbuild/linux-s390x": "0.24.2", - "@esbuild/linux-x64": "0.24.2", - "@esbuild/netbsd-arm64": "0.24.2", - "@esbuild/netbsd-x64": "0.24.2", - "@esbuild/openbsd-arm64": "0.24.2", - "@esbuild/openbsd-x64": "0.24.2", - "@esbuild/sunos-x64": "0.24.2", - "@esbuild/win32-arm64": "0.24.2", - "@esbuild/win32-ia32": "0.24.2", - "@esbuild/win32-x64": "0.24.2" + "@esbuild/aix-ppc64": "0.25.4", + "@esbuild/android-arm": "0.25.4", + "@esbuild/android-arm64": "0.25.4", + "@esbuild/android-x64": "0.25.4", + "@esbuild/darwin-arm64": "0.25.4", + "@esbuild/darwin-x64": "0.25.4", + "@esbuild/freebsd-arm64": "0.25.4", + "@esbuild/freebsd-x64": "0.25.4", + "@esbuild/linux-arm": "0.25.4", + "@esbuild/linux-arm64": "0.25.4", + "@esbuild/linux-ia32": "0.25.4", + "@esbuild/linux-loong64": "0.25.4", + "@esbuild/linux-mips64el": "0.25.4", + "@esbuild/linux-ppc64": "0.25.4", + "@esbuild/linux-riscv64": "0.25.4", + "@esbuild/linux-s390x": "0.25.4", + "@esbuild/linux-x64": "0.25.4", + "@esbuild/netbsd-arm64": "0.25.4", + "@esbuild/netbsd-x64": "0.25.4", + "@esbuild/openbsd-arm64": "0.25.4", + "@esbuild/openbsd-x64": "0.25.4", + "@esbuild/sunos-x64": "0.25.4", + "@esbuild/win32-arm64": "0.25.4", + "@esbuild/win32-ia32": "0.25.4", + "@esbuild/win32-x64": "0.25.4" } }, "node_modules/escalade": { @@ -2893,6 +3147,7 @@ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2902,6 +3157,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -2910,110 +3166,109 @@ } }, "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "version": "9.27.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.27.0.tgz", + "integrity": "sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.20.0", + "@eslint/config-helpers": "^0.2.1", + "@eslint/core": "^0.14.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.27.0", + "@eslint/plugin-kit": "^0.3.1", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.3.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", + "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, + "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.14.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -3024,6 +3279,7 @@ "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" @@ -3037,6 +3293,7 @@ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -3049,6 +3306,7 @@ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -3061,6 +3319,7 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -3070,6 +3329,7 @@ "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" } @@ -3079,6 +3339,7 @@ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.x" } @@ -3088,6 +3349,7 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -3120,6 +3382,7 @@ "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/expect-utils": "^29.7.0", "jest-get-type": "^29.6.3", @@ -3135,13 +3398,15 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-glob": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -3158,6 +3423,7 @@ "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" }, @@ -3169,19 +3435,22 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fastq": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.0.tgz", - "integrity": "sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -3191,6 +3460,7 @@ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "bser": "2.1.1" } @@ -3209,6 +3479,7 @@ "url": "https://paypal.me/jimmywarting" } ], + "license": "MIT", "dependencies": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" @@ -3222,6 +3493,7 @@ "resolved": "https://registry.npmjs.org/fetch-mock/-/fetch-mock-9.11.0.tgz", "integrity": "sha512-PG1XUv+x7iag5p/iNHD4/jdpxL9FtVSqRMUQhPab4hVDt80T1MH5ehzVrL2IdXO9Q2iBggArFvPqjUbHFuI58Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.0.0", "@babel/runtime": "^7.0.0", @@ -3256,6 +3528,7 @@ "integrity": "sha512-+utwzP8C+Pax1GSka3nFXILWMY3Er2L+s090FOgqVNrNCPp0fDqgXnAHAJf12PLHi0z4PhcTaZNTz8e7K3fjqQ==", "deprecated": "Use https://www.npmjs.com/package/@fetch-mock/jest instead. The underlying version of fetch-mock will also need upgrading: see https://www.wheresrhys.co.uk/fetch-mock/docs/Usage/upgrade-guide", "dev": true, + "license": "MIT", "dependencies": { "fetch-mock": "^9.11.0" }, @@ -3276,15 +3549,16 @@ } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, + "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/filelist": { @@ -3292,6 +3566,7 @@ "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, + "license": "Apache-2.0", "dependencies": { "minimatch": "^5.0.1" } @@ -3301,6 +3576,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -3310,6 +3586,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -3322,6 +3599,7 @@ "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" }, @@ -3334,6 +3612,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -3346,29 +3625,31 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, + "license": "MIT", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", - "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", - "dev": true + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" }, "node_modules/formdata-polyfill": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "license": "MIT", "dependencies": { "fetch-blob": "^3.1.2" }, @@ -3380,7 +3661,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", @@ -3388,6 +3670,7 @@ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -3401,6 +3684,7 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3410,6 +3694,7 @@ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -3419,6 +3704,7 @@ "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.*" } @@ -3428,6 +3714,7 @@ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.0.0" } @@ -3437,6 +3724,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -3450,6 +3738,7 @@ "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", @@ -3470,6 +3759,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -3481,38 +3771,17 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "BSD-2-Clause" }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -3522,19 +3791,22 @@ "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 + "dev": true, + "license": "ISC" }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3544,6 +3816,7 @@ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -3555,13 +3828,15 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } @@ -3571,6 +3846,7 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -3580,6 +3856,7 @@ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -3596,6 +3873,7 @@ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, + "license": "MIT", "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -3615,6 +3893,7 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -3625,6 +3904,7 @@ "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" @@ -3634,19 +3914,22 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-core-module": { "version": "2.16.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, + "license": "MIT", "dependencies": { "hasown": "^2.0.2" }, @@ -3662,6 +3945,7 @@ "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" } @@ -3671,6 +3955,7 @@ "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" } @@ -3680,6 +3965,7 @@ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3689,6 +3975,7 @@ "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" }, @@ -3701,24 +3988,17 @@ "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-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -3730,19 +4010,22 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", "integrity": "sha512-6Ybun0IkarhmEqxXCNw/C0bna6Zb/TkfUX9UbwJtK6ObwAVCxmAP308WWTHviM/zAqXk05cdhYsUsZeGQh99iw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=8" } @@ -3752,6 +4035,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.23.9", "@babel/parser": "^7.23.9", @@ -3764,10 +4048,11 @@ } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -3780,6 +4065,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -3794,6 +4080,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -3808,6 +4095,7 @@ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -3821,6 +4109,7 @@ "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "async": "^3.2.3", "chalk": "^4.0.2", @@ -3839,6 +4128,7 @@ "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", @@ -3865,6 +4155,7 @@ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, + "license": "MIT", "dependencies": { "execa": "^5.0.0", "jest-util": "^29.7.0", @@ -3879,6 +4170,7 @@ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", @@ -3910,6 +4202,7 @@ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/core": "^29.7.0", "@jest/test-result": "^29.7.0", @@ -3943,6 +4236,7 @@ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@jest/test-sequencer": "^29.7.0", @@ -3988,6 +4282,7 @@ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", @@ -4003,6 +4298,7 @@ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, + "license": "MIT", "dependencies": { "detect-newline": "^3.0.0" }, @@ -4015,6 +4311,7 @@ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", @@ -4031,6 +4328,7 @@ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -4048,6 +4346,7 @@ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -4057,6 +4356,7 @@ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -4082,6 +4382,7 @@ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, + "license": "MIT", "dependencies": { "jest-get-type": "^29.6.3", "pretty-format": "^29.7.0" @@ -4095,6 +4396,7 @@ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "jest-diff": "^29.7.0", @@ -4110,6 +4412,7 @@ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^29.6.3", @@ -4130,6 +4433,7 @@ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -4144,6 +4448,7 @@ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -4161,6 +4466,7 @@ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -4170,6 +4476,7 @@ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", @@ -4190,6 +4497,7 @@ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, + "license": "MIT", "dependencies": { "jest-regex-util": "^29.6.3", "jest-snapshot": "^29.7.0" @@ -4203,6 +4511,7 @@ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/environment": "^29.7.0", @@ -4235,6 +4544,7 @@ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -4268,6 +4578,7 @@ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", @@ -4295,10 +4606,11 @@ } }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -4311,6 +4623,7 @@ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -4328,6 +4641,7 @@ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "camelcase": "^6.2.0", @@ -4345,6 +4659,7 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -4357,6 +4672,7 @@ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, + "license": "MIT", "dependencies": { "@jest/test-result": "^29.7.0", "@jest/types": "^29.6.3", @@ -4376,6 +4692,7 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", @@ -4391,6 +4708,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -4405,13 +4723,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -4424,6 +4744,7 @@ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, @@ -4435,30 +4756,35 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -4471,6 +4797,7 @@ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } @@ -4480,6 +4807,7 @@ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4489,6 +4817,7 @@ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4498,6 +4827,7 @@ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -4510,13 +4840,15 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -4532,31 +4864,36 @@ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } @@ -4566,6 +4903,7 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -4577,10 +4915,11 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -4591,13 +4930,15 @@ "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "license": "ISC" }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "tmpl": "1.0.5" } @@ -4606,13 +4947,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "license": "MIT" }, "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" } @@ -4622,6 +4965,7 @@ "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" @@ -4635,6 +4979,7 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4644,6 +4989,7 @@ "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" }, @@ -4655,6 +5001,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4663,12 +5010,13 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "dev": true, "funding": [ { @@ -4676,6 +5024,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -4687,12 +5036,14 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-domexception": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", "funding": [ { "type": "github", @@ -4703,6 +5054,7 @@ "url": "https://paypal.me/jimmywarting" } ], + "license": "MIT", "engines": { "node": ">=10.5.0" } @@ -4711,6 +5063,7 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", @@ -4728,19 +5081,22 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-releases": { "version": "2.0.19", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4750,6 +5106,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -4762,6 +5119,7 @@ "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" } @@ -4771,6 +5129,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -4786,6 +5145,7 @@ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, + "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -4803,6 +5163,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -4818,6 +5179,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -4833,6 +5195,7 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4842,6 +5205,7 @@ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -4854,6 +5218,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -4872,6 +5237,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4881,6 +5247,7 @@ "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" } @@ -4890,6 +5257,7 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4898,34 +5266,29 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-to-regexp": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.4.0.tgz", "integrity": "sha512-G6zHoVqC6GGTQkZwF4lkuEyMbVOjoBKAEybQUypI1WTkqinCOrq2x6U2+phkJ1XsEMTy4LjtwPI7HW+NVrRR2w==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "engines": { - "node": ">=8" - } + "license": "MIT" }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true + "dev": true, + "license": "ISC" }, "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" }, @@ -4934,10 +5297,11 @@ } }, "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } @@ -4947,6 +5311,7 @@ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -4959,6 +5324,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -4972,6 +5338,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -4984,6 +5351,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -4999,6 +5367,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -5007,9 +5376,9 @@ } }, "node_modules/postcss": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz", - "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==", + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", "dev": true, "funding": [ { @@ -5025,6 +5394,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "nanoid": "^3.3.8", "picocolors": "^1.1.1", @@ -5039,15 +5409,17 @@ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/prettier": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", - "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -5063,6 +5435,7 @@ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -5077,6 +5450,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -5089,6 +5463,7 @@ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, + "license": "MIT", "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -5102,6 +5477,7 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -5120,7 +5496,8 @@ "type": "opencollective", "url": "https://opencollective.com/fast-check" } - ] + ], + "license": "MIT" }, "node_modules/querystring": { "version": "0.2.1", @@ -5128,6 +5505,7 @@ "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.x" } @@ -5150,25 +5528,22 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/react-is": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "dev": true + "dev": true, + "license": "MIT" }, "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" } @@ -5178,6 +5553,7 @@ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "dev": true, + "license": "MIT", "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", @@ -5198,6 +5574,7 @@ "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" }, @@ -5210,6 +5587,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -5219,6 +5597,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -5228,43 +5607,30 @@ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "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, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/rollup": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.6.tgz", - "integrity": "sha512-wc2cBWqJgkU3Iz5oztRkQbfVkbxoz5EhnCGOrnJvnLnQ7O0WhQUYyv18qQI79O8L7DdHrrlJNeCHd4VGpnaXKQ==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.41.0.tgz", + "integrity": "sha512-HqMFpUbWlf/tvcxBFNKnJyzc7Lk+XO3FGc3pbNBLqEbOz0gPLRgcrlS3UF4MfUrVlstOaP/q0kM6GVvi+LrLRg==", "dev": true, + "license": "MIT", "dependencies": { - "@types/estree": "1.0.6" + "@types/estree": "1.0.7" }, "bin": { "rollup": "dist/bin/rollup" @@ -5274,25 +5640,26 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.34.6", - "@rollup/rollup-android-arm64": "4.34.6", - "@rollup/rollup-darwin-arm64": "4.34.6", - "@rollup/rollup-darwin-x64": "4.34.6", - "@rollup/rollup-freebsd-arm64": "4.34.6", - "@rollup/rollup-freebsd-x64": "4.34.6", - "@rollup/rollup-linux-arm-gnueabihf": "4.34.6", - "@rollup/rollup-linux-arm-musleabihf": "4.34.6", - "@rollup/rollup-linux-arm64-gnu": "4.34.6", - "@rollup/rollup-linux-arm64-musl": "4.34.6", - "@rollup/rollup-linux-loongarch64-gnu": "4.34.6", - "@rollup/rollup-linux-powerpc64le-gnu": "4.34.6", - "@rollup/rollup-linux-riscv64-gnu": "4.34.6", - "@rollup/rollup-linux-s390x-gnu": "4.34.6", - "@rollup/rollup-linux-x64-gnu": "4.34.6", - "@rollup/rollup-linux-x64-musl": "4.34.6", - "@rollup/rollup-win32-arm64-msvc": "4.34.6", - "@rollup/rollup-win32-ia32-msvc": "4.34.6", - "@rollup/rollup-win32-x64-msvc": "4.34.6", + "@rollup/rollup-android-arm-eabi": "4.41.0", + "@rollup/rollup-android-arm64": "4.41.0", + "@rollup/rollup-darwin-arm64": "4.41.0", + "@rollup/rollup-darwin-x64": "4.41.0", + "@rollup/rollup-freebsd-arm64": "4.41.0", + "@rollup/rollup-freebsd-x64": "4.41.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.41.0", + "@rollup/rollup-linux-arm-musleabihf": "4.41.0", + "@rollup/rollup-linux-arm64-gnu": "4.41.0", + "@rollup/rollup-linux-arm64-musl": "4.41.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.41.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.41.0", + "@rollup/rollup-linux-riscv64-gnu": "4.41.0", + "@rollup/rollup-linux-riscv64-musl": "4.41.0", + "@rollup/rollup-linux-s390x-gnu": "4.41.0", + "@rollup/rollup-linux-x64-gnu": "4.41.0", + "@rollup/rollup-linux-x64-musl": "4.41.0", + "@rollup/rollup-win32-arm64-msvc": "4.41.0", + "@rollup/rollup-win32-ia32-msvc": "4.41.0", + "@rollup/rollup-win32-x64-msvc": "4.41.0", "fsevents": "~2.3.2" } }, @@ -5315,6 +5682,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } @@ -5323,13 +5691,15 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", - "dev": true + "dev": true, + "license": "ISC" }, "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" } @@ -5339,6 +5709,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -5351,6 +5722,7 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -5359,19 +5731,22 @@ "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 + "dev": true, + "license": "ISC" }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -5381,6 +5756,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -5390,6 +5766,7 @@ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -5399,6 +5776,7 @@ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -5408,13 +5786,15 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "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" }, @@ -5427,6 +5807,7 @@ "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" } @@ -5436,6 +5817,7 @@ "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, + "license": "MIT", "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" @@ -5449,6 +5831,7 @@ "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", @@ -5463,6 +5846,7 @@ "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" }, @@ -5475,6 +5859,7 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -5484,6 +5869,7 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -5493,6 +5879,7 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -5505,6 +5892,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -5517,6 +5905,7 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -5529,6 +5918,7 @@ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, + "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -5538,23 +5928,64 @@ "node": ">=8" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "node_modules/tinyglobby": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz", + "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", + "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/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/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "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" }, @@ -5567,27 +5998,30 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", "dev": true, + "license": "MIT", "dependencies": { "punycode": "^2.1.0" } }, "node_modules/ts-api-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", - "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=16" + "node": ">=18.12" }, "peerDependencies": { - "typescript": ">=4.2.0" + "typescript": ">=4.8.4" } }, "node_modules/ts-jest": { - "version": "29.2.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.5.tgz", - "integrity": "sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==", + "version": "29.3.4", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.3.4.tgz", + "integrity": "sha512-Iqbrm8IXOmV+ggWHOTEbjwyCf2xZlUMv5npExksXohL+tk8va4Fjhb+X2+Rt9NBmgO7bJ8WpnMLOwih/DnMlFA==", "dev": true, + "license": "MIT", "dependencies": { "bs-logger": "^0.2.6", "ejs": "^3.1.10", @@ -5596,7 +6030,8 @@ "json5": "^2.2.3", "lodash.memoize": "^4.1.2", "make-error": "^1.3.6", - "semver": "^7.6.3", + "semver": "^7.7.2", + "type-fest": "^4.41.0", "yargs-parser": "^21.1.1" }, "bin": { @@ -5632,10 +6067,11 @@ } }, "node_modules/ts-jest/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -5643,10 +6079,24 @@ "node": ">=10" } }, + "node_modules/ts-jest/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -5689,6 +6139,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "license": "MIT", "dependencies": { "json5": "^2.2.2", "minimist": "^1.2.6", @@ -5702,6 +6153,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "license": "MIT", "engines": { "node": ">=4" } @@ -5711,6 +6163,7 @@ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -5723,15 +6176,17 @@ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -5740,9 +6195,10 @@ } }, "node_modules/typescript": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", - "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -5752,40 +6208,38 @@ } }, "node_modules/typescript-eslint": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.18.0.tgz", - "integrity": "sha512-PonBkP603E3tt05lDkbOMyaxJjvKqQrXsnow72sVeOFINDE/qNmnnd+f9b4N+U7W6MXnnYyrhtmF2t08QWwUbA==", + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.32.1.tgz", + "integrity": "sha512-D7el+eaDHAmXvrZBy1zpzSNIRqnCOrkwTgZxTu3MUqRWk8k0q9m9Ho4+vPf7iHtgUfrK/o8IZaEApsxPlHTFCg==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "7.18.0", - "@typescript-eslint/parser": "7.18.0", - "@typescript-eslint/utils": "7.18.0" + "@typescript-eslint/eslint-plugin": "8.32.1", + "@typescript-eslint/parser": "8.32.1", + "@typescript-eslint/utils": "8.32.1" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/undici-types": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==" + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" }, "node_modules/update-browserslist-db": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", - "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "dev": true, "funding": [ { @@ -5801,6 +6255,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" @@ -5817,6 +6272,7 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } @@ -5824,13 +6280,15 @@ "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "license": "MIT" }, "node_modules/v8-to-istanbul": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "dev": true, + "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -5841,14 +6299,18 @@ } }, "node_modules/vite": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.9.tgz", - "integrity": "sha512-MSgUxHcaXLtnBPktkbUSoQUANApKYuxZ6DrbVENlIorbhL2dZydTLaZ01tjUoE3szeFzlFk9ANOKk0xurh4MKA==", + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", + "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", "dev": true, + "license": "MIT", "dependencies": { - "esbuild": "^0.24.2", - "postcss": "^8.4.49", - "rollup": "^4.23.0" + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" }, "bin": { "vite": "bin/vite.js" @@ -5911,11 +6373,40 @@ } } }, + "node_modules/vite/node_modules/fdir": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", + "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/vite/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/walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "makeerror": "1.0.12" } @@ -5924,6 +6415,7 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", "engines": { "node": ">= 8" } @@ -5932,13 +6424,15 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/whatwg-url": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", "dev": true, + "license": "MIT", "dependencies": { "lodash.sortby": "^4.7.0", "tr46": "^1.0.1", @@ -5950,6 +6444,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -5965,6 +6460,7 @@ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5974,6 +6470,7 @@ "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", @@ -5990,13 +6487,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/write-file-atomic": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -6010,6 +6509,7 @@ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", "dev": true, + "license": "MIT", "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" @@ -6023,6 +6523,7 @@ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.0" } @@ -6032,6 +6533,7 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -6040,13 +6542,15 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "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", @@ -6065,6 +6569,7 @@ "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" } @@ -6073,6 +6578,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "license": "MIT", "engines": { "node": ">=6" } @@ -6082,6 +6588,7 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, diff --git a/package.json b/package.json index 36fd5a5..7b3ac18 100644 --- a/package.json +++ b/package.json @@ -26,19 +26,18 @@ "version:major": "npm version major" }, "devDependencies": { - "@eslint/js": "^9.5.0", - "@types/eslint__js": "^8.42.3", + "@eslint/js": "^9.27.0", "@types/jest": "^29.5.14", "@types/xml2js": "^0.4.14", - "eslint": "^8.57.0", + "eslint": "^9.27.0", "events": "^3.3.0", "fetch-mock-jest": "^1.5.1", "jest": "^29.7.0", - "prettier": "3.3.2", - "ts-jest": "^29.2.5", - "typescript": "^5.4.5", - "typescript-eslint": "^7.13.1", - "vite": "6.0.9", + "prettier": "^3.5.3", + "ts-jest": "^29.3.4", + "typescript": "^5.8.3", + "typescript-eslint": "^8.32.1", + "vite": "^6.3.5", "xml2js": "^0.6.2" }, "dependencies": { From e1328c7898fba8573f382956b915794037b1832b Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Mon, 19 May 2025 16:02:48 +0000 Subject: [PATCH 33/38] 1.1.4 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index cfa757f..f352ca4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "substack-feed-api", - "version": "1.1.3", + "version": "1.1.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "substack-feed-api", - "version": "1.1.3", + "version": "1.1.4", "dependencies": { "node-fetch": "^3.3.2", "ts-node": "^10.9.2", diff --git a/package.json b/package.json index a777a9f..bc8b71d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "substack-feed-api", - "version": "1.1.3", + "version": "1.1.4", "type": "module", "files": [ "dist", From 60c1fe6de65ed967e8c6f3ddc8faf5ff0e028472 Mon Sep 17 00:00:00 2001 From: Rohit Khanduri Date: Fri, 30 Jan 2026 13:52:07 +0100 Subject: [PATCH 34/38] fix: Refactor to generic RSS parser with Cheerio Replaces xml2js-based parsing with a generic Cheerio-powered RSS parser. Adds type-safe selector maps, new helpers for Substack and Goodreads feeds, and improves error handling. Updates README and type definitions, introduces new tests, and adds Cheerio as a dependency. Updates GitHub workflows for versioning and release, and adds a version check workflow. --- .env.copy | 4 + .github/PULL_REQUEST_TEMPLATE.md | 5 +- .github/workflows/bump_version.yml | 102 +- .github/workflows/ci.yml | 139 +- .github/workflows/version_check.yml | 109 ++ .gitignore | 1 + README.md | 288 +++- index.d.ts | 150 +- lib/README.md | 288 ++++ lib/__tests__/app.test.ts | 38 +- lib/goodreads.ts | 76 + lib/goodreads/goodreads.ts | 75 - lib/goodreads/typeguards.ts | 53 - lib/goodreads/types.ts | 41 - lib/index.ts | 53 + lib/main.ts | 146 -- lib/substack.ts | 27 + lib/typeguards.ts | 218 --- lib/types.ts | 127 -- package-lock.json | 2116 ++++++++++++++------------- package.json | 7 +- src/main.ts | 269 +++- src/vite-env.d.ts | 12 + vite.config.ts | 65 +- 24 files changed, 2461 insertions(+), 1948 deletions(-) create mode 100644 .env.copy create mode 100644 .github/workflows/version_check.yml create mode 100644 lib/README.md create mode 100644 lib/goodreads.ts delete mode 100644 lib/goodreads/goodreads.ts delete mode 100644 lib/goodreads/typeguards.ts delete mode 100644 lib/goodreads/types.ts create mode 100644 lib/index.ts delete mode 100644 lib/main.ts create mode 100644 lib/substack.ts delete mode 100644 lib/typeguards.ts delete mode 100644 lib/types.ts diff --git a/.env.copy b/.env.copy new file mode 100644 index 0000000..f51610f --- /dev/null +++ b/.env.copy @@ -0,0 +1,4 @@ +VITE_PROXY_SUBSTACK_ORIGIN=xxxx +VITE_PROXY_SUBSTACK_PATH=xxxx +VITE_PROXY_GOODREADS_ORIGIN=xxxx +VITE_PROXY_GOODREADS_PATH=xxxx diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 17ea892..8e88e0a 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -8,6 +8,9 @@ ## Checklist +- [ ] This PR targets a release branch named `release/patch`, `release/minor`, or `release/major` as appropriate. +- [ ] `package.json` has been bumped with the correct semver increment for this release. +- [ ] `package-lock.json` (and any other lockfiles) have been updated and match the version in `package.json`. - [ ] The code follows the repository's coding standards and style guidelines. - [ ] All tests have been written or updated to cover the changes in this PR. - [ ] The code passes all existing tests. @@ -15,7 +18,7 @@ - [ ] Any new dependencies have been documented (if applicable). - [ ] Any necessary migration steps have been outlined (if applicable). - [ ] The code has been reviewed by at least one other team member. -- [ ] The branch is up-to-date with the latest changes from the main/master branch. +- [ ] The branch is up-to-date with the latest changes from the main branch. ## Testing Instructions diff --git a/.github/workflows/bump_version.yml b/.github/workflows/bump_version.yml index b111c97..100ac7e 100644 --- a/.github/workflows/bump_version.yml +++ b/.github/workflows/bump_version.yml @@ -1,54 +1,80 @@ -name: Bump version, commit and push tag -# This workflow is triggered on push to a release branch (release/patch, release/minor, release/major). -# It uses the npm-get-version-action to get the current version from package.json and bumps the version based on the branch name. -# It also commits the changes made to package.json and pushes the tag to the repository. +name: Prepare release version + on: push: branches: - - 'release/*' - workflow_call: + - release/** + workflow_dispatch: + +concurrency: + group: bump-version-${{ github.ref }} + cancel-in-progress: false + jobs: - bump_version: - # Only run if the PR is from a release branch (release/patch, release/minor, release/major) - if: ${{ github.ref_name == 'release/patch' || github.ref_name == 'release/minor' || github.ref_name == 'release/major' }} + bump: + name: Bump package version runs-on: ubuntu-latest - strategy: - matrix: - node-version: [ 20.x ] + permissions: + contents: write steps: - # Checkout the repo - - uses: actions/checkout@v4 - # Setup node - - uses: actions/setup-node@v4 + - name: Validate release branch naming + run: | + case "${GITHUB_REF_NAME}" in + release/patch|release/minor|release/major) + echo "Release branch ${GITHUB_REF_NAME} accepted." + ;; + *) + echo "Invalid release branch name: ${GITHUB_REF_NAME}" + exit 1 + ;; + esac + + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Use Node.js + uses: actions/setup-node@v4 with: - node-version: ${{ matrix.node-version }} + node-version: 20 - name: Install dependencies - run: npm install + run: npm ci - - name: Setup Git user + - name: Run unit tests + run: npm test --if-present + + - name: Determine bump type + id: bump run: | - git config user.name "GitHub Actions" - git config user.email "actions@github.com" + case "${GITHUB_REF_NAME}" in + release/patch) echo "type=patch" >>"$GITHUB_OUTPUT" ;; + release/minor) echo "type=minor" >>"$GITHUB_OUTPUT" ;; + release/major) echo "type=major" >>"$GITHUB_OUTPUT" ;; + esac - - name: Check for uncommitted changes + - name: Configure git author run: | - if [ -n "$(git status --porcelain)" ]; then - echo "Uncommitted changes detected. Committing..." - git add . - git commit -m "Pre-version bump changes" - else - echo "Working directory clean. Proceeding with version bump." - fi + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" - - name: Bump version patch - if: github.ref == 'refs/heads/release/patch' - run: npm run version:patch && git push --follow-tags + - name: Bump package version + run: | + npm version ${{ steps.bump.outputs.type }} --no-git-tag-version --commit-hooks false + VERSION="$(node -p "require('./package.json').version")" + echo "version=${VERSION}" >>"$GITHUB_OUTPUT" + id: version - - name: Bump version minor - if: github.ref == 'refs/heads/release/minor' - run: npm run version:minor && git push --follow-tags + - name: Commit version bump + run: | + if git status --porcelain | grep .; then + git add package.json package-lock.json + git commit -m "chore: bump version to v${{ steps.version.outputs.version }}" + else + echo "No changes to commit." + fi - - name: Bump version major - if: github.ref == 'refs/heads/release/major' - run: npm run version:major && git push --follow-tags \ No newline at end of file + - name: Push changes + if: github.ref_protected != 'true' + run: git push --set-upstream origin "${GITHUB_REF_NAME}" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b9a997c..18ed878 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,53 +1,112 @@ -name: CI -# This workflow is triggered on push to the main branch. -# It uses the npm-get-version-action to get the current version from package.json and creates a GitHub release from the latest tag. -# It also publishes the package to NPM. +name: Release + on: push: branches: - - 'main' + - main + workflow_dispatch: + +concurrency: + group: release-main + cancel-in-progress: false + jobs: - build: + publish: + name: Publish package and tag release runs-on: ubuntu-latest permissions: contents: write - strategy: - matrix: - node-version: [ 20.x ] + packages: write + id-token: write # Required for npm trusted publishing (OIDC) steps: - # Checkout the repo - - uses: actions/checkout@v4 - with : - ref: ${{ github.refs }} - # Setup node - - uses: actions/setup-node@v4 + - name: Checkout repository + uses: actions/checkout@v4 with: - node-version: ${{ matrix.node-version }} - # Add the registry URL to publish to NPM (optional) - registry-url: 'https://registry.npmjs.org' - # Add the scope of the package to publish to NPM (optional) - scope: '@rohit1901' - # Install dependencies + fetch-depth: 0 + + - name: Use Node.js + uses: actions/setup-node@v4 + with: + node-version: 24 + registry-url: https://registry.npmjs.org + - name: Install dependencies - if: ${{ success() }} - run: npm install - # Get the current version from package.json - - name: Get the current version from package.json - id: package-version - uses: martinbeentjes/npm-get-version-action@v1.3.1 - # Build the project - - name: Build the project - if: ${{ success() }} + run: npm ci + + - name: Run tests + run: npm test --if-present + + - name: Build package run: npm run build - # Create a GitHub release - - name: Create a GitHub Release from the latest tag - if: ${{ success() }} - run: gh release create v${{ steps.package-version.outputs.current-version }} + + - name: Determine package metadata + id: pkg + run: | + node <<'NODE' >> "$GITHUB_OUTPUT" + const pkg = require('./package.json'); + console.log(`name=${pkg.name}`); + console.log(`version=${pkg.version}`); + NODE + + - name: Check npm registry for existing version + id: registry env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # Publish to NPM - - name: Publish to NPM - if: ${{ success() }} - run: npm publish --access public + PACKAGE: ${{ steps.pkg.outputs.name }} + VERSION: ${{ steps.pkg.outputs.version }} + run: | + if npm view "${PACKAGE}@${VERSION}" version >/dev/null 2>&1; then + echo "Version ${PACKAGE}@${VERSION} already exists on the npm registry." + echo "registry_has_version=true" >> "$GITHUB_OUTPUT" + else + echo "Version ${PACKAGE}@${VERSION} not found on the npm registry." + echo "registry_has_version=false" >> "$GITHUB_OUTPUT" + fi + + - name: Ensure git tag exists + id: tag env: - NODE_AUTH_TOKEN: ${{secrets.NPM_PUBLISH_TOKEN}} \ No newline at end of file + TAG: v${{ steps.pkg.outputs.version }} + run: | + if git rev-parse -q --verify "refs/tags/${TAG}" >/dev/null; then + echo "Tag ${TAG} already exists." + echo "tag_exists=true" >> "$GITHUB_OUTPUT" + else + git tag "${TAG}" + git push origin "${TAG}" + echo "tag_exists=false" >> "$GITHUB_OUTPUT" + fi + + - name: Write release summary + run: | + { + echo "## Release pipeline" + echo "- Package: \`${{ steps.pkg.outputs.name }}\`" + echo "- Version: \`v${{ steps.pkg.outputs.version }}\`" + if [ "${{ steps.tag.outputs.tag_exists }}" = "true" ]; then + echo "- Git tag: already existed (reusing existing tag)" + else + echo "- Git tag: created for this run" + fi + if [ "${{ steps.registry.outputs.registry_has_version }}" = "true" ]; then + echo "- Registry: version already published (publish will be skipped)" + else + echo "- Registry: version not yet published" + fi + echo "- Authentication: npm trusted publishing (OIDC)" + } >> "$GITHUB_STEP_SUMMARY" + + - name: Publish to npm + if: steps.registry.outputs.registry_has_version != 'true' + # No NODE_AUTH_TOKEN needed - uses OIDC via trusted publishing + run: npm publish --access public --provenance + + - name: Create GitHub release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + TAG: v${{ steps.pkg.outputs.version }} + run: | + if gh release view "${TAG}" >/dev/null 2>&1; then + echo "Release ${TAG} already exists." + else + gh release create "${TAG}" --title "${TAG}" --generate-notes + fi diff --git a/.github/workflows/version_check.yml b/.github/workflows/version_check.yml new file mode 100644 index 0000000..e1380f5 --- /dev/null +++ b/.github/workflows/version_check.yml @@ -0,0 +1,109 @@ +name: Version check + +on: + pull_request: + types: + - opened + - edited + - synchronize + - reopened + - ready_for_review + branches: + - main + +jobs: + verify-version: + name: Ensure semantic version bump + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Fetch base branch + run: git fetch origin "${{ github.base_ref }}" --depth=1 + + - name: Validate version bump + env: + GITHUB_HEAD_REF: ${{ github.head_ref }} + GITHUB_BASE_REF: ${{ github.base_ref }} + run: | + node <<'NODE' + const { execSync } = require("child_process"); + const fs = require("fs"); + + const summaryPath = process.env.GITHUB_STEP_SUMMARY; + const headRef = process.env.GITHUB_HEAD_REF || ""; + const baseRef = process.env.GITHUB_BASE_REF || "main"; + + function appendSummary(lines) { + if (!summaryPath) return; + fs.appendFileSync(summaryPath, lines.join("\n") + "\n"); + } + + const match = /^release\/(patch|minor|major)$/.exec(headRef); + if (!match) { + appendSummary([ + "## Version check failed", + `- PR branch **${headRef || "(unknown)"}** must follow \`release/(patch|minor|major)\`.` + ]); + console.error("Pull request branch must be named release/patch, release/minor, or release/major."); + process.exit(1); + } + const bumpType = match[1]; + + const headPkg = JSON.parse(fs.readFileSync("package.json", "utf8")); + const headLock = JSON.parse(fs.readFileSync("package-lock.json", "utf8")); + const headVersion = headPkg.version; + + const basePkgRaw = execSync(`git show origin/${baseRef}:package.json`, { encoding: "utf8" }); + const basePkg = JSON.parse(basePkgRaw); + const baseVersion = basePkg.version; + + function parse(version) { + const match = /^(\d+)\.(\d+)\.(\d+)$/.exec(version); + if (!match) { + throw new Error(`Invalid semver: ${version}`); + } + return match.slice(1).map(Number); + } + + function expectedVersion([maj, min, patch], type) { + if (type === "patch") return [maj, min, patch + 1]; + if (type === "minor") return [maj, min + 1, 0]; + if (type === "major") return [maj + 1, 0, 0]; + throw new Error(`Unknown bump type: ${type}`); + } + + function format(parts) { + return parts.join("."); + } + + const baseParts = parse(baseVersion); + const headParts = parse(headVersion); + const expectedParts = expectedVersion(baseParts, bumpType); + + const failures = []; + + if (headVersion !== headLock.version) { + failures.push(`- \`package-lock.json\` version **${headLock.version}** does not match \`package.json\` version **${headVersion}**.`); + } + + if (format(headParts) !== format(expectedParts)) { + failures.push(`- Expected a **${bumpType}** bump from ${baseVersion} to ${format(expectedParts)}, but found ${headVersion}.`); + } + + if (failures.length) { + appendSummary(["## Version check failed", ...failures]); + failures.forEach((line) => console.error(line.replace(/^- /, ""))); + process.exit(1); + } + + appendSummary([ + "## Version check passed", + `- Base version: \`${baseVersion}\``, + `- Proposed version: \`${headVersion}\``, + `- Bump type: **${bumpType}**` + ]); + NODE diff --git a/.gitignore b/.gitignore index e588aa6..f668bc7 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,4 @@ npm-debug.log* .idea/ .vscode/ +.env diff --git a/README.md b/README.md index 73cad16..ff202eb 100644 --- a/README.md +++ b/README.md @@ -1,103 +1,281 @@ # Substack Feed API -The Substack Feed API is a powerful and flexible API designed to fetch and parse Substack newsletter feeds, making it easier for developers to integrate Substack content into their applications. Built with TypeScript, this API leverages modern JavaScript practices to provide a robust solution for accessing Substack newsletter data. +`substack-feed-api` is a small TypeScript utility for turning RSS XML into typed objects using Cheerio, with first-class support for Substack and Goodreads feeds. ## Features -- **Fetch Newsletter Feeds**: Easily retrieve the latest posts from any Substack newsletter. -- **Parse Feed Data**: Convert Substack newsletter feeds into a structured format for easy integration. -- **TypeScript Support**: Enjoy the benefits of TypeScript, with type definitions for all the API responses. -- **Customizable**: Flexible API that can be tailored to fit the needs of your application. +- **Type-safe** mapping from RSS XML to your own TypeScript types via generic selector maps. +- Built-in helpers for Substack posts and Goodreads bookshelf RSS feeds (including shelves / reading status). +- Uses Cheerio in XML mode, works well with namespaced tags like `content:encoded`. +- Graceful error handling with configurable fallbacks and silent logging. -## Getting Started +## Installation -### Prerequisites +```bash +npm install substack-feed-api +# or +yarn add substack-feed-api +# or +pnpm add substack-feed-api +``` -- Node.js (version 20.x or higher) -- npm (latest version) +## Quick Start -### Installation +### Parsing Substack RSS -To use the Substack Feed API in your project, follow these steps: +Substack exposes a standard RSS 2.0 feed with a `` and multiple `` entries; each item contains fields like ``, `<description>`, `<link>`, `<pubDate>`, and `<content:encoded>` for the HTML body. -1. Install the package via npm: +```ts +import { parseSubstackRss, SubstackItem } from 'substack-feed-api'; -```bash -npm install substack-feed-api +const xml = await fetch('https://example.substack.com/feed').then(r => r.text()); + +const posts: SubstackItem[] = parseSubstackRss(xml); + +// Example item +// { +// title: 'Both Not Half by Jassa Ahluwalia', +// description: 'A Humorous Journey Through Identity, Yet Lacking Cohesion', +// link: 'https://…', +// pubDate: 'Sun, 06 Oct 2024 15:35:17 GMT', +// content: '<p>Jassa Ahluwalia\'s <strong>Both Not Half</strong>…' +// } ``` -2. Import the API into your project: +You can override any selector if your feed schema differs: -```typescript -import { getSubstackFeed } from 'substack-feed-api'; +```ts +const postsCustom = parseSubstackRss(xml, { + selectors: { + // use <description> as content + content: 'description', + }, +}); ``` -### Usage +### Parsing Goodreads Bookshelf RSS -Here's a quick example to get you started: +Goodreads’ “bookshelf” RSS feed exposes many book-related tags per `<item>` (e.g. `<title>`, `<book_description>`, `<book_large_image_url>`, `<author_name>`, `<user_shelves>`). -```typescript -getSubstackFeed('your-substack-newsletter-name') - .then((feed) => { - console.log(feed); - }) - .catch((error) => { - console.error(error); - }); +The library exposes a Goodreads-specific helper that returns a higher-level `GoodreadsReadingState`: + +```ts +import { + parseGoodreadsRss, + GoodreadsReadingState, +} from 'substack-feed-api'; + +const xml = await fetch('<goodreads-list-rss-url>').then(r => r.text()); + +const states: GoodreadsReadingState[] = parseGoodreadsRss(xml); + +// Example shape: +// { +// status: 'WANTS_TO_READ' | 'IS_READING' | 'FINISHED', +// book: { +// title: 'Malice (Detective Kaga, #1)', +// description: 'Acclaimed bestselling novelist Kunihiko Hidaka is found brutally murdered…', +// cover: 'https://i.gr-assets.com/.../20613611._SY475_.jpg', +// authors: [{ name: 'Keigo Higashino' }] +// } +// } ``` -There is also a possibility to pass your own callback function to the `getSubstackFeed` function. -This function will be called with the parsed feed data as an argument: +By default, the Goodreads parser derives status from `user_shelves` (e.g. `to-read`, `currently-reading`, `read`). -```typescript -getSubstackFeed('your-substack-newsletter-name', (err, result) => { - console.log(result); +You can still adjust selectors if Goodreads ever changes tag names: + +```ts +const customStates = parseGoodreadsRss(xml, { + selectors: { + // Example: use medium image instead of large + cover: 'book_medium_image_url', + }, }); ``` -You can also use the other exported functions from the package: -- `getFeedByLink`: Fetch a specific feed by its link. -- `getPosts`: Get all posts from a feed. +## API -Replace `'your-substack-newsletter-name'` with the name of the Substack newsletter you wish to fetch. +### `parseRssItems` – Generic Core -## Development +```ts +function parseRssItems<TRaw extends Record<string, string>>( + xml: string, + options?: { + itemSelector?: string; + selectors?: Partial<Record<keyof TRaw, string>>; + fallback?: TRaw[]; + } +): TRaw[]; +``` -To contribute to the Substack Feed API or run it locally for development, you will need to follow these steps: +- `xml`: Full RSS XML string. +- `itemSelector`: CSS selector for each RSS item node, default `'channel > item'`. +- `selectors`: Map from property name → CSS selector **relative to each item node**. +- `fallback`: Array to return if parsing fails (e.g., malformed XML); error is logged to `console.error` but not thrown. -1. Clone the repository: +Example: Minimal Generic Usage: -```bash -git clone https://github.com/rohit1901/substack-feed-api.git +```ts +type MinimalItem = { + title: string; + link: string; +}; + +const items = parseRssItems<MinimalItem>(xml, { + selectors: { + title: 'title', + link: 'link', + }, +}); +``` + +### `parseSubstackRss` + +```ts +type SubstackItem = { + title: string; + description: string; + link: string; + pubDate: string; + content: string; +}; + +function parseSubstackRss( + xml: string, + options?: { + itemSelector?: string; + selectors?: Partial<Record<keyof SubstackItem, string>>; + fallback?: SubstackItem[]; + } +): SubstackItem[]; ``` -2. Install dependencies: +Default selectors (overridable): -```bash -npm install +```ts +{ + title: 'title', + description: 'description', + link: 'link', + pubDate: 'pubDate', + content: 'content\\:encoded', +} ``` -3. Run the development server: +This matches typical Substack feeds which use `content:encoded` for the full HTML article body. + +### `parseGoodreadsRss` + +```ts +type BookAuthor = { name: string }; + +type GoodreadsBook = { + title: string; + description: string; + cover: string; + authors?: BookAuthor[]; +}; + +type GoodreadsReadingStatus = 'IS_READING' | 'FINISHED' | 'WANTS_TO_READ'; + +type GoodreadsReadingState = { + book: GoodreadsBook; + status: GoodreadsReadingStatus; +}; + +function parseGoodreadsRss( + xml: string, + options?: { + itemSelector?: string; + selectors?: Partial<{ + title: string; + description: string; + cover: string; + author: string; + shelves: string; + }>; + fallback?: GoodreadsReadingState[]; // via raw fallback mapping + } +): GoodreadsReadingState[]; +``` -```bash -npm run dev +Default Goodreads selectors map RSS tags to an internal flat type: + +```ts +{ + title: 'title', + description: 'book_description', + cover: 'book_large_image_url', + author: 'author_name', + shelves: 'user_shelves', +} ``` -## Building +The parser then: -To build the project for production, run: +- Builds a flat raw record from each `<item>`. +- Maps `shelves` to a `GoodreadsReadingStatus` (e.g., `currently-reading` → `IS_READING`, `read` → `FINISHED`, otherwise `WANTS_TO_READ`). +- Wraps book information into `GoodreadsBook` and `BookAuthor`. -```bash -npm run build +## Error Handling + +All parsing functions follow the same pattern: + +- Wrap parsing and traversal in a `try/catch`. +- On error, log a concise entry to `console.error` with context (selectors, item selector). +- Return the provided `fallback` (default `[]`) instead of throwing. + +Example: + +```ts +const items = parseSubstackRss('<invalid-xml>', { + fallback: [], +}); // returns [], logs an error, does not crash your app ``` -This will generate the production-ready files in the `dist` directory. +This makes the library safe to use in background jobs, CLI tools, or edge handlers where a single bad feed should not bring down the entire process. -## Contributing +## Extending for Other Feeds -Contributions are welcome! Feel free to open an issue or submit a pull request if you have any improvements or bug fixes to suggest. +To support another RSS feed type, you generally: + +1. Define a flat `TRaw` type that contains only string fields. +2. Call `parseRssItems<TRaw>` with a selector map that matches the feed’s tags. +3. Map `TRaw` to your domain model in a small wrapper, similar to `parseGoodreadsRss`. + +Example skeleton: + +```ts +type MyFeedRaw = { + title: string; + summary: string; + link: string; +}; + +type MyFeedItem = { + title: string; + summary: string; + url: string; +}; + +function parseMyFeed(xml: string): MyFeedItem[] { + const raw = parseRssItems<MyFeedRaw>(xml, { + selectors: { + title: 'title', + summary: 'summary', + link: 'link', + }, + }); + + return raw.map(r => ({ + title: r.title, + summary: r.summary, + url: r.link, + })); +} +``` ## License This project is licensed under the MIT License. -``` diff --git a/index.d.ts b/index.d.ts index 4d798dd..f048ce0 100644 --- a/index.d.ts +++ b/index.d.ts @@ -1,79 +1,17 @@ -export type RawFeed = { - rss: { - channel: RawFeedChannel[]; - [key: string]: unknown; - }; -}; - -export interface RawFeedChannel { - title: string[]; - description: string[]; - link: string[]; - image: RawImage[]; - generator: string[]; - lastBuildDate: string[]; - "atom:link": AtomLink[]; - copyright: string[]; - language: string[]; - webMaster: string[]; - "itunes:owner": ItunesOwner[]; - "itunes:author": string[]; - "googleplay:owner": string[]; - "googleplay:email": string[]; - "googleplay:author": string[]; - item: RawItem[]; -} - -export interface RawImage { - url: string[]; - title: string[]; - link: string[]; -} - -export interface AtomLink { - $: GeneratedType; -} - -export interface GeneratedType { - href: string; - rel: string; - type: string; -} - -export interface ItunesOwner { - "itunes:email": string[]; - "itunes:name": string[]; -} +export type SelectorMap<TRaw extends Record<string, string>> = Partial< + Record<keyof TRaw, string> +>; -export interface RawItem { - title: string[]; - description: string[]; - link: string[]; - guid: Guid[]; - "dc:creator": string[]; - pubDate: string[]; - enclosure: Enclosure[]; - "content:encoded": string[]; -} - -export interface Guid { - _: string; - $: GeneratedType2; -} - -export interface GeneratedType2 { - isPermaLink: string; -} - -export interface Enclosure { - $: GeneratedType3; -} +export type ParseRssOptions<TRaw extends Record<string, string>> = { + itemSelector?: string; + selectors?: SelectorMap<TRaw>; + fallback?: TRaw[]; +}; -export interface GeneratedType3 { - url: string; - length: string; - type: string; -} +export function parseRssItems<TRaw extends Record<string, string>>( + xml: string, + options?: ParseRssOptions<TRaw>, +): TRaw[]; export type SubstackItem = { title: string; @@ -83,29 +21,51 @@ export type SubstackItem = { content: string; }; -export function getSubstackFeed( - feedUrl: string, - proxy?: boolean, - callback?: (err: Error | null, result: unknown) => void, -): Promise<string | undefined>; -export function getFeedByLink(rawFeed: unknown, link: string): RawFeedChannel[]; -export function getPosts(channels: RawFeedChannel[]): SubstackItem[]; +export function parseSubstackRss( + xml: string, + options?: Omit<ParseRssOptions<SubstackItem>, "selectors"> & { + selectors?: SelectorMap<SubstackItem>; + }, +): SubstackItem[]; -// Goodreads RSS Feed Parser +export type BookAuthor = { + name: string; +}; -// Goodreads Public Types -export type GoodreadsItem = { +export type GoodreadsBook = { title: string; - link: string; - book_image_url: string; - author_name: string; - book_description: string; - [key: string]: unknown; + description: string; + cover: string; + authors?: BookAuthor[]; +}; + +export type GoodreadsReadingStatus = + | "IS_READING" + | "FINISHED" + | "WANTS_TO_READ"; + +export const READING_STATES: readonly [ + "IS_READING", + "FINISHED", + "WANTS_TO_READ", +]; + +export type GoodreadsReadingState = { + book: GoodreadsBook; + status: GoodreadsReadingStatus; +}; + +export type GoodreadsRaw = { + title: string; + description: string; + cover: string; + author: string; + shelves: string; }; -// Goodreads Public API -export const getGoodreadsFeed: ( - feedUrl: string, - callback?: (err: Error | null, result: unknown) => void, -) => Promise<unknown>; -export const getGoodreadsFeedItems: (rawFeed: unknown) => GoodreadsItem[]; +export function parseGoodreadsRss( + xml: string, + options?: Omit<ParseRssOptions<GoodreadsRaw>, "selectors"> & { + selectors?: SelectorMap<GoodreadsRaw>; + }, +): GoodreadsReadingState[]; diff --git a/lib/README.md b/lib/README.md new file mode 100644 index 0000000..f2ec2c8 --- /dev/null +++ b/lib/README.md @@ -0,0 +1,288 @@ +`rss-feed-parser` is a small TypeScript utility for turning RSS XML into typed objects using Cheerio, with first-class support for Substack and Goodreads feeds. + +## Features + +- **Type-safe** mapping from RSS XML to your own TypeScript types via generic selector maps. +- Built-in helpers for Substack posts and Goodreads bookshelf RSS feeds (including shelves / reading status). +- Uses Cheerio in XML mode, works well with namespaced tags like `content:encoded`. +- Graceful error handling with configurable fallbacks and silent logging. + +*** + +## Installation + +```bash +npm install rss-feed-parser cheerio +# or +yarn add rss-feed-parser cheerio +# or +pnpm add rss-feed-parser cheerio +``` + +Cheerio is a peer dependency because the library uses it under the hood to traverse RSS XML. + +*** + +## Quick start + +### Parsing Substack RSS + +Substack exposes a standard RSS 2.0 feed with a `<channel>` and multiple `<item>` entries; each item contains fields like `<title>`, `<description>`, `<link>`, `<pubDate>`, and `<content:encoded>` for the HTML body. + +```ts +import { parseSubstackRss, SubstackItem } from 'rss-feed-parser'; + +const xml = await fetch('https://example.substack.com/feed').then(r => r.text()); + +const posts: SubstackItem[] = parseSubstackRss(xml); + +// Example item +// { +// title: 'Both Not Half by Jassa Ahluwalia', +// description: 'A Humorous Journey Through Identity, Yet Lacking Cohesion', +// link: 'https://…', +// pubDate: 'Sun, 06 Oct 2024 15:35:17 GMT', +// content: '<p>Jassa Ahluwalia\'s <strong>Both Not Half</strong>…' +// } +``` + +You can override any selector if your feed schema differs: + +```ts +const postsCustom = parseSubstackRss(xml, { + selectors: { + // use <description> as content + content: 'description', + }, +}); +``` + +*** + +### Parsing Goodreads bookshelf RSS + +Goodreads’ “bookshelf” RSS feed exposes many book-related tags per `<item>` (e.g. `<title>`, `<book_description>`, `<book_large_image_url>`, `<author_name>`, `<user_shelves>`). + +The library exposes a Goodreads-specific helper that returns a higher-level `GoodreadsReadingState`: + +```ts +import { + parseGoodreadsRss, + GoodreadsReadingState, +} from 'rss-feed-parser'; + +const xml = await fetch('<goodreads-list-rss-url>').then(r => r.text()); + +const states: GoodreadsReadingState[] = parseGoodreadsRss(xml); + +// Example shape: +// { +// status: 'WANTS_TO_READ' | 'IS_READING' | 'FINISHED', +// book: { +// title: 'Malice (Detective Kaga, #1)', +// description: 'Acclaimed bestselling novelist Kunihiko Hidaka is found brutally murdered…', +// cover: 'https://i.gr-assets.com/.../20613611._SY475_.jpg', +// authors: [{ name: 'Keigo Higashino' }] +// } +// } +``` + +By default, the Goodreads parser derives status from `user_shelves` (e.g. `to-read`, `currently-reading`, `read`). + +You can still adjust selectors if Goodreads ever changes tag names: + +```ts +const customStates = parseGoodreadsRss(xml, { + selectors: { + // Example: use medium image instead of large + cover: 'book_medium_image_url', + }, +}); +``` + +*** + +## API + +### `parseRssItems` – generic core + +```ts +function parseRssItems<TRaw extends Record<string, string>>( + xml: string, + options?: { + itemSelector?: string; + selectors?: Partial<Record<keyof TRaw, string>>; + fallback?: TRaw[]; + } +): TRaw[]; +``` + +- `xml`: full RSS XML string. +- `itemSelector`: CSS selector for each RSS item node, default `'channel > item'`. +- `selectors`: map from property name → CSS selector **relative to each item node**. +- `fallback`: array to return if parsing fails (e.g. malformed XML); error is logged to `console.error` but not thrown. + +Example: minimal generic usage: + +```ts +type MinimalItem = { + title: string; + link: string; +}; + +const items = parseRssItems<MinimalItem>(xml, { + selectors: { + title: 'title', + link: 'link', + }, +}); +``` + +### `parseSubstackRss` + +```ts +type SubstackItem = { + title: string; + description: string; + link: string; + pubDate: string; + content: string; +}; + +function parseSubstackRss( + xml: string, + options?: { + itemSelector?: string; + selectors?: Partial<Record<keyof SubstackItem, string>>; + fallback?: SubstackItem[]; + } +): SubstackItem[]; +``` + +Default selectors (overridable): + +```ts +{ + title: 'title', + description: 'description', + link: 'link', + pubDate: 'pubDate', + content: 'content\\:encoded', +} +``` + +This matches typical Substack feeds which use `content:encoded` for the full HTML article body. + +### `parseGoodreadsRss` + +```ts +type BookAuthor = { name: string }; + +type GoodreadsBook = { + title: string; + description: string; + cover: string; + authors?: BookAuthor[]; +}; + +type GoodreadsReadingStatus = 'IS_READING' | 'FINISHED' | 'WANTS_TO_READ'; + +type GoodreadsReadingState = { + book: GoodreadsBook; + status: GoodreadsReadingStatus; +}; + +function parseGoodreadsRss( + xml: string, + options?: { + itemSelector?: string; + selectors?: Partial<{ + title: string; + description: string; + cover: string; + author: string; + shelves: string; + }>; + fallback?: GoodreadsReadingState[]; // via raw fallback mapping + } +): GoodreadsReadingState[]; +``` + +Default Goodreads selectors map RSS tags to an internal flat type: + +```ts +{ + title: 'title', + description: 'book_description', + cover: 'book_large_image_url', + author: 'author_name', + shelves: 'user_shelves', +} +``` + +The parser then: + +- Builds a flat raw record from each `<item>`. +- Maps `shelves` to a `GoodreadsReadingStatus` (e.g. `currently-reading` → `IS_READING`, `read` → `FINISHED`, otherwise `WANTS_TO_READ`). +- Wraps book information into `GoodreadsBook` and `BookAuthor`. + +*** + +## Error handling + +All parsing functions follow the same pattern: + +- Wrap parsing and traversal in a `try/catch`. +- On error, log a concise entry to `console.error` with context (selectors, item selector). +- Return the provided `fallback` (default `[]`) instead of throwing. + +Example: + +```ts +const items = parseSubstackRss('<invalid-xml>', { + fallback: [], +}); // returns [], logs an error, does not crash your app +``` + +This makes the library safe to use in background jobs, CLI tools, or edge handlers where a single bad feed should not bring down the entire process. + +*** + +## Extending for other feeds + +To support another RSS feed type, you generally: + +1. Define a flat `TRaw` type that contains only string fields. +2. Call `parseRssItems<TRaw>` with a selector map that matches the feed’s tags. +3. Map `TRaw` to your domain model in a small wrapper, similar to `parseGoodreadsRss`. + +Example skeleton: + +```ts +type MyFeedRaw = { + title: string; + summary: string; + link: string; +}; + +type MyFeedItem = { + title: string; + summary: string; + url: string; +}; + +function parseMyFeed(xml: string): MyFeedItem[] { + const raw = parseRssItems<MyFeedRaw>(xml, { + selectors: { + title: 'title', + summary: 'summary', + link: 'link', + }, + }); + + return raw.map(r => ({ + title: r.title, + summary: r.summary, + url: r.link, + })); +} diff --git a/lib/__tests__/app.test.ts b/lib/__tests__/app.test.ts index 4709e3d..a6f4366 100644 --- a/lib/__tests__/app.test.ts +++ b/lib/__tests__/app.test.ts @@ -1,3 +1,35 @@ -import fetchMock from "fetch-mock-jest"; -// TODO: Add tests -fetchMock.sandbox(); +// TODO: add better and more comprehensive tests for parseRssItems +import { parseRssItems } from "../"; + +describe("parseRssItems", () => { + it("should parse a simple RSS feed", () => { + const xml = ` + <rss> + <channel> + <item> + <title>Test Title + Test Description + https://example.com + + + + `; + + const result = parseRssItems(xml, { + itemSelector: "channel > item", + selectors: { + title: "title", + description: "description", + link: "link", + }, + }); + + expect(result).toEqual([ + { + title: "Test Title", + description: "Test Description", + link: "https://example.com", + }, + ]); + }); +}); diff --git a/lib/goodreads.ts b/lib/goodreads.ts new file mode 100644 index 0000000..6948c38 --- /dev/null +++ b/lib/goodreads.ts @@ -0,0 +1,76 @@ +import { ParseRssOptions, SelectorMap, parseRssItems } from "."; + +export type BookAuthor = { + name: string; +}; +export type GoodreadsBook = { + title: string; + description: string; + cover: string; + authors?: BookAuthor[]; +}; +export const READING_STATES: GoodreadsReadingStatus[] = [ + "IS_READING", + "FINISHED", + "WANTS_TO_READ", +] as const; +export type GoodreadsReadingStatus = + | "IS_READING" + | "FINISHED" + | "WANTS_TO_READ"; + +export type GoodreadsReadingState = { + book: GoodreadsBook; + status: GoodreadsReadingStatus; +}; + +export type GoodreadsRaw = { + title: string; + description: string; + cover: string; + author: string; + shelves: string; +}; + +const goodreadsDefaultSelectors: Record = { + title: "title", + description: "book_description", + cover: "book_large_image_url", + author: "author_name", + shelves: "user_shelves", +}; + +function mapShelfToStatus(shelves: string): GoodreadsReadingStatus { + if (shelves.includes("currently-reading")) return "IS_READING"; + if (shelves.includes("read")) return "FINISHED"; + return "WANTS_TO_READ"; // "to-read" and everything else +} + +export function parseGoodreadsRss( + xml: string, + options: Omit, "selectors"> & { + selectors?: SelectorMap; + } = {}, +): GoodreadsReadingState[] { + const mergedSelectors: SelectorMap = { + ...goodreadsDefaultSelectors, + ...(options.selectors ?? {}), + }; + + const rawItems = parseRssItems(xml, { + ...options, + selectors: mergedSelectors, + }); + + return rawItems.map( + (raw): GoodreadsReadingState => ({ + status: mapShelfToStatus(raw.shelves), + book: { + title: raw.title, + description: raw.description, + cover: raw.cover, + authors: raw.author ? [{ name: raw.author }] : [], + }, + }), + ); +} diff --git a/lib/goodreads/goodreads.ts b/lib/goodreads/goodreads.ts deleted file mode 100644 index 1f613e4..0000000 --- a/lib/goodreads/goodreads.ts +++ /dev/null @@ -1,75 +0,0 @@ -// TODO: to be moved to a separate package -import * as parser from "xml2js"; -import { - isRawGoodreadsFeed, - isRawGoodreadsFeedChannel, - isRawGoodreadsFeedRSS, - isRawGoodreadsItem, - isValidClientSideFeed, -} from "./typeguards"; -import { GoodreadsItem, RawGoodreadsItem } from "./types"; - -const CORS_PROXY = "https://api.allorigins.win/get?url="; -const isBrowser = typeof document !== "undefined"; - -// Utils -const transformRawGoodreadsItem = (item: RawGoodreadsItem): GoodreadsItem => { - return { - title: item.title[0], - link: item.link[0], - book_image_url: item["book_image_url"][0], - author_name: item["author_name"][0], - book_description: item["book_description"][0], - }; -}; - -const parseXML = async ( - xml = "", - /* eslint-disable @typescript-eslint/no-explicit-any */ - callback?: (err: Error | null, result: any) => void, -) => { - if (!callback) return parser.parseStringPromise(xml); - parser.parseString(xml, callback); -}; - -// Internal API - -const getRawXMLGoodreadsFeed = async (feedUrl: string) => { - try { - const path = isBrowser - ? `${CORS_PROXY}${encodeURIComponent(feedUrl)}` - : feedUrl; - const promise = await fetch(path); - if (promise.ok) return isBrowser ? promise.json() : promise.text(); - } catch (error) { - throw new Error("Error occurred fetching Feed from Goodreads", error); - } -}; - -// Goodreads Public API -export const getGoodreadsFeed = async ( - feedUrl: string, - callback?: (err: Error | null, result: unknown) => void, -): Promise => { - const rawXML = await getRawXMLGoodreadsFeed(feedUrl); - // NOTE: server side call - if (!isBrowser) { - return parseXML(rawXML, callback); - } - // NOTE: client side call - if (!isValidClientSideFeed(rawXML)) - throw new Error("Error occurred fetching Feed from Substack"); - await parseXML(rawXML.contents, callback); -}; -export const getGoodreadsFeedItems = (rawFeed: unknown): GoodreadsItem[] => { - if (!isRawGoodreadsFeed(rawFeed)) - throw new Error("Goodreads feed is not in the correct format"); - if (!isRawGoodreadsFeedRSS(rawFeed.rss)) - throw new Error("Goodreads RSS feed is not in the correct format"); - const channels = rawFeed.rss.channel.filter(isRawGoodreadsFeedChannel); - if (channels.length === 0) - throw new Error("Goodreads feed does not contain any channels"); - const channel = channels[0]; - if (!Array.isArray(channel.item)) return []; - return channel.item.filter(isRawGoodreadsItem).map(transformRawGoodreadsItem); -}; diff --git a/lib/goodreads/typeguards.ts b/lib/goodreads/typeguards.ts deleted file mode 100644 index df8d4b6..0000000 --- a/lib/goodreads/typeguards.ts +++ /dev/null @@ -1,53 +0,0 @@ -// Goodreads Feed Typeguards -// TODO: to be moved to a separate package -import { - RawGoodreadsFeed, - RawGoodreadsFeedChannel, - RawGoodreadsFeedRSS, - RawGoodreadsItem, -} from "./types"; - -export const isRawGoodreadsFeed = (data: unknown): data is RawGoodreadsFeed => { - return ( - data !== null && typeof data === "object" && data.hasOwnProperty("rss") - ); -}; - -export const isRawGoodreadsFeedRSS = ( - data: unknown, -): data is RawGoodreadsFeedRSS => { - return ( - typeof data === "object" && data !== null && data.hasOwnProperty("channel") - ); -}; - -export const isRawGoodreadsFeedChannel = ( - channel: unknown, -): channel is RawGoodreadsFeedChannel => { - return ( - typeof channel === "object" && - channel !== null && - channel.hasOwnProperty("title") && - channel.hasOwnProperty("item") - ); -}; -export const isRawGoodreadsItem = (item: unknown): item is RawGoodreadsItem => { - return ( - typeof item === "object" && - item !== null && - item.hasOwnProperty("title") && - item.hasOwnProperty("link") && - item.hasOwnProperty("book_image_url") && - item.hasOwnProperty("author_name") && - item.hasOwnProperty("book_description") - ); -}; - -export const isValidClientSideFeed = (data: unknown): boolean => { - return ( - typeof data === "object" && - data !== null && - data.hasOwnProperty("rss") && - data.hasOwnProperty("status") - ); -}; diff --git a/lib/goodreads/types.ts b/lib/goodreads/types.ts deleted file mode 100644 index b4e4932..0000000 --- a/lib/goodreads/types.ts +++ /dev/null @@ -1,41 +0,0 @@ -// Goodreads Feed Types -// TODO: to be moved to a separate package -// -export type RawGoodreadsFeed = { - rss: RawGoodreadsFeedRSS; -}; - -export type RawGoodreadsFeedRSS = { - channel: RawGoodreadsFeedChannel[]; - [key: string]: unknown; -}; - -export type RawGoodreadsFeedChannel = { - title: string[]; - item: RawGoodreadsItem[]; - [key: string]: unknown; -}; - -export type RawGoodreadsItem = { - title: string[]; - link: string[]; - book_image_url: string[]; - author_name: string[]; - book_description: string[]; - [key: string]: unknown; -}; - -export type GoodreadsFeedChannel = { - title: string; - item: GoodreadsItem[]; - [key: string]: unknown; -}; - -export type GoodreadsItem = { - title: string; - link: string; - book_image_url: string; - author_name: string; - book_description: string; - [key: string]: unknown; -}; diff --git a/lib/index.ts b/lib/index.ts new file mode 100644 index 0000000..053dc66 --- /dev/null +++ b/lib/index.ts @@ -0,0 +1,53 @@ +import { load } from "cheerio"; + +// Generic selector map keyed by the raw record keys +export type SelectorMap> = Partial< + Record +>; + +export type ParseRssOptions> = { + itemSelector?: string; + selectors?: SelectorMap; + fallback?: TRaw[]; +}; + +/** + * Generic RSS → array of flat string records. + */ +export function parseRssItems>( + xml: string, + { + itemSelector = "channel > item", + selectors = {} as SelectorMap, + fallback = [], + }: ParseRssOptions = {}, +): TRaw[] { + try { + const $ = load(xml, { xmlMode: true }); + + const items: TRaw[] = []; + + $(itemSelector).each((_, el) => { + const result: Record = {}; + + (Object.keys(selectors) as (keyof TRaw)[]).forEach((key) => { + const selector = selectors[key]; + if (!selector) return; + + result[key as string] = $(el).find(selector).first().text().trim(); + }); + + items.push(result as TRaw); + }); + + return items; + } catch (error) { + console.error("[parseRssItems] Failed to parse RSS feed", { + error, + itemSelector, + selectors, + }); + + return fallback; + } +} diff --git a/lib/main.ts b/lib/main.ts deleted file mode 100644 index 2b7c8a8..0000000 --- a/lib/main.ts +++ /dev/null @@ -1,146 +0,0 @@ -import * as parser from "xml2js"; -import { - isRawFeed, - isRawFeedChannel, - isRawGoodreadsFeed, - isRawGoodreadsFeedChannel, - isRawGoodreadsFeedRSS, - isRawGoodreadsItem, - isValidClientSideFeed, - isValidGoodreadsClientSideFeed, -} from "./typeguards"; -import { - GoodreadsItem, - RawFeedChannel, - RawGoodreadsItem, - RawItem, - SubstackItem, -} from "./types"; - -const CORS_PROXY = "https://lol-origin-84f24d4beb26.herokuapp.com/get?url="; -const isBrowser = typeof document !== "undefined"; - -// Internal API - -const getRawXMLSubstackFeed = async (feedUrl: string) => { - try { - const path = isBrowser - ? `${CORS_PROXY}${encodeURIComponent(feedUrl)}` - : feedUrl; - const promise = await fetch(path); - if (promise.ok) return isBrowser ? promise.json() : promise.text(); - } catch (error) { - console.error(error); - throw new Error("Error occurred fetching Feed from Substack"); - } -}; -const parseXML = async ( - xml = "", - /* eslint-disable @typescript-eslint/no-explicit-any */ - callback?: (err: Error | null, result: any) => void, -) => { - if (!callback) return parser.parseStringPromise(xml); - parser.parseString(xml, callback); -}; -// Utils -const transformRawItem = (item: RawItem): SubstackItem => { - return { - title: item.title[0], - description: item.description[0], - link: item.link[0], - pubDate: item.pubDate[0], - content: item["content:encoded"][0], - }; -}; - -// Substack Public API - -export const getSubstackFeed = async ( - feedUrl: string, - callback?: (err: Error | null, result: unknown) => void, -): Promise => { - const rawXML = await getRawXMLSubstackFeed(feedUrl); - // NOTE: server side call - if (!isBrowser) { - return parseXML(rawXML, callback); - } - // NOTE: client side call - if (!isValidClientSideFeed(rawXML)) - throw new Error("Error occurred fetching Feed from Substack"); - await parseXML(rawXML.contents, callback); -}; -export const getFeedByLink = ( - rawFeed: unknown, - link: string, -): RawFeedChannel[] => { - if (!isRawFeed(rawFeed)) throw new Error("Feed is not in the correct format"); - try { - return rawFeed.rss.channel - .filter(isRawFeedChannel) - .filter((channel) => channel.link[0] === link); - } catch (e: unknown) { - const error = new Error(`Error occurred fetching Feed by Link: ${link}`); - (error as any).cause = e; - throw error; - } -}; -export const getPosts = (channels: RawFeedChannel[]) => { - const channel = channels[0]; - return channel.item.map(transformRawItem); -}; - -// Goodreads Feed Parser -// Utils -const transformRawGoodreadsItem = (item: RawGoodreadsItem): GoodreadsItem => { - if (!isRawGoodreadsItem(item)) - throw new Error("Goodreads item is not in the correct format"); - return { - title: item.title[0], - link: item.link[0], - book_image_url: item["book_large_image_url"][0], - author_name: item["author_name"][0], - book_description: item["book_description"][0], - }; -}; -// Internal API -const getRawXMLGoodreadsFeed = async (feedUrl: string, proxy?: string) => { - try { - const path = isBrowser - ? `${proxy ?? CORS_PROXY}${encodeURIComponent(feedUrl)}` - : feedUrl; - const promise = await fetch(path); - if (promise.ok) return isBrowser ? promise.json() : promise.text(); - } catch (error) { - console.error(error); - throw new Error("Error occurred fetching Feed from Goodreads"); - } -}; - -// Public API -export const getGoodreadsFeed = async ( - feedUrl: string, - callback?: (err: Error | null, result: unknown) => void, - proxy?: string, -): Promise => { - const rawXML = await getRawXMLGoodreadsFeed(feedUrl, proxy); - // NOTE: server side call - if (!isBrowser) { - return parseXML(rawXML, callback); - } - // NOTE: client side call - if (!isValidGoodreadsClientSideFeed(rawXML)) - throw new Error("Error occurred fetching Feed from Goodreads"); - await parseXML(rawXML.contents, callback); -}; -export const getGoodreadsFeedItems = (rawFeed: unknown): GoodreadsItem[] => { - if (!isRawGoodreadsFeed(rawFeed)) - throw new Error("Goodreads feed is not in the correct format"); - if (!isRawGoodreadsFeedRSS(rawFeed.rss)) - throw new Error("Goodreads RSS feed is not in the correct format"); - const channels = rawFeed.rss.channel.filter(isRawGoodreadsFeedChannel); - if (channels.length === 0) - throw new Error("Goodreads feed does not contain any channels"); - const channel = channels[0]; - if (!Array.isArray(channel.item)) return []; - return channel.item.filter(isRawGoodreadsItem).map(transformRawGoodreadsItem); -}; diff --git a/lib/substack.ts b/lib/substack.ts new file mode 100644 index 0000000..374452f --- /dev/null +++ b/lib/substack.ts @@ -0,0 +1,27 @@ +import { SubstackItem } from "substack-feed-api"; +import { ParseRssOptions, SelectorMap, parseRssItems } from "."; + +const substackDefaultSelectors: Record = { + title: "title", + description: "description", + link: "link", + pubDate: "pubDate", + content: "content\\:encoded", +}; + +export function parseSubstackRss( + xml: string, + options: Omit, "selectors"> & { + selectors?: SelectorMap; + } = {}, +): SubstackItem[] { + const mergedSelectors: SelectorMap = { + ...substackDefaultSelectors, + ...(options.selectors ?? {}), + }; + + return parseRssItems(xml, { + ...options, + selectors: mergedSelectors, + }); +} diff --git a/lib/typeguards.ts b/lib/typeguards.ts deleted file mode 100644 index 7e549cf..0000000 --- a/lib/typeguards.ts +++ /dev/null @@ -1,218 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -import { - AtomLink, - Enclosure, - Guid, - ItunesOwner, - RawFeed, - RawFeedChannel, - RawGoodreadsFeed, - RawGoodreadsFeedChannel, - RawGoodreadsFeedRSS, - RawGoodreadsItem, - RawImage, - RawItem, -} from "./types"; - -export const isRawFeed = (data: any): data is RawFeed => { - return ( - data !== null && - typeof data === "object" && - data.hasOwnProperty("rss") && - typeof data.rss === "object" && - data.rss !== null && - data.rss.hasOwnProperty("channel") && - Array.isArray(data.rss.channel) - ); -}; - -export const isRawFeedChannel = (data: any): data is RawFeedChannel => { - return ( - typeof data === "object" && - data !== null && - data.hasOwnProperty("title") && - Array.isArray(data.title) && - data.hasOwnProperty("description") && - Array.isArray(data.description) && - data.hasOwnProperty("link") && - Array.isArray(data.link) && - data.hasOwnProperty("image") && - Array.isArray(data.image) && - data.image.every(isRawImage) && - data.hasOwnProperty("generator") && - Array.isArray(data.generator) && - data.hasOwnProperty("lastBuildDate") && - Array.isArray(data.lastBuildDate) && - data.hasOwnProperty("atom:link") && - Array.isArray(data["atom:link"]) && - data["atom:link"].every(isAtomLink) && - data.hasOwnProperty("copyright") && - Array.isArray(data.copyright) && - data.hasOwnProperty("language") && - Array.isArray(data.language) && - data.hasOwnProperty("webMaster") && - Array.isArray(data.webMaster) && - data.hasOwnProperty("itunes:owner") && - Array.isArray(data["itunes:owner"]) && - data["itunes:owner"].every(isItunesOwner) && - data.hasOwnProperty("itunes:author") && - Array.isArray(data["itunes:author"]) && - data.hasOwnProperty("googleplay:owner") && - Array.isArray(data["googleplay:owner"]) && - data.hasOwnProperty("googleplay:email") && - Array.isArray(data["googleplay:email"]) && - data.hasOwnProperty("googleplay:author") && - Array.isArray(data["googleplay:author"]) && - data.hasOwnProperty("item") && - Array.isArray(data.item) && - data.item.every(isRawItem) - ); -}; - -export const isRawImage = (data: any): data is RawImage => { - return ( - typeof data === "object" && - data !== null && - data.hasOwnProperty("url") && - Array.isArray(data.url) && - data.hasOwnProperty("title") && - Array.isArray(data.title) && - data.hasOwnProperty("link") && - Array.isArray(data.link) - ); -}; - -export const isAtomLink = (data: any): data is AtomLink => { - return ( - typeof data === "object" && - data !== null && - data.hasOwnProperty("$") && - typeof data.$ === "object" && - data.$ !== null && - data.$.hasOwnProperty("href") && - typeof data.$.href === "string" && - data.$.hasOwnProperty("rel") && - typeof data.$.rel === "string" && - data.$.hasOwnProperty("type") && - typeof data.$.type === "string" - ); -}; - -export const isItunesOwner = (data: any): data is ItunesOwner => { - return ( - typeof data === "object" && - data !== null && - data.hasOwnProperty("itunes:email") && - Array.isArray(data["itunes:email"]) && - data.hasOwnProperty("itunes:name") && - Array.isArray(data["itunes:name"]) - ); -}; - -export const isRawItem = (data: any): data is RawItem => { - return ( - typeof data === "object" && - data !== null && - data.hasOwnProperty("title") && - Array.isArray(data.title) && - data.hasOwnProperty("description") && - Array.isArray(data.description) && - data.hasOwnProperty("link") && - Array.isArray(data.link) && - data.hasOwnProperty("guid") && - Array.isArray(data.guid) && - data.guid.every(isGuid) && - data.hasOwnProperty("dc:creator") && - Array.isArray(data["dc:creator"]) && - data.hasOwnProperty("pubDate") && - Array.isArray(data.pubDate) && - data.hasOwnProperty("enclosure") && - Array.isArray(data.enclosure) && - data.enclosure.every(isEnclosure) && - data.hasOwnProperty("content:encoded") && - Array.isArray(data["content:encoded"]) - ); -}; - -export const isGuid = (data: any): data is Guid => { - return ( - typeof data === "object" && - data !== null && - data.hasOwnProperty("_") && - typeof data._ === "string" && - data.hasOwnProperty("$") && - typeof data.$ === "object" && - data.$ !== null && - data.$.hasOwnProperty("isPermaLink") && - typeof data.$.isPermaLink === "string" - ); -}; - -export const isEnclosure = (data: any): data is Enclosure => { - return ( - typeof data === "object" && - data !== null && - data.hasOwnProperty("$") && - typeof data.$ === "object" && - data.$ !== null && - data.$.hasOwnProperty("url") && - typeof data.$.url === "string" && - data.$.hasOwnProperty("length") && - typeof data.$.length === "string" && - data.$.hasOwnProperty("type") && - typeof data.$.type === "string" - ); -}; - -export const isValidClientSideFeed = (data: any): boolean => { - return data && data.contents && data.status.http_code == 200; -}; - -// Goodreads Feed Typeguards -// TODO: to be moved to a separate package - -export const isRawGoodreadsFeed = (data: unknown): data is RawGoodreadsFeed => { - return ( - data !== null && typeof data === "object" && data.hasOwnProperty("rss") - ); -}; - -export const isRawGoodreadsFeedRSS = ( - data: unknown, -): data is RawGoodreadsFeedRSS => { - return ( - typeof data === "object" && data !== null && data.hasOwnProperty("channel") - ); -}; - -export const isRawGoodreadsFeedChannel = ( - channel: unknown, -): channel is RawGoodreadsFeedChannel => { - return ( - typeof channel === "object" && - channel !== null && - channel.hasOwnProperty("title") && - channel.hasOwnProperty("item") - ); -}; -export const isRawGoodreadsItem = (item: unknown): item is RawGoodreadsItem => { - return ( - typeof item === "object" && - item !== null && - item.hasOwnProperty("title") && - item.hasOwnProperty("link") && - item.hasOwnProperty("book_image_url") && - item.hasOwnProperty("book_large_image_url") && - item.hasOwnProperty("author_name") && - item.hasOwnProperty("book_description") - ); -}; - -export const isValidGoodreadsClientSideFeed = (data: unknown): boolean => { - return ( - typeof data === "object" && - data !== null && - data.hasOwnProperty("contents") && - data.hasOwnProperty("status") - ); -}; diff --git a/lib/types.ts b/lib/types.ts deleted file mode 100644 index b06c240..0000000 --- a/lib/types.ts +++ /dev/null @@ -1,127 +0,0 @@ -export type RawFeed = { - rss: { - channel: RawFeedChannel[]; - [key: string]: unknown; - }; -}; - -export interface RawFeedChannel { - title: string[]; - description: string[]; - link: string[]; - image: RawImage[]; - generator: string[]; - lastBuildDate: string[]; - "atom:link": AtomLink[]; - copyright: string[]; - language: string[]; - webMaster: string[]; - "itunes:owner": ItunesOwner[]; - "itunes:author": string[]; - "googleplay:owner": string[]; - "googleplay:email": string[]; - "googleplay:author": string[]; - item: RawItem[]; -} - -export interface RawImage { - url: string[]; - title: string[]; - link: string[]; -} - -export interface AtomLink { - $: GeneratedType; -} - -export interface GeneratedType { - href: string; - rel: string; - type: string; -} - -export interface ItunesOwner { - "itunes:email": string[]; - "itunes:name": string[]; -} - -export interface RawItem { - title: string[]; - description: string[]; - link: string[]; - guid: Guid[]; - "dc:creator": string[]; - pubDate: string[]; - enclosure: Enclosure[]; - "content:encoded": string[]; -} - -export interface Guid { - _: string; - $: GeneratedType2; -} - -export interface GeneratedType2 { - isPermaLink: string; -} - -export interface Enclosure { - $: GeneratedType3; -} - -export interface GeneratedType3 { - url: string; - length: string; - type: string; -} - -export type SubstackItem = { - title: string; - description: string; - link: string; - pubDate: string; - content: string; -}; - -// Goodreads Feed Types -// TODO: to be moved to a separate package - -export type RawGoodreadsFeed = { - rss: RawGoodreadsFeedRSS; -}; - -export type RawGoodreadsFeedRSS = { - channel: RawGoodreadsFeedChannel[]; - [key: string]: unknown; -}; - -export type RawGoodreadsFeedChannel = { - title: string[]; - item: RawGoodreadsItem[]; - [key: string]: unknown; -}; - -export type RawGoodreadsItem = { - title: string[]; - link: string[]; - book_image_url: string[]; - book_large_image_url: string[]; - author_name: string[]; - book_description: string[]; - [key: string]: unknown; -}; - -export type GoodreadsFeedChannel = { - title: string; - item: GoodreadsItem[]; - [key: string]: unknown; -}; - -export type GoodreadsItem = { - title: string; - link: string; - book_image_url: string; - author_name: string; - book_description: string; - [key: string]: unknown; -}; diff --git a/package-lock.json b/package-lock.json index f352ca4..633e3c6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,13 +1,14 @@ { "name": "substack-feed-api", - "version": "1.1.4", + "version": "2.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "substack-feed-api", - "version": "1.1.4", + "version": "2.0.0", "dependencies": { + "cheerio": "^1.2.0", "node-fetch": "^3.3.2", "ts-node": "^10.9.2", "tsconfig-paths": "^4.2.0" @@ -18,7 +19,6 @@ "@types/xml2js": "^0.4.14", "eslint": "^9.27.0", "events": "^3.3.0", - "fetch-mock-jest": "^1.5.1", "jest": "^29.7.0", "prettier": "^3.5.3", "ts-jest": "^29.3.4", @@ -28,28 +28,14 @@ "xml2js": "^0.6.2" } }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.28.6.tgz", + "integrity": "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -58,9 +44,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.2.tgz", - "integrity": "sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.6.tgz", + "integrity": "sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==", "dev": true, "license": "MIT", "engines": { @@ -68,22 +54,23 @@ } }, "node_modules/@babel/core": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.1.tgz", - "integrity": "sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.1", - "@babel/helper-compilation-targets": "^7.27.1", - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helpers": "^7.27.1", - "@babel/parser": "^7.27.1", - "@babel/template": "^7.27.1", - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.6.tgz", + "integrity": "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/generator": "^7.28.6", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6", + "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -99,16 +86,16 @@ } }, "node_modules/@babel/generator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz", - "integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.6.tgz", + "integrity": "sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.27.1", - "@babel/types": "^7.27.1", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" }, "engines": { @@ -116,13 +103,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", + "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -132,30 +119,40 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz", - "integrity": "sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -165,9 +162,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", "dev": true, "license": "MIT", "engines": { @@ -185,9 +182,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "dev": true, "license": "MIT", "engines": { @@ -205,27 +202,27 @@ } }, "node_modules/@babel/helpers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.1.tgz", - "integrity": "sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz", - "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz", + "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.27.1" + "@babel/types": "^7.28.6" }, "bin": { "parser": "bin/babel-parser.js" @@ -290,13 +287,13 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", - "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz", + "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -332,13 +329,13 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", - "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", + "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -458,13 +455,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", - "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", + "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -473,69 +470,49 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/runtime": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.1.tgz", - "integrity": "sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.1.tgz", - "integrity": "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.6.tgz", + "integrity": "sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.1", - "@babel/parser": "^7.27.1", - "@babel/template": "^7.27.1", - "@babel/types": "^7.27.1", - "debug": "^4.3.1", - "globals": "^11.1.0" + "@babel/code-frame": "^7.28.6", + "@babel/generator": "^7.28.6", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.6", + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/types": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", - "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz", + "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" + "@babel/helper-validator-identifier": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -571,9 +548,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz", - "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", "cpu": [ "ppc64" ], @@ -588,9 +565,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz", - "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", "cpu": [ "arm" ], @@ -605,9 +582,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz", - "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", "cpu": [ "arm64" ], @@ -622,9 +599,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz", - "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", "cpu": [ "x64" ], @@ -639,9 +616,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", - "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", "cpu": [ "arm64" ], @@ -656,9 +633,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz", - "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", "cpu": [ "x64" ], @@ -673,9 +650,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz", - "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", "cpu": [ "arm64" ], @@ -690,9 +667,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz", - "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", "cpu": [ "x64" ], @@ -707,9 +684,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz", - "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", "cpu": [ "arm" ], @@ -724,9 +701,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz", - "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", "cpu": [ "arm64" ], @@ -741,9 +718,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz", - "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", "cpu": [ "ia32" ], @@ -758,9 +735,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz", - "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", "cpu": [ "loong64" ], @@ -775,9 +752,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz", - "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", "cpu": [ "mips64el" ], @@ -792,9 +769,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz", - "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", "cpu": [ "ppc64" ], @@ -809,9 +786,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz", - "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", "cpu": [ "riscv64" ], @@ -826,9 +803,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz", - "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", "cpu": [ "s390x" ], @@ -843,9 +820,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", - "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", "cpu": [ "x64" ], @@ -860,9 +837,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz", - "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", "cpu": [ "arm64" ], @@ -877,9 +854,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz", - "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", "cpu": [ "x64" ], @@ -894,9 +871,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz", - "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", "cpu": [ "arm64" ], @@ -911,9 +888,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz", - "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", "cpu": [ "x64" ], @@ -927,10 +904,27 @@ "node": ">=18" } }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz", - "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", "cpu": [ "x64" ], @@ -945,9 +939,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz", - "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", "cpu": [ "arm64" ], @@ -962,9 +956,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz", - "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", "cpu": [ "ia32" ], @@ -979,9 +973,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz", - "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", "cpu": [ "x64" ], @@ -996,9 +990,9 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", - "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1028,9 +1022,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true, "license": "MIT", "engines": { @@ -1038,13 +1032,13 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz", - "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/object-schema": "^2.1.6", + "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", "minimatch": "^3.1.2" }, @@ -1053,19 +1047,22 @@ } }, "node_modules/@eslint/config-helpers": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz", - "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", "dev": true, "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/core": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz", - "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==", + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1076,9 +1073,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", + "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1088,7 +1085,7 @@ "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", + "js-yaml": "^4.1.1", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, @@ -1100,9 +1097,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.27.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.27.0.tgz", - "integrity": "sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==", + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", + "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", "dev": true, "license": "MIT", "engines": { @@ -1113,9 +1110,9 @@ } }, "node_modules/@eslint/object-schema": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", - "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1123,13 +1120,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz", - "integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.14.0", + "@eslint/core": "^0.17.0", "levn": "^0.4.1" }, "engines": { @@ -1147,33 +1144,19 @@ } }, "node_modules/@humanfs/node": { - "version": "0.16.6", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", - "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", "dev": true, "license": "Apache-2.0", "dependencies": { "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.3.0" + "@humanwhocodes/retry": "^0.4.0" }, "engines": { "node": ">=18.18.0" } }, - "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", - "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -1244,9 +1227,9 @@ } }, "node_modules/@istanbuljs/load-nyc-config/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==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "dev": true, "license": "MIT", "dependencies": { @@ -1612,18 +1595,25 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { @@ -1635,26 +1625,16 @@ "node": ">=6.0.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, "license": "MIT", "dependencies": { @@ -1662,48 +1642,10 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "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/rollup-android-arm-eabi": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.0.tgz", - "integrity": "sha512-KxN+zCjOYHGwCl4UCtSfZ6jrq/qi88JDUtiEFk8LELEHq2Egfc/FgW+jItZiOLRuQfb/3xJSgFuNPC9jzggX+A==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.1.tgz", + "integrity": "sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==", "cpu": [ "arm" ], @@ -1715,9 +1657,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.0.tgz", - "integrity": "sha512-yDvqx3lWlcugozax3DItKJI5j05B0d4Kvnjx+5mwiUpWramVvmAByYigMplaoAQ3pvdprGCTCE03eduqE/8mPQ==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.1.tgz", + "integrity": "sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==", "cpu": [ "arm64" ], @@ -1729,9 +1671,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.0.tgz", - "integrity": "sha512-2KOU574vD3gzcPSjxO0eyR5iWlnxxtmW1F5CkNOHmMlueKNCQkxR6+ekgWyVnz6zaZihpUNkGxjsYrkTJKhkaw==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.1.tgz", + "integrity": "sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==", "cpu": [ "arm64" ], @@ -1743,9 +1685,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.0.tgz", - "integrity": "sha512-gE5ACNSxHcEZyP2BA9TuTakfZvULEW4YAOtxl/A/YDbIir/wPKukde0BNPlnBiP88ecaN4BJI2TtAd+HKuZPQQ==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.1.tgz", + "integrity": "sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==", "cpu": [ "x64" ], @@ -1757,9 +1699,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.0.tgz", - "integrity": "sha512-GSxU6r5HnWij7FoSo7cZg3l5GPg4HFLkzsFFh0N/b16q5buW1NAWuCJ+HMtIdUEi6XF0qH+hN0TEd78laRp7Dg==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.1.tgz", + "integrity": "sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==", "cpu": [ "arm64" ], @@ -1771,9 +1713,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.0.tgz", - "integrity": "sha512-KGiGKGDg8qLRyOWmk6IeiHJzsN/OYxO6nSbT0Vj4MwjS2XQy/5emsmtoqLAabqrohbgLWJ5GV3s/ljdrIr8Qjg==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.1.tgz", + "integrity": "sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==", "cpu": [ "x64" ], @@ -1785,9 +1727,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.0.tgz", - "integrity": "sha512-46OzWeqEVQyX3N2/QdiU/CMXYDH/lSHpgfBkuhl3igpZiaB3ZIfSjKuOnybFVBQzjsLwkus2mjaESy8H41SzvA==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.1.tgz", + "integrity": "sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==", "cpu": [ "arm" ], @@ -1799,9 +1741,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.0.tgz", - "integrity": "sha512-lfgW3KtQP4YauqdPpcUZHPcqQXmTmH4nYU0cplNeW583CMkAGjtImw4PKli09NFi2iQgChk4e9erkwlfYem6Lg==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.1.tgz", + "integrity": "sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==", "cpu": [ "arm" ], @@ -1813,9 +1755,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.0.tgz", - "integrity": "sha512-nn8mEyzMbdEJzT7cwxgObuwviMx6kPRxzYiOl6o/o+ChQq23gfdlZcUNnt89lPhhz3BYsZ72rp0rxNqBSfqlqw==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.1.tgz", + "integrity": "sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==", "cpu": [ "arm64" ], @@ -1827,9 +1769,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.0.tgz", - "integrity": "sha512-l+QK99je2zUKGd31Gh+45c4pGDAqZSuWQiuRFCdHYC2CSiO47qUWsCcenrI6p22hvHZrDje9QjwSMAFL3iwXwQ==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.1.tgz", + "integrity": "sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==", "cpu": [ "arm64" ], @@ -1840,10 +1782,10 @@ "linux" ] }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.0.tgz", - "integrity": "sha512-WbnJaxPv1gPIm6S8O/Wg+wfE/OzGSXlBMbOe4ie+zMyykMOeqmgD1BhPxZQuDqwUN+0T/xOFtL2RUWBspnZj3w==", + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.1.tgz", + "integrity": "sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==", "cpu": [ "loong64" ], @@ -1854,10 +1796,38 @@ "linux" ] }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.0.tgz", - "integrity": "sha512-eRDWR5t67/b2g8Q/S8XPi0YdbKcCs4WQ8vklNnUYLaSWF+Cbv2axZsp4jni6/j7eKvMLYCYdcsv8dcU+a6QNFg==", + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.1.tgz", + "integrity": "sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.1.tgz", + "integrity": "sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.1.tgz", + "integrity": "sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==", "cpu": [ "ppc64" ], @@ -1869,9 +1839,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.0.tgz", - "integrity": "sha512-TWrZb6GF5jsEKG7T1IHwlLMDRy2f3DPqYldmIhnA2DVqvvhY2Ai184vZGgahRrg8k9UBWoSlHv+suRfTN7Ua4A==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.1.tgz", + "integrity": "sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==", "cpu": [ "riscv64" ], @@ -1883,9 +1853,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.0.tgz", - "integrity": "sha512-ieQljaZKuJpmWvd8gW87ZmSFwid6AxMDk5bhONJ57U8zT77zpZ/TPKkU9HpnnFrM4zsgr4kiGuzbIbZTGi7u9A==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.1.tgz", + "integrity": "sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==", "cpu": [ "riscv64" ], @@ -1897,9 +1867,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.0.tgz", - "integrity": "sha512-/L3pW48SxrWAlVsKCN0dGLB2bi8Nv8pr5S5ocSM+S0XCn5RCVCXqi8GVtHFsOBBCSeR+u9brV2zno5+mg3S4Aw==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.1.tgz", + "integrity": "sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==", "cpu": [ "s390x" ], @@ -1911,9 +1881,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.0.tgz", - "integrity": "sha512-XMLeKjyH8NsEDCRptf6LO8lJk23o9wvB+dJwcXMaH6ZQbbkHu2dbGIUindbMtRN6ux1xKi16iXWu6q9mu7gDhQ==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.1.tgz", + "integrity": "sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==", "cpu": [ "x64" ], @@ -1925,9 +1895,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.0.tgz", - "integrity": "sha512-m/P7LycHZTvSQeXhFmgmdqEiTqSV80zn6xHaQ1JSqwCtD1YGtwEK515Qmy9DcB2HK4dOUVypQxvhVSy06cJPEg==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.1.tgz", + "integrity": "sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==", "cpu": [ "x64" ], @@ -1938,10 +1908,38 @@ "linux" ] }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.1.tgz", + "integrity": "sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.1.tgz", + "integrity": "sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.0.tgz", - "integrity": "sha512-4yodtcOrFHpbomJGVEqZ8fzD4kfBeCbpsUy5Pqk4RluXOdsWdjLnjhiKy2w3qzcASWd04fp52Xz7JKarVJ5BTg==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.1.tgz", + "integrity": "sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==", "cpu": [ "arm64" ], @@ -1953,9 +1951,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.0.tgz", - "integrity": "sha512-tmazCrAsKzdkXssEc65zIE1oC6xPHwfy9d5Ta25SRCDOZS+I6RypVVShWALNuU9bxIfGA0aqrmzlzoM5wO5SPQ==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.1.tgz", + "integrity": "sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==", "cpu": [ "ia32" ], @@ -1966,10 +1964,24 @@ "win32" ] }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.1.tgz", + "integrity": "sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.0.tgz", - "integrity": "sha512-h1J+Yzjo/X+0EAvR2kIXJDuTuyT7drc+t2ALY0nIcGPbTatNOf0VWdhEA2Z4AAjv6X1NJV7SYo5oCTYRJhSlVA==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.1.tgz", + "integrity": "sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==", "cpu": [ "x64" ], @@ -2008,9 +2020,9 @@ } }, "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", + "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", "license": "MIT" }, "node_modules/@tsconfig/node12": { @@ -2067,19 +2079,19 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", - "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.20.7" + "@babel/types": "^7.28.2" } }, "node_modules/@types/estree": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", - "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "dev": true, "license": "MIT" }, @@ -2139,12 +2151,13 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.15.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.19.tgz", - "integrity": "sha512-3vMNr4TzNQyjHcRZadojpRaD9Ofr6LsonZAoQ+HMUa/9ORTPoxVIw0e0mpqWpdjj8xybyCM+oKOUH2vwFu/oEw==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.1.0.tgz", + "integrity": "sha512-t7frlewr6+cbx+9Ohpl0NOTKXZNV9xHRmNOvql47BFJKcEG1CxtxlPEEe+gR9uhVWM4DwhnvTF110mIL4yP9RA==", "license": "MIT", + "peer": true, "dependencies": { - "undici-types": "~6.21.0" + "undici-types": "~7.16.0" } }, "node_modules/@types/stack-utils": { @@ -2165,9 +2178,9 @@ } }, "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "version": "17.0.35", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", "dev": true, "license": "MIT", "dependencies": { @@ -2182,21 +2195,20 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.32.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.32.1.tgz", - "integrity": "sha512-6u6Plg9nP/J1GRpe/vcjjabo6Uc5YQPAMxsgQyGC/I0RuukiG1wIe3+Vtg3IrSCVJDmqK3j8adrtzXSENRtFgg==", + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.54.0.tgz", + "integrity": "sha512-hAAP5io/7csFStuOmR782YmTthKBJ9ND3WVL60hcOjvtGFb+HJxH4O5huAcmcZ9v9G8P+JETiZ/G1B8MALnWZQ==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.32.1", - "@typescript-eslint/type-utils": "8.32.1", - "@typescript-eslint/utils": "8.32.1", - "@typescript-eslint/visitor-keys": "8.32.1", - "graphemer": "^1.4.0", - "ignore": "^7.0.0", + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.54.0", + "@typescript-eslint/type-utils": "8.54.0", + "@typescript-eslint/utils": "8.54.0", + "@typescript-eslint/visitor-keys": "8.54.0", + "ignore": "^7.0.5", "natural-compare": "^1.4.0", - "ts-api-utils": "^2.1.0" + "ts-api-utils": "^2.4.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2206,15 +2218,15 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "@typescript-eslint/parser": "^8.54.0", "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.4.tgz", - "integrity": "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", "dev": true, "license": "MIT", "engines": { @@ -2222,17 +2234,18 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.32.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.32.1.tgz", - "integrity": "sha512-LKMrmwCPoLhM45Z00O1ulb6jwyVr2kr3XJp+G+tSEZcbauNnScewcQwtJqXDhXeYPDEjZ8C1SjXm015CirEmGg==", + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.54.0.tgz", + "integrity": "sha512-BtE0k6cjwjLZoZixN0t5AKP0kSzlGu7FctRXYuPAm//aaiZhmfq1JwdYpYr1brzEspYyFeF+8XF5j2VK6oalrA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.32.1", - "@typescript-eslint/types": "8.32.1", - "@typescript-eslint/typescript-estree": "8.32.1", - "@typescript-eslint/visitor-keys": "8.32.1", - "debug": "^4.3.4" + "@typescript-eslint/scope-manager": "8.54.0", + "@typescript-eslint/types": "8.54.0", + "@typescript-eslint/typescript-estree": "8.54.0", + "@typescript-eslint/visitor-keys": "8.54.0", + "debug": "^4.4.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2243,18 +2256,40 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.54.0.tgz", + "integrity": "sha512-YPf+rvJ1s7MyiWM4uTRhE4DvBXrEV+d8oC3P9Y2eT7S+HBS0clybdMIPnhiATi9vZOYDc7OQ1L/i6ga6NFYK/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.54.0", + "@typescript-eslint/types": "^8.54.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.32.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.32.1.tgz", - "integrity": "sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA==", + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.54.0.tgz", + "integrity": "sha512-27rYVQku26j/PbHYcVfRPonmOlVI6gihHtXFbTdB5sb6qA0wdAQAbyXFVarQ5t4HRojIz64IV90YtsjQSSGlQg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.32.1", - "@typescript-eslint/visitor-keys": "8.32.1" + "@typescript-eslint/types": "8.54.0", + "@typescript-eslint/visitor-keys": "8.54.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2264,17 +2299,35 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.54.0.tgz", + "integrity": "sha512-dRgOyT2hPk/JwxNMZDsIXDgyl9axdJI3ogZ2XWhBPsnZUv+hPesa5iuhdYt2gzwA9t8RE5ytOJ6xB0moV0Ujvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.32.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.32.1.tgz", - "integrity": "sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA==", + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.54.0.tgz", + "integrity": "sha512-hiLguxJWHjjwL6xMBwD903ciAwd7DmK30Y9Axs/etOkftC3ZNN9K44IuRD/EB08amu+Zw6W37x9RecLkOo3pMA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.32.1", - "@typescript-eslint/utils": "8.32.1", - "debug": "^4.3.4", - "ts-api-utils": "^2.1.0" + "@typescript-eslint/types": "8.54.0", + "@typescript-eslint/typescript-estree": "8.54.0", + "@typescript-eslint/utils": "8.54.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.4.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2285,13 +2338,13 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/types": { - "version": "8.32.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.32.1.tgz", - "integrity": "sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==", + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.54.0.tgz", + "integrity": "sha512-PDUI9R1BVjqu7AUDsRBbKMtwmjWcn4J3le+5LpcFgWULN3LvHC5rkc9gCVxbrsrGmO1jfPybN5s6h4Jy+OnkAA==", "dev": true, "license": "MIT", "engines": { @@ -2303,20 +2356,21 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.32.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.32.1.tgz", - "integrity": "sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg==", + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.54.0.tgz", + "integrity": "sha512-BUwcskRaPvTk6fzVWgDPdUndLjB87KYDrN5EYGetnktoeAvPtO4ONHlAZDnj5VFnUANg0Sjm7j4usBlnoVMHwA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.32.1", - "@typescript-eslint/visitor-keys": "8.32.1", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" + "@typescript-eslint/project-service": "8.54.0", + "@typescript-eslint/tsconfig-utils": "8.54.0", + "@typescript-eslint/types": "8.54.0", + "@typescript-eslint/visitor-keys": "8.54.0", + "debug": "^4.4.3", + "minimatch": "^9.0.5", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.4.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2326,13 +2380,13 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2356,9 +2410,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -2369,16 +2423,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.32.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.32.1.tgz", - "integrity": "sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA==", + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.54.0.tgz", + "integrity": "sha512-9Cnda8GS57AQakvRyG0PTejJNlA2xhvyNtEVIMlDWOOeEyBkYWhGPnfrIAnqxLMTSTo6q8g12XVjjev5l1NvMA==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.32.1", - "@typescript-eslint/types": "8.32.1", - "@typescript-eslint/typescript-estree": "8.32.1" + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.54.0", + "@typescript-eslint/types": "8.54.0", + "@typescript-eslint/typescript-estree": "8.54.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2389,18 +2443,18 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.32.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.32.1.tgz", - "integrity": "sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==", + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.54.0.tgz", + "integrity": "sha512-VFlhGSl4opC0bprJiItPQ1RfUhGDIBokcPwaFH4yiBCaNPeld/9VeXbiPO1cLyorQi1G1vL+ecBk1x8o1axORA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.32.1", - "eslint-visitor-keys": "^4.2.0" + "@typescript-eslint/types": "8.54.0", + "eslint-visitor-keys": "^4.2.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2411,10 +2465,11 @@ } }, "node_modules/acorn": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", - "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -2530,13 +2585,6 @@ "dev": true, "license": "Python-2.0" }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true, - "license": "MIT" - }, "node_modules/babel-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", @@ -2610,9 +2658,9 @@ } }, "node_modules/babel-preset-current-node-syntax": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", - "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", "dev": true, "license": "MIT", "dependencies": { @@ -2633,7 +2681,7 @@ "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0 || ^8.0.0-0" } }, "node_modules/babel-preset-jest": { @@ -2660,10 +2708,26 @@ "dev": true, "license": "MIT" }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", + "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, "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==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -2685,9 +2749,9 @@ } }, "node_modules/browserslist": { - "version": "4.24.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.5.tgz", - "integrity": "sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "dev": true, "funding": [ { @@ -2704,11 +2768,13 @@ } ], "license": "MIT", + "peer": true, "dependencies": { - "caniuse-lite": "^1.0.30001716", - "electron-to-chromium": "^1.5.149", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.3" + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" @@ -2768,9 +2834,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001718", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001718.tgz", - "integrity": "sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==", + "version": "1.0.30001766", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001766.tgz", + "integrity": "sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==", "dev": true, "funding": [ { @@ -2815,6 +2881,48 @@ "node": ">=10" } }, + "node_modules/cheerio": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.2.0.tgz", + "integrity": "sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==", + "license": "MIT", + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "encoding-sniffer": "^0.2.1", + "htmlparser2": "^10.1.0", + "parse5": "^7.3.0", + "parse5-htmlparser2-tree-adapter": "^7.1.0", + "parse5-parser-stream": "^7.1.2", + "undici": "^7.19.0", + "whatwg-mimetype": "^4.0.0" + }, + "engines": { + "node": ">=20.18.1" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, "node_modules/ci-info": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", @@ -2865,9 +2973,9 @@ } }, "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", + "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", "dev": true, "license": "MIT" }, @@ -2905,18 +3013,6 @@ "dev": true, "license": "MIT" }, - "node_modules/core-js": { - "version": "3.42.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.42.0.tgz", - "integrity": "sha512-Sz4PP4ZA+Rq4II21qkNqOEDTDrCvcANId3xpIgB34NDkWc3UduWj2dqEtN9yZIq8Dk3HyPI33x9sqqU5C8sr0g==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, "node_modules/create-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", @@ -2960,6 +3056,34 @@ "node": ">= 8" } }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, "node_modules/data-uri-to-buffer": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", @@ -2970,9 +3094,9 @@ } }, "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, "license": "MIT", "dependencies": { @@ -2988,9 +3112,9 @@ } }, "node_modules/dedent": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", - "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.1.tgz", + "integrity": "sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg==", "dev": true, "license": "MIT", "peerDependencies": { @@ -3030,9 +3154,9 @@ } }, "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" @@ -3048,26 +3172,65 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", - "dev": true, - "license": "Apache-2.0", + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", "dependencies": { - "jake": "^10.8.5" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" }, - "bin": { - "ejs": "bin/cli.js" + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, "node_modules/electron-to-chromium": { - "version": "1.5.155", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.155.tgz", - "integrity": "sha512-ps5KcGGmwL8VaeJlvlDlu4fORQpv3+GIcF5I3f9tUKUlJ/wsysh6HU8P5L1XWRYeXfA0oJd4PyM8ds8zTFf6Ng==", + "version": "1.5.283", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.283.tgz", + "integrity": "sha512-3vifjt1HgrGW/h76UEeny+adYApveS9dH2h3p57JYzBSXJIKUJAvtmIytDKjcSCt9xHfrNCFJ7gts6vkhuq++w==", "dev": true, "license": "ISC" }, @@ -3091,10 +3254,35 @@ "dev": true, "license": "MIT" }, + "node_modules/encoding-sniffer": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz", + "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==", + "license": "MIT", + "dependencies": { + "iconv-lite": "^0.6.3", + "whatwg-encoding": "^3.1.1" + }, + "funding": { + "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3102,9 +3290,9 @@ } }, "node_modules/esbuild": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", - "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -3115,31 +3303,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.4", - "@esbuild/android-arm": "0.25.4", - "@esbuild/android-arm64": "0.25.4", - "@esbuild/android-x64": "0.25.4", - "@esbuild/darwin-arm64": "0.25.4", - "@esbuild/darwin-x64": "0.25.4", - "@esbuild/freebsd-arm64": "0.25.4", - "@esbuild/freebsd-x64": "0.25.4", - "@esbuild/linux-arm": "0.25.4", - "@esbuild/linux-arm64": "0.25.4", - "@esbuild/linux-ia32": "0.25.4", - "@esbuild/linux-loong64": "0.25.4", - "@esbuild/linux-mips64el": "0.25.4", - "@esbuild/linux-ppc64": "0.25.4", - "@esbuild/linux-riscv64": "0.25.4", - "@esbuild/linux-s390x": "0.25.4", - "@esbuild/linux-x64": "0.25.4", - "@esbuild/netbsd-arm64": "0.25.4", - "@esbuild/netbsd-x64": "0.25.4", - "@esbuild/openbsd-arm64": "0.25.4", - "@esbuild/openbsd-x64": "0.25.4", - "@esbuild/sunos-x64": "0.25.4", - "@esbuild/win32-arm64": "0.25.4", - "@esbuild/win32-ia32": "0.25.4", - "@esbuild/win32-x64": "0.25.4" + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" } }, "node_modules/escalade": { @@ -3166,33 +3355,33 @@ } }, "node_modules/eslint": { - "version": "9.27.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.27.0.tgz", - "integrity": "sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==", + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", + "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.20.0", - "@eslint/config-helpers": "^0.2.1", - "@eslint/core": "^0.14.0", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.27.0", - "@eslint/plugin-kit": "^0.3.1", + "@eslint/js": "9.39.2", + "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", - "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.3.0", - "eslint-visitor-keys": "^4.2.0", - "espree": "^10.3.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -3227,9 +3416,9 @@ } }, "node_modules/eslint-scope": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", - "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -3244,9 +3433,9 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -3257,15 +3446,15 @@ } }, "node_modules/espree": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", - "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.14.0", + "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.0" + "eslint-visitor-keys": "^4.2.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3289,9 +3478,9 @@ } }, "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -3401,36 +3590,6 @@ "dev": true, "license": "MIT" }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "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.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/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/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -3445,16 +3604,6 @@ "dev": true, "license": "MIT" }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, "node_modules/fb-watchman": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", @@ -3467,85 +3616,25 @@ }, "node_modules/fetch-blob": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], - "license": "MIT", - "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - }, - "engines": { - "node": "^12.20 || >= 14.13" - } - }, - "node_modules/fetch-mock": { - "version": "9.11.0", - "resolved": "https://registry.npmjs.org/fetch-mock/-/fetch-mock-9.11.0.tgz", - "integrity": "sha512-PG1XUv+x7iag5p/iNHD4/jdpxL9FtVSqRMUQhPab4hVDt80T1MH5ehzVrL2IdXO9Q2iBggArFvPqjUbHFuI58Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.0.0", - "@babel/runtime": "^7.0.0", - "core-js": "^3.0.0", - "debug": "^4.1.1", - "glob-to-regexp": "^0.4.0", - "is-subset": "^0.1.1", - "lodash.isequal": "^4.5.0", - "path-to-regexp": "^2.2.1", - "querystring": "^0.2.0", - "whatwg-url": "^6.5.0" - }, - "engines": { - "node": ">=4.0.0" - }, - "funding": { - "type": "charity", - "url": "https://www.justgiving.com/refugee-support-europe" - }, - "peerDependencies": { - "node-fetch": "*" - }, - "peerDependenciesMeta": { - "node-fetch": { - "optional": true + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" } - } - }, - "node_modules/fetch-mock-jest": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/fetch-mock-jest/-/fetch-mock-jest-1.5.1.tgz", - "integrity": "sha512-+utwzP8C+Pax1GSka3nFXILWMY3Er2L+s090FOgqVNrNCPp0fDqgXnAHAJf12PLHi0z4PhcTaZNTz8e7K3fjqQ==", - "deprecated": "Use https://www.npmjs.com/package/@fetch-mock/jest instead. The underlying version of fetch-mock will also need upgrading: see https://www.wheresrhys.co.uk/fetch-mock/docs/Usage/upgrade-guide", - "dev": true, + ], "license": "MIT", "dependencies": { - "fetch-mock": "^9.11.0" + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" }, "engines": { - "node": ">=8.0.0" - }, - "funding": { - "type": "charity", - "url": "https://www.justgiving.com/refugee-support-europe" - }, - "peerDependencies": { - "node-fetch": "*" - }, - "peerDependenciesMeta": { - "node-fetch": { - "optional": true - } + "node": "^12.20 || >= 14.13" } }, "node_modules/file-entry-cache": { @@ -3561,39 +3650,6 @@ "node": ">=16.0.0" } }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -3767,13 +3823,6 @@ "node": ">=10.13.0" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true, - "license": "BSD-2-Clause" - }, "node_modules/globals": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", @@ -3794,12 +3843,27 @@ "dev": true, "license": "ISC" }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } }, "node_modules/has-flag": { "version": "4.0.0", @@ -3831,6 +3895,37 @@ "dev": true, "license": "MIT" }, + "node_modules/htmlparser2": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", + "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "entities": "^7.0.1" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -3841,6 +3936,18 @@ "node": ">=10.17.0" } }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -4006,13 +4113,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-subset": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", - "integrity": "sha512-6Ybun0IkarhmEqxXCNw/C0bna6Zb/TkfUX9UbwJtK6ObwAVCxmAP308WWTHviM/zAqXk05cdhYsUsZeGQh99iw==", - "dev": true, - "license": "MIT" - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -4048,9 +4148,9 @@ } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -4091,9 +4191,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -4104,31 +4204,13 @@ "node": ">=8" } }, - "node_modules/jake": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", @@ -4606,9 +4688,9 @@ } }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -4727,9 +4809,9 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "license": "MIT", "dependencies": { @@ -4859,14 +4941,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", - "dev": true, - "license": "MIT" - }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -4881,13 +4955,6 @@ "dev": true, "license": "MIT" }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", - "dev": true, - "license": "MIT" - }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -4915,9 +4982,9 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -4950,16 +5017,6 @@ "dev": true, "license": "MIT" }, - "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", @@ -5039,6 +5096,13 @@ "dev": true, "license": "MIT" }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT" + }, "node_modules/node-domexception": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", @@ -5085,9 +5149,9 @@ "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", "dev": true, "license": "MIT" }, @@ -5114,6 +5178,18 @@ "node": ">=8" } }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -5232,6 +5308,55 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", + "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", + "license": "MIT", + "dependencies": { + "domhandler": "^5.0.3", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-parser-stream": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", + "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", + "license": "MIT", + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -5269,13 +5394,6 @@ "dev": true, "license": "MIT" }, - "node_modules/path-to-regexp": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.4.0.tgz", - "integrity": "sha512-G6zHoVqC6GGTQkZwF4lkuEyMbVOjoBKAEybQUypI1WTkqinCOrq2x6U2+phkJ1XsEMTy4LjtwPI7HW+NVrRR2w==", - "dev": true, - "license": "MIT" - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -5376,9 +5494,9 @@ } }, "node_modules/postcss": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", - "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "dev": true, "funding": [ { @@ -5396,7 +5514,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.8", + "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -5415,9 +5533,9 @@ } }, "node_modules/prettier": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", - "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", + "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", "dev": true, "license": "MIT", "bin": { @@ -5499,38 +5617,6 @@ ], "license": "MIT" }, - "node_modules/querystring": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", - "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.x" - } - }, - "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/react-is": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", @@ -5549,13 +5635,13 @@ } }, "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.16.0", + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -5612,25 +5698,14 @@ "node": ">=10" } }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, "node_modules/rollup": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.41.0.tgz", - "integrity": "sha512-HqMFpUbWlf/tvcxBFNKnJyzc7Lk+XO3FGc3pbNBLqEbOz0gPLRgcrlS3UF4MfUrVlstOaP/q0kM6GVvi+LrLRg==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.57.1.tgz", + "integrity": "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "1.0.7" + "@types/estree": "1.0.8" }, "bin": { "rollup": "dist/bin/rollup" @@ -5640,59 +5715,49 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.41.0", - "@rollup/rollup-android-arm64": "4.41.0", - "@rollup/rollup-darwin-arm64": "4.41.0", - "@rollup/rollup-darwin-x64": "4.41.0", - "@rollup/rollup-freebsd-arm64": "4.41.0", - "@rollup/rollup-freebsd-x64": "4.41.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.41.0", - "@rollup/rollup-linux-arm-musleabihf": "4.41.0", - "@rollup/rollup-linux-arm64-gnu": "4.41.0", - "@rollup/rollup-linux-arm64-musl": "4.41.0", - "@rollup/rollup-linux-loongarch64-gnu": "4.41.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.41.0", - "@rollup/rollup-linux-riscv64-gnu": "4.41.0", - "@rollup/rollup-linux-riscv64-musl": "4.41.0", - "@rollup/rollup-linux-s390x-gnu": "4.41.0", - "@rollup/rollup-linux-x64-gnu": "4.41.0", - "@rollup/rollup-linux-x64-musl": "4.41.0", - "@rollup/rollup-win32-arm64-msvc": "4.41.0", - "@rollup/rollup-win32-ia32-msvc": "4.41.0", - "@rollup/rollup-win32-x64-msvc": "4.41.0", + "@rollup/rollup-android-arm-eabi": "4.57.1", + "@rollup/rollup-android-arm64": "4.57.1", + "@rollup/rollup-darwin-arm64": "4.57.1", + "@rollup/rollup-darwin-x64": "4.57.1", + "@rollup/rollup-freebsd-arm64": "4.57.1", + "@rollup/rollup-freebsd-x64": "4.57.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.57.1", + "@rollup/rollup-linux-arm-musleabihf": "4.57.1", + "@rollup/rollup-linux-arm64-gnu": "4.57.1", + "@rollup/rollup-linux-arm64-musl": "4.57.1", + "@rollup/rollup-linux-loong64-gnu": "4.57.1", + "@rollup/rollup-linux-loong64-musl": "4.57.1", + "@rollup/rollup-linux-ppc64-gnu": "4.57.1", + "@rollup/rollup-linux-ppc64-musl": "4.57.1", + "@rollup/rollup-linux-riscv64-gnu": "4.57.1", + "@rollup/rollup-linux-riscv64-musl": "4.57.1", + "@rollup/rollup-linux-s390x-gnu": "4.57.1", + "@rollup/rollup-linux-x64-gnu": "4.57.1", + "@rollup/rollup-linux-x64-musl": "4.57.1", + "@rollup/rollup-openbsd-x64": "4.57.1", + "@rollup/rollup-openharmony-arm64": "4.57.1", + "@rollup/rollup-win32-arm64-msvc": "4.57.1", + "@rollup/rollup-win32-ia32-msvc": "4.57.1", + "@rollup/rollup-win32-x64-gnu": "4.57.1", + "@rollup/rollup-win32-x64-msvc": "4.57.1", "fsevents": "~2.3.2" } }, - "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/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" }, "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.4.tgz", + "integrity": "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==", "dev": true, - "license": "ISC" + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } }, "node_modules/semver": { "version": "6.3.1", @@ -5929,14 +5994,14 @@ } }, "node_modules/tinyglobby": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz", - "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==", + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "dev": true, "license": "MIT", "dependencies": { - "fdir": "^6.4.4", - "picomatch": "^4.0.2" + "fdir": "^6.5.0", + "picomatch": "^4.0.3" }, "engines": { "node": ">=12.0.0" @@ -5946,11 +6011,14 @@ } }, "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.4.4", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", - "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -5961,11 +6029,12 @@ } }, "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -5993,20 +6062,10 @@ "node": ">=8.0" } }, - "node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "dev": true, - "license": "MIT", - "dependencies": { - "punycode": "^2.1.0" - } - }, "node_modules/ts-api-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", + "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", "dev": true, "license": "MIT", "engines": { @@ -6017,20 +6076,19 @@ } }, "node_modules/ts-jest": { - "version": "29.3.4", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.3.4.tgz", - "integrity": "sha512-Iqbrm8IXOmV+ggWHOTEbjwyCf2xZlUMv5npExksXohL+tk8va4Fjhb+X2+Rt9NBmgO7bJ8WpnMLOwih/DnMlFA==", + "version": "29.4.6", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.6.tgz", + "integrity": "sha512-fSpWtOO/1AjSNQguk43hb/JCo16oJDnMJf3CdEGNkqsEX3t0KX96xvyX1D7PfLCpVoKu4MfVrqUkFyblYoY4lA==", "dev": true, "license": "MIT", "dependencies": { "bs-logger": "^0.2.6", - "ejs": "^3.1.10", "fast-json-stable-stringify": "^2.1.0", - "jest-util": "^29.0.0", + "handlebars": "^4.7.8", "json5": "^2.2.3", "lodash.memoize": "^4.1.2", "make-error": "^1.3.6", - "semver": "^7.7.2", + "semver": "^7.7.3", "type-fest": "^4.41.0", "yargs-parser": "^21.1.1" }, @@ -6042,10 +6100,11 @@ }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/transform": "^29.0.0", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", + "@jest/transform": "^29.0.0 || ^30.0.0", + "@jest/types": "^29.0.0 || ^30.0.0", + "babel-jest": "^29.0.0 || ^30.0.0", + "jest": "^29.0.0 || ^30.0.0", + "jest-util": "^29.0.0 || ^30.0.0", "typescript": ">=4.3 <6" }, "peerDependenciesMeta": { @@ -6063,13 +6122,16 @@ }, "esbuild": { "optional": true + }, + "jest-util": { + "optional": true } } }, "node_modules/ts-jest/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -6097,6 +6159,7 @@ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "license": "MIT", + "peer": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -6195,10 +6258,11 @@ } }, "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -6208,15 +6272,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.32.1", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.32.1.tgz", - "integrity": "sha512-D7el+eaDHAmXvrZBy1zpzSNIRqnCOrkwTgZxTu3MUqRWk8k0q9m9Ho4+vPf7iHtgUfrK/o8IZaEApsxPlHTFCg==", + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.54.0.tgz", + "integrity": "sha512-CKsJ+g53QpsNPqbzUsfKVgd3Lny4yKZ1pP4qN3jdMOg/sisIDLGyDMezycquXLE5JsEU0wp3dGNdzig0/fmSVQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.32.1", - "@typescript-eslint/parser": "8.32.1", - "@typescript-eslint/utils": "8.32.1" + "@typescript-eslint/eslint-plugin": "8.54.0", + "@typescript-eslint/parser": "8.54.0", + "@typescript-eslint/typescript-estree": "8.54.0", + "@typescript-eslint/utils": "8.54.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6227,19 +6292,42 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/undici": { + "version": "7.19.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.19.2.tgz", + "integrity": "sha512-4VQSpGEGsWzk0VYxyB/wVX/Q7qf9t5znLRgs0dzszr9w9Fej/8RVNQ+S20vdXSAyra/bJ7ZQfGv6ZMj7UEbzSg==", + "license": "MIT", + "engines": { + "node": ">=20.18.1" } }, "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", "license": "MIT" }, "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -6299,9 +6387,9 @@ } }, "node_modules/vite": { - "version": "6.3.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", - "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz", + "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", "dev": true, "license": "MIT", "dependencies": { @@ -6374,11 +6462,14 @@ } }, "node_modules/vite/node_modules/fdir": { - "version": "6.4.4", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", - "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -6389,11 +6480,12 @@ } }, "node_modules/vite/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -6420,23 +6512,26 @@ "node": ">= 8" } }, - "node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-url": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", - "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", - "dev": true, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", "license": "MIT", "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "license": "MIT", + "engines": { + "node": ">=18" } }, "node_modules/which": { @@ -6465,6 +6560,13 @@ "node": ">=0.10.0" } }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true, + "license": "MIT" + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", diff --git a/package.json b/package.json index bc8b71d..c7f71a7 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,14 @@ { "name": "substack-feed-api", - "version": "1.1.4", + "version": "2.0.0", "type": "module", "files": [ "dist", "index.d.ts" ], + "repository": { + "url": "https://github.com/rohit1901/substack-feed-api" + }, "main": "./dist/substackFeedApi.umd.cjs", "module": "./dist/substackFeedApi.js", "types": "./index.d.ts", @@ -31,7 +34,6 @@ "@types/xml2js": "^0.4.14", "eslint": "^9.27.0", "events": "^3.3.0", - "fetch-mock-jest": "^1.5.1", "jest": "^29.7.0", "prettier": "^3.5.3", "ts-jest": "^29.3.4", @@ -41,6 +43,7 @@ "xml2js": "^0.6.2" }, "dependencies": { + "cheerio": "^1.2.0", "node-fetch": "^3.3.2", "ts-node": "^10.9.2", "tsconfig-paths": "^4.2.0" diff --git a/src/main.ts b/src/main.ts index 267989e..11caf90 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,49 +1,240 @@ -import { - getFeedByLink, - getGoodreadsFeed, - getGoodreadsFeedItems, - getPosts, - getSubstackFeed, -} from "../lib/main.ts"; +import { parseGoodreadsRss } from "../lib/goodreads.ts"; +import { parseSubstackRss } from "../lib/substack.ts"; import viteLogo from "../public/vite.svg"; import "./style.css"; import typescriptLogo from "./typescript.svg"; -document.querySelector("#app")!.innerHTML = ` -
+type SubstackItem = ReturnType[number]; +type GoodreadsReadingState = ReturnType[number]; + +const appRoot = document.querySelector("#app"); +if (!appRoot) { + throw new Error("Unable to find root element with selector #app"); +} + +appRoot.innerHTML = ` +

An API which fetches articles from Substack

-
-

Built with - Typescript Logo - Vite Logo +

+ Built with + Typescript Logo + Vite Logo +

+

+ This page displays a list of articles from + https://rohitkhanduri.substack.com + and recent Goodreads activity.

- -
-

This page displays a list of articles from https://rohitkhanduri.substack.com

`; -const SUBSTACK_FEED_URL = "https://rohitkhanduri.substack.com"; -getSubstackFeed(`${SUBSTACK_FEED_URL}/feed`, (err, rawRes) => { - if (err) throw err; - const feedChannel = getFeedByLink(rawRes, SUBSTACK_FEED_URL); - const posts = getPosts(feedChannel); - const postsHTML = posts.map((item) => { - const post = document.createElement("div"); - post.innerHTML = ` -

${item.title}

-

${item.description}

- Read article - `; - return post; + +const feedsContainer = document.createElement("div"); +feedsContainer.classList.add("feeds"); +appRoot.appendChild(feedsContainer); + +const substackSection = createFeedSection("Latest Substack Posts"); +feedsContainer.appendChild(substackSection.section); + +const goodreadsSection = createFeedSection("Recent Goodreads Activity"); +feedsContainer.appendChild(goodreadsSection.section); + +const SUBSTACK_FEED_URL = "/api/substack"; +const GOODREADS_FEED_URL = "/api/goodreads"; + +void (async function init() { + await Promise.all([ + renderSubstack(substackSection), + renderGoodreads(goodreadsSection), + ]); +})(); + +async function renderSubstack(section: FeedSection) { + section.setStatus("Loading Substack posts…"); + try { + const xml = await fetchXml(SUBSTACK_FEED_URL); + const posts = parseSubstackRss(xml, { fallback: [] }); + + if (!posts.length) { + section.setStatus("No posts found."); + return; + } + + section.setStatus(); + posts + .slice(0, 10) + .forEach((post) => section.content.appendChild(createSubstackCard(post))); + } catch (error) { + console.error("[main] Failed to render Substack feed", error); + section.setStatus("Failed to load Substack posts."); + } +} + +async function renderGoodreads(section: FeedSection) { + section.setStatus("Loading Goodreads activity…"); + try { + const xml = await fetchXml(GOODREADS_FEED_URL); + const items = parseGoodreadsRss(xml, { fallback: [] }); + + if (!items.length) { + section.setStatus("No recent Goodreads activity."); + return; + } + + section.setStatus(); + items + .slice(0, 10) + .forEach((item) => + section.content.appendChild(createGoodreadsCard(item)), + ); + } catch (error) { + console.error("[main] Failed to render Goodreads feed", error); + section.setStatus("Failed to load Goodreads activity."); + } +} + +type FeedSection = { + section: HTMLElement; + content: HTMLElement; + setStatus: (message?: string) => void; +}; + +function createFeedSection(heading: string): FeedSection { + const section = document.createElement("section"); + section.classList.add("feed-section"); + + const title = document.createElement("h3"); + title.textContent = heading; + section.appendChild(title); + + const status = document.createElement("p"); + status.classList.add("feed-status"); + section.appendChild(status); + + const content = document.createElement("div"); + content.classList.add("feed-content"); + section.appendChild(content); + + const setStatus = (message?: string) => { + if (message && message.trim().length > 0) { + status.textContent = message; + status.hidden = false; + } else { + status.textContent = ""; + status.hidden = true; + } + }; + + return { section, content, setStatus }; +} + +async function fetchXml(url: string): Promise { + const response = await fetch(url, { + headers: { Accept: "application/rss+xml, application/xml, text/xml" }, }); - postsHTML.forEach((post) => { - document.querySelector("#app")!.appendChild(post); + + if (!response.ok) { + throw new Error(`Failed to fetch ${url}: ${response.status}`); + } + + return response.text(); +} + +function createSubstackCard(item: SubstackItem): HTMLElement { + const article = document.createElement("article"); + article.classList.add("feed-card", "substack-card"); + + const title = document.createElement("h4"); + title.textContent = item.title; + article.appendChild(title); + + const meta = document.createElement("time"); + meta.dateTime = item.pubDate; + meta.textContent = formatDate(item.pubDate); + article.appendChild(meta); + + const description = document.createElement("p"); + description.textContent = stripHtml(item.description).slice(0, 280).trim(); + article.appendChild(description); + + const link = document.createElement("a"); + link.href = item.link; + link.textContent = "Read article"; + link.target = "_blank"; + link.rel = "noopener noreferrer"; + article.appendChild(link); + + return article; +} + +function createGoodreadsCard(state: GoodreadsReadingState): HTMLElement { + const article = document.createElement("article"); + article.classList.add("feed-card", "goodreads-card"); + + const title = document.createElement("h4"); + title.textContent = state.book.title; + article.appendChild(title); + + const status = document.createElement("p"); + status.classList.add("goodreads-status"); + status.textContent = statusLabel(state.status); + article.appendChild(status); + + if (state.book.authors?.length) { + const authors = document.createElement("p"); + authors.classList.add("goodreads-authors"); + authors.textContent = `by ${state.book.authors + .map((author) => author.name) + .join(", ")}`; + article.appendChild(authors); + } + + if (state.book.description) { + const description = document.createElement("p"); + description.textContent = stripHtml(state.book.description) + .slice(0, 280) + .trim(); + article.appendChild(description); + } + + if (state.book.cover) { + const cover = document.createElement("img"); + cover.src = state.book.cover; + cover.alt = `${state.book.title} cover`; + cover.loading = "lazy"; + cover.classList.add("goodreads-cover"); + article.appendChild(cover); + } + + return article; +} + +function stripHtml(value: string): string { + const tmp = document.createElement("div"); + tmp.innerHTML = value; + return tmp.textContent ?? tmp.innerText ?? ""; +} + +function formatDate(value: string): string { + const date = new Date(value); + if (Number.isNaN(date.getTime())) { + return value; + } + return date.toLocaleString(undefined, { + year: "numeric", + month: "short", + day: "numeric", }); -}).catch((err) => console.error(err)); -getGoodreadsFeed( - "https://www.goodreads.com/review/list_rss/161866901?key=i4wH3ZD_K1LIZ7duOLVsiUWcyhW-fGCsox5koyQTJIUuwzwO&shelf=read", - (err, data) => { - if (err) throw err; - return getGoodreadsFeedItems(data); - }, -); +} + +function statusLabel(status: GoodreadsReadingState["status"]): string { + switch (status) { + case "FINISHED": + return "Finished reading"; + case "IS_READING": + return "Currently reading"; + case "WANTS_TO_READ": + return "Wants to read"; + default: + return status; + } +} diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts index 11f02fe..47a7020 100644 --- a/src/vite-env.d.ts +++ b/src/vite-env.d.ts @@ -1 +1,13 @@ /// + +interface ImportMetaEnv { + readonly VITE_PROXY_SUBSTACK_ORIGIN: string; + readonly VITE_PROXY_SUBSTACK_PATH: string; + readonly VITE_PROXY_GOODREADS_ORIGIN: string; + readonly VITE_PROXY_GOODREADS_PATH: string; + // Add all your VITE_ variables here +} + +interface ImportMeta { + readonly env: ImportMetaEnv; +} diff --git a/vite.config.ts b/vite.config.ts index e3625dd..4b8fa79 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,11 +1,60 @@ -import { defineConfig } from "vite"; +import { defineConfig, loadEnv } from "vite"; -export default defineConfig({ - build: { - lib: { - entry: "./lib/main.ts", - name: "SubstackFeedAPI", - fileName: "substackFeedApi", +const DEFAULT_SUBSTACK_ORIGIN = "https://xxxx.substack.com"; +const DEFAULT_SUBSTACK_PATH = "/feed"; +const DEFAULT_GOODREADS_ORIGIN = "https://www.goodreads.com"; +const DEFAULT_GOODREADS_PATH = "/xxxx"; + +function normalisePath(path: string): string { + return path.startsWith("/") ? path : `/${path}`; +} + +export default defineConfig(({ mode }) => { + // Load env variables based on current mode + const env = loadEnv(mode, process.cwd(), ""); + + const SUBSTACK_ORIGIN = + env.VITE_PROXY_SUBSTACK_ORIGIN ?? DEFAULT_SUBSTACK_ORIGIN; + const SUBSTACK_PATH = normalisePath( + env.VITE_PROXY_SUBSTACK_PATH ?? DEFAULT_SUBSTACK_PATH, + ); + + const GOODREADS_ORIGIN = + env.VITE_PROXY_GOODREADS_ORIGIN ?? DEFAULT_GOODREADS_ORIGIN; + const GOODREADS_PATH = normalisePath( + env.VITE_PROXY_GOODREADS_PATH ?? DEFAULT_GOODREADS_PATH, + ); + + const proxyConfig = { + "/api/substack": { + target: SUBSTACK_ORIGIN, + changeOrigin: true, + secure: true, + followRedirects: true, + rewrite: () => SUBSTACK_PATH, + }, + "/api/goodreads": { + target: GOODREADS_ORIGIN, + changeOrigin: true, + secure: true, + followRedirects: true, + rewrite: () => GOODREADS_PATH, + }, + }; + + return { + server: { + proxy: proxyConfig, + }, + preview: { + proxy: proxyConfig, + }, + build: { + lib: { + entry: ["./lib/index.ts", "./lib/goodreads.ts", "./lib/substack.ts"], + name: "SubstackFeedAPI", + fileName: "substackFeedApi", + }, }, - }, + }; }); From 296a5656b9839ce0743a2c45a36a494603615fe8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 30 Jan 2026 12:52:30 +0000 Subject: [PATCH 35/38] chore: bump version to v2.0.1 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 633e3c6..94f8910 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "substack-feed-api", - "version": "2.0.0", + "version": "2.0.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "substack-feed-api", - "version": "2.0.0", + "version": "2.0.1", "dependencies": { "cheerio": "^1.2.0", "node-fetch": "^3.3.2", diff --git a/package.json b/package.json index c7f71a7..876ac01 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "substack-feed-api", - "version": "2.0.0", + "version": "2.0.1", "type": "module", "files": [ "dist", From 26bf27ec7b96ca18d9afa329180af467aedfb8d9 Mon Sep 17 00:00:00 2001 From: Rohit Khanduri Date: Fri, 30 Jan 2026 14:01:59 +0100 Subject: [PATCH 36/38] fix: Extract parseRssItems into its own file Move the parseRssItems implementation out of lib/index.ts into a new lib/parseRssItems.ts and update lib/index.ts to re-export parseRssItems, goodreads, and substack. Also simplify the Vite build entry to use the single barrel ./lib/index.ts instead of listing multiple entry files, so the library is built from the unified exports. --- lib/index.ts | 56 +++----------------------------------------- lib/parseRssItems.ts | 53 +++++++++++++++++++++++++++++++++++++++++ vite.config.ts | 2 +- 3 files changed, 57 insertions(+), 54 deletions(-) create mode 100644 lib/parseRssItems.ts diff --git a/lib/index.ts b/lib/index.ts index 053dc66..353cbc8 100644 --- a/lib/index.ts +++ b/lib/index.ts @@ -1,53 +1,3 @@ -import { load } from "cheerio"; - -// Generic selector map keyed by the raw record keys -export type SelectorMap> = Partial< - Record ->; - -export type ParseRssOptions> = { - itemSelector?: string; - selectors?: SelectorMap; - fallback?: TRaw[]; -}; - -/** - * Generic RSS → array of flat string records. - */ -export function parseRssItems>( - xml: string, - { - itemSelector = "channel > item", - selectors = {} as SelectorMap, - fallback = [], - }: ParseRssOptions = {}, -): TRaw[] { - try { - const $ = load(xml, { xmlMode: true }); - - const items: TRaw[] = []; - - $(itemSelector).each((_, el) => { - const result: Record = {}; - - (Object.keys(selectors) as (keyof TRaw)[]).forEach((key) => { - const selector = selectors[key]; - if (!selector) return; - - result[key as string] = $(el).find(selector).first().text().trim(); - }); - - items.push(result as TRaw); - }); - - return items; - } catch (error) { - console.error("[parseRssItems] Failed to parse RSS feed", { - error, - itemSelector, - selectors, - }); - - return fallback; - } -} +export * from "./parseRssItems"; +export * from "./goodreads"; +export * from "./substack"; diff --git a/lib/parseRssItems.ts b/lib/parseRssItems.ts new file mode 100644 index 0000000..053dc66 --- /dev/null +++ b/lib/parseRssItems.ts @@ -0,0 +1,53 @@ +import { load } from "cheerio"; + +// Generic selector map keyed by the raw record keys +export type SelectorMap> = Partial< + Record +>; + +export type ParseRssOptions> = { + itemSelector?: string; + selectors?: SelectorMap; + fallback?: TRaw[]; +}; + +/** + * Generic RSS → array of flat string records. + */ +export function parseRssItems>( + xml: string, + { + itemSelector = "channel > item", + selectors = {} as SelectorMap, + fallback = [], + }: ParseRssOptions = {}, +): TRaw[] { + try { + const $ = load(xml, { xmlMode: true }); + + const items: TRaw[] = []; + + $(itemSelector).each((_, el) => { + const result: Record = {}; + + (Object.keys(selectors) as (keyof TRaw)[]).forEach((key) => { + const selector = selectors[key]; + if (!selector) return; + + result[key as string] = $(el).find(selector).first().text().trim(); + }); + + items.push(result as TRaw); + }); + + return items; + } catch (error) { + console.error("[parseRssItems] Failed to parse RSS feed", { + error, + itemSelector, + selectors, + }); + + return fallback; + } +} diff --git a/vite.config.ts b/vite.config.ts index 4b8fa79..6010570 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -51,7 +51,7 @@ export default defineConfig(({ mode }) => { }, build: { lib: { - entry: ["./lib/index.ts", "./lib/goodreads.ts", "./lib/substack.ts"], + entry: "./lib/index.ts", name: "SubstackFeedAPI", fileName: "substackFeedApi", }, From c848d44b0d3b135feafe1a0fc1511da82328a25f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 30 Jan 2026 13:02:21 +0000 Subject: [PATCH 37/38] chore: bump version to v2.0.2 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 94f8910..9f9fca0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "substack-feed-api", - "version": "2.0.1", + "version": "2.0.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "substack-feed-api", - "version": "2.0.1", + "version": "2.0.2", "dependencies": { "cheerio": "^1.2.0", "node-fetch": "^3.3.2", diff --git a/package.json b/package.json index 876ac01..a44c360 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "substack-feed-api", - "version": "2.0.1", + "version": "2.0.2", "type": "module", "files": [ "dist", From f6d7add923ed84c16a65234d633b701104c272c7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 30 Jan 2026 13:05:27 +0000 Subject: [PATCH 38/38] chore: bump version to v2.0.3 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index b19e796..3b0fb66 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "substack-feed-api", - "version": "2.0.2", + "version": "2.0.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "substack-feed-api", - "version": "2.0.2", + "version": "2.0.3", "dependencies": { "cheerio": "^1.2.0", "node-fetch": "^3.3.2", diff --git a/package.json b/package.json index a44c360..9da62c6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "substack-feed-api", - "version": "2.0.2", + "version": "2.0.3", "type": "module", "files": [ "dist",