diff --git a/.github/ISSUE_TEMPLATE/-----streams_add.yml b/.github/ISSUE_TEMPLATE/-----streams_add.yml index ff5492be6..abcfe999c 100644 --- a/.github/ISSUE_TEMPLATE/-----streams_add.yml +++ b/.github/ISSUE_TEMPLATE/-----streams_add.yml @@ -12,6 +12,12 @@ body: validations: required: true + - type: input + attributes: + label: Channel Name + description: "Full name of the channel. May contain any characters except: `,`, `[`, `]`." + placeholder: 'BBC America East' + - type: input attributes: label: Stream URL @@ -28,6 +34,37 @@ body: - 'Not 24/7' - 'Geo-blocked' + - type: dropdown + attributes: + label: Quality + description: Maximum video resolution available on the link + options: + - 2160p + - 1280p + - 1080p + - 720p + - 576p + - 480p + - 360p + + - type: dropdown + attributes: + label: Label + description: Is there any reason why the broadcast may not work? + options: + - 'Not 24/7' + - 'Geo-blocked' + + - type: input + attributes: + label: HTTP User Agent + placeholder: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Edge/12.246' + + - type: input + attributes: + label: HTTP Referrer + placeholder: 'https://example.com/' + - type: textarea attributes: label: Notes (optional) diff --git a/.github/ISSUE_TEMPLATE/----streams_edit.yml b/.github/ISSUE_TEMPLATE/----streams_edit.yml index 7c2acceb7..7e9ee5864 100644 --- a/.github/ISSUE_TEMPLATE/----streams_edit.yml +++ b/.github/ISSUE_TEMPLATE/----streams_edit.yml @@ -23,6 +23,25 @@ body: description: Channel ID from [iptv-org.github.io](https://iptv-org.github.io/). placeholder: 'BBCAmericaEast.us' + - type: input + attributes: + label: Channel Name + description: "Full name of the channel. May contain any characters except: `,`, `[`, `]`." + placeholder: 'BBC America East' + + - type: dropdown + attributes: + label: Quality + description: Maximum video resolution available on the link + options: + - 2160p + - 1280p + - 1080p + - 720p + - 576p + - 480p + - 360p + - type: dropdown attributes: label: Label @@ -31,6 +50,16 @@ body: - 'Not 24/7' - 'Geo-blocked' + - type: input + attributes: + label: HTTP User Agent + placeholder: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Edge/12.246' + + - type: input + attributes: + label: HTTP Referrer + placeholder: 'https://example.com/' + - type: textarea attributes: label: Notes diff --git a/.github/ISSUE_TEMPLATE/---streams-remove.yml b/.github/ISSUE_TEMPLATE/---streams-remove.yml new file mode 100644 index 000000000..d165f6f05 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/---streams-remove.yml @@ -0,0 +1,42 @@ +name: ๐Ÿ—‘ Remove stream link +description: Request to remove a stream link from the playlist +title: 'Remove: ' +labels: ['streams:remove'] + +body: + - type: input + attributes: + label: Stream URL + description: Link to the stream from a playlist + placeholder: 'https://lnc-kdfw-fox-aws.tubi.video/index.m3u8' + validations: + required: true + + - type: dropdown + attributes: + label: Reason + options: + - Not loading + - Constantly interrupts/lagging + - Stuck at a single frame + - Visual artifacts + - Shows looped video + - No sound + - Displays a message asking to renew subscription + - Duplicate + - Other + validations: + required: true + + - type: textarea + attributes: + label: Notes (optional) + placeholder: 'Anything else we should know?' + + - type: checkboxes + attributes: + label: Contributing Guide + description: 'Please read this guide before posting your request' + options: + - label: I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md) + required: true diff --git a/.github/ISSUE_TEMPLATE/---broken-stream.yml b/.github/ISSUE_TEMPLATE/--broken-stream.yml similarity index 98% rename from .github/ISSUE_TEMPLATE/---broken-stream.yml rename to .github/ISSUE_TEMPLATE/--broken-stream.yml index 7ace75904..742f48af9 100644 --- a/.github/ISSUE_TEMPLATE/---broken-stream.yml +++ b/.github/ISSUE_TEMPLATE/--broken-stream.yml @@ -49,4 +49,4 @@ body: description: 'Please read this guide before posting your request' options: - label: I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md) - required: true + required: true \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/--bug-report.yml b/.github/ISSUE_TEMPLATE/--bug-report.yml index 936123087..f0a1bcefe 100644 --- a/.github/ISSUE_TEMPLATE/--bug-report.yml +++ b/.github/ISSUE_TEMPLATE/--bug-report.yml @@ -1,6 +1,5 @@ name: ๐Ÿž Bug Report description: Report an error in this repository -title: 'Fix: ' labels: ['bug'] body: @@ -9,4 +8,12 @@ body: label: Describe your issue description: Please describe the error in as much detail as possible so that we can fix it quickly. validations: - required: true \ No newline at end of file + required: true + + - type: checkboxes + attributes: + label: Contributing Guide + description: 'Please read this guide before posting your request' + options: + - label: I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md) + required: true \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/-removal-request.yml b/.github/ISSUE_TEMPLATE/-copyright-claim.yml similarity index 79% rename from .github/ISSUE_TEMPLATE/-removal-request.yml rename to .github/ISSUE_TEMPLATE/-copyright-claim.yml index a2f059032..4e3d77956 100644 --- a/.github/ISSUE_TEMPLATE/-removal-request.yml +++ b/.github/ISSUE_TEMPLATE/-copyright-claim.yml @@ -1,13 +1,7 @@ -name: โœ‚๏ธ Removal request +name: ยฉ๏ธ Copyright removal request description: Request to remove content -title: 'Remove: ' labels: ['removal request'] body: - - type: markdown - attributes: - value: | - This form is only for requests from the copyright owner or an agent authorized to act on behalf of the copyright owner. If you're experiencing problems viewing a channel please fill a [Broken Stream](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=broken+stream&template=-----broken-stream.yml&title=Fix%3A+) form instead. - - type: input attributes: label: Your full legal name diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 477947d10..f2ebe6ed8 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,11 +1,11 @@ -blank_issues_enabled: false +blank_issues_enabled: true contact_links: - name: ๐Ÿ” Looking for a channel - url: https://github.com/orgs/iptv-org/discussions/new/choose + url: https://github.com/orgs/iptv-org/discussions/categories/channel-search about: Need help finding a link to a channel stream - name: ๐Ÿ’ก Feature request - url: https://github.com/orgs/iptv-org/discussions/new/choose + url: https://github.com/orgs/iptv-org/discussions/categories/ideas about: For any ideas or feature requests - name: โ“ Ask a question - url: https://github.com/orgs/iptv-org/discussions/new/choose + url: https://github.com/orgs/iptv-org/discussions/categories/q-a about: Ask questions about this project diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 4bb2702bd..19695343d 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -25,9 +25,9 @@ jobs: - name: download data from api if: steps.files.outputs.any_changed == 'true' run: | - mkdir -p scripts/tmp/data - curl -L -o scripts/tmp/data/blocklist.json https://iptv-org.github.io/api/blocklist.json - curl -L -o scripts/tmp/data/channels.json https://iptv-org.github.io/api/channels.json + mkdir -p temp/data + curl -L -o temp/data/blocklist.json https://iptv-org.github.io/api/blocklist.json + curl -L -o temp/data/channels.json https://iptv-org.github.io/api/channels.json - name: install dependencies if: steps.files.outputs.any_changed == 'true' run: npm install diff --git a/.github/workflows/update.yml b/.github/workflows/update.yml index e5b3ee34e..3e13b6b69 100644 --- a/.github/workflows/update.yml +++ b/.github/workflows/update.yml @@ -2,7 +2,7 @@ name: update on: workflow_dispatch: schedule: - - cron: '0 */6 * * *' + - cron: '0 0 * * *' jobs: main: runs-on: ubuntu-latest @@ -10,7 +10,7 @@ jobs: contents: write steps: - uses: actions/checkout@v3 - - uses: tibdex/github-app-token@v1 + - uses: getsentry/action-github-app-token@v2 if: ${{ !env.ACT }} id: create-app-token with: @@ -20,7 +20,12 @@ jobs: if: ${{ !env.ACT }} with: token: ${{ steps.create-app-token.outputs.token }} + - name: setup git + run: | + git config user.name "iptv-bot[bot]" + git config user.email "84861620+iptv-bot[bot]@users.noreply.github.com" - uses: actions/setup-node@v3 + if: ${{ !env.ACT }} with: node-version: 18 cache: 'npm' @@ -28,31 +33,36 @@ jobs: run: npm install - name: load api data run: npm run api:load - - name: validate playlists + - name: setup database + run: npm run db:create + - name: update internal playlists + run: npm run playlist:update --silent >> $GITHUB_OUTPUT + id: playlist-update + - name: check internal playlists run: | npm run playlist:lint npm run playlist:validate - - name: setup database - run: npm run db:create - - name: generate playlists + - name: generate public playlists run: npm run playlist:generate - - name: generate streams.json + - name: generate .api/streams.json run: npm run api:generate - name: update readme.md run: npm run readme:update - - name: commit changes - uses: stefanzweifel/git-auto-commit-action@v4 + - run: git status + - name: commit changes to /streams + run: | + git add streams + git status + git commit -m "[Bot] Update /streams" -m "Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/iptv/actions/runs/${{ github.run_id }}) workflow." -m "${{ steps.playlist-update.outputs.OUTPUT }}" --no-verify + - name: commit changes to readme.md + run: | + git add README.md + git status + git commit -m "[Bot] Update README.md" -m "Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/iptv/actions/runs/${{ github.run_id }}) workflow." --no-verify + - name: push all changes to the repository if: ${{ !env.ACT && github.ref == 'refs/heads/master' }} - with: - commit_message: "[Bot] Update README.md" - branch: master - commit_options: '--no-verify' - file_pattern: README.md - repository: . - commit_user_name: iptv-bot[bot] - commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com - commit_author: iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com> - - name: deploy to github pages + run: git push + - name: deploy public playlists to github pages uses: JamesIves/github-pages-deploy-action@4.1.1 if: ${{ !env.ACT && github.ref == 'refs/heads/master' }} with: @@ -64,7 +74,7 @@ jobs: git-config-email: 84861620+iptv-bot[bot]@users.noreply.github.com commit-message: '[Bot] Deploy to GitHub Pages' clean: true - - name: deploy to iptv-org/api + - name: move .api/streams.json to iptv-org/api uses: JamesIves/github-pages-deploy-action@4.1.1 if: ${{ !env.ACT && github.ref == 'refs/heads/master' }} with: diff --git a/.gitignore b/.gitignore index f9fc4b735..3fe46ea01 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ node_modules .DS_Store .gh-pages .api -.env \ No newline at end of file +.env +/temp \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index cd6a30e31..97117cace 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,89 +1,68 @@ # Contributing Guide -- [Issue Reporting Guidelines](#issue-reporting-guidelines) -- [Pull Request Guidelines](#pull-request-guidelines) +- [How to?](#how-to) - [Stream Description Scheme](#stream-description-scheme) - [Project Structure](#project-structure) +- [Scripts](#scripts) +- [Workflows](#workflows) -## Issue Reporting Guidelines +## How to? -### Add stream link +### How to add a new stream link to a playlists? -Before posting your request, make sure that: +You have several options: -- Channel ID is valid. A complete list of all supported channels and their IDs can be found on [iptv-org.github.io](https://iptv-org.github.io/). -- The link you want to add works stably. To check this, open it in one of the players (for example, [VLC player](https://www.videolan.org/vlc/index.html)) and watch the broadcast for at least a minute (some test streams are interrupted after 15-30 seconds). -- The link is not already in the playlist. This can be done by [searching](https://github.com/search?q=repo%3Aiptv-org%2Fiptv+http%3A%2F%2Fexample.com&type=code) the repository. -- The link does not lead to Xtream Codes server. [Why don't you accept links to Xtream Codes server?](FAQ.md#why-dont-you-accept-links-to-xtream-codes-server) -- If you know that the broadcast only works in certain countries or it is periodically interrupted, do not forget to indicate this in the request. - -An issue without a valid channel ID or working link to the stream will be closed immediately. - -### Edit stream description +1. Create a new [issue](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=streams:add&projects=&template=-----streams_add.yml&title=Add%3A+) and provide all the required information. If the request is approved, the link will be added to the playlist in the next update. -Before posting your request, make sure that: +2. Add the link to the playlist directly using a [pull request](https://github.com/iptv-org/iptv/pulls). -- The link is still in our playlists. This can be verified by [searching](https://github.com/search?q=repo%3Aiptv-org%2Fiptv+http%3A%2F%2Fexample.com&type=code) the repository. - -An issue without a valid link will be closed immediately. +Regardless of which option you choose, before posting your request please do the following: -### Report broken link - -Before posting your report, make sure that: +- Make sure the link you want to add works stably. To check this, open it in one of the players (for example, [VLC player](https://www.videolan.org/vlc/index.html)) and watch the broadcast for at least a minute (some test streams are interrupted after 15-30 seconds). +- Make sure the link is not already in the playlist. This can be done by [searching](https://github.com/search?q=repo%3Aiptv-org%2Fiptv+http%3A%2F%2Fexample.com&type=code) the repository. +- Find the ID of the channel you want to add in our [database](https://iptv-org.github.io/). If this particular channel is not in the database, then leave a request to add it [here](https://github.com/iptv-org/database/issues/new/choose) and wait until it is approved before continuing. +- Make sure the channel is not blacklisted. This can be done by checking the [blocklist.csv](https://github.com/iptv-org/database/blob/master/data/blocklist.csv) file. +- The link does not lead to the Xtream Codes server. [Why don't you accept links to Xtream Codes server?](FAQ.md#why-dont-you-accept-links-to-xtream-codes-server) +- If you know that the broadcast only works in certain countries or it is periodically interrupted, do not forget to indicate this in the request. -- The link is still in our playlists. This can be verified by [searching](https://github.com/search?q=repo%3Aiptv-org%2Fiptv+http%3A%2F%2Fexample.com&type=code) the repository. -- The link is not blocked in your country. To check this, you can use either a [VPN](https://en.wikipedia.org/wiki/Virtual_private_network) or services such as [streamtest.in](https://streamtest.in/). +A requests without a valid channel ID or working link to the stream will be closed immediately. -An issue should contain a report for only one channel, otherwise it will be closed immediately. +Note all links in playlists are sorted automatically by scripts so there is no need to sort them manually. For more info, see [Scripts](#scripts). -### Bug report +### How to add a link to YouTube live? -Please use this form only if you have found a bug in one of the scripts or the repository as a whole. To report broken link or an error in the stream description, use one of the methods described above. +You can use one of the services like [abskmj/youtube-hls-m3u8](https://github.com/abskmj/youtube-hls-m3u8) that allow you to create permanent link to the broadcast that can be opened in most players. -### Removal request +### How to distinguish a link to an Xtream Codes server from a regular one? -To request the removal of a link to a channel from repository, you need to fill out this [form](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=removal+request&projects=&template=-removal-request.yml&title=Remove%3A+) and if your request is approved the link will be removed within 1 business day. The channel will also be added to our [blocklist](https://github.com/iptv-org/database/blob/master/data/blocklist.csv) to avoid its appearance in our playlists in the future. +Most of them have this form: -Please keep in mind that we only accept removal requests from channel copyright holders and their official representatives, any other requests will be closed immediately. +`http(s)://{hostname}:{port}/{username}/{password}/{channelID}` (port is often `25461`) -## Pull Request Guidelines +To make sure that the link leads to the Xtream Codes server, copy the `hostname`, `port`, `username` and `password` into the link below and try to open it in a browser: -### Add stream link +`http(s)://{hostname}:{port}/panel_api.php?username={username}&password={password}` -If you want to add a new stream link to playlists, please do the following: +If the link answers, you're with an Xtream Codes server. -- Make sure that the link you want to add works stably. To do this, open it in one of the players (for example, [VLC player](https://www.videolan.org/vlc/index.html)) and watch the broadcast for at least a minute (some test streams are interrupted after 15-30 seconds). -- Make sure the link does not lead to Xtream Codes server. [How to distinguish a link to an Xtream Codes server from a regular one?](FAQ.md#how-to-distinguish-a-link-to-an-xtream-codes-server-from-a-regular-one) -- Find in our [database](https://iptv-org.github.io/) the ID of the channel you want to add. If this particular channel is not in the database, then first leave a request to add it [here](https://github.com/iptv-org/database/issues/new/choose) and once the request is approved, you can proceed further. -- Then open the [/streams](/streams) folder and select the file corresponding to the country of this channel (for example, for `TF1.fr` it will be `fr.m3u`) and then insert the description of the stream and a link to it at the very end of the file. For more info, see [Stream Description Scheme](#stream-description-scheme). -- If you know that the broadcast only works in certain countries, do not forget to add the `[Geo-blocked]` label to the stream description. -- For broadcasts that may be periodically interrupted, there is the label `[Not 24/7]`. -- Finally, commit all changes and submit a pull request. +### How to report a broken stream? -If the request is approved by other community members, then the link will appear in the playlist on the next update. +Fill out this [form](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=broken+stream&projects=&template=---broken-stream.yml&title=Broken%3A+) and as soon as a working replacement appears, we will add it to the playlist or at least remove the non-working one. -### Remove broken link +The only thing before publishing your report is to make sure that: -If you find a link in the playlist that does not work, follow the steps below: +- The link is still in our playlists. You can verify this by [searching](https://github.com/search?q=repo%3Aiptv-org%2Fiptv+http%3A%2F%2Fexample.com&type=code) the repository. +- The link really doesn't work and is not just [geo-blocked](https://en.wikipedia.org/wiki/Geo-blocking). To check this, you can either use a [VPN](https://en.wikipedia.org/wiki/Virtual_private_network) or services such as [streamtest.in](https://streamtest.in/). -- Verify that the link is indeed not working and has not just been [geo-blocked](https://en.wikipedia.org/wiki/Geo-blocking). To do this, you can either use a [VPN](https://en.wikipedia.org/wiki/Virtual_private_network) or services such as [streamtest.in](https://streamtest.in/). -- If the link works, but only when using a VPN, then tag it with [Geo-blocked]. For more info, see [Stream Description Scheme](#stream-description-scheme) -- If it turns out that the link works but not 24/7, then add the [Not 24/7] label to it. -- If the link is still not working, then continue. -- Use a [search](https://github.com/search?q=repo%3Aiptv-org%2Fiptv+http%3A%2F%2Fexample.com&type=code) to find which file this link is stored in, open it and delete the link along with the description. -- Commit the changes and make a pull request. +An issue without a valid link will be closed immediately. -### Update README.md +### How do I remove my channel from playlist? -- Open `.readme/template.md`. -- Make the necessary changes. -- Commit all changes and send a pull request. +To request removal of a link to a channel from the repository, you need to fill out this [form](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=removal+request&projects=&template=-removal-request.yml&title=Remove%3A+) and wait for the request to be reviewed (this usually takes no more than 1 business day). And if the request is approved, links to the channel will be immediately removed from the repository. -### Update this Guide +The channel will also be added to our [blocklist](https://github.com/iptv-org/database/blob/master/data/blocklist.csv) to avoid its appearance in our playlists in the future. -- Open `.github/CONTRIBUTING.md`. -- Make the necessary changes. -- Commit all changes and send a pull request. +Please note that we only accept removal requests from channel owners and their official representatives, all other requests will be closed immediately. ## Stream Description Scheme @@ -97,7 +76,7 @@ STREAM_URL | Attribute | Description | Required | Valid values | | -------------- | ------------------------------------------------------------------------------------------ | -------- | -------------------------------------------------------------------------------------------------------------------------- | | `CHANNEL_ID` | Channel ID. | Optional | Full list of supported channels with corresponding ID could be found on [iptv-org.github.io](https://iptv-org.github.io/). | -| `CHANNEL_NAME` | Full name of the channel. May contain any characters except: `,`, `(`, `)`, `[`, `]`. | Required | - | +| `CHANNEL_NAME` | Full name of the channel. May contain any characters except: `,`, `[`, `]`. | Required | - | | `RESOLUTION` | Maximum stream resolution | Optional | `2160p`, `1080p`, `720p`, `480p`, `360p` etc | | `LABEL` | Specified in cases where the broadcast for some reason may not be available to some users. | Optional | `Geo-blocked` or `Not 24/7` | | `STREAM_URL` | Stream URL. | Required | - | @@ -109,7 +88,7 @@ Example: https://example.com/playlist.m3u8 ``` -Also, if necessary, you can specify custom HTTP User-Agent and Referrer via the `#EXTVLCOPT` tag: +Also, if necessary, you can specify custom [HTTP User-Agent](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent) and [Referrer](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer) via the `#EXTVLCOPT` tag: ```xml #EXTINF:-1 tvg-id="ExampleTV.us",Example TV @@ -134,3 +113,40 @@ http://example.com/stream.m3u8 - `tests/`: contains tests to check the scripts. - `CONTRIBUTING.md`: file you are currently reading. - `README.md`: project description generated from the contents of the `.readme/` folder. + +## Scripts + +These scripts are created to automate routine processes in the repository and make it a bit easier to maintain. + +For scripts to work, you must have [Node.js](https://nodejs.org/en) installed on your computer. + +To run scripts use the `npm run ` command. + +- `act:check`: allows to run the [check](https://github.com/iptv-org/iptv/blob/master/.github/workflows/check.yml) workflow locally. Depends on [nektos/act](https://github.com/nektos/act). +- `act:update`: allows to test the [update](https://github.com/iptv-org/iptv/blob/master/.github/workflows/update.yml) workflow locally. Depends on [nektos/act](https://github.com/nektos/act). +- `api:load`: downloads the latest channel and stream data from the [iptv-org/api](https://github.com/iptv-org/api). +- `api:generate`: generates a JSON file with all streams for the [iptv-org/api](https://github.com/iptv-org/api) repository. +- `api:deploy`: allows to manually upload a JSON file created via `api:generate` to the [iptv-org/api](https://github.com/iptv-org/api) repository. To run the script you must provide your [personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens) with write access to the repository. +- `db:create`: ัreates a temporary file `temp/database/streams.db` containing all links from the [/streams]() folder. +- `playlist:update`: triggers an update of internal playlists. The process involves processing approved requests from issues, URL normalization, and sorting links by channel name, quality, and label. +- `playlist:validate`: ัhecks ids and links in internal playlists for errors. +- `playlist:lint`: ัhecks internal playlists for syntax errors. +- `playlist:generate`: generates all public playlists. +- `playlist:deploy`: allows to manually publish all generated via `playlist:generate` playlists. To run the script you must provide your [personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens) with write access to the repository. +- `readme:update`: updates the list of playlists in [README.md](README.md). +- `report:create`: shows a list of all current requests and their status. +- `format`: (shorthand) sequentially runs the `db:create` and `db:create` commands. +- `check`: (shorthand) sequentially runs the `api:load`, `playlist:lint` and `playlist:validate` commands. +- `update`: (shorthand) sequentially runs the `api:load`, `db:create`, `playlist:generate`, `api:generate` and `readme:update` commands. +- `deploy`: (shorthand) sequentially runs the `playlist:deploy` and `api:deploy` commands. +- `report`: (shorthand) sequentially runs the `api:load` and `report:create` commands. +- `test`: runs a test of all the scripts described above. + +## Workflows + +To automate the run of the scripts described above, we use the [GitHub Actions workflows](https://docs.github.com/en/actions/using-workflows). + +Each workflow includes its own set of scripts that can be run either manually or in response to an event. + +- `check`: sequentially runs the `playlist:check` and `playlist:validate` scripts when a new pull request appears, and blocks the merge if it detects an error in it. +- `update`: every day at 0:00 UTC sequentially runs `api:load`, `db:create`, `playlist:update`, `playlist:lint`, `playlist:validate`, `playlist:generate`, `api:generate` and `readme:update` scripts and deploys the output files if successful. diff --git a/FAQ.md b/FAQ.md index 95de5104b..a18e991dd 100644 --- a/FAQ.md +++ b/FAQ.md @@ -6,18 +6,6 @@ Start by asking our community for help via [Discussions](https://github.com/orgs But keep in mind that not all TV channels are available for viewing online, and in this case there is little we can do about it. -### How can I add stream to playlists? - -You have several options: - -1. Create a new [issue](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=streams:add&projects=&template=-----streams_add.yml&title=Add%3A+) with a valid channel ID and a link to the stream. If the request is approved , the link will be added to the playlist in the next update. For or more info, see [Issue Reporting Guidelines](CONTRIBUTING.md#issue-reporting-guidelines). - -2. Or you can add the link to the playlist directly via pull request. For more info, see [Pull Request Guidelines](CONTRIBUTING.md#pull-request-guidelines). - -### How to report a broken stream? - -Fill out this [form](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=broken+stream&projects=&template=---broken-stream.yml&title=Broken%3A+) and as soon as there is a working replacement, we will add it to the playlist or at least remove the non-working one. - ### Does the playlist have a channel guide? Yes. See [iptv-org/epg](https://github.com/iptv-org/epg) for more info. @@ -30,10 +18,6 @@ No. The site contains a list of all TV channels in the world and only those of them for which we have working stream links are included in the playlists. -### How can I add a link to YouTube live? - -Since not all players allow you to open links to YouTube directly, we also cannot add them to playlists yet. However, some services like [abskmj/youtube-hls-m3u8](https://github.com/abskmj/youtube-hls-m3u8) allow you to get around this limitation by creating permalinks to the feed that can be played as normal. And these are the kind of links you can add to the playlist. - ### Can I add a radio broadcast? Yes, if it is a [visual radio](https://en.wikipedia.org/wiki/Visual_radio) in which a video and audio are shown at the same time. @@ -41,15 +25,3 @@ Yes, if it is a [visual radio](https://en.wikipedia.org/wiki/Visual_radio) in wh ### Why don't you accept links to Xtream Codes server? Xtream Codes streams tend to be very unstable, and often links to them fail very quickly, so it's easier for us to initially exclude them from the playlist than to search for expired ones every day. - -### How to distinguish a link to an Xtream Codes server from a regular one? - -Most of them have this form: - -`http(s)://{hostname}:{port}/{username}/{password}/{channelID}` (port is often `25461`) - -To make sure that the link leads to the Xtream Codes server, copy the `hostname`, `port`, `username` and `password` into the link below and try to open it in a browser: - -`http(s)://{hostname}:{port}/panel_api.php?username={username}&password={password}` - -If the link answers, you're with an Xtream Codes server. diff --git a/README.md b/README.md index 4669ebb9c..a340967c1 100644 --- a/README.md +++ b/README.md @@ -60,34 +60,34 @@ Same thing, but split up into separate files: Auto15https://iptv-org.github.io/iptv/categories/auto.m3u - Animation49https://iptv-org.github.io/iptv/categories/animation.m3u + Animation50https://iptv-org.github.io/iptv/categories/animation.m3u Business57https://iptv-org.github.io/iptv/categories/business.m3u Classic55https://iptv-org.github.io/iptv/categories/classic.m3u Comedy57https://iptv-org.github.io/iptv/categories/comedy.m3u Cooking23https://iptv-org.github.io/iptv/categories/cooking.m3u Culture76https://iptv-org.github.io/iptv/categories/culture.m3u - Documentary63https://iptv-org.github.io/iptv/categories/documentary.m3u + Documentary64https://iptv-org.github.io/iptv/categories/documentary.m3u Education116https://iptv-org.github.io/iptv/categories/education.m3u - Entertainment353https://iptv-org.github.io/iptv/categories/entertainment.m3u + Entertainment354https://iptv-org.github.io/iptv/categories/entertainment.m3u Family40https://iptv-org.github.io/iptv/categories/family.m3u - General1097https://iptv-org.github.io/iptv/categories/general.m3u + General1101https://iptv-org.github.io/iptv/categories/general.m3u Kids182https://iptv-org.github.io/iptv/categories/kids.m3u - Legislative165https://iptv-org.github.io/iptv/categories/legislative.m3u - Lifestyle81https://iptv-org.github.io/iptv/categories/lifestyle.m3u - Movies277https://iptv-org.github.io/iptv/categories/movies.m3u - Music485https://iptv-org.github.io/iptv/categories/music.m3u + Legislative166https://iptv-org.github.io/iptv/categories/legislative.m3u + Lifestyle79https://iptv-org.github.io/iptv/categories/lifestyle.m3u + Movies274https://iptv-org.github.io/iptv/categories/movies.m3u + Music483https://iptv-org.github.io/iptv/categories/music.m3u News705https://iptv-org.github.io/iptv/categories/news.m3u Outdoor44https://iptv-org.github.io/iptv/categories/outdoor.m3u Relax16https://iptv-org.github.io/iptv/categories/relax.m3u - Religious440https://iptv-org.github.io/iptv/categories/religious.m3u - Series162https://iptv-org.github.io/iptv/categories/series.m3u + Religious438https://iptv-org.github.io/iptv/categories/religious.m3u + Series160https://iptv-org.github.io/iptv/categories/series.m3u Science25https://iptv-org.github.io/iptv/categories/science.m3u Shop74https://iptv-org.github.io/iptv/categories/shop.m3u - Sports207https://iptv-org.github.io/iptv/categories/sports.m3u + Sports205https://iptv-org.github.io/iptv/categories/sports.m3u Travel30https://iptv-org.github.io/iptv/categories/travel.m3u Weather14https://iptv-org.github.io/iptv/categories/weather.m3u XXX46https://iptv-org.github.io/iptv/categories/xxx.m3u - Undefined5247https://iptv-org.github.io/iptv/categories/undefined.m3u + Undefined5262https://iptv-org.github.io/iptv/categories/undefined.m3u @@ -118,7 +118,7 @@ Same thing, but split up into separate files: Albanian58https://iptv-org.github.io/iptv/languages/sqi.m3u Alemannic1https://iptv-org.github.io/iptv/languages/gsw.m3u Amharic5https://iptv-org.github.io/iptv/languages/amh.m3u - Arabic378https://iptv-org.github.io/iptv/languages/ara.m3u + Arabic379https://iptv-org.github.io/iptv/languages/ara.m3u Armenian29https://iptv-org.github.io/iptv/languages/hye.m3u Assamese7https://iptv-org.github.io/iptv/languages/asm.m3u Assyrian Neo-Aramaic1https://iptv-org.github.io/iptv/languages/aii.m3u @@ -143,7 +143,7 @@ Same thing, but split up into separate files: Dimili1https://iptv-org.github.io/iptv/languages/zza.m3u Dutch191https://iptv-org.github.io/iptv/languages/nld.m3u English2177https://iptv-org.github.io/iptv/languages/eng.m3u - Estonian9https://iptv-org.github.io/iptv/languages/est.m3u + Estonian8https://iptv-org.github.io/iptv/languages/est.m3u Ewe1https://iptv-org.github.io/iptv/languages/ewe.m3u Faroese1https://iptv-org.github.io/iptv/languages/fao.m3u Fataleka1https://iptv-org.github.io/iptv/languages/far.m3u @@ -217,7 +217,7 @@ Same thing, but split up into separate files: Slovak44https://iptv-org.github.io/iptv/languages/slk.m3u Slovenian16https://iptv-org.github.io/iptv/languages/slv.m3u Somali8https://iptv-org.github.io/iptv/languages/som.m3u - Spanish1824https://iptv-org.github.io/iptv/languages/spa.m3u + Spanish1830https://iptv-org.github.io/iptv/languages/spa.m3u Swahili14https://iptv-org.github.io/iptv/languages/swa.m3u Swedish20https://iptv-org.github.io/iptv/languages/swe.m3u Tagalog14https://iptv-org.github.io/iptv/languages/tgl.m3u @@ -238,7 +238,7 @@ Same thing, but split up into separate files: Wolof3https://iptv-org.github.io/iptv/languages/wol.m3u Yucatec Maya1https://iptv-org.github.io/iptv/languages/yua.m3u Yue Chinese10https://iptv-org.github.io/iptv/languages/yue.m3u - Undefined1279https://iptv-org.github.io/iptv/languages/undefined.m3u + Undefined1283https://iptv-org.github.io/iptv/languages/undefined.m3u @@ -272,7 +272,7 @@ Same thing, but split up into separate files: ๐Ÿ‡ฆ๐Ÿ‡ด Angola14https://iptv-org.github.io/iptv/countries/ao.m3u ๐Ÿ‡ฆ๐Ÿ‡ฎ Anguilla5https://iptv-org.github.io/iptv/countries/ai.m3u ๐Ÿ‡ฆ๐Ÿ‡ฌ Antigua and Barbuda7https://iptv-org.github.io/iptv/countries/ag.m3u - ๐Ÿ‡ฆ๐Ÿ‡ท Argentina312https://iptv-org.github.io/iptv/countries/ar.m3u + ๐Ÿ‡ฆ๐Ÿ‡ท Argentina313https://iptv-org.github.io/iptv/countries/ar.m3u       Buenos Aires30https://iptv-org.github.io/iptv/subdivisions/ar-b.m3u       Catamarca2https://iptv-org.github.io/iptv/subdivisions/ar-k.m3u       Chaco5https://iptv-org.github.io/iptv/subdivisions/ar-h.m3u @@ -311,7 +311,7 @@ Same thing, but split up into separate files: ๐Ÿ‡ง๐Ÿ‡ฏ Benin19https://iptv-org.github.io/iptv/countries/bj.m3u ๐Ÿ‡ง๐Ÿ‡ฒ Bermuda4https://iptv-org.github.io/iptv/countries/bm.m3u ๐Ÿ‡ง๐Ÿ‡น Bhutan7https://iptv-org.github.io/iptv/countries/bt.m3u - ๐Ÿ‡ง๐Ÿ‡ด Bolivia82https://iptv-org.github.io/iptv/countries/bo.m3u + ๐Ÿ‡ง๐Ÿ‡ด Bolivia83https://iptv-org.github.io/iptv/countries/bo.m3u       Cochabamba1https://iptv-org.github.io/iptv/subdivisions/bo-c.m3u       La Paz1https://iptv-org.github.io/iptv/subdivisions/bo-l.m3u       Oruro1https://iptv-org.github.io/iptv/subdivisions/bo-o.m3u @@ -366,7 +366,7 @@ Same thing, but split up into separate files: ๐Ÿ‡ฐ๐Ÿ‡พ Cayman Islands5https://iptv-org.github.io/iptv/countries/ky.m3u ๐Ÿ‡จ๐Ÿ‡ซ Central African Republic12https://iptv-org.github.io/iptv/countries/cf.m3u ๐Ÿ‡น๐Ÿ‡ฉ Chad13https://iptv-org.github.io/iptv/countries/td.m3u - ๐Ÿ‡จ๐Ÿ‡ฑ Chile255https://iptv-org.github.io/iptv/countries/cl.m3u + ๐Ÿ‡จ๐Ÿ‡ฑ Chile256https://iptv-org.github.io/iptv/countries/cl.m3u       Biobio3https://iptv-org.github.io/iptv/subdivisions/cl-bi.m3u       Coquimbo1https://iptv-org.github.io/iptv/subdivisions/cl-co.m3u       La Araucania2https://iptv-org.github.io/iptv/subdivisions/cl-ar.m3u @@ -376,7 +376,7 @@ Same thing, but split up into separate files:       Nuble3https://iptv-org.github.io/iptv/subdivisions/cl-nb.m3u       Valparaiso2https://iptv-org.github.io/iptv/subdivisions/cl-vs.m3u ๐Ÿ‡จ๐Ÿ‡ณ China562https://iptv-org.github.io/iptv/countries/cn.m3u - ๐Ÿ‡จ๐Ÿ‡ด Colombia133https://iptv-org.github.io/iptv/countries/co.m3u + ๐Ÿ‡จ๐Ÿ‡ด Colombia134https://iptv-org.github.io/iptv/countries/co.m3u       San Andres, Providencia y Santa Catalina1https://iptv-org.github.io/iptv/subdivisions/co-sap.m3u       Antioquia1https://iptv-org.github.io/iptv/subdivisions/co-ant.m3u       Atlantico1https://iptv-org.github.io/iptv/subdivisions/co-atl.m3u @@ -395,11 +395,11 @@ Same thing, but split up into separate files:       Valle del Cauca5https://iptv-org.github.io/iptv/subdivisions/co-vac.m3u ๐Ÿ‡ฐ๐Ÿ‡ฒ Comoros40https://iptv-org.github.io/iptv/countries/km.m3u ๐Ÿ‡จ๐Ÿ‡ฐ Cook Islands6https://iptv-org.github.io/iptv/countries/ck.m3u - ๐Ÿ‡จ๐Ÿ‡ท Costa Rica95https://iptv-org.github.io/iptv/countries/cr.m3u + ๐Ÿ‡จ๐Ÿ‡ท Costa Rica94https://iptv-org.github.io/iptv/countries/cr.m3u       Puntarenas1https://iptv-org.github.io/iptv/subdivisions/cr-p.m3u -       San Jose2https://iptv-org.github.io/iptv/subdivisions/cr-sj.m3u +       San Jose1https://iptv-org.github.io/iptv/subdivisions/cr-sj.m3u ๐Ÿ‡ญ๐Ÿ‡ท Croatia27https://iptv-org.github.io/iptv/countries/hr.m3u - ๐Ÿ‡จ๐Ÿ‡บ Cuba48https://iptv-org.github.io/iptv/countries/cu.m3u + ๐Ÿ‡จ๐Ÿ‡บ Cuba49https://iptv-org.github.io/iptv/countries/cu.m3u ๐Ÿ‡จ๐Ÿ‡ผ Curacao10https://iptv-org.github.io/iptv/countries/cw.m3u ๐Ÿ‡จ๐Ÿ‡พ Cyprus41https://iptv-org.github.io/iptv/countries/cy.m3u ๐Ÿ‡จ๐Ÿ‡ฟ Czech Republic43https://iptv-org.github.io/iptv/countries/cz.m3u @@ -407,9 +407,8 @@ Same thing, but split up into separate files: ๐Ÿ‡ฉ๐Ÿ‡ฐ Denmark34https://iptv-org.github.io/iptv/countries/dk.m3u ๐Ÿ‡ฉ๐Ÿ‡ฏ Djibouti45https://iptv-org.github.io/iptv/countries/dj.m3u ๐Ÿ‡ฉ๐Ÿ‡ฒ Dominica5https://iptv-org.github.io/iptv/countries/dm.m3u - ๐Ÿ‡ฉ๐Ÿ‡ด Dominican Republic189https://iptv-org.github.io/iptv/countries/do.m3u + ๐Ÿ‡ฉ๐Ÿ‡ด Dominican Republic205https://iptv-org.github.io/iptv/countries/do.m3u       Distrito Nacional (Santo Domingo)2https://iptv-org.github.io/iptv/subdivisions/do-01.m3u -       El Seibo1https://iptv-org.github.io/iptv/subdivisions/do-08.m3u       La Altagracia2https://iptv-org.github.io/iptv/subdivisions/do-11.m3u       La Vega3https://iptv-org.github.io/iptv/subdivisions/do-13.m3u       Monsenor Nouel2https://iptv-org.github.io/iptv/subdivisions/do-28.m3u @@ -418,12 +417,12 @@ Same thing, but split up into separate files:       Santiago1https://iptv-org.github.io/iptv/subdivisions/do-25.m3u       Valverde1https://iptv-org.github.io/iptv/subdivisions/do-27.m3u ๐Ÿ‡น๐Ÿ‡ฑ East Timor27https://iptv-org.github.io/iptv/countries/tl.m3u - ๐Ÿ‡ช๐Ÿ‡จ Ecuador78https://iptv-org.github.io/iptv/countries/ec.m3u + ๐Ÿ‡ช๐Ÿ‡จ Ecuador79https://iptv-org.github.io/iptv/countries/ec.m3u       Azuay1https://iptv-org.github.io/iptv/subdivisions/ec-a.m3u       Loja1https://iptv-org.github.io/iptv/subdivisions/ec-l.m3u       Orellana1https://iptv-org.github.io/iptv/subdivisions/ec-d.m3u ๐Ÿ‡ช๐Ÿ‡ฌ Egypt76https://iptv-org.github.io/iptv/countries/eg.m3u - ๐Ÿ‡ธ๐Ÿ‡ป El Salvador63https://iptv-org.github.io/iptv/countries/sv.m3u + ๐Ÿ‡ธ๐Ÿ‡ป El Salvador64https://iptv-org.github.io/iptv/countries/sv.m3u ๐Ÿ‡ฌ๐Ÿ‡ถ Equatorial Guinea14https://iptv-org.github.io/iptv/countries/gq.m3u ๐Ÿ‡ช๐Ÿ‡ท Eritrea12https://iptv-org.github.io/iptv/countries/er.m3u ๐Ÿ‡ช๐Ÿ‡ช Estonia23https://iptv-org.github.io/iptv/countries/ee.m3u @@ -448,7 +447,7 @@ Same thing, but split up into separate files: ๐Ÿ‡ฌ๐Ÿ‡ฉ Grenada5https://iptv-org.github.io/iptv/countries/gd.m3u ๐Ÿ‡ฌ๐Ÿ‡ต Guadeloupe9https://iptv-org.github.io/iptv/countries/gp.m3u ๐Ÿ‡ฌ๐Ÿ‡บ Guam7https://iptv-org.github.io/iptv/countries/gu.m3u - ๐Ÿ‡ฌ๐Ÿ‡น Guatemala99https://iptv-org.github.io/iptv/countries/gt.m3u + ๐Ÿ‡ฌ๐Ÿ‡น Guatemala100https://iptv-org.github.io/iptv/countries/gt.m3u       Escuintla2https://iptv-org.github.io/iptv/subdivisions/gt-05.m3u       Izabal1https://iptv-org.github.io/iptv/subdivisions/gt-18.m3u       Quiche1https://iptv-org.github.io/iptv/subdivisions/gt-14.m3u @@ -462,7 +461,7 @@ Same thing, but split up into separate files: ๐Ÿ‡ฌ๐Ÿ‡ผ Guinea-Bissau12https://iptv-org.github.io/iptv/countries/gw.m3u ๐Ÿ‡ฌ๐Ÿ‡พ Guyana4https://iptv-org.github.io/iptv/countries/gy.m3u ๐Ÿ‡ญ๐Ÿ‡น Haiti40https://iptv-org.github.io/iptv/countries/ht.m3u - ๐Ÿ‡ญ๐Ÿ‡ณ Honduras106https://iptv-org.github.io/iptv/countries/hn.m3u + ๐Ÿ‡ญ๐Ÿ‡ณ Honduras107https://iptv-org.github.io/iptv/countries/hn.m3u ๐Ÿ‡ญ๐Ÿ‡ฐ Hong Kong21https://iptv-org.github.io/iptv/countries/hk.m3u ๐Ÿ‡ญ๐Ÿ‡บ Hungary117https://iptv-org.github.io/iptv/countries/hu.m3u ๐Ÿ‡ฎ๐Ÿ‡ธ Iceland16https://iptv-org.github.io/iptv/countries/is.m3u @@ -537,7 +536,7 @@ Same thing, but split up into separate files: ๐Ÿ‡ฒ๐Ÿ‡ฝ Mexico207https://iptv-org.github.io/iptv/countries/mx.m3u       Aguascalientes1https://iptv-org.github.io/iptv/subdivisions/mx-agu.m3u       Baja California1https://iptv-org.github.io/iptv/subdivisions/mx-bcn.m3u -       Chihuahua3https://iptv-org.github.io/iptv/subdivisions/mx-chh.m3u +       Chihuahua4https://iptv-org.github.io/iptv/subdivisions/mx-chh.m3u       Ciudad de Mexico1https://iptv-org.github.io/iptv/subdivisions/mx-cmx.m3u       Coahuila de Zaragoza3https://iptv-org.github.io/iptv/subdivisions/mx-coa.m3u       Durango1https://iptv-org.github.io/iptv/subdivisions/mx-dur.m3u @@ -572,7 +571,7 @@ Same thing, but split up into separate files: ๐Ÿ‡ณ๐Ÿ‡ฑ Netherlands201https://iptv-org.github.io/iptv/countries/nl.m3u ๐Ÿ‡ณ๐Ÿ‡จ New Caledonia6https://iptv-org.github.io/iptv/countries/nc.m3u ๐Ÿ‡ณ๐Ÿ‡ฟ New Zealand32https://iptv-org.github.io/iptv/countries/nz.m3u - ๐Ÿ‡ณ๐Ÿ‡ฎ Nicaragua58https://iptv-org.github.io/iptv/countries/ni.m3u + ๐Ÿ‡ณ๐Ÿ‡ฎ Nicaragua59https://iptv-org.github.io/iptv/countries/ni.m3u ๐Ÿ‡ณ๐Ÿ‡ช Niger13https://iptv-org.github.io/iptv/countries/ne.m3u ๐Ÿ‡ณ๐Ÿ‡ฌ Nigeria55https://iptv-org.github.io/iptv/countries/ng.m3u ๐Ÿ‡ณ๐Ÿ‡บ Niue6https://iptv-org.github.io/iptv/countries/nu.m3u @@ -586,30 +585,33 @@ Same thing, but split up into separate files:       Islamabad1https://iptv-org.github.io/iptv/subdivisions/pk-is.m3u ๐Ÿ‡ต๐Ÿ‡ผ Palau6https://iptv-org.github.io/iptv/countries/pw.m3u ๐Ÿ‡ต๐Ÿ‡ธ Palestine59https://iptv-org.github.io/iptv/countries/ps.m3u - ๐Ÿ‡ต๐Ÿ‡ฆ Panama61https://iptv-org.github.io/iptv/countries/pa.m3u + ๐Ÿ‡ต๐Ÿ‡ฆ Panama62https://iptv-org.github.io/iptv/countries/pa.m3u ๐Ÿ‡ต๐Ÿ‡ฌ Papua New Guinea6https://iptv-org.github.io/iptv/countries/pg.m3u - ๐Ÿ‡ต๐Ÿ‡พ Paraguay85https://iptv-org.github.io/iptv/countries/py.m3u + ๐Ÿ‡ต๐Ÿ‡พ Paraguay86https://iptv-org.github.io/iptv/countries/py.m3u       Alto Parana2https://iptv-org.github.io/iptv/subdivisions/py-10.m3u       Boqueron1https://iptv-org.github.io/iptv/subdivisions/py-19.m3u       Caaguazu1https://iptv-org.github.io/iptv/subdivisions/py-5.m3u       Central1https://iptv-org.github.io/iptv/subdivisions/py-11.m3u       Itapua1https://iptv-org.github.io/iptv/subdivisions/py-7.m3u       Presidente Hayes1https://iptv-org.github.io/iptv/subdivisions/py-15.m3u - ๐Ÿ‡ต๐Ÿ‡ช Peru196https://iptv-org.github.io/iptv/countries/pe.m3u -       Amazonas2https://iptv-org.github.io/iptv/subdivisions/pe-ama.m3u + ๐Ÿ‡ต๐Ÿ‡ช Peru197https://iptv-org.github.io/iptv/countries/pe.m3u +       Amazonas1https://iptv-org.github.io/iptv/subdivisions/pe-ama.m3u +       Ancash1https://iptv-org.github.io/iptv/subdivisions/pe-anc.m3u       Apurimac1https://iptv-org.github.io/iptv/subdivisions/pe-apu.m3u       Arequipa4https://iptv-org.github.io/iptv/subdivisions/pe-are.m3u -       Ayacucho1https://iptv-org.github.io/iptv/subdivisions/pe-aya.m3u +       Ayacucho2https://iptv-org.github.io/iptv/subdivisions/pe-aya.m3u       Cusco1https://iptv-org.github.io/iptv/subdivisions/pe-cus.m3u       Junin3https://iptv-org.github.io/iptv/subdivisions/pe-jun.m3u       Lima3https://iptv-org.github.io/iptv/subdivisions/pe-lim.m3u +       Loreto2https://iptv-org.github.io/iptv/subdivisions/pe-lor.m3u       Moquegua3https://iptv-org.github.io/iptv/subdivisions/pe-moq.m3u       Puno1https://iptv-org.github.io/iptv/subdivisions/pe-pun.m3u +       San Martin1https://iptv-org.github.io/iptv/subdivisions/pe-sam.m3u ๐Ÿ‡ต๐Ÿ‡ญ Philippines50https://iptv-org.github.io/iptv/countries/ph.m3u ๐Ÿ‡ต๐Ÿ‡ณ Pitcairn Islands6https://iptv-org.github.io/iptv/countries/pn.m3u ๐Ÿ‡ต๐Ÿ‡ฑ Poland64https://iptv-org.github.io/iptv/countries/pl.m3u ๐Ÿ‡ต๐Ÿ‡น Portugal54https://iptv-org.github.io/iptv/countries/pt.m3u - ๐Ÿ‡ต๐Ÿ‡ท Puerto Rico82https://iptv-org.github.io/iptv/countries/pr.m3u + ๐Ÿ‡ต๐Ÿ‡ท Puerto Rico83https://iptv-org.github.io/iptv/countries/pr.m3u ๐Ÿ‡ถ๐Ÿ‡ฆ Qatar37https://iptv-org.github.io/iptv/countries/qa.m3u ๐Ÿ‡จ๐Ÿ‡ฌ Republic of the Congo16https://iptv-org.github.io/iptv/countries/cg.m3u       Brazzaville1https://iptv-org.github.io/iptv/subdivisions/cg-bzv.m3u @@ -627,7 +629,7 @@ Same thing, but split up into separate files: ๐Ÿ‡ป๐Ÿ‡จ Saint Vincent and the Grenadines5https://iptv-org.github.io/iptv/countries/vc.m3u ๐Ÿ‡ผ๐Ÿ‡ธ Samoa6https://iptv-org.github.io/iptv/countries/ws.m3u ๐Ÿ‡ธ๐Ÿ‡ฒ San Marino13https://iptv-org.github.io/iptv/countries/sm.m3u - ๐Ÿ‡ธ๐Ÿ‡ฆ Saudi Arabia72https://iptv-org.github.io/iptv/countries/sa.m3u + ๐Ÿ‡ธ๐Ÿ‡ฆ Saudi Arabia73https://iptv-org.github.io/iptv/countries/sa.m3u ๐Ÿ‡ธ๐Ÿ‡ณ Senegal30https://iptv-org.github.io/iptv/countries/sn.m3u ๐Ÿ‡ท๐Ÿ‡ธ Serbia89https://iptv-org.github.io/iptv/countries/rs.m3u ๐Ÿ‡ธ๐Ÿ‡จ Seychelles12https://iptv-org.github.io/iptv/countries/sc.m3u @@ -655,7 +657,7 @@ Same thing, but split up into separate files:       Seoul-teukbyeolsi1https://iptv-org.github.io/iptv/subdivisions/kr-11.m3u       Ulsan-gwangyeoksi2https://iptv-org.github.io/iptv/subdivisions/kr-31.m3u ๐Ÿ‡ธ๐Ÿ‡ธ South Sudan12https://iptv-org.github.io/iptv/countries/ss.m3u - ๐Ÿ‡ช๐Ÿ‡ธ Spain325https://iptv-org.github.io/iptv/countries/es.m3u + ๐Ÿ‡ช๐Ÿ‡ธ Spain326https://iptv-org.github.io/iptv/countries/es.m3u       Asturias, Principado de2https://iptv-org.github.io/iptv/subdivisions/es-as.m3u       Madrid, Comunidad de6https://iptv-org.github.io/iptv/subdivisions/es-md.m3u       Murcia, Region de3https://iptv-org.github.io/iptv/subdivisions/es-mc.m3u @@ -699,7 +701,7 @@ Same thing, but split up into separate files: ๐Ÿ‡ฆ๐Ÿ‡ช United Arab Emirates75https://iptv-org.github.io/iptv/countries/ae.m3u ๐Ÿ‡ฌ๐Ÿ‡ง United Kingdom194https://iptv-org.github.io/iptv/countries/uk.m3u       Wales2https://iptv-org.github.io/iptv/subdivisions/gb-wls.m3u - ๐Ÿ‡บ๐Ÿ‡ธ United States1893https://iptv-org.github.io/iptv/countries/us.m3u + ๐Ÿ‡บ๐Ÿ‡ธ United States1889https://iptv-org.github.io/iptv/countries/us.m3u       Alabama4https://iptv-org.github.io/iptv/subdivisions/us-al.m3u       Alaska2https://iptv-org.github.io/iptv/subdivisions/us-ak.m3u       Arizona14https://iptv-org.github.io/iptv/subdivisions/us-az.m3u @@ -751,11 +753,11 @@ Same thing, but split up into separate files:       Washington8https://iptv-org.github.io/iptv/subdivisions/us-wa.m3u       Wisconsin7https://iptv-org.github.io/iptv/subdivisions/us-wi.m3u       Wyoming1https://iptv-org.github.io/iptv/subdivisions/us-wy.m3u - ๐Ÿ‡บ๐Ÿ‡พ Uruguay57https://iptv-org.github.io/iptv/countries/uy.m3u + ๐Ÿ‡บ๐Ÿ‡พ Uruguay58https://iptv-org.github.io/iptv/countries/uy.m3u ๐Ÿ‡บ๐Ÿ‡ฟ Uzbekistan9https://iptv-org.github.io/iptv/countries/uz.m3u ๐Ÿ‡ป๐Ÿ‡บ Vanuatu6https://iptv-org.github.io/iptv/countries/vu.m3u ๐Ÿ‡ป๐Ÿ‡ฆ Vatican City19https://iptv-org.github.io/iptv/countries/va.m3u - ๐Ÿ‡ป๐Ÿ‡ช Venezuela103https://iptv-org.github.io/iptv/countries/ve.m3u + ๐Ÿ‡ป๐Ÿ‡ช Venezuela104https://iptv-org.github.io/iptv/countries/ve.m3u       Aragua2https://iptv-org.github.io/iptv/subdivisions/ve-d.m3u       Lara1https://iptv-org.github.io/iptv/subdivisions/ve-k.m3u ๐Ÿ‡ป๐Ÿ‡ณ Vietnam125https://iptv-org.github.io/iptv/countries/vn.m3u @@ -791,33 +793,33 @@ Same thing, but split up into separate files: Africa424https://iptv-org.github.io/iptv/regions/afr.m3u - Americas3793https://iptv-org.github.io/iptv/regions/amer.m3u + Americas3801https://iptv-org.github.io/iptv/regions/amer.m3u Asia-Pacific1918https://iptv-org.github.io/iptv/regions/apac.m3u - Arab world426https://iptv-org.github.io/iptv/regions/arab.m3u + Arab world427https://iptv-org.github.io/iptv/regions/arab.m3u Association of Southeast Asian Nations472https://iptv-org.github.io/iptv/regions/asean.m3u - Asia2960https://iptv-org.github.io/iptv/regions/asia.m3u + Asia2961https://iptv-org.github.io/iptv/regions/asia.m3u Benelux240https://iptv-org.github.io/iptv/regions/benelux.m3u - Caribbean237https://iptv-org.github.io/iptv/regions/carib.m3u + Caribbean252https://iptv-org.github.io/iptv/regions/carib.m3u Central Asia64https://iptv-org.github.io/iptv/regions/cas.m3u Central and Eastern Europe1019https://iptv-org.github.io/iptv/regions/cee.m3u - Central America203https://iptv-org.github.io/iptv/regions/cenamer.m3u + Central America201https://iptv-org.github.io/iptv/regions/cenamer.m3u Commonwealth of Independent States461https://iptv-org.github.io/iptv/regions/cis.m3u - Europe, the Middle East and Africa4044https://iptv-org.github.io/iptv/regions/emea.m3u - Europe3226https://iptv-org.github.io/iptv/regions/eur.m3u - Hispanic America1445https://iptv-org.github.io/iptv/regions/hispam.m3u - Latin America and the Caribbean1781https://iptv-org.github.io/iptv/regions/lac.m3u - Latin America1759https://iptv-org.github.io/iptv/regions/latam.m3u + Europe, the Middle East and Africa4046https://iptv-org.github.io/iptv/regions/emea.m3u + Europe3227https://iptv-org.github.io/iptv/regions/eur.m3u + Hispanic America1458https://iptv-org.github.io/iptv/regions/hispam.m3u + Latin America and the Caribbean1793https://iptv-org.github.io/iptv/regions/lac.m3u + Latin America1771https://iptv-org.github.io/iptv/regions/latam.m3u Maghreb59https://iptv-org.github.io/iptv/regions/maghreb.m3u - Middle East and North Africa754https://iptv-org.github.io/iptv/regions/mena.m3u - Middle East704https://iptv-org.github.io/iptv/regions/mideast.m3u - Northern America2027https://iptv-org.github.io/iptv/regions/nam.m3u + Middle East and North Africa755https://iptv-org.github.io/iptv/regions/mena.m3u + Middle East705https://iptv-org.github.io/iptv/regions/mideast.m3u + Northern America2023https://iptv-org.github.io/iptv/regions/nam.m3u Northern Europe125https://iptv-org.github.io/iptv/regions/neur.m3u - North America2611https://iptv-org.github.io/iptv/regions/noram.m3u + North America2619https://iptv-org.github.io/iptv/regions/noram.m3u Nordics97https://iptv-org.github.io/iptv/regions/nord.m3u Oceania55https://iptv-org.github.io/iptv/regions/oce.m3u South Asia596https://iptv-org.github.io/iptv/regions/sas.m3u Southeast Asia493https://iptv-org.github.io/iptv/regions/sea.m3u - Southern Europe1102https://iptv-org.github.io/iptv/regions/ser.m3u + Southern Europe1103https://iptv-org.github.io/iptv/regions/ser.m3u South America1187https://iptv-org.github.io/iptv/regions/southam.m3u Sub-Saharan Africa341https://iptv-org.github.io/iptv/regions/ssa.m3u West Africa140https://iptv-org.github.io/iptv/regions/wafr.m3u diff --git a/package-lock.json b/package-lock.json index b91f6d1d3..798b38d0d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,37 +7,40 @@ "name": "iptv", "license": "MIT", "dependencies": { - "@alex_neo/jest-expect-message": "^1.0.5", "@octokit/core": "^4.2.1", - "@octokit/plugin-paginate-rest": "^7.0.0", + "@octokit/plugin-paginate-rest": "^7.1.2", + "@octokit/plugin-rest-endpoint-methods": "^7.1.3", + "@octokit/types": "^11.1.0", + "@seald-io/nedb": "^4.0.2", + "@types/fs-extra": "^11.0.1", + "@types/glob": "^8.1.0", + "@types/jest": "^29.5.4", + "@types/jest-expect-message": "^1.1.0", + "@types/lodash": "^4.14.198", + "@types/signale": "^1.4.4", "chalk": "^4.1.2", "commander": "^8.3.0", - "dayjs": "^1.10.7", - "fs-extra": "^10.0.0", + "fs-extra": "^11.1.1", "gh-pages": "^5.0.0", - "iptv-checker": "^0.26.0", - "iptv-playlist-parser": "^0.12.1", - "jest": "^27.5.1", - "jest-expect-message": "^1.0.2", + "glob": "^10.3.4", + "iptv-playlist-parser": "^0.12.3", + "jest-expect-message": "^1.1.3", "lodash": "^4.17.21", "m3u-linter": "^0.3.0", "markdown-include": "^0.4.3", - "natural-orderby": "^2.0.3", - "nedb-promises": "^5.0.2", - "normalize-url": "^6.1.0", + "natural-orderby": "^3.0.2", + "normalize-url": "^7.2.0", "signale": "^1.4.0", - "transliteration": "^2.2.0" + "transliteration": "^2.3.5", + "ts-jest": "^29.1.1", + "typescript": "^5.2.2" } }, - "node_modules/@alex_neo/jest-expect-message": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@alex_neo/jest-expect-message/-/jest-expect-message-1.0.5.tgz", - "integrity": "sha512-1eBykZCd0pPGl5qKtV6Z5ARA6yuhXzHsVN2h5GH5/H6svYa37Jr7vMio5OFpiw1LBHtscrZs7amSkZkcwm0cvQ==" - }, "node_modules/@ampproject/remapping": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.1.tgz", "integrity": "sha512-Aolwjd7HSC2PyY0fDj/wA/EimQT4HfEnFYNp5s9CQlrdhyvWTtvZ5YzrUPu6R6/1jKiUlxu8bUhkdSnKHNAHMA==", + "peer": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.0" }, @@ -46,20 +49,86 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dependencies": { - "@babel/highlight": "^7.16.7" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/compat-data": { "version": "7.17.0", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==", + "peer": true, "engines": { "node": ">=6.9.0" } @@ -68,6 +137,7 @@ "version": "7.17.2", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.2.tgz", "integrity": "sha512-R3VH5G42VSDolRHyUO4V2cfag8WHcZyxdq5Z/m8Xyb92lW/Erm/6kM+XtRFGf3Mulre3mveni2NHfEUws8wSvw==", + "peer": true, "dependencies": { "@ampproject/remapping": "^2.0.0", "@babel/code-frame": "^7.16.7", @@ -97,6 +167,7 @@ "version": "7.17.0", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.0.tgz", "integrity": "sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw==", + "peer": true, "dependencies": { "@babel/types": "^7.17.0", "jsesc": "^2.5.1", @@ -110,6 +181,7 @@ "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -118,6 +190,7 @@ "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", + "peer": true, "dependencies": { "@babel/compat-data": "^7.16.4", "@babel/helper-validator-option": "^7.16.7", @@ -132,35 +205,22 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", - "dependencies": { - "@babel/types": "^7.16.7" - }, + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "peer": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", - "dependencies": { - "@babel/helper-get-function-arity": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "peer": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -170,6 +230,7 @@ "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "peer": true, "dependencies": { "@babel/types": "^7.16.7" }, @@ -178,76 +239,91 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "peer": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", - "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.17.tgz", + "integrity": "sha512-XouDDhQESrLHTpnBtCKExJdyY4gJCdrvH2Pyv8r8kovX2U8G0dRUOT45T9XlbLtuu9CLXP15eusnkprhoPV5iQ==", + "peer": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.15" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "peer": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", - "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "peer": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "peer": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz", + "integrity": "sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "peer": true, "engines": { "node": ">=6.9.0" } @@ -256,6 +332,7 @@ "version": "7.17.2", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==", + "peer": true, "dependencies": { "@babel/template": "^7.16.7", "@babel/traverse": "^7.17.0", @@ -266,12 +343,12 @@ } }, "node_modules/@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", + "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { @@ -313,12 +390,12 @@ "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "engines": { "node": ">=0.8.0" } @@ -326,7 +403,7 @@ "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "engines": { "node": ">=4" } @@ -343,9 +420,10 @@ } }, "node_modules/@babel/parser": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz", - "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==", + "version": "7.22.16", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", + "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", + "peer": true, "bin": { "parser": "bin/babel-parser.js" }, @@ -357,6 +435,7 @@ "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==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -368,6 +447,7 @@ "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==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -379,6 +459,7 @@ "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==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -390,6 +471,7 @@ "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==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -401,6 +483,7 @@ "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==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -408,10 +491,26 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "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==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -423,6 +522,7 @@ "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==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -434,6 +534,7 @@ "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==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -445,6 +546,7 @@ "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==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -456,6 +558,7 @@ "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==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -467,6 +570,7 @@ "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==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -478,6 +582,7 @@ "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==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -489,11 +594,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", - "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", + "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", + "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -503,13 +609,14 @@ } }, "node_modules/@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "peer": true, "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -519,6 +626,7 @@ "version": "7.17.0", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.0.tgz", "integrity": "sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg==", + "peer": true, "dependencies": { "@babel/code-frame": "^7.16.7", "@babel/generator": "^7.17.0", @@ -536,11 +644,13 @@ } }, "node_modules/@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.17.tgz", + "integrity": "sha512-YSQPHLFtQNE5xN9tHuZnzu8vPr61wVTBZdfv1meex1NBosa4iT05k/Jw06ddJugi4bk7The/oSwQGFcksmEJQg==", + "peer": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.15", "to-fast-properties": "^2.0.0" }, "engines": { @@ -550,12 +660,116 @@ "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==" + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "peer": 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==", + "optional": true, + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } }, "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==", + "peer": true, "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -571,62 +785,65 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "peer": true, "engines": { "node": ">=8" } }, "node_modules/@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.4.tgz", + "integrity": "sha512-wNK6gC0Ha9QeEPSkeJedQuTQqxZYnDPuDcDhVuVatRvMkL4D0VTvFVZj+Yuh6caG2aOfzkUZ36KtCmLNtR02hw==", + "peer": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3", "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.4.tgz", + "integrity": "sha512-U/vq5ccNTSVgYH7mHnodHmCffGWHJnz/E1BEWlLuK5pM4FZmGfBn/nrJGLjUsSmyx3otCeqc1T31F4y08AMDLg==", + "peer": true, + "dependencies": { + "@jest/console": "^29.6.4", + "@jest/reporters": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "emittery": "^0.8.1", + "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", + "jest-changed-files": "^29.6.3", + "jest-config": "^29.6.4", + "jest-haste-map": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.6.4", + "jest-resolve-dependencies": "^29.6.4", + "jest-runner": "^29.6.4", + "jest-runtime": "^29.6.4", + "jest-snapshot": "^29.6.4", + "jest-util": "^29.6.3", + "jest-validate": "^29.6.3", + "jest-watcher": "^29.6.4", "micromatch": "^4.0.4", - "rimraf": "^3.0.0", + "pretty-format": "^29.6.3", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -638,81 +855,109 @@ } }, "node_modules/@jest/environment": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", - "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.4.tgz", + "integrity": "sha512-sQ0SULEjA1XUTHmkBRl7A1dyITM9yb1yb3ZNKPX3KlTd6IG7mWUe3e2yfExtC2Zz1Q+mMckOLHmL/qLiuQJrBQ==", + "peer": true, "dependencies": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/fake-timers": "^29.6.4", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^27.5.1" + "jest-mock": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.4.tgz", + "integrity": "sha512-Warhsa7d23+3X5bLbrbYvaehcgX5TLYhI03JKoedTiI8uJU4IhqYBWF7OSSgUyz4IgLpUYPkK0AehA5/fRclAA==", + "peer": true, + "dependencies": { + "expect": "^29.6.4", + "jest-snapshot": "^29.6.4" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.4.tgz", + "integrity": "sha512-FEhkJhqtvBwgSpiTrocquJCdXPsyvNKcl/n7A3u7X4pVoF4bswm11c9d4AV+kfq2Gpv/mM8x7E7DsRvH+djkrg==", + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.4.tgz", + "integrity": "sha512-6UkCwzoBK60edXIIWb0/KWkuj7R7Qq91vVInOe3De6DSpaEiqjKcJw4F7XUet24Wupahj9J6PlR09JqJ5ySDHw==", + "peer": true, "dependencies": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" + "jest-message-util": "^29.6.3", + "jest-mock": "^29.6.3", + "jest-util": "^29.6.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.4.tgz", + "integrity": "sha512-wVIn5bdtjlChhXAzVXavcY/3PEjf4VqM174BM3eGL5kMxLiZD5CLnbmkEyA1Dwh9q8XjP6E8RwjBsY/iCWrWsA==", + "peer": true, "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" + "@jest/environment": "^29.6.4", + "@jest/expect": "^29.6.4", + "@jest/types": "^29.6.3", + "jest-mock": "^29.6.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.4.tgz", + "integrity": "sha512-sxUjWxm7QdchdrD3NfWKrL8FBsortZeibSJv4XLjESOOjSUOkjQcb0ZHJwfhEGIvBvTluTzfG2yZWZhkrXJu8g==", + "peer": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/transform": "^29.6.4", + "@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.2", + "glob": "^7.1.3", "graceful-fs": "^4.2.9", "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.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-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3", + "jest-worker": "^29.6.4", "slash": "^3.0.0", - "source-map": "^0.6.0", "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -723,104 +968,179 @@ } } }, + "node_modules/@jest/reporters/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jest/reporters/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "peer": 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/@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==", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "peer": true, "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" + "graceful-fs": "^4.2.9" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.4.tgz", + "integrity": "sha512-uQ1C0AUEN90/dsyEirgMLlouROgSY+Wc/JanVVk0OiUKa5UFh7sJpMEM3aoUBAz2BRNvUJ8j3d294WFuRxSyOQ==", + "peer": true, "dependencies": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.6.4", + "@jest/types": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.4.tgz", + "integrity": "sha512-E84M6LbpcRq3fT4ckfKs9ryVanwkaIB0Ws9bw3/yP4seRLg/VaCZ/LgW0MCq5wwk4/iP/qnilD41aj2fsw2RMg==", + "peer": true, "dependencies": { - "@jest/test-result": "^27.5.1", + "@jest/test-result": "^29.6.4", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" + "jest-haste-map": "^29.6.4", + "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.4.tgz", + "integrity": "sha512-8thgRSiXUqtr/pPGY/OsyHuMjGyhVnWrFAwoxmIemlBuiMyU1WFs0tXoNxzcr4A4uErs/ABre76SGmrr5ab/AA==", + "peer": 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": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^29.6.4", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.6.3", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" + "write-file-atomic": "^4.0.2" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@jest/transform/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==", + "peer": true + }, "node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dependencies": { + "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", - "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "peer": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", - "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==" + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "peer": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", - "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "peer": true, "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -851,6 +1171,14 @@ "node": ">= 14" } }, + "node_modules/@octokit/core/node_modules/@octokit/types": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", + "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", + "dependencies": { + "@octokit/openapi-types": "^18.0.0" + } + }, "node_modules/@octokit/endpoint": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", @@ -864,6 +1192,14 @@ "node": ">= 14" } }, + "node_modules/@octokit/endpoint/node_modules/@octokit/types": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", + "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", + "dependencies": { + "@octokit/openapi-types": "^18.0.0" + } + }, "node_modules/@octokit/graphql": { "version": "5.0.6", "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz", @@ -877,18 +1213,26 @@ "node": ">= 14" } }, + "node_modules/@octokit/graphql/node_modules/@octokit/types": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", + "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", + "dependencies": { + "@octokit/openapi-types": "^18.0.0" + } + }, "node_modules/@octokit/openapi-types": { "version": "18.0.0", "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" }, "node_modules/@octokit/plugin-paginate-rest": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-7.0.0.tgz", - "integrity": "sha512-NNm6DlYBEyKs9OZvy2Ax9YKn7e0/G7js+/I80icBTHUf6kB/nfaZkdXOF1Z32OaB+LDH6GIYpdYC3Bm3vwX5Ow==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-7.1.2.tgz", + "integrity": "sha512-Jx8KuKqEAVRsK6fMzZKv3h6UH9/NRDHsDRtUAROqqmZlCptM///Uef7A1ViZ/cbDplekz7VbDWdFLAZ/mpuDww==", "dependencies": { - "@octokit/tsconfig": "^1.0.2", - "@octokit/types": "^9.2.3" + "@octokit/tsconfig": "^2.0.0", + "@octokit/types": "^9.3.2" }, "engines": { "node": ">= 18" @@ -897,6 +1241,36 @@ "@octokit/core": ">=4" } }, + "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", + "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", + "dependencies": { + "@octokit/openapi-types": "^18.0.0" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.1.3.tgz", + "integrity": "sha512-0aoPd4f1k/KXPTGSX0NbxcBrShBHArgcW3pujEvLa6wUfcfA1BehxQ2Ifwa6CbJ4SfzaO79FvGgaUipoxDsgjA==", + "dependencies": { + "@octokit/types": "^9.2.3" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "@octokit/core": ">=3" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", + "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", + "dependencies": { + "@octokit/openapi-types": "^18.0.0" + } + }, "node_modules/@octokit/request": { "version": "6.2.5", "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.5.tgz", @@ -926,65 +1300,118 @@ "node": ">= 14" } }, - "node_modules/@octokit/tsconfig": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-1.0.2.tgz", - "integrity": "sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==" + "node_modules/@octokit/request-error/node_modules/@octokit/types": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", + "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", + "dependencies": { + "@octokit/openapi-types": "^18.0.0" + } }, - "node_modules/@octokit/types": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.0.tgz", - "integrity": "sha512-ZNO1In0QuWZLDngSLcn5H4ExRhYOd1rDcWnwc/LuR55cO1d6Sex6+T6RiSQwp/tyEg7eNWx+MUdJGL7Fu1kMjw==", + "node_modules/@octokit/request/node_modules/@octokit/types": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", + "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", "dependencies": { "@octokit/openapi-types": "^18.0.0" } }, + "node_modules/@octokit/tsconfig": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-2.0.0.tgz", + "integrity": "sha512-tWnrai3quGt8+gRN2edzo9fmraWekeryXPeXDomMw2oFSpu/lH3VSWGn/q4V+rwjTRMeeXk/ci623/01Zet4VQ==" + }, + "node_modules/@octokit/types": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-11.1.0.tgz", + "integrity": "sha512-Fz0+7GyLm/bHt8fwEqgvRBWwIV1S6wRRyq+V6exRKLVWaKGsuy6H9QFYeBVDV7rK6fO3XwHgQOPxv+cLj2zpXQ==", + "dependencies": { + "@octokit/openapi-types": "^18.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@seald-io/binary-search-tree": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@seald-io/binary-search-tree/-/binary-search-tree-1.0.2.tgz", - "integrity": "sha512-+pYGvPFAk7wUR+ONMOlc6A+LUN4kOCFwyPLjyaeS7wVibADPHWYJNYsNtyIAwjF1AXQkuaXElnIc4XjKt55QZA==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@seald-io/binary-search-tree/-/binary-search-tree-1.0.3.tgz", + "integrity": "sha512-qv3jnwoakeax2razYaMsGI/luWdliBLHTdC6jU55hQt1hcFqzauH/HsBollQ7IR4ySTtYhT+xyHoijpA16C+tA==" }, "node_modules/@seald-io/nedb": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@seald-io/nedb/-/nedb-2.2.0.tgz", - "integrity": "sha512-whkcx3hpcowNhoSEbIsrfe8TXxDwyj8SJJut2EqF7DSX2GGqQlL7Ix/vzwwOo4FJolzDhZD2DaUTVKmTQS3Rog==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@seald-io/nedb/-/nedb-4.0.2.tgz", + "integrity": "sha512-gJ91fT1sgh2cLXYVcTSh7khZ8LdemI8+SojCdpZ5wy+DUQ4fSrEwGqOwbdV49NDs2BBO6GeBpSb8CnhG2IW1rw==", "dependencies": { - "@seald-io/binary-search-tree": "^1.0.2", - "async": "0.2.10", - "localforage": "^1.9.0" + "@seald-io/binary-search-tree": "^1.0.3", + "localforage": "^1.9.0", + "util": "^0.12.4" } }, + "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==" + }, "node_modules/@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "peer": true, "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "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==", + "peer": true, "dependencies": { - "@sinonjs/commons": "^1.7.0" + "@sinonjs/commons": "^3.0.0" } }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "engines": { - "node": ">= 6" - } + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "optional": true, + "peer": true + }, + "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==", + "optional": true, + "peer": true + }, + "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==", + "optional": true, + "peer": true + }, + "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==", + "optional": true, + "peer": true }, "node_modules/@types/babel__core": { - "version": "7.1.18", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", - "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", + "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", + "peer": true, "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" @@ -994,6 +1421,7 @@ "version": "7.6.4", "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "peer": true, "dependencies": { "@babel/types": "^7.0.0" } @@ -1002,23 +1430,44 @@ "version": "7.4.1", "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "peer": true, "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", + "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", + "peer": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/fs-extra": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.1.tgz", + "integrity": "sha512-MxObHvNl4A69ofaTRU8DFqvgzzv8s9yRtaPPm5gud9HDNvpB3GPQFvNuTWAI59B9huVGV5jXYJwbCsmBsOGYWA==", + "dependencies": { + "@types/jsonfile": "*", + "@types/node": "*" + } + }, + "node_modules/@types/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", "dependencies": { - "@babel/types": "^7.3.0" + "@types/minimatch": "^5.1.2", + "@types/node": "*" } }, "node_modules/@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", + "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", + "peer": true, "dependencies": { "@types/node": "*" } @@ -1044,15 +1493,54 @@ "@types/istanbul-lib-report": "*" } }, + "node_modules/@types/jest": { + "version": "29.5.4", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.4.tgz", + "integrity": "sha512-PhglGmhWeD46FYOVLt3X7TiWjzwuVGW9wG/4qocPevXMjCmrIc5b6db9WjeGE4QYVpUAWMDv3v0IiBwObY289A==", + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/jest-expect-message": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@types/jest-expect-message/-/jest-expect-message-1.1.0.tgz", + "integrity": "sha512-PbmZ6pTBpJTzj7KdGP8l8qTyf6RA5BVWg0C51XjCb0GuifXVcu3jAR6+U/W47nmE5S3tLPPEo70UcuhSlSS1hg==", + "deprecated": "This is a stub types definition. jest-expect-message provides its own type definitions, so you do not need this installed.", + "dependencies": { + "jest-expect-message": "*" + } + }, + "node_modules/@types/jsonfile": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.1.tgz", + "integrity": "sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/lodash": { + "version": "4.14.198", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.198.tgz", + "integrity": "sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg==" + }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" + }, "node_modules/@types/node": { "version": "17.0.18", "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.18.tgz", "integrity": "sha512-eKj4f/BsN/qcculZiRSujogjvp5O/k4lOW5m35NopjZM/QwLOR075a8pJW5hD+Rtdm2DaCVPENS6KtSQnUD6BA==" }, - "node_modules/@types/prettier": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.4.tgz", - "integrity": "sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA==" + "node_modules/@types/signale": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/@types/signale/-/signale-1.4.4.tgz", + "integrity": "sha512-VYy4VL64gA4uyUIYVj4tiGFF0VpdnRbJeqNENKGX42toNiTvt83rRzxdr0XK4DR3V01zPM0JQNIsL+IwWWfhsQ==", + "dependencies": { + "@types/node": "*" + } }, "node_modules/@types/stack-utils": { "version": "2.0.1", @@ -1060,27 +1548,24 @@ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" }, "node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", + "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==" - }, - "node_modules/abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==" + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" }, "node_modules/acorn": { "version": "8.7.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "optional": true, + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -1088,49 +1573,11 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, "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==", + "peer": true, "dependencies": { "type-fest": "^0.21.3" }, @@ -1164,9 +1611,10 @@ } }, "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "peer": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -1175,10 +1623,18 @@ "node": ">= 8" } }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "optional": true, + "peer": true + }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "peer": true, "dependencies": { "sprintf-js": "~1.0.2" } @@ -1202,45 +1658,33 @@ "node": ">=0.10.0" } }, - "node_modules/async": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "node_modules/axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "dependencies": { - "follow-redirects": "^1.14.0" + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/axios-curlirize": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/axios-curlirize/-/axios-curlirize-1.3.7.tgz", - "integrity": "sha512-csSsuMyZj1dv1fL0zRPnDAHWrmlISMvK+wx9WJI/igRVDT4VMgbf2AVenaHghFLfI1nQijXUevYEguYV6u5hjA==" - }, "node_modules/babel-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.4.tgz", + "integrity": "sha512-meLj23UlSLddj6PC+YTOFRgDAtjnZom8w/ACsrx0gtPtv5cJZk0A5Unk5bV4wixD7XaPCN1fQvpww8czkZURmw==", + "peer": true, "dependencies": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/transform": "^29.6.4", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", + "babel-preset-jest": "^29.6.3", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "@babel/core": "^7.8.0" @@ -1250,6 +1694,7 @@ "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==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", @@ -1261,24 +1706,42 @@ "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==", + "peer": 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-jest-hoist": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", - "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "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==", + "peer": true, "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", + "@types/babel__core": "^7.1.14", "@types/babel__traverse": "^7.0.6" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/babel-preset-current-node-syntax": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "peer": true, "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", @@ -1298,15 +1761,16 @@ } }, "node_modules/babel-preset-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "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==", + "peer": true, "dependencies": { - "babel-plugin-jest-hoist": "^27.5.1", + "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "@babel/core": "^7.0.0" @@ -1342,15 +1806,11 @@ "node": ">=8" } }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" - }, "node_modules/browserslist": { "version": "4.19.1", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001286", "electron-to-chromium": "^1.4.17", @@ -1369,10 +1829,22 @@ "url": "https://opencollective.com/browserslist" } }, + "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==", + "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==", + "peer": true, "dependencies": { "node-int64": "^0.4.0" } @@ -1380,12 +1852,26 @@ "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==" + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "peer": true + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "peer": true, "engines": { "node": ">=6" } @@ -1394,6 +1880,7 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "peer": true, "engines": { "node": ">=6" } @@ -1415,7 +1902,8 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "peer": true }, "node_modules/chalk": { "version": "4.1.2", @@ -1436,43 +1924,46 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "peer": true, "engines": { "node": ">=10" } }, "node_modules/ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==" + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } }, "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==" - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "peer": true }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "peer": true, "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" } }, "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" + "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==", + "peer": true }, "node_modules/color-convert": { "version": "2.0.1", @@ -1490,30 +1981,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" - }, "node_modules/commander": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", @@ -1536,10 +2003,18 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "peer": true, "dependencies": { "safe-buffer": "~5.1.1" } }, + "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==", + "optional": true, + "peer": true + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -1553,57 +2028,11 @@ "node": ">= 8" } }, - "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" - }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "engines": { - "node": "*" - } - }, - "node_modules/dayjs": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz", - "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==" - }, "node_modules/debug": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "peer": true, "dependencies": { "ms": "2.1.2" }, @@ -1616,37 +2045,29 @@ } } }, - "node_modules/decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==" - }, "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=" - }, - "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==" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "peer": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } }, "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "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==", + "peer": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/deprecation": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", @@ -1656,41 +2077,39 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "peer": true, "engines": { "node": ">=8" } }, - "node_modules/diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "optional": true, + "peer": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=0.3.1" } }, - "node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dependencies": { - "webidl-conversions": "^5.0.0" - }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "engines": { - "node": ">=8" - } + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, "node_modules/electron-to-chromium": { "version": "1.4.69", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.69.tgz", - "integrity": "sha512-0rxK21MqWhN/fVUXNOeBksRlw79Wq26y6R8lxEEL2v7vwzRWbYhXI7Id5msee7/q1NNgu4mG78qaablN2xtfTQ==" + "integrity": "sha512-0rxK21MqWhN/fVUXNOeBksRlw79Wq26y6R8lxEEL2v7vwzRWbYhXI7Id5msee7/q1NNgu4mG78qaablN2xtfTQ==", + "peer": true }, "node_modules/email-addresses": { "version": "5.0.0", @@ -1698,11 +2117,12 @@ "integrity": "sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==" }, "node_modules/emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "peer": true, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sindresorhus/emittery?sponsor=1" @@ -1742,31 +2162,11 @@ "node": ">=8" } }, - "node_modules/escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, "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==", + "peer": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -1775,26 +2175,11 @@ "node": ">=4" } }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "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==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "peer": true, "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -1816,23 +2201,25 @@ "node_modules/exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "peer": true, "engines": { "node": ">= 0.8.0" } }, "node_modules/expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.4.tgz", + "integrity": "sha512-F2W2UyQ8XYyftHT57dtfg8Ue3X5qLgm2sSug0ivvLRH/VKNRL/pDxg/TH7zVzbQB0tu80clNFy6LU7OS/VSEKA==", "dependencies": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" + "@jest/expect-utils": "^29.6.4", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/fast-json-stable-stringify": { @@ -1840,15 +2227,11 @@ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - }, "node_modules/fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "peer": true, "dependencies": { "bser": "2.1.1" } @@ -1935,49 +2318,51 @@ "node": ">=8" } }, - "node_modules/follow-redirects": { - "version": "1.14.8", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", - "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" } }, - "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" }, "engines": { - "node": ">= 6" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "engines": { - "node": ">=12" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" } }, "node_modules/fs-extra/node_modules/universalify": { @@ -1991,17 +2376,18 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "hasInstallScript": true, "optional": true, "os": [ "darwin" ], + "peer": true, "engines": { "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } @@ -2015,6 +2401,7 @@ "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==", + "peer": true, "engines": { "node": ">=6.9.0" } @@ -2027,26 +2414,34 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "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==", + "peer": true, "engines": { "node": ">=8.0.0" } }, - "node_modules/get-stdin": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", - "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", - "engines": { - "node": ">=8" - } - }, "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==", + "peer": true, "engines": { "node": ">=10" }, @@ -2107,19 +2502,43 @@ } }, "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "10.3.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz", + "integrity": "sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob/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==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -2129,6 +2548,7 @@ "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "peer": true, "engines": { "node": ">=4" } @@ -2148,6 +2568,25 @@ "node": ">=0.10.0" } }, + "node_modules/globby/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "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/globby/node_modules/pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -2156,6 +2595,17 @@ "node": ">=0.10.0" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", @@ -2180,66 +2630,57 @@ "node": ">=8" } }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dependencies": { - "whatwg-encoding": "^1.0.5" - }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==" - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "engines": { - "node": ">= 6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dependencies": { - "agent-base": "6", - "debug": "4" + "has-symbols": "^1.0.2" }, "engines": { - "node": ">= 6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, + "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==", + "peer": 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==", + "peer": true, "engines": { "node": ">=10.17.0" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/immediate": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", @@ -2249,6 +2690,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "peer": true, "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -2266,7 +2708,8 @@ "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "peer": true, "engines": { "node": ">=0.8.19" } @@ -2274,7 +2717,7 @@ "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -2285,49 +2728,46 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/iptv-checker": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/iptv-checker/-/iptv-checker-0.26.0.tgz", - "integrity": "sha512-8q9RWEpW7rICEj2PEz+6KnfBP5GimsCEsVaXG637ylyLx7vD5miX5MZGJDFslC+RIrQBZiBnNIQPmbhfYEHehg==", - "dependencies": { - "axios": "^0.21.1", - "axios-curlirize": "^1.3.7", - "colors": "^1.4.0", - "command-exists": "^1.2.9", - "commander": "^2.20.0", - "dateformat": "^3.0.3", - "get-stdin": "^7.0.0", - "iptv-playlist-parser": "^0.12.0", - "jest": "^27.0.6", - "lodash.chunk": "^4.2.0", - "progress": "^2.0.3", - "valid-url": "^1.0.9" - }, - "bin": { - "iptv-checker": "bin/iptv-checker.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/iptv-checker/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, "node_modules/iptv-playlist-parser": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/iptv-playlist-parser/-/iptv-playlist-parser-0.12.1.tgz", - "integrity": "sha512-N0sJFsV8+FBZiR/kl7F5YfFQsUxFXrABP9+xyHPFEQjHJmXSBbvyHLlaW0GjROTd+iXVHA9glEeEwlzJimt5NA==", + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/iptv-playlist-parser/-/iptv-playlist-parser-0.12.3.tgz", + "integrity": "sha512-used+ue0HmHj+zYUSjI+19RnZvl59lwhmzS+6VDAyerT4va3DFg+rImHgdYoNiBQtarMTH4bnoFAOQdCq4ooAA==", "dependencies": { "is-valid-path": "^0.1.1", "validator": "^13.7.0" } }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "peer": true, "dependencies": { "has": "^1.0.3" }, @@ -2355,10 +2795,25 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "peer": true, "engines": { "node": ">=6" } }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", @@ -2397,15 +2852,11 @@ "node": ">=0.10.0" } }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" - }, "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==", + "peer": true, "engines": { "node": ">=8" }, @@ -2413,10 +2864,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/is-valid-path": { "version": "0.1.1", @@ -2432,48 +2892,97 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "peer": true, "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-instrument": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", - "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz", + "integrity": "sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==", + "peer": 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" + "semver": "^7.5.4" }, "engines": { - "node": ">=8" + "node": ">=10" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "peer": true, "dependencies": { "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", + "make-dir": "^4.0.0", "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/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==", + "peer": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-report/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "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==", + "peer": true, "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -2484,9 +2993,10 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", - "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "peer": true, "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -2495,20 +3005,39 @@ "node": ">=8" } }, + "node_modules/jackspeak": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.3.tgz", + "integrity": "sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.4.tgz", + "integrity": "sha512-tEFhVQFF/bzoYV1YuGyzLPZ6vlPrdfvDmmAxudA1dLEuiztqg2Rkx20vkKY32xiDROcD2KXlgZ7Cu8RPeEHRKw==", + "peer": true, "dependencies": { - "@jest/core": "^27.5.1", + "@jest/core": "^29.6.4", + "@jest/types": "^29.6.3", "import-local": "^3.0.2", - "jest-cli": "^27.5.1" + "jest-cli": "^29.6.4" }, "bin": { "jest": "bin/jest.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -2520,70 +3049,104 @@ } }, "node_modules/jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.6.3.tgz", + "integrity": "sha512-G5wDnElqLa4/c66ma5PG9eRjE342lIbF6SUnTJi26C3J28Fv2TVY2rOyKB9YGbSA5ogwevgmxc4j4aVjrEK6Yg==", + "peer": true, "dependencies": { - "@jest/types": "^27.5.1", "execa": "^5.0.0", - "throat": "^6.0.1" + "jest-util": "^29.6.3", + "p-limit": "^3.1.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "node_modules/jest-changed-files/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "peer": true, "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-circus": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.4.tgz", + "integrity": "sha512-YXNrRyntVUgDfZbjXWBMPslX1mQ8MrSG0oM/Y06j9EYubODIyHWP8hMUbjbZ19M3M+zamqEur7O80HODwACoJw==", + "peer": true, + "dependencies": { + "@jest/environment": "^29.6.4", + "@jest/expect": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.5.1", + "dedent": "^1.0.0", "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", + "jest-each": "^29.6.3", + "jest-matcher-utils": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-runtime": "^29.6.4", + "jest-snapshot": "^29.6.4", + "jest-util": "^29.6.3", + "p-limit": "^3.1.0", + "pretty-format": "^29.6.3", + "pure-rand": "^6.0.0", "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" + "stack-utils": "^2.0.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "node_modules/jest-circus/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "peer": true, "dependencies": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-cli": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.4.tgz", + "integrity": "sha512-+uMCQ7oizMmh8ZwRfZzKIEszFY9ksjjEQnTEMTaL7fYiL3Kw4XhqT9bYh+A4DQKUb67hZn2KbtEnDuHvcgK4pQ==", + "peer": true, + "dependencies": { + "@jest/core": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/types": "^29.6.3", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-config": "^29.6.4", + "jest-util": "^29.6.3", + "jest-validate": "^29.6.3", "prompts": "^2.0.1", - "yargs": "^16.2.0" + "yargs": "^17.3.1" }, "bin": { "jest": "bin/jest.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -2594,247 +3157,274 @@ } } }, + "node_modules/jest-cli/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==", + "peer": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-cli/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "peer": 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/jest-cli/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==", + "peer": true, + "engines": { + "node": ">=12" + } + }, "node_modules/jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", - "dependencies": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.4.tgz", + "integrity": "sha512-JWohr3i9m2cVpBumQFv2akMEnFEPVOh+9L2xIBJhJ0zOaci2ZXuKJj0tgMKQCBZAKA09H049IR4HVS/43Qb19A==", + "peer": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.6.4", + "@jest/types": "^29.6.3", + "babel-jest": "^29.6.4", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", - "glob": "^7.1.1", + "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-circus": "^29.6.4", + "jest-environment-node": "^29.6.4", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.6.4", + "jest-runner": "^29.6.4", + "jest-util": "^29.6.3", + "jest-validate": "^29.6.3", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", + "pretty-format": "^29.6.3", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.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/jest-config/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "peer": 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/jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.4.tgz", + "integrity": "sha512-9F48UxR9e4XOEZvoUXEHSWY4qC4zERJaOfrbBg9JpbJOO43R1vN76REt/aMGZoY6GD5g84nnJiBIVlscegefpw==", "dependencies": { "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.6.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.6.3.tgz", + "integrity": "sha512-2+H+GOTQBEm2+qFSQ7Ma+BvyV+waiIFxmZF5LdpBsAEjWX8QYjSCa4FrkIYtbfXUJJJnFCYrOtt6TZ+IAiTjBQ==", + "peer": true, "dependencies": { "detect-newline": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.3.tgz", + "integrity": "sha512-KoXfJ42k8cqbkfshW7sSHcdfnv5agDdHCPA87ZBdmHP+zJstTJc0ttQaJ/x7zK6noAL76hOuTIJ6ZkQRS5dcyg==", + "peer": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.6.3", "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" + "jest-get-type": "^29.6.3", + "jest-util": "^29.6.3", + "pretty-format": "^29.6.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", - "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.4.tgz", + "integrity": "sha512-i7SbpH2dEIFGNmxGCpSc2w9cA4qVD+wfvg2ZnfQ7XVrKL0NA5uDVBIiGH8SR4F0dKEv/0qI5r+aDomDf04DpEQ==", + "peer": true, + "dependencies": { + "@jest/environment": "^29.6.4", + "@jest/fake-timers": "^29.6.4", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" + "jest-mock": "^29.6.3", + "jest-util": "^29.6.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-expect-message": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/jest-expect-message/-/jest-expect-message-1.0.2.tgz", - "integrity": "sha512-WFiXMgwS2lOqQZt1iJMI/hOXpUm32X+ApsuzYcQpW5m16Pv6/Gd9kgC+Q+Q1YVNU04kYcAOv9NXMnjg6kKUy6Q==" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/jest-expect-message/-/jest-expect-message-1.1.3.tgz", + "integrity": "sha512-bTK77T4P+zto+XepAX3low8XVQxDgaEqh3jSTQOG8qvPpD69LsIdyJTa+RmnJh3HNSzJng62/44RPPc7OIlFxg==" }, "node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.4.tgz", + "integrity": "sha512-12Ad+VNTDHxKf7k+M65sviyynRoZYuL1/GTuhEVb8RYsNSNln71nANRb/faSyWvx0j+gHcivChXHIoMJrGYjog==", + "peer": true, "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", + "@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": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.6.3", + "jest-worker": "^29.6.4", "micromatch": "^4.0.4", - "walker": "^1.0.7" + "walker": "^1.0.8" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "optionalDependencies": { "fsevents": "^2.3.2" } }, - "node_modules/jest-jasmine2": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", - "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, "node_modules/jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.3.tgz", + "integrity": "sha512-0kfbESIHXYdhAdpLsW7xdwmYhLf1BRu4AA118/OxFm0Ho1b2RcTmO4oF6aAMaxpxdxnJ3zve2rgwzNBD4Zbm7Q==", + "peer": true, "dependencies": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.6.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.4.tgz", + "integrity": "sha512-KSzwyzGvK4HcfnserYqJHYi7sZVqdREJ9DMPAKVbS98JsIAvumihaNUbjrWw0St7p9IY7A9UskCW5MYlGmBQFQ==", "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "jest-diff": "^29.6.4", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.6.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.3.tgz", + "integrity": "sha512-FtzaEEHzjDpQp51HX4UMkPZjy46ati4T5pEMyM6Ik48ztu4T9LQplZ6OsimHx7EuM9dfEh5HJa6D3trEftu3dA==", "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", + "@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": "^27.5.1", + "pretty-format": "^29.6.3", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-mock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.3.tgz", + "integrity": "sha512-Z7Gs/mOyTSR4yPsaZ72a/MtuK6RnC3JYqWONe48oLaoEcYwEDxqvbXz85G4SJrm2Z5Ar9zp6MiHF4AlFlRM4Pg==", + "peer": true, "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*" + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.6.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "peer": true, "engines": { "node": ">=6" }, @@ -2848,157 +3438,183 @@ } }, "node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "peer": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-resolve": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", - "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.4.tgz", + "integrity": "sha512-fPRq+0vcxsuGlG0O3gyoqGTAxasagOxEuyoxHeyxaZbc9QNek0AmJWSkhjlMG+mTsj+8knc/mWb3fXlRNVih7Q==", + "peer": true, "dependencies": { - "@jest/types": "^27.5.1", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", + "jest-haste-map": "^29.6.4", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-util": "^29.6.3", + "jest-validate": "^29.6.3", "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", + "resolve.exports": "^2.0.0", "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.4.tgz", + "integrity": "sha512-7+6eAmr1ZBF3vOAJVsfLj1QdqeXG+WYhidfLHBRZqGN24MFRIiKG20ItpLw2qRAsW/D2ZUUmCNf6irUr/v6KHA==", + "peer": true, "dependencies": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.6.4" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.4.tgz", + "integrity": "sha512-SDaLrMmtVlQYDuG0iSPYLycG8P9jLI+fRm8AF/xPKhYDB2g6xDWjXBrR5M8gEWsK6KVFlebpZ4QsrxdyIX1Jaw==", + "peer": true, + "dependencies": { + "@jest/console": "^29.6.4", + "@jest/environment": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", - "emittery": "^0.8.1", + "emittery": "^0.13.1", "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" + "jest-docblock": "^29.6.3", + "jest-environment-node": "^29.6.4", + "jest-haste-map": "^29.6.4", + "jest-leak-detector": "^29.6.3", + "jest-message-util": "^29.6.3", + "jest-resolve": "^29.6.4", + "jest-runtime": "^29.6.4", + "jest-util": "^29.6.3", + "jest-watcher": "^29.6.4", + "jest-worker": "^29.6.4", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "peer": true, + "dependencies": { + "yocto-queue": "^0.1.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.4.tgz", + "integrity": "sha512-s/QxMBLvmwLdchKEjcLfwzP7h+jsHvNEtxGP5P+Fl1FMaJX2jMiIqe4rJw4tFprzCwuSvVUo9bn0uj4gNRXsbA==", + "peer": true, + "dependencies": { + "@jest/environment": "^29.6.4", + "@jest/fake-timers": "^29.6.4", + "@jest/globals": "^29.6.4", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-mock": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.6.4", + "jest-snapshot": "^29.6.4", + "jest-util": "^29.6.3", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "node_modules/jest-runtime/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "peer": true, "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" + "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": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.4.tgz", + "integrity": "sha512-VC1N8ED7+4uboUKGIDsbvNAZb6LakgIPgAF4RSpF13dN6YaMokfRqO+BaqK4zIh6X3JffgwbzuGqDEjHm/MrvA==", + "peer": true, "dependencies": { - "@babel/core": "^7.7.2", + "@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/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.5.1", + "expect": "^29.6.4", "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-diff": "^29.6.4", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3", "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" + "pretty-format": "^29.6.3", + "semver": "^7.5.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-snapshot/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "peer": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -3010,11 +3626,11 @@ } }, "node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.3.tgz", + "integrity": "sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA==", "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -3022,29 +3638,31 @@ "picomatch": "^2.2.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-validate": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.3.tgz", + "integrity": "sha512-e7KWZcAIX+2W1o3cHfnqpGajdCs1jSM3DkXjGeLSNmCazv1EeI1ggTeK5wdZhF+7N+g44JI2Od3veojoaumlfg==", + "peer": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.6.3", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", + "jest-get-type": "^29.6.3", "leven": "^3.1.0", - "pretty-format": "^27.5.1" + "pretty-format": "^29.6.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "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==", + "peer": true, "engines": { "node": ">=10" }, @@ -3053,39 +3671,44 @@ } }, "node_modules/jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.4.tgz", + "integrity": "sha512-oqUWvx6+On04ShsT00Ir9T4/FvBeEh2M9PTubgITPxDa739p4hoQweWPRGyYeaojgT0xTpZKF0Y/rSY1UgMxvQ==", + "peer": true, "dependencies": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/test-result": "^29.6.4", + "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.5.1", + "emittery": "^0.13.1", + "jest-util": "^29.6.3", "string-length": "^4.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.4.tgz", + "integrity": "sha512-6dpvFV4WjcWbDVGgHTWo/aupl8/LbBx2NSKfiwqf79xC/yeJjKHT1+StcKy/2KTmW16hE68ccKVOtXf+WZGz7Q==", + "peer": true, "dependencies": { "@types/node": "*", + "jest-util": "^29.6.3", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "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==", + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -3105,6 +3728,7 @@ "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "peer": true, "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -3113,55 +3737,11 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "peer": true, "bin": { "jsesc": "bin/jsesc" }, @@ -3177,7 +3757,8 @@ "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==" + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "peer": true }, "node_modules/json5": { "version": "2.2.3", @@ -3213,6 +3794,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "peer": true, "engines": { "node": ">=6" } @@ -3221,22 +3803,11 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "peer": true, "engines": { "node": ">=6" } }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/lie": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", @@ -3248,7 +3819,8 @@ "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==" + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "peer": true }, "node_modules/load-json-file": { "version": "4.0.0", @@ -3308,10 +3880,10 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/lodash.chunk": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz", - "integrity": "sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw=" + "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==" }, "node_modules/lru-cache": { "version": "6.0.0", @@ -3348,6 +3920,25 @@ "node": ">= 10" } }, + "node_modules/m3u-linter/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "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/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -3362,10 +3953,16 @@ "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==", + "peer": true, "dependencies": { "tmpl": "1.0.5" } @@ -3384,43 +3981,26 @@ "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==" + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "peer": true }, "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" } }, - "node_modules/mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "dependencies": { - "mime-db": "1.51.0" - }, - "engines": { - "node": ">= 0.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==", + "peer": true, "engines": { "node": ">=6" } @@ -3436,30 +4016,32 @@ "node": "*" } }, + "node_modules/minipass": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", + "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "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==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "peer": true }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "peer": true }, "node_modules/natural-orderby": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-2.0.3.tgz", - "integrity": "sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-3.0.2.tgz", + "integrity": "sha512-x7ZdOwBxZCEm9MM7+eQCjkrNLrW3rkBKNHVr78zbtqnMGVNlnDi6C/eUEYgxHNrcbu0ymvjzcwIL/6H1iHri9g==", "engines": { - "node": "*" - } - }, - "node_modules/nedb-promises": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/nedb-promises/-/nedb-promises-5.0.2.tgz", - "integrity": "sha512-087g8JdsStXRWDxC9qqE4qMLqZGJrUnYF54pvOCDDfcLoptJUCqGb7j2WvWlaleeqft9rUjiJ9egvMJlUnJTmA==", - "dependencies": { - "@seald-io/nedb": "^2.2.0" + "node": ">=18" } }, "node_modules/node-fetch": { @@ -3503,27 +4085,30 @@ "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "peer": true }, "node_modules/node-releases": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", - "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==", + "peer": 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==", + "peer": true, "engines": { "node": ">=0.10.0" } }, "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-7.2.0.tgz", + "integrity": "sha512-uhXOdZry0L6M2UIo9BTt7FdpBDiAGN/7oItedQwPKh8jh31ZlvC8U9Xl/EJ3aijDHaywXTW3QbZ6LuCocur1YA==", "engines": { - "node": ">=10" + "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -3533,6 +4118,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "peer": true, "dependencies": { "path-key": "^3.0.0" }, @@ -3540,11 +4126,6 @@ "node": ">=8" } }, - "node_modules/nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -3565,6 +4146,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "peer": true, "dependencies": { "mimic-fn": "^2.1.0" }, @@ -3575,22 +4157,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -3628,6 +4194,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "peer": true, "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -3641,11 +4208,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -3657,7 +4219,7 @@ "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "engines": { "node": ">=0.10.0" } @@ -3670,15 +4232,40 @@ "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==" + "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==", + "peer": true + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", + "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", + "engines": { + "node": "14 || >=16.14" + } }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "peer": true }, "node_modules/picomatch": { "version": "2.3.1", @@ -3719,9 +4306,10 @@ } }, "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "peer": true, "engines": { "node": ">= 6" } @@ -3810,25 +4398,17 @@ "node": ">=8" } }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", + "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", "dependencies": { - "ansi-regex": "^5.0.1", + "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "react-is": "^18.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/pretty-format/node_modules/ansi-styles": { @@ -3842,18 +4422,11 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "engines": { - "node": ">=0.4.0" - } - }, "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==", + "peer": true, "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -3862,18 +4435,21 @@ "node": ">= 6" } }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "engines": { - "node": ">=6" - } + "node_modules/pure-rand": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.3.tgz", + "integrity": "sha512-KddyFewCsO0j3+np81IQ+SweXLDnDQTs5s67BOnrYmYe/yNmUhttQyGsYzy8yUnoljGAQ9sl38YB4vH8ur7Y+w==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "peer": true }, "node_modules/q": { "version": "1.5.1", @@ -3884,15 +4460,10 @@ "teleport": ">=0.2.0" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, "node_modules/require-directory": { "version": "2.1.1", @@ -3902,17 +4473,13 @@ "node": ">=0.10.0" } }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, "node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "peer": true, "dependencies": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -3927,6 +4494,7 @@ "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==", + "peer": true, "dependencies": { "resolve-from": "^5.0.0" }, @@ -3938,52 +4506,25 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "peer": true, "engines": { "node": ">=8" } }, "node_modules/resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "peer": true, "engines": { "node": ">=10" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "peer": true }, "node_modules/semver": { "version": "6.3.1", @@ -4015,7 +4556,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==" + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "peer": true }, "node_modules/signale": { "version": "1.4.0", @@ -4097,7 +4639,8 @@ "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "peer": true }, "node_modules/slash": { "version": "3.0.0", @@ -4111,14 +4654,16 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "peer": true, "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "peer": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -4127,12 +4672,13 @@ "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "peer": true }, "node_modules/stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -4144,6 +4690,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "peer": true, "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" @@ -4153,24 +4700,50 @@ } }, "node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "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==", + "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.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" @@ -4180,6 +4753,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "peer": true, "engines": { "node": ">=8" } @@ -4188,6 +4762,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "peer": true, "engines": { "node": ">=6" } @@ -4196,6 +4771,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "peer": true, "engines": { "node": ">=8" }, @@ -4233,22 +4809,11 @@ "node": ">=8" } }, - "node_modules/supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "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==", + "peer": true, "engines": { "node": ">= 0.4" }, @@ -4256,30 +4821,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "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==", + "peer": true, "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -4289,20 +4835,37 @@ "node": ">=8" } }, - "node_modules/throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==" + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "peer": 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/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "peer": true }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "peer": true, "engines": { "node": ">=4" } @@ -4318,52 +4881,57 @@ "node": ">=8.0" } }, - "node_modules/tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "node_modules/transliteration": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/transliteration/-/transliteration-2.3.5.tgz", + "integrity": "sha512-HAGI4Lq4Q9dZ3Utu2phaWgtm3vB6PkLUFqWAScg/UW+1eZ/Tg6Exo4oC0/3VUol/w4BlefLhUUSVBr/9/ZGQOw==", "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" + "yargs": "^17.5.1" + }, + "bin": { + "slugify": "dist/bin/slugify", + "transliterate": "dist/bin/transliterate" }, "engines": { - "node": ">=6" + "node": ">=6.0.0" } }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "node_modules/transliteration/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==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, "engines": { - "node": ">= 4.0.0" + "node": ">=12" } }, - "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "node_modules/transliteration/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dependencies": { - "punycode": "^2.1.1" + "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": ">=8" + "node": ">=12" } }, - "node_modules/transliteration": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/transliteration/-/transliteration-2.2.0.tgz", - "integrity": "sha512-o29GDWtecNoK4TNfnJQesGluFPiza+U8NoiKrErU8eTNlVgma6w1LV/tTiGo+waFLkhtL9WxrW0lXhZKmm7msQ==", - "dependencies": { - "yargs": "^16.1.0" - }, - "bin": { - "slugify": "dist/bin/slugify", - "transliterate": "dist/bin/transliterate" - }, + "node_modules/transliteration/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==", "engines": { - "node": ">=6.0.0" + "node": ">=12" } }, "node_modules/trim-repeated": { @@ -4385,21 +4953,129 @@ "node": ">=0.8.0" } }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "node_modules/ts-jest": { + "version": "29.1.1", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", + "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", "dependencies": { - "prelude-ls": "~1.1.2" + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "^7.5.3", + "yargs-parser": "^21.0.1" + }, + "bin": { + "ts-jest": "cli.js" }, "engines": { - "node": ">= 0.8.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/ts-jest/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-jest/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==", + "engines": { + "node": ">=12" + } + }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "optional": true, + "peer": true, + "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/ts-node/node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.4.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==", + "peer": true, "engines": { "node": ">=4" } @@ -4408,6 +5084,7 @@ "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==", + "peer": true, "engines": { "node": ">=10" }, @@ -4415,12 +5092,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" + "node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" } }, "node_modules/universal-user-agent": { @@ -4436,41 +5117,49 @@ "node": ">= 4.0.0" } }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" } }, + "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==", + "optional": true, + "peer": true + }, "node_modules/v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", + "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", + "peer": true, "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" + "convert-source-map": "^1.6.0" }, "engines": { "node": ">=10.12.0" } }, - "node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "engines": { - "node": ">= 8" + "node_modules/v8-to-istanbul/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/valid-url": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", - "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==" - }, "node_modules/validator": { "version": "13.7.0", "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", @@ -4479,67 +5168,15 @@ "node": ">= 0.10" } }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "peer": true, "dependencies": { "makeerror": "1.0.12" } }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "engines": { - "node": ">=10.4" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" - }, - "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -4554,15 +5191,42 @@ "node": ">= 8" } }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "node_modules/which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi": { + "node_modules/wrap-ansi-cjs": { + "name": "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==", @@ -4584,46 +5248,18 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "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==", + "peer": true, "dependencies": { "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", - "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "signal-exit": "^3.0.7" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" - }, "node_modules/y18n": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", @@ -4637,63 +5273,110 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "optional": true, + "peer": true, "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/yargs-parser": { - "version": "20.2.6", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.6.tgz", - "integrity": "sha512-AP1+fQIWSM/sMiET8fyayjx/J+JmTPt2Mr0FkrgqB4todtfa53sOsrSAcIrJRD5XS20bKUwaDIuMkWKCEiQLKA==", + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "peer": true, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } } }, "dependencies": { - "@alex_neo/jest-expect-message": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@alex_neo/jest-expect-message/-/jest-expect-message-1.0.5.tgz", - "integrity": "sha512-1eBykZCd0pPGl5qKtV6Z5ARA6yuhXzHsVN2h5GH5/H6svYa37Jr7vMio5OFpiw1LBHtscrZs7amSkZkcwm0cvQ==" - }, "@ampproject/remapping": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.1.tgz", "integrity": "sha512-Aolwjd7HSC2PyY0fDj/wA/EimQT4HfEnFYNp5s9CQlrdhyvWTtvZ5YzrUPu6R6/1jKiUlxu8bUhkdSnKHNAHMA==", + "peer": true, "requires": { "@jridgewell/trace-mapping": "^0.3.0" } }, "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "requires": { - "@babel/highlight": "^7.16.7" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, "@babel/compat-data": { "version": "7.17.0", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", - "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==" + "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==", + "peer": true }, "@babel/core": { "version": "7.17.2", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.2.tgz", "integrity": "sha512-R3VH5G42VSDolRHyUO4V2cfag8WHcZyxdq5Z/m8Xyb92lW/Erm/6kM+XtRFGf3Mulre3mveni2NHfEUws8wSvw==", + "peer": true, "requires": { "@ampproject/remapping": "^2.0.0", "@babel/code-frame": "^7.16.7", @@ -4716,6 +5399,7 @@ "version": "7.17.0", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.0.tgz", "integrity": "sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw==", + "peer": true, "requires": { "@babel/types": "^7.17.0", "jsesc": "^2.5.1", @@ -4725,7 +5409,8 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "peer": true } } }, @@ -4733,6 +5418,7 @@ "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", + "peer": true, "requires": { "@babel/compat-data": "^7.16.4", "@babel/helper-validator-option": "^7.16.7", @@ -4741,97 +5427,98 @@ } }, "@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", - "requires": { - "@babel/types": "^7.16.7" - } + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "peer": true }, "@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", - "requires": { - "@babel/helper-get-function-arity": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "peer": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" } }, "@babel/helper-hoist-variables": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "peer": true, "requires": { "@babel/types": "^7.16.7" } }, "@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "peer": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.15" } }, "@babel/helper-module-transforms": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", - "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.17.tgz", + "integrity": "sha512-XouDDhQESrLHTpnBtCKExJdyY4gJCdrvH2Pyv8r8kovX2U8G0dRUOT45T9XlbLtuu9CLXP15eusnkprhoPV5iQ==", + "peer": true, "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.15" } }, "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "peer": true }, "@babel/helper-simple-access": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", - "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "peer": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" } }, "@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "peer": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" } }, + "@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "peer": true + }, "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz", + "integrity": "sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==" }, "@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==" + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "peer": true }, "@babel/helpers": { "version": "7.17.2", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==", + "peer": true, "requires": { "@babel/template": "^7.16.7", "@babel/traverse": "^7.17.0", @@ -4839,12 +5526,12 @@ } }, "@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", + "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "dependencies": { @@ -4877,17 +5564,17 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "supports-color": { "version": "5.5.0", @@ -4900,14 +5587,16 @@ } }, "@babel/parser": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz", - "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==" + "version": "7.22.16", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", + "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", + "peer": true }, "@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==", + "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -4916,6 +5605,7 @@ "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==", + "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -4924,6 +5614,7 @@ "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==", + "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.12.13" } @@ -4932,6 +5623,7 @@ "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==", + "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } @@ -4940,14 +5632,25 @@ "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==", + "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-jsx": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "peer": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, "@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==", + "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } @@ -4956,6 +5659,7 @@ "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==", + "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -4964,6 +5668,7 @@ "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==", + "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } @@ -4972,6 +5677,7 @@ "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==", + "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -4980,6 +5686,7 @@ "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==", + "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -4988,6 +5695,7 @@ "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==", + "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -4996,32 +5704,36 @@ "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==", + "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-typescript": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", - "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", + "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", + "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "peer": true, "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" } }, "@babel/traverse": { "version": "7.17.0", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.0.tgz", "integrity": "sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg==", + "peer": true, "requires": { "@babel/code-frame": "^7.16.7", "@babel/generator": "^7.17.0", @@ -5036,23 +5748,95 @@ } }, "@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.17.tgz", + "integrity": "sha512-YSQPHLFtQNE5xN9tHuZnzu8vPr61wVTBZdfv1meex1NBosa4iT05k/Jw06ddJugi4bk7The/oSwQGFcksmEJQg==", + "peer": true, "requires": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.15", "to-fast-properties": "^2.0.0" } }, "@bcoe/v8-coverage": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "peer": true + }, + "@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==", + "optional": true, + "peer": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + } + }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } }, "@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==", + "peer": true, "requires": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -5064,202 +5848,299 @@ "@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==" + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "peer": true }, "@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.4.tgz", + "integrity": "sha512-wNK6gC0Ha9QeEPSkeJedQuTQqxZYnDPuDcDhVuVatRvMkL4D0VTvFVZj+Yuh6caG2aOfzkUZ36KtCmLNtR02hw==", + "peer": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3", "slash": "^3.0.0" } }, "@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", - "requires": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.4.tgz", + "integrity": "sha512-U/vq5ccNTSVgYH7mHnodHmCffGWHJnz/E1BEWlLuK5pM4FZmGfBn/nrJGLjUsSmyx3otCeqc1T31F4y08AMDLg==", + "peer": true, + "requires": { + "@jest/console": "^29.6.4", + "@jest/reporters": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "emittery": "^0.8.1", + "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", + "jest-changed-files": "^29.6.3", + "jest-config": "^29.6.4", + "jest-haste-map": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.6.4", + "jest-resolve-dependencies": "^29.6.4", + "jest-runner": "^29.6.4", + "jest-runtime": "^29.6.4", + "jest-snapshot": "^29.6.4", + "jest-util": "^29.6.3", + "jest-validate": "^29.6.3", + "jest-watcher": "^29.6.4", "micromatch": "^4.0.4", - "rimraf": "^3.0.0", + "pretty-format": "^29.6.3", "slash": "^3.0.0", "strip-ansi": "^6.0.0" } }, "@jest/environment": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", - "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.4.tgz", + "integrity": "sha512-sQ0SULEjA1XUTHmkBRl7A1dyITM9yb1yb3ZNKPX3KlTd6IG7mWUe3e2yfExtC2Zz1Q+mMckOLHmL/qLiuQJrBQ==", + "peer": true, "requires": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/fake-timers": "^29.6.4", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^27.5.1" + "jest-mock": "^29.6.3" + } + }, + "@jest/expect": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.4.tgz", + "integrity": "sha512-Warhsa7d23+3X5bLbrbYvaehcgX5TLYhI03JKoedTiI8uJU4IhqYBWF7OSSgUyz4IgLpUYPkK0AehA5/fRclAA==", + "peer": true, + "requires": { + "expect": "^29.6.4", + "jest-snapshot": "^29.6.4" + } + }, + "@jest/expect-utils": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.4.tgz", + "integrity": "sha512-FEhkJhqtvBwgSpiTrocquJCdXPsyvNKcl/n7A3u7X4pVoF4bswm11c9d4AV+kfq2Gpv/mM8x7E7DsRvH+djkrg==", + "requires": { + "jest-get-type": "^29.6.3" } }, "@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.4.tgz", + "integrity": "sha512-6UkCwzoBK60edXIIWb0/KWkuj7R7Qq91vVInOe3De6DSpaEiqjKcJw4F7XUet24Wupahj9J6PlR09JqJ5ySDHw==", + "peer": true, "requires": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" + "jest-message-util": "^29.6.3", + "jest-mock": "^29.6.3", + "jest-util": "^29.6.3" } }, "@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.4.tgz", + "integrity": "sha512-wVIn5bdtjlChhXAzVXavcY/3PEjf4VqM174BM3eGL5kMxLiZD5CLnbmkEyA1Dwh9q8XjP6E8RwjBsY/iCWrWsA==", + "peer": true, "requires": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" + "@jest/environment": "^29.6.4", + "@jest/expect": "^29.6.4", + "@jest/types": "^29.6.3", + "jest-mock": "^29.6.3" } }, "@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.4.tgz", + "integrity": "sha512-sxUjWxm7QdchdrD3NfWKrL8FBsortZeibSJv4XLjESOOjSUOkjQcb0ZHJwfhEGIvBvTluTzfG2yZWZhkrXJu8g==", + "peer": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/transform": "^29.6.4", + "@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.2", + "glob": "^7.1.3", "graceful-fs": "^4.2.9", "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.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-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3", + "jest-worker": "^29.6.4", "slash": "^3.0.0", - "source-map": "^0.6.0", "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "peer": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "peer": true, + "requires": { + "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" + } + } + } + }, + "@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==", + "requires": { + "@sinclair/typebox": "^0.27.8" } }, "@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "peer": true, "requires": { + "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" + "graceful-fs": "^4.2.9" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "peer": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + } } }, "@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.4.tgz", + "integrity": "sha512-uQ1C0AUEN90/dsyEirgMLlouROgSY+Wc/JanVVk0OiUKa5UFh7sJpMEM3aoUBAz2BRNvUJ8j3d294WFuRxSyOQ==", + "peer": true, "requires": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.6.4", + "@jest/types": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.4.tgz", + "integrity": "sha512-E84M6LbpcRq3fT4ckfKs9ryVanwkaIB0Ws9bw3/yP4seRLg/VaCZ/LgW0MCq5wwk4/iP/qnilD41aj2fsw2RMg==", + "peer": true, "requires": { - "@jest/test-result": "^27.5.1", + "@jest/test-result": "^29.6.4", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" + "jest-haste-map": "^29.6.4", + "slash": "^3.0.0" } }, "@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.4.tgz", + "integrity": "sha512-8thgRSiXUqtr/pPGY/OsyHuMjGyhVnWrFAwoxmIemlBuiMyU1WFs0tXoNxzcr4A4uErs/ABre76SGmrr5ab/AA==", + "peer": true, + "requires": { + "@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": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^29.6.4", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.6.3", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" + "write-file-atomic": "^4.0.2" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "peer": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "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==", + "peer": true + } } }, "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "requires": { + "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "@jridgewell/resolve-uri": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", - "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "peer": true }, "@jridgewell/sourcemap-codec": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", - "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==" + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "peer": true }, "@jridgewell/trace-mapping": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", - "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "peer": true, "requires": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -5282,6 +6163,16 @@ "@octokit/types": "^9.0.0", "before-after-hook": "^2.2.0", "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "@octokit/types": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", + "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", + "requires": { + "@octokit/openapi-types": "^18.0.0" + } + } } }, "@octokit/endpoint": { @@ -5292,6 +6183,16 @@ "@octokit/types": "^9.0.0", "is-plain-object": "^5.0.0", "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "@octokit/types": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", + "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", + "requires": { + "@octokit/openapi-types": "^18.0.0" + } + } } }, "@octokit/graphql": { @@ -5302,6 +6203,16 @@ "@octokit/request": "^6.0.0", "@octokit/types": "^9.0.0", "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "@octokit/types": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", + "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", + "requires": { + "@octokit/openapi-types": "^18.0.0" + } + } } }, "@octokit/openapi-types": { @@ -5310,12 +6221,40 @@ "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" }, "@octokit/plugin-paginate-rest": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-7.0.0.tgz", - "integrity": "sha512-NNm6DlYBEyKs9OZvy2Ax9YKn7e0/G7js+/I80icBTHUf6kB/nfaZkdXOF1Z32OaB+LDH6GIYpdYC3Bm3vwX5Ow==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-7.1.2.tgz", + "integrity": "sha512-Jx8KuKqEAVRsK6fMzZKv3h6UH9/NRDHsDRtUAROqqmZlCptM///Uef7A1ViZ/cbDplekz7VbDWdFLAZ/mpuDww==", + "requires": { + "@octokit/tsconfig": "^2.0.0", + "@octokit/types": "^9.3.2" + }, + "dependencies": { + "@octokit/types": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", + "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", + "requires": { + "@octokit/openapi-types": "^18.0.0" + } + } + } + }, + "@octokit/plugin-rest-endpoint-methods": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.1.3.tgz", + "integrity": "sha512-0aoPd4f1k/KXPTGSX0NbxcBrShBHArgcW3pujEvLa6wUfcfA1BehxQ2Ifwa6CbJ4SfzaO79FvGgaUipoxDsgjA==", "requires": { - "@octokit/tsconfig": "^1.0.2", "@octokit/types": "^9.2.3" + }, + "dependencies": { + "@octokit/types": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", + "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", + "requires": { + "@octokit/openapi-types": "^18.0.0" + } + } } }, "@octokit/request": { @@ -5329,6 +6268,16 @@ "is-plain-object": "^5.0.0", "node-fetch": "^2.6.7", "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "@octokit/types": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", + "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", + "requires": { + "@octokit/openapi-types": "^18.0.0" + } + } } }, "@octokit/request-error": { @@ -5339,64 +6288,111 @@ "@octokit/types": "^9.0.0", "deprecation": "^2.0.0", "once": "^1.4.0" + }, + "dependencies": { + "@octokit/types": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", + "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", + "requires": { + "@octokit/openapi-types": "^18.0.0" + } + } } }, "@octokit/tsconfig": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-1.0.2.tgz", - "integrity": "sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-2.0.0.tgz", + "integrity": "sha512-tWnrai3quGt8+gRN2edzo9fmraWekeryXPeXDomMw2oFSpu/lH3VSWGn/q4V+rwjTRMeeXk/ci623/01Zet4VQ==" }, "@octokit/types": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.0.tgz", - "integrity": "sha512-ZNO1In0QuWZLDngSLcn5H4ExRhYOd1rDcWnwc/LuR55cO1d6Sex6+T6RiSQwp/tyEg7eNWx+MUdJGL7Fu1kMjw==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-11.1.0.tgz", + "integrity": "sha512-Fz0+7GyLm/bHt8fwEqgvRBWwIV1S6wRRyq+V6exRKLVWaKGsuy6H9QFYeBVDV7rK6fO3XwHgQOPxv+cLj2zpXQ==", "requires": { "@octokit/openapi-types": "^18.0.0" } }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true + }, "@seald-io/binary-search-tree": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@seald-io/binary-search-tree/-/binary-search-tree-1.0.2.tgz", - "integrity": "sha512-+pYGvPFAk7wUR+ONMOlc6A+LUN4kOCFwyPLjyaeS7wVibADPHWYJNYsNtyIAwjF1AXQkuaXElnIc4XjKt55QZA==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@seald-io/binary-search-tree/-/binary-search-tree-1.0.3.tgz", + "integrity": "sha512-qv3jnwoakeax2razYaMsGI/luWdliBLHTdC6jU55hQt1hcFqzauH/HsBollQ7IR4ySTtYhT+xyHoijpA16C+tA==" }, "@seald-io/nedb": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@seald-io/nedb/-/nedb-2.2.0.tgz", - "integrity": "sha512-whkcx3hpcowNhoSEbIsrfe8TXxDwyj8SJJut2EqF7DSX2GGqQlL7Ix/vzwwOo4FJolzDhZD2DaUTVKmTQS3Rog==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@seald-io/nedb/-/nedb-4.0.2.tgz", + "integrity": "sha512-gJ91fT1sgh2cLXYVcTSh7khZ8LdemI8+SojCdpZ5wy+DUQ4fSrEwGqOwbdV49NDs2BBO6GeBpSb8CnhG2IW1rw==", "requires": { - "@seald-io/binary-search-tree": "^1.0.2", - "async": "0.2.10", - "localforage": "^1.9.0" + "@seald-io/binary-search-tree": "^1.0.3", + "localforage": "^1.9.0", + "util": "^0.12.4" } }, + "@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==" + }, "@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "peer": true, "requires": { "type-detect": "4.0.8" } }, "@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "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==", + "peer": true, "requires": { - "@sinonjs/commons": "^1.7.0" + "@sinonjs/commons": "^3.0.0" } }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" + "@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "optional": true, + "peer": true + }, + "@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "optional": true, + "peer": true + }, + "@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "optional": true, + "peer": true + }, + "@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==", + "optional": true, + "peer": true }, "@types/babel__core": { - "version": "7.1.18", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", - "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", + "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", + "peer": true, "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" @@ -5406,6 +6402,7 @@ "version": "7.6.4", "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "peer": true, "requires": { "@babel/types": "^7.0.0" } @@ -5414,23 +6411,44 @@ "version": "7.4.1", "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "peer": true, "requires": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, - "@types/babel__traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "@types/babel__traverse": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", + "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", + "peer": true, + "requires": { + "@babel/types": "^7.20.7" + } + }, + "@types/fs-extra": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.1.tgz", + "integrity": "sha512-MxObHvNl4A69ofaTRU8DFqvgzzv8s9yRtaPPm5gud9HDNvpB3GPQFvNuTWAI59B9huVGV5jXYJwbCsmBsOGYWA==", + "requires": { + "@types/jsonfile": "*", + "@types/node": "*" + } + }, + "@types/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", "requires": { - "@babel/types": "^7.3.0" + "@types/minimatch": "^5.1.2", + "@types/node": "*" } }, "@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", + "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", + "peer": true, "requires": { "@types/node": "*" } @@ -5456,15 +6474,53 @@ "@types/istanbul-lib-report": "*" } }, + "@types/jest": { + "version": "29.5.4", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.4.tgz", + "integrity": "sha512-PhglGmhWeD46FYOVLt3X7TiWjzwuVGW9wG/4qocPevXMjCmrIc5b6db9WjeGE4QYVpUAWMDv3v0IiBwObY289A==", + "requires": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "@types/jest-expect-message": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@types/jest-expect-message/-/jest-expect-message-1.1.0.tgz", + "integrity": "sha512-PbmZ6pTBpJTzj7KdGP8l8qTyf6RA5BVWg0C51XjCb0GuifXVcu3jAR6+U/W47nmE5S3tLPPEo70UcuhSlSS1hg==", + "requires": { + "jest-expect-message": "*" + } + }, + "@types/jsonfile": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.1.tgz", + "integrity": "sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png==", + "requires": { + "@types/node": "*" + } + }, + "@types/lodash": { + "version": "4.14.198", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.198.tgz", + "integrity": "sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg==" + }, + "@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" + }, "@types/node": { "version": "17.0.18", "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.18.tgz", "integrity": "sha512-eKj4f/BsN/qcculZiRSujogjvp5O/k4lOW5m35NopjZM/QwLOR075a8pJW5hD+Rtdm2DaCVPENS6KtSQnUD6BA==" }, - "@types/prettier": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.4.tgz", - "integrity": "sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA==" + "@types/signale": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/@types/signale/-/signale-1.4.4.tgz", + "integrity": "sha512-VYy4VL64gA4uyUIYVj4tiGFF0VpdnRbJeqNENKGX42toNiTvt83rRzxdr0XK4DR3V01zPM0JQNIsL+IwWWfhsQ==", + "requires": { + "@types/node": "*" + } }, "@types/stack-utils": { "version": "2.0.1", @@ -5472,61 +6528,30 @@ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", + "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", "requires": { "@types/yargs-parser": "*" } }, "@types/yargs-parser": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==" - }, - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==" + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" }, "acorn": { "version": "8.7.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==" - }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" - } - } - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "requires": { - "debug": "4" - } + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "optional": true, + "peer": true }, "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==", + "peer": true, "requires": { "type-fest": "^0.21.3" } @@ -5545,18 +6570,27 @@ } }, "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "peer": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "optional": true, + "peer": true + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "peer": true, "requires": { "sprintf-js": "~1.0.2" } @@ -5574,39 +6608,21 @@ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" }, - "async": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "requires": { - "follow-redirects": "^1.14.0" - } - }, - "axios-curlirize": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/axios-curlirize/-/axios-curlirize-1.3.7.tgz", - "integrity": "sha512-csSsuMyZj1dv1fL0zRPnDAHWrmlISMvK+wx9WJI/igRVDT4VMgbf2AVenaHghFLfI1nQijXUevYEguYV6u5hjA==" + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" }, "babel-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.4.tgz", + "integrity": "sha512-meLj23UlSLddj6PC+YTOFRgDAtjnZom8w/ACsrx0gtPtv5cJZk0A5Unk5bV4wixD7XaPCN1fQvpww8czkZURmw==", + "peer": true, "requires": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/transform": "^29.6.4", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", + "babel-preset-jest": "^29.6.3", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" @@ -5616,22 +6632,39 @@ "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==", + "peer": true, "requires": { "@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" + }, + "dependencies": { + "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==", + "peer": true, + "requires": { + "@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" + } + } } }, "babel-plugin-jest-hoist": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", - "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "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==", + "peer": true, "requires": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", + "@types/babel__core": "^7.1.14", "@types/babel__traverse": "^7.0.6" } }, @@ -5639,6 +6672,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "peer": true, "requires": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", @@ -5655,11 +6689,12 @@ } }, "babel-preset-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "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==", + "peer": true, "requires": { - "babel-plugin-jest-hoist": "^27.5.1", + "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" } }, @@ -5690,15 +6725,11 @@ "fill-range": "^7.0.1" } }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" - }, "browserslist": { "version": "4.19.1", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "peer": true, "requires": { "caniuse-lite": "^1.0.30001286", "electron-to-chromium": "^1.4.17", @@ -5707,10 +6738,19 @@ "picocolors": "^1.0.0" } }, + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "requires": { + "fast-json-stable-stringify": "2.x" + } + }, "bser": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "peer": true, "requires": { "node-int64": "^0.4.0" } @@ -5718,22 +6758,35 @@ "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==" + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "peer": true + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "peer": true }, "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "peer": true }, "caniuse-lite": { "version": "1.0.30001481", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001481.tgz", - "integrity": "sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ==" + "integrity": "sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ==", + "peer": true }, "chalk": { "version": "4.1.2", @@ -5747,37 +6800,31 @@ "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==" + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "peer": true }, "ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==" + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==" }, "cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==" - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "peer": true }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "peer": true }, "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" + "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==", + "peer": true }, "color-convert": { "version": "2.0.1", @@ -5792,24 +6839,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" - }, "commander": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", @@ -5829,10 +6858,18 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "peer": true, "requires": { "safe-buffer": "~5.1.1" } }, + "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==", + "optional": true, + "peer": true + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -5843,78 +6880,27 @@ "which": "^2.0.1" } }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" - } - } - }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - } - }, - "dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==" - }, - "dayjs": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz", - "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==" - }, "debug": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "peer": true, "requires": { "ms": "2.1.2" } }, - "decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==" - }, "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=" - }, - "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==" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "peer": true, + "requires": {} }, "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "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==", + "peer": true }, "deprecation": { "version": "2.3.1", @@ -5924,32 +6910,31 @@ "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==" + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "peer": true + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "optional": true, + "peer": true }, "diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==" + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==" }, - "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==" - } - } + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, "electron-to-chromium": { "version": "1.4.69", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.69.tgz", - "integrity": "sha512-0rxK21MqWhN/fVUXNOeBksRlw79Wq26y6R8lxEEL2v7vwzRWbYhXI7Id5msee7/q1NNgu4mG78qaablN2xtfTQ==" + "integrity": "sha512-0rxK21MqWhN/fVUXNOeBksRlw79Wq26y6R8lxEEL2v7vwzRWbYhXI7Id5msee7/q1NNgu4mG78qaablN2xtfTQ==", + "peer": true }, "email-addresses": { "version": "5.0.0", @@ -5957,9 +6942,10 @@ "integrity": "sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==" }, "emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==" + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "peer": true }, "emoji-regex": { "version": "8.0.0", @@ -5991,37 +6977,17 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" }, - "escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "peer": true }, "execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "peer": true, "requires": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -6037,17 +7003,19 @@ "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "peer": true }, "expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.4.tgz", + "integrity": "sha512-F2W2UyQ8XYyftHT57dtfg8Ue3X5qLgm2sSug0ivvLRH/VKNRL/pDxg/TH7zVzbQB0tu80clNFy6LU7OS/VSEKA==", "requires": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" + "@jest/expect-utils": "^29.6.4", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3" } }, "fast-json-stable-stringify": { @@ -6055,15 +7023,11 @@ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - }, "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "peer": true, "requires": { "bser": "2.1.1" } @@ -6125,25 +7089,34 @@ "path-exists": "^4.0.0" } }, - "follow-redirects": { - "version": "1.14.8", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", - "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==" + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "^1.1.3" + } }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "dependencies": { + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" + } } }, "fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", "requires": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -6160,13 +7133,14 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "optional": true, + "peer": true }, "function-bind": { "version": "1.1.1", @@ -6176,27 +7150,36 @@ "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==" + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "peer": true }, "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==" }, + "get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + } + }, "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==" - }, - "get-stdin": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", - "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==" + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "peer": true }, "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==" + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "peer": true }, "gh-pages": { "version": "5.0.0", @@ -6243,22 +7226,40 @@ } }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "10.3.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz", + "integrity": "sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==", "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "peer": true }, "globby": { "version": "6.1.0", @@ -6272,6 +7273,19 @@ "pinkie-promise": "^2.0.0" }, "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "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" + } + }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -6279,6 +7293,14 @@ } } }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "requires": { + "get-intrinsic": "^1.1.3" + } + }, "graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", @@ -6297,50 +7319,35 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "requires": { - "whatwg-encoding": "^1.0.5" + "has-symbols": "^1.0.2" } }, "html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "requires": { - "agent-base": "6", - "debug": "4" - } + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "peer": true }, "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==" - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "peer": true }, "immediate": { "version": "3.0.6", @@ -6351,6 +7358,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "peer": true, "requires": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -6359,12 +7367,13 @@ "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "peer": true }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "requires": { "once": "^1.3.0", "wrappy": "1" @@ -6375,45 +7384,34 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "iptv-checker": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/iptv-checker/-/iptv-checker-0.26.0.tgz", - "integrity": "sha512-8q9RWEpW7rICEj2PEz+6KnfBP5GimsCEsVaXG637ylyLx7vD5miX5MZGJDFslC+RIrQBZiBnNIQPmbhfYEHehg==", - "requires": { - "axios": "^0.21.1", - "axios-curlirize": "^1.3.7", - "colors": "^1.4.0", - "command-exists": "^1.2.9", - "commander": "^2.20.0", - "dateformat": "^3.0.3", - "get-stdin": "^7.0.0", - "iptv-playlist-parser": "^0.12.0", - "jest": "^27.0.6", - "lodash.chunk": "^4.2.0", - "progress": "^2.0.3", - "valid-url": "^1.0.9" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - } - } - }, "iptv-playlist-parser": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/iptv-playlist-parser/-/iptv-playlist-parser-0.12.1.tgz", - "integrity": "sha512-N0sJFsV8+FBZiR/kl7F5YfFQsUxFXrABP9+xyHPFEQjHJmXSBbvyHLlaW0GjROTd+iXVHA9glEeEwlzJimt5NA==", + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/iptv-playlist-parser/-/iptv-playlist-parser-0.12.3.tgz", + "integrity": "sha512-used+ue0HmHj+zYUSjI+19RnZvl59lwhmzS+6VDAyerT4va3DFg+rImHgdYoNiBQtarMTH4bnoFAOQdCq4ooAA==", "requires": { "is-valid-path": "^0.1.1", "validator": "^13.7.0" } }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" + }, "is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "peer": true, "requires": { "has": "^1.0.3" } @@ -6431,7 +7429,16 @@ "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==" + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "peer": true + }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "requires": { + "has-tostringtag": "^1.0.0" + } }, "is-glob": { "version": "2.0.1", @@ -6459,20 +7466,19 @@ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" }, - "is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" - }, "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "peer": true }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "requires": { + "which-typed-array": "^1.1.11" + } }, "is-valid-path": { "version": "0.1.1", @@ -6485,39 +7491,74 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==" + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "peer": true }, "istanbul-lib-instrument": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", - "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz", + "integrity": "sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==", + "peer": true, "requires": { "@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" + "semver": "^7.5.4" + }, + "dependencies": { + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "peer": true, + "requires": { + "lru-cache": "^6.0.0" + } + } } }, "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "peer": true, "requires": { "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", + "make-dir": "^4.0.0", "supports-color": "^7.1.0" + }, + "dependencies": { + "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==", + "peer": true, + "requires": { + "semver": "^7.5.3" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "peer": true, + "requires": { + "lru-cache": "^6.0.0" + } + } } }, "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==", + "peer": true, "requires": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -6525,404 +7566,481 @@ } }, "istanbul-reports": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", - "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "peer": true, "requires": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" } }, + "jackspeak": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.3.tgz", + "integrity": "sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg==", + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, "jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.4.tgz", + "integrity": "sha512-tEFhVQFF/bzoYV1YuGyzLPZ6vlPrdfvDmmAxudA1dLEuiztqg2Rkx20vkKY32xiDROcD2KXlgZ7Cu8RPeEHRKw==", + "peer": true, "requires": { - "@jest/core": "^27.5.1", + "@jest/core": "^29.6.4", + "@jest/types": "^29.6.3", "import-local": "^3.0.2", - "jest-cli": "^27.5.1" + "jest-cli": "^29.6.4" } }, "jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.6.3.tgz", + "integrity": "sha512-G5wDnElqLa4/c66ma5PG9eRjE342lIbF6SUnTJi26C3J28Fv2TVY2rOyKB9YGbSA5ogwevgmxc4j4aVjrEK6Yg==", + "peer": true, "requires": { - "@jest/types": "^27.5.1", "execa": "^5.0.0", - "throat": "^6.0.1" + "jest-util": "^29.6.3", + "p-limit": "^3.1.0" + }, + "dependencies": { + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "peer": true, + "requires": { + "yocto-queue": "^0.1.0" + } + } } }, "jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", - "requires": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.4.tgz", + "integrity": "sha512-YXNrRyntVUgDfZbjXWBMPslX1mQ8MrSG0oM/Y06j9EYubODIyHWP8hMUbjbZ19M3M+zamqEur7O80HODwACoJw==", + "peer": true, + "requires": { + "@jest/environment": "^29.6.4", + "@jest/expect": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.5.1", + "dedent": "^1.0.0", "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", + "jest-each": "^29.6.3", + "jest-matcher-utils": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-runtime": "^29.6.4", + "jest-snapshot": "^29.6.4", + "jest-util": "^29.6.3", + "p-limit": "^3.1.0", + "pretty-format": "^29.6.3", + "pure-rand": "^6.0.0", "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" + "stack-utils": "^2.0.3" + }, + "dependencies": { + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "peer": true, + "requires": { + "yocto-queue": "^0.1.0" + } + } } }, "jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", - "requires": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.4.tgz", + "integrity": "sha512-+uMCQ7oizMmh8ZwRfZzKIEszFY9ksjjEQnTEMTaL7fYiL3Kw4XhqT9bYh+A4DQKUb67hZn2KbtEnDuHvcgK4pQ==", + "peer": true, + "requires": { + "@jest/core": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/types": "^29.6.3", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-config": "^29.6.4", + "jest-util": "^29.6.3", + "jest-validate": "^29.6.3", "prompts": "^2.0.1", - "yargs": "^16.2.0" + "yargs": "^17.3.1" + }, + "dependencies": { + "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==", + "peer": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "peer": true, + "requires": { + "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" + } + }, + "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==", + "peer": true + } } }, "jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", - "requires": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.4.tgz", + "integrity": "sha512-JWohr3i9m2cVpBumQFv2akMEnFEPVOh+9L2xIBJhJ0zOaci2ZXuKJj0tgMKQCBZAKA09H049IR4HVS/43Qb19A==", + "peer": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.6.4", + "@jest/types": "^29.6.3", + "babel-jest": "^29.6.4", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", - "glob": "^7.1.1", + "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-circus": "^29.6.4", + "jest-environment-node": "^29.6.4", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.6.4", + "jest-runner": "^29.6.4", + "jest-util": "^29.6.3", + "jest-validate": "^29.6.3", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", + "pretty-format": "^29.6.3", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "peer": true, + "requires": { + "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" + } + } } }, "jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.4.tgz", + "integrity": "sha512-9F48UxR9e4XOEZvoUXEHSWY4qC4zERJaOfrbBg9JpbJOO43R1vN76REt/aMGZoY6GD5g84nnJiBIVlscegefpw==", "requires": { "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.6.3" } }, "jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.6.3.tgz", + "integrity": "sha512-2+H+GOTQBEm2+qFSQ7Ma+BvyV+waiIFxmZF5LdpBsAEjWX8QYjSCa4FrkIYtbfXUJJJnFCYrOtt6TZ+IAiTjBQ==", + "peer": true, "requires": { "detect-newline": "^3.0.0" } }, "jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.3.tgz", + "integrity": "sha512-KoXfJ42k8cqbkfshW7sSHcdfnv5agDdHCPA87ZBdmHP+zJstTJc0ttQaJ/x7zK6noAL76hOuTIJ6ZkQRS5dcyg==", + "peer": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.6.3", "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-environment-jsdom": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", - "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" + "jest-get-type": "^29.6.3", + "jest-util": "^29.6.3", + "pretty-format": "^29.6.3" } }, "jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.4.tgz", + "integrity": "sha512-i7SbpH2dEIFGNmxGCpSc2w9cA4qVD+wfvg2ZnfQ7XVrKL0NA5uDVBIiGH8SR4F0dKEv/0qI5r+aDomDf04DpEQ==", + "peer": true, + "requires": { + "@jest/environment": "^29.6.4", + "@jest/fake-timers": "^29.6.4", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" + "jest-mock": "^29.6.3", + "jest-util": "^29.6.3" } }, "jest-expect-message": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/jest-expect-message/-/jest-expect-message-1.0.2.tgz", - "integrity": "sha512-WFiXMgwS2lOqQZt1iJMI/hOXpUm32X+ApsuzYcQpW5m16Pv6/Gd9kgC+Q+Q1YVNU04kYcAOv9NXMnjg6kKUy6Q==" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/jest-expect-message/-/jest-expect-message-1.1.3.tgz", + "integrity": "sha512-bTK77T4P+zto+XepAX3low8XVQxDgaEqh3jSTQOG8qvPpD69LsIdyJTa+RmnJh3HNSzJng62/44RPPc7OIlFxg==" }, "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==" + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==" }, "jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.4.tgz", + "integrity": "sha512-12Ad+VNTDHxKf7k+M65sviyynRoZYuL1/GTuhEVb8RYsNSNln71nANRb/faSyWvx0j+gHcivChXHIoMJrGYjog==", + "peer": true, "requires": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "fsevents": "^2.3.2", "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.6.3", + "jest-worker": "^29.6.4", "micromatch": "^4.0.4", - "walker": "^1.0.7" - } - }, - "jest-jasmine2": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", - "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", - "requires": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" + "walker": "^1.0.8" } }, "jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.3.tgz", + "integrity": "sha512-0kfbESIHXYdhAdpLsW7xdwmYhLf1BRu4AA118/OxFm0Ho1b2RcTmO4oF6aAMaxpxdxnJ3zve2rgwzNBD4Zbm7Q==", + "peer": true, "requires": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.6.3" } }, "jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.4.tgz", + "integrity": "sha512-KSzwyzGvK4HcfnserYqJHYi7sZVqdREJ9DMPAKVbS98JsIAvumihaNUbjrWw0St7p9IY7A9UskCW5MYlGmBQFQ==", "requires": { "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "jest-diff": "^29.6.4", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.6.3" } }, "jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.3.tgz", + "integrity": "sha512-FtzaEEHzjDpQp51HX4UMkPZjy46ati4T5pEMyM6Ik48ztu4T9LQplZ6OsimHx7EuM9dfEh5HJa6D3trEftu3dA==", "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", + "@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": "^27.5.1", + "pretty-format": "^29.6.3", "slash": "^3.0.0", "stack-utils": "^2.0.3" } }, "jest-mock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.3.tgz", + "integrity": "sha512-Z7Gs/mOyTSR4yPsaZ72a/MtuK6RnC3JYqWONe48oLaoEcYwEDxqvbXz85G4SJrm2Z5Ar9zp6MiHF4AlFlRM4Pg==", + "peer": true, "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*" + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.6.3" } }, "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "peer": true, "requires": {} }, "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==" + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "peer": true }, "jest-resolve": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", - "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.4.tgz", + "integrity": "sha512-fPRq+0vcxsuGlG0O3gyoqGTAxasagOxEuyoxHeyxaZbc9QNek0AmJWSkhjlMG+mTsj+8knc/mWb3fXlRNVih7Q==", + "peer": true, "requires": { - "@jest/types": "^27.5.1", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", + "jest-haste-map": "^29.6.4", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-util": "^29.6.3", + "jest-validate": "^29.6.3", "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", + "resolve.exports": "^2.0.0", "slash": "^3.0.0" } }, "jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.4.tgz", + "integrity": "sha512-7+6eAmr1ZBF3vOAJVsfLj1QdqeXG+WYhidfLHBRZqGN24MFRIiKG20ItpLw2qRAsW/D2ZUUmCNf6irUr/v6KHA==", + "peer": true, "requires": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.6.4" } }, "jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", - "requires": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.4.tgz", + "integrity": "sha512-SDaLrMmtVlQYDuG0iSPYLycG8P9jLI+fRm8AF/xPKhYDB2g6xDWjXBrR5M8gEWsK6KVFlebpZ4QsrxdyIX1Jaw==", + "peer": true, + "requires": { + "@jest/console": "^29.6.4", + "@jest/environment": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", - "emittery": "^0.8.1", + "emittery": "^0.13.1", "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" + "jest-docblock": "^29.6.3", + "jest-environment-node": "^29.6.4", + "jest-haste-map": "^29.6.4", + "jest-leak-detector": "^29.6.3", + "jest-message-util": "^29.6.3", + "jest-resolve": "^29.6.4", + "jest-runtime": "^29.6.4", + "jest-util": "^29.6.3", + "jest-watcher": "^29.6.4", + "jest-worker": "^29.6.4", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "dependencies": { + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "peer": true, + "requires": { + "yocto-queue": "^0.1.0" + } + } } }, "jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.4.tgz", + "integrity": "sha512-s/QxMBLvmwLdchKEjcLfwzP7h+jsHvNEtxGP5P+Fl1FMaJX2jMiIqe4rJw4tFprzCwuSvVUo9bn0uj4gNRXsbA==", + "peer": true, + "requires": { + "@jest/environment": "^29.6.4", + "@jest/fake-timers": "^29.6.4", + "@jest/globals": "^29.6.4", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-mock": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.6.4", + "jest-snapshot": "^29.6.4", + "jest-util": "^29.6.3", "slash": "^3.0.0", "strip-bom": "^4.0.0" - } - }, - "jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.9" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "peer": true, + "requires": { + "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" + } + } } }, "jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.4.tgz", + "integrity": "sha512-VC1N8ED7+4uboUKGIDsbvNAZb6LakgIPgAF4RSpF13dN6YaMokfRqO+BaqK4zIh6X3JffgwbzuGqDEjHm/MrvA==", + "peer": true, "requires": { - "@babel/core": "^7.7.2", + "@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/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.5.1", + "expect": "^29.6.4", "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-diff": "^29.6.4", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3", "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" + "pretty-format": "^29.6.3", + "semver": "^7.5.3" }, "dependencies": { "semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "peer": true, "requires": { "lru-cache": "^6.0.0" } @@ -6930,11 +8048,11 @@ } }, "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.3.tgz", + "integrity": "sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA==", "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -6943,45 +8061,51 @@ } }, "jest-validate": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.3.tgz", + "integrity": "sha512-e7KWZcAIX+2W1o3cHfnqpGajdCs1jSM3DkXjGeLSNmCazv1EeI1ggTeK5wdZhF+7N+g44JI2Od3veojoaumlfg==", + "peer": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.6.3", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", + "jest-get-type": "^29.6.3", "leven": "^3.1.0", - "pretty-format": "^27.5.1" + "pretty-format": "^29.6.3" }, "dependencies": { "camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "peer": true } } }, "jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.4.tgz", + "integrity": "sha512-oqUWvx6+On04ShsT00Ir9T4/FvBeEh2M9PTubgITPxDa739p4hoQweWPRGyYeaojgT0xTpZKF0Y/rSY1UgMxvQ==", + "peer": true, "requires": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/test-result": "^29.6.4", + "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.5.1", + "emittery": "^0.13.1", + "jest-util": "^29.6.3", "string-length": "^4.0.1" } }, "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.4.tgz", + "integrity": "sha512-6dpvFV4WjcWbDVGgHTWo/aupl8/LbBx2NSKfiwqf79xC/yeJjKHT1+StcKy/2KTmW16hE68ccKVOtXf+WZGz7Q==", + "peer": true, "requires": { "@types/node": "*", + "jest-util": "^29.6.3", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, @@ -6990,6 +8114,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "peer": true, "requires": { "has-flag": "^4.0.0" } @@ -7005,49 +8130,17 @@ "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "peer": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" } }, - "jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "requires": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - } - }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "peer": true }, "json-parse-better-errors": { "version": "1.0.2", @@ -7057,7 +8150,8 @@ "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==" + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "peer": true }, "json5": { "version": "2.2.3", @@ -7083,21 +8177,14 @@ "kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "peer": true }, "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==" - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "peer": true }, "lie": { "version": "3.1.1", @@ -7110,7 +8197,8 @@ "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==" + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "peer": true }, "load-json-file": { "version": "4.0.0", @@ -7160,10 +8248,10 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "lodash.chunk": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz", - "integrity": "sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw=" + "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==" }, "lru-cache": { "version": "6.0.0", @@ -7187,6 +8275,19 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "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" + } } } }, @@ -7198,10 +8299,16 @@ "semver": "^6.0.0" } }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + }, "makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "peer": true, "requires": { "tmpl": "1.0.5" } @@ -7217,34 +8324,23 @@ "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==" + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "peer": true }, "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" - }, - "mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "requires": { - "mime-db": "1.51.0" + "braces": "^3.0.2", + "picomatch": "^2.3.1" } }, "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "peer": true }, "minimatch": { "version": "3.1.2", @@ -7254,28 +8350,27 @@ "brace-expansion": "^1.1.7" } }, + "minipass": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", + "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==" + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "peer": true }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "peer": true }, "natural-orderby": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-2.0.3.tgz", - "integrity": "sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==" - }, - "nedb-promises": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/nedb-promises/-/nedb-promises-5.0.2.tgz", - "integrity": "sha512-087g8JdsStXRWDxC9qqE4qMLqZGJrUnYF54pvOCDDfcLoptJUCqGb7j2WvWlaleeqft9rUjiJ9egvMJlUnJTmA==", - "requires": { - "@seald-io/nedb": "^2.2.0" - } + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-3.0.2.tgz", + "integrity": "sha512-x7ZdOwBxZCEm9MM7+eQCjkrNLrW3rkBKNHVr78zbtqnMGVNlnDi6C/eUEYgxHNrcbu0ymvjzcwIL/6H1iHri9g==" }, "node-fetch": { "version": "2.6.11", @@ -7309,36 +8404,35 @@ "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "peer": true }, "node-releases": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", - "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==", + "peer": true }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "peer": true }, "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-7.2.0.tgz", + "integrity": "sha512-uhXOdZry0L6M2UIo9BTt7FdpBDiAGN/7oItedQwPKh8jh31ZlvC8U9Xl/EJ3aijDHaywXTW3QbZ6LuCocur1YA==" }, "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==", + "peer": true, "requires": { "path-key": "^3.0.0" } }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -7356,23 +8450,11 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "peer": true, "requires": { "mimic-fn": "^2.1.0" } }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -7398,6 +8480,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "peer": true, "requires": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -7405,11 +8488,6 @@ "lines-and-columns": "^1.1.6" } }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -7418,7 +8496,7 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" }, "path-key": { "version": "3.1.1", @@ -7428,12 +8506,30 @@ "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==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "peer": true + }, + "path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "requires": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", + "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==" + } + } }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "peer": true }, "picomatch": { "version": "2.3.1", @@ -7459,9 +8555,10 @@ } }, "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==" + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "peer": true }, "pkg-conf": { "version": "2.1.0", @@ -7525,19 +8622,14 @@ "find-up": "^4.0.0" } }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" - }, "pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", + "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", "requires": { - "ansi-regex": "^5.0.1", + "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "react-is": "^18.0.0" }, "dependencies": { "ansi-styles": { @@ -7547,61 +8639,44 @@ } } }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" - }, "prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "peer": true, "requires": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "pure-rand": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.3.tgz", + "integrity": "sha512-KddyFewCsO0j3+np81IQ+SweXLDnDQTs5s67BOnrYmYe/yNmUhttQyGsYzy8yUnoljGAQ9sl38YB4vH8ur7Y+w==", + "peer": true }, "q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "peer": true, "requires": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -7610,6 +8685,7 @@ "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==", + "peer": true, "requires": { "resolve-from": "^5.0.0" } @@ -7617,38 +8693,20 @@ "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "peer": true }, "resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==" - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "peer": true }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "requires": { - "xmlchars": "^2.2.0" - } + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "peer": true }, "semver": { "version": "6.3.1", @@ -7671,7 +8729,8 @@ "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==" + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "peer": true }, "signale": { "version": "1.4.0", @@ -7737,7 +8796,8 @@ "sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "peer": true }, "slash": { "version": "3.0.0", @@ -7747,12 +8807,14 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "peer": true }, "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "peer": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -7761,12 +8823,13 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "peer": true }, "stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "requires": { "escape-string-regexp": "^2.0.0" } @@ -7775,43 +8838,65 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "peer": true, "requires": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" } }, "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" + } + }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } }, "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==" + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "peer": true }, "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==" + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "peer": true }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "peer": true }, "strip-outer": { "version": "1.0.1", @@ -7836,58 +8921,50 @@ "has-flag": "^4.0.0" } }, - "supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - } - }, "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==" - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" - }, - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - } + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "peer": true }, "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==", + "peer": true, "requires": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "peer": true, + "requires": { + "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" + } + } } }, - "throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==" - }, "tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "peer": true }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "peer": true }, "to-regex-range": { "version": "5.0.1", @@ -7897,40 +8974,45 @@ "is-number": "^7.0.0" } }, - "tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "transliteration": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/transliteration/-/transliteration-2.3.5.tgz", + "integrity": "sha512-HAGI4Lq4Q9dZ3Utu2phaWgtm3vB6PkLUFqWAScg/UW+1eZ/Tg6Exo4oC0/3VUol/w4BlefLhUUSVBr/9/ZGQOw==", "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" + "yargs": "^17.5.1" }, "dependencies": { - "universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==" + "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==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "requires": { + "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" + } + }, + "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==" } } }, - "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "requires": { - "punycode": "^2.1.1" - } - }, - "transliteration": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/transliteration/-/transliteration-2.2.0.tgz", - "integrity": "sha512-o29GDWtecNoK4TNfnJQesGluFPiza+U8NoiKrErU8eTNlVgma6w1LV/tTiGo+waFLkhtL9WxrW0lXhZKmm7msQ==", - "requires": { - "yargs": "^16.1.0" - } - }, "trim-repeated": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", @@ -7946,31 +9028,83 @@ } } }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "ts-jest": { + "version": "29.1.1", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", + "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", "requires": { - "prelude-ls": "~1.1.2" + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "^7.5.3", + "yargs-parser": "^21.0.1" + }, + "dependencies": { + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "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==" + } + } + }, + "ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "optional": true, + "peer": true, + "requires": { + "@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" + }, + "dependencies": { + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "optional": true, + "peer": true + } } }, "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==" + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "peer": true }, "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==" + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "peer": true }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } + "typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==" }, "universal-user-agent": { "version": "6.0.0", @@ -7982,94 +9116,62 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" }, - "url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" } }, + "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==", + "optional": true, + "peer": true + }, "v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", + "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", + "peer": true, "requires": { + "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" + "convert-source-map": "^1.6.0" }, "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + "@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "peer": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } } } }, - "valid-url": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", - "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==" - }, "validator": { "version": "13.7.0", "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==" }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "requires": { - "xml-name-validator": "^3.0.0" - } - }, "walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "peer": true, "requires": { "makeerror": "1.0.12" } }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" - }, - "whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - } - }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -8078,10 +9180,17 @@ "isexe": "^2.0.0" } }, - "word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==" + "which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } }, "wrap-ansi": { "version": "7.0.0", @@ -8093,38 +9202,31 @@ "strip-ansi": "^6.0.0" } }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "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==", + "peer": true, "requires": { "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" + "signal-exit": "^3.0.7" } }, - "ws": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", - "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", - "requires": {} - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" - }, "y18n": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", @@ -8135,24 +9237,18 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "optional": true, + "peer": true }, - "yargs-parser": { - "version": "20.2.6", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.6.tgz", - "integrity": "sha512-AP1+fQIWSM/sMiET8fyayjx/J+JmTPt2Mr0FkrgqB4todtfa53sOsrSAcIrJRD5XS20bKUwaDIuMkWKCEiQLKA==" + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "peer": true } } } diff --git a/package.json b/package.json index 944729e79..24762d030 100644 --- a/package.json +++ b/package.json @@ -4,52 +4,69 @@ "act:check": "act pull_request -W .github/workflows/check.yml", "act:update": "act workflow_dispatch -W .github/workflows/update.yml", "api:load": "./scripts/commands/api/load.sh", - "api:generate": "node scripts/commands/api/generate.js", + "api:generate": "npm run ts-node scripts/commands/api/generate.ts", "api:deploy": "npx gh-pages-clean && npx gh-pages -a -m \"Deploy to iptv-org/api\" -d .api -r https://$GITHUB_TOKEN@github.com/iptv-org/api.git", - "db:create": "node scripts/commands/database/create.js", - "playlist:format": "node scripts/commands/playlist/format.js", - "playlist:generate": "node scripts/commands/playlist/generate.js", - "playlist:validate": "node scripts/commands/playlist/validate.js", + "db:create": "npm run ts-node scripts/commands/database/create.ts", + "playlist:update": "npm run ts-node scripts/commands/playlist/update.ts", + "playlist:generate": "npm run ts-node scripts/commands/playlist/generate.ts", + "playlist:validate": "npm run ts-node scripts/commands/playlist/validate.ts", "playlist:lint": "npx m3u-linter -c m3u-linter.json", "playlist:deploy": "npx gh-pages-clean && npx gh-pages -m \"Deploy to GitHub Pages\" -d .gh-pages -r https://$GITHUB_TOKEN@github.com/iptv-org/iptv.git", - "readme:update": "node scripts/commands/readme/update.js", - "report:create": "node scripts/commands/report/create.js", + "readme:update": "npm run ts-node scripts/commands/readme/update.ts", + "report:create": "npm run ts-node scripts/commands/report/create.ts", "format": "npm run db:create && npm run playlist:format", "check": "npm run api:load && npm run playlist:lint && npm run playlist:validate", "update": "npm run api:load && npm run db:create && npm run playlist:generate && npm run api:generate && npm run readme:update", "deploy": "npm run playlist:deploy && npm run api:deploy", "report": "npm run api:load && npm run report:create", - "test": "jest --runInBand" + "test": "jest --runInBand", + "ts-node": "node --no-warnings=ExperimentalWarning --experimental-specifier-resolution=node --loader ts-node/esm" }, "jest": { - "testRegex": "tests/(.*?/)?.*test.js$", + "transform": { + "^.*test.(ts|js)$": "ts-jest" + }, + "testRegex": "tests/(.*?/)?.*test.(ts|js)$", "setupFilesAfterEnv": [ - "@alex_neo/jest-expect-message" + "jest-expect-message" ] }, + "signale": { + "displayLabel": false, + "displayScope": false, + "displayBadge": false + }, "author": "Arhey", "private": true, "license": "MIT", + "type": "module", "dependencies": { - "@alex_neo/jest-expect-message": "^1.0.5", "@octokit/core": "^4.2.1", - "@octokit/plugin-paginate-rest": "^7.0.0", + "@octokit/plugin-paginate-rest": "^7.1.2", + "@octokit/plugin-rest-endpoint-methods": "^7.1.3", + "@octokit/types": "^11.1.0", + "@seald-io/nedb": "^4.0.2", + "@types/fs-extra": "^11.0.1", + "@types/glob": "^8.1.0", + "@types/jest": "^29.5.4", + "@types/jest-expect-message": "^1.1.0", + "@types/lodash": "^4.14.198", + "@types/signale": "^1.4.4", "chalk": "^4.1.2", "commander": "^8.3.0", - "dayjs": "^1.10.7", - "fs-extra": "^10.0.0", + "fs-extra": "^11.1.1", "gh-pages": "^5.0.0", - "iptv-checker": "^0.26.0", - "iptv-playlist-parser": "^0.12.1", - "jest": "^27.5.1", - "jest-expect-message": "^1.0.2", + "glob": "^10.3.4", + "iptv-playlist-parser": "^0.12.3", + "jest-expect-message": "^1.1.3", "lodash": "^4.17.21", "m3u-linter": "^0.3.0", "markdown-include": "^0.4.3", - "natural-orderby": "^2.0.3", - "nedb-promises": "^5.0.2", - "normalize-url": "^6.1.0", + "natural-orderby": "^3.0.2", + "normalize-url": "^7.2.0", "signale": "^1.4.0", - "transliteration": "^2.2.0" + "transliteration": "^2.3.5", + "ts-jest": "^29.1.1", + "typescript": "^5.2.2" } } diff --git a/scripts/commands/api/generate.js b/scripts/commands/api/generate.js deleted file mode 100644 index b4ef737b1..000000000 --- a/scripts/commands/api/generate.js +++ /dev/null @@ -1,28 +0,0 @@ -const { logger, db, file } = require('../../core') -const _ = require('lodash') - -const PUBLIC_DIR = process.env.PUBLIC_DIR || '.api' - -async function main() { - logger.info(`loading streams...`) - await db.streams.load() - - let streams = await db.streams.find({}) - streams = _.sortBy(streams, 'channel') - streams = streams.map(stream => { - let data = { - channel: stream.channel, - url: stream.url, - http_referrer: stream.http_referrer, - user_agent: stream.user_agent - } - - return data - }) - logger.info(`found ${streams.length} streams`) - - logger.info('saving to .api/streams.json...') - await file.create(`${PUBLIC_DIR}/streams.json`, JSON.stringify(streams)) -} - -main() diff --git a/scripts/commands/api/generate.ts b/scripts/commands/api/generate.ts new file mode 100644 index 000000000..edb08db48 --- /dev/null +++ b/scripts/commands/api/generate.ts @@ -0,0 +1,25 @@ +import { API_DIR, DB_DIR } from '../../constants' +import { Logger, Database, Collection, Storage } from '../../core' +import { Stream } from '../../models' + +async function main() { + const logger = new Logger() + + logger.info(`loading streams...`) + const db = new Database(DB_DIR) + const dbStreams = await db.load('streams.db') + const docs = await dbStreams.find({}) + + const streams = new Collection(docs as any[]) + .map(data => new Stream(data)) + .orderBy((stream: Stream) => stream.channel) + .map((stream: Stream) => stream.toJSON()) + + logger.info(`found ${streams.count()} streams`) + + logger.info('saving to .api/streams.json...') + const storage = new Storage(API_DIR) + await storage.save('streams.json', streams.toJSON()) +} + +main() diff --git a/scripts/commands/api/load.sh b/scripts/commands/api/load.sh index b74aeca6c..866074753 100755 --- a/scripts/commands/api/load.sh +++ b/scripts/commands/api/load.sh @@ -1,11 +1,11 @@ #!/bin/bash -mkdir -p scripts/tmp/data -curl -L -o scripts/tmp/data/blocklist.json https://iptv-org.github.io/api/blocklist.json -curl -L -o scripts/tmp/data/categories.json https://iptv-org.github.io/api/categories.json -curl -L -o scripts/tmp/data/channels.json https://iptv-org.github.io/api/channels.json -curl -L -o scripts/tmp/data/streams.json https://iptv-org.github.io/api/streams.json -curl -L -o scripts/tmp/data/countries.json https://iptv-org.github.io/api/countries.json -curl -L -o scripts/tmp/data/languages.json https://iptv-org.github.io/api/languages.json -curl -L -o scripts/tmp/data/regions.json https://iptv-org.github.io/api/regions.json -curl -L -o scripts/tmp/data/subdivisions.json https://iptv-org.github.io/api/subdivisions.json \ No newline at end of file +mkdir -p temp/data +curl -L -o temp/data/blocklist.json https://iptv-org.github.io/api/blocklist.json +curl -L -o temp/data/categories.json https://iptv-org.github.io/api/categories.json +curl -L -o temp/data/channels.json https://iptv-org.github.io/api/channels.json +curl -L -o temp/data/streams.json https://iptv-org.github.io/api/streams.json +curl -L -o temp/data/countries.json https://iptv-org.github.io/api/countries.json +curl -L -o temp/data/languages.json https://iptv-org.github.io/api/languages.json +curl -L -o temp/data/regions.json https://iptv-org.github.io/api/regions.json +curl -L -o temp/data/subdivisions.json https://iptv-org.github.io/api/subdivisions.json \ No newline at end of file diff --git a/scripts/commands/database/create.js b/scripts/commands/database/create.js deleted file mode 100644 index 67c3fd440..000000000 --- a/scripts/commands/database/create.js +++ /dev/null @@ -1,40 +0,0 @@ -const { db, file, parser, store, logger } = require('../../core') -const { program } = require('commander') -const _ = require('lodash') - -const options = program - .option('--input-dir ', 'Set path to input directory', 'streams') - .parse(process.argv) - .opts() - -async function main() { - logger.info(`looking for streams...`) - const streams = [] - const files = await file.list(`${options.inputDir}/**/*.m3u`) - for (const filepath of files) { - const playlist = await parser.parsePlaylist(filepath) - for (const item of playlist.items) { - item.filepath = filepath - - const stream = store.create() - - stream.set('channel', item.tvg.id) - stream.set('title', item.name) - stream.set('filepath', item.filepath) - stream.set('url', item.url) - stream.set('http_referrer', item.http.referrer) - stream.set('user_agent', item.http['user-agent']) - - streams.push(stream) - } - } - logger.info(`found ${streams.length} streams`) - - logger.info('saving to the database...') - await db.streams.load() - await db.streams.reset() - const data = streams.map(stream => stream.data()) - await db.streams.insert(data) -} - -main() diff --git a/scripts/commands/database/create.ts b/scripts/commands/database/create.ts new file mode 100644 index 000000000..fee17a1f7 --- /dev/null +++ b/scripts/commands/database/create.ts @@ -0,0 +1,33 @@ +import { Storage, Logger, PlaylistParser, Collection, Database } from '../../core' +import { Stream, Playlist } from '../../models' +import { STREAMS_DIR, DB_DIR } from '../../constants' + +async function main() { + const logger = new Logger() + + logger.info(`looking for streams...`) + const storage = new Storage(STREAMS_DIR) + const parser = new PlaylistParser({ + storage + }) + const files = await storage.list(`**/*.m3u`) + let streams = new Collection() + for (let filepath of files) { + const playlist: Playlist = await parser.parse(filepath) + streams = streams.concat(playlist.streams) + } + + logger.info(`found ${streams.count()} streams`) + + logger.info('clean up the storage...') + const dbStorage = new Storage(DB_DIR) + await dbStorage.clear('streams.db') + + logger.info('saving streams to the database...') + const db = new Database(DB_DIR) + const dbStreams = await db.load('streams.db') + const data = streams.map((stream: Stream) => stream.data()).all() + await dbStreams.insert(data) +} + +main() diff --git a/scripts/commands/playlist/format.js b/scripts/commands/playlist/format.js deleted file mode 100644 index f1c62203e..000000000 --- a/scripts/commands/playlist/format.js +++ /dev/null @@ -1,33 +0,0 @@ -const { create: createPlaylist } = require('../../core/playlist') -const { normalize: normalizeUrl } = require('../../core/url') -const { db, logger, file } = require('../../core') -const { orderBy } = require('natural-orderby') -const _ = require('lodash') - -async function main() { - logger.info('loading streams...') - await db.streams.load() - let streams = await db.streams.find({}) - - streams = streams.map(stream => { - stream.url = normalizeUrl(stream.url) - - return stream - }) - - logger.info('sorting links...') - streams = orderBy( - streams, - ['channel', s => (s.channel ? '' : s.title), 'url'], - ['asc', 'asc', 'asc'] - ) - - logger.info('saving...') - const files = _.groupBy(streams, 'filepath') - for (const filepath in files) { - const playlist = createPlaylist(files[filepath], { public: false }) - await file.create(filepath, playlist.toString()) - } -} - -main() diff --git a/scripts/commands/playlist/generate.js b/scripts/commands/playlist/generate.js deleted file mode 100644 index f4f5c880c..000000000 --- a/scripts/commands/playlist/generate.js +++ /dev/null @@ -1,76 +0,0 @@ -const { db, generator, api, logger, file } = require('../../core') -const { orderBy } = require('natural-orderby') -const _ = require('lodash') - -async function main() { - const streams = await loadStreams() - - logger.info('generating categories/...') - await generator.generate('categories', streams) - logger.info('generating countries/...') - await generator.generate('countries', streams) - logger.info('generating languages/...') - await generator.generate('languages', streams) - logger.info('generating regions/...') - await generator.generate('regions', streams) - logger.info('generating index.category.m3u...') - await generator.generate('index_category_m3u', streams) - logger.info('generating index.country.m3u...') - await generator.generate('index_country_m3u', streams) - logger.info('generating index.language.m3u...') - await generator.generate('index_language_m3u', streams) - logger.info('generating index.m3u...') - await generator.generate('index_m3u', streams) - logger.info('generating index.nsfw.m3u...') - await generator.generate('index_nsfw_m3u', streams) - logger.info('generating index.region.m3u...') - await generator.generate('index_region_m3u', streams) -} - -main() - -async function loadStreams() { - await db.streams.load() - let streams = await db.streams.find({}) - streams = orderBy(streams, ['channel', 'url'], ['asc', 'asc']) - streams = _.uniqBy(streams, stream => stream.channel || _.uniqueId()) - - await api.channels.load() - let channels = await api.channels.all() - channels = _.keyBy(channels, 'id') - - await api.categories.load() - let categories = await api.categories.all() - categories = _.keyBy(categories, 'id') - - await api.languages.load() - let languages = await api.languages.all() - languages = _.keyBy(languages, 'code') - - streams = streams.map(stream => { - const channel = channels[stream.channel] || null - const filename = file.getFilename(stream.filepath) - const [_, code] = filename.match(/^([a-z]{2})(_|$)/) || [null, null] - const defaultBroadcastArea = code ? [`c/${code.toUpperCase()}`] : [] - - if (channel) { - stream.categories = channel.categories.map(id => categories[id]).filter(i => i) - stream.languages = channel.languages.map(id => languages[id]).filter(i => i) - stream.broadcast_area = channel.broadcast_area - stream.is_nsfw = channel.is_nsfw - stream.logo = channel.logo - } else { - stream.categories = [] - stream.languages = [] - stream.broadcast_area = defaultBroadcastArea - stream.is_nsfw = false - stream.logo = null - } - - return stream - }) - - streams = orderBy(streams, ['title'], ['asc']) - - return streams -} diff --git a/scripts/commands/playlist/generate.ts b/scripts/commands/playlist/generate.ts new file mode 100644 index 000000000..b21c44be8 --- /dev/null +++ b/scripts/commands/playlist/generate.ts @@ -0,0 +1,148 @@ +import { File, Storage } from '../../core' +import { Stream, Category, Channel, Language, Country, Region, Subdivision } from '../../models' +import { Database } from '../../core/database' +import { Collection } from '../../core/collection' +import { Logger } from '../../core/logger' +import _ from 'lodash' +import { + CategoriesGenerator, + CountriesGenerator, + LanguagesGenerator, + RegionsGenerator, + IndexGenerator, + IndexNsfwGenerator, + IndexCategoryGenerator, + IndexCountryGenerator, + IndexLanguageGenerator, + IndexRegionGenerator +} from '../../generators' +import { DATA_DIR, DB_DIR, LOGS_DIR } from '../../constants' + +async function main() { + const logger = new Logger() + + const storage = new Storage(DATA_DIR) + + const channelsContent = await storage.json('channels.json') + const channels = new Collection(channelsContent).map(data => new Channel(data)) + + const categoriesContent = await storage.json('categories.json') + const categories = new Collection(categoriesContent).map(data => new Category(data)) + + const countriesContent = await storage.json('countries.json') + const countries = new Collection(countriesContent).map(data => new Country(data)) + + const languagesContent = await storage.json('languages.json') + const languages = new Collection(languagesContent).map(data => new Language(data)) + + const regionsContent = await storage.json('regions.json') + const regions = new Collection(regionsContent).map(data => new Region(data)) + + const subdivisionsContent = await storage.json('subdivisions.json') + const subdivisions = new Collection(subdivisionsContent).map(data => new Subdivision(data)) + + const streams = await loadStreams({ channels, categories, languages }) + + const generatorsLogger = new Logger({ + stream: await new Storage(LOGS_DIR).createStream(`generators.log`) + }) + + logger.info('generating categories/...') + await new CategoriesGenerator({ categories, streams, logger: generatorsLogger }).generate() + + logger.info('generating countries/...') + await new CountriesGenerator({ + countries, + streams, + regions, + subdivisions, + logger: generatorsLogger + }).generate() + + logger.info('generating languages/...') + await new LanguagesGenerator({ streams, logger: generatorsLogger }).generate() + + logger.info('generating regions/...') + await new RegionsGenerator({ + streams, + regions, + subdivisions, + logger: generatorsLogger + }).generate() + + logger.info('generating index.m3u...') + await new IndexGenerator({ streams, logger: generatorsLogger }).generate() + + logger.info('generating index.nsfw.m3u...') + await new IndexNsfwGenerator({ streams, logger: generatorsLogger }).generate() + + logger.info('generating index.category.m3u...') + await new IndexCategoryGenerator({ streams, logger: generatorsLogger }).generate() + + logger.info('generating index.country.m3u...') + await new IndexCountryGenerator({ + streams, + countries, + regions, + subdivisions, + logger: generatorsLogger + }).generate() + + logger.info('generating index.language.m3u...') + await new IndexLanguageGenerator({ streams, logger: generatorsLogger }).generate() + + logger.info('generating index.region.m3u...') + await new IndexRegionGenerator({ streams, regions, logger: generatorsLogger }).generate() +} + +main() + +async function loadStreams({ + channels, + categories, + languages +}: { + channels: Collection + categories: Collection + languages: Collection +}) { + const groupedChannels = channels.keyBy(channel => channel.id) + const groupedCategories = categories.keyBy(category => category.id) + const groupedLanguages = languages.keyBy(language => language.code) + + const db = new Database(DB_DIR) + const dbStreams = await db.load('streams.db') + const docs = await dbStreams.find({}) + const streams = new Collection(docs as any[]) + .map((data: any) => new Stream(data)) + .orderBy([(stream: Stream) => stream.channel, (stream: Stream) => stream.url], ['asc', 'asc']) + .uniqBy((stream: Stream) => stream.channel || _.uniqueId()) + .map((stream: Stream) => { + const channel: Channel | undefined = groupedChannels.get(stream.channel) + + if (channel) { + const channelCategories = channel.categories + .map((id: string) => groupedCategories.get(id)) + .filter(Boolean) + const channelLanguages = channel.languages + .map((id: string) => groupedLanguages.get(id)) + .filter(Boolean) + + stream.categories = channelCategories + stream.languages = channelLanguages + stream.broadcastArea = channel.broadcastArea + stream.isNSFW = channel.isNSFW + if (channel.logo) stream.logo = channel.logo + } else { + const file = new File(stream.filepath) + const [_, countryCode] = file.getFilename().match(/^([a-z]{2})(_|$)/) || [null, null] + const defaultBroadcastArea = countryCode ? [`c/${countryCode.toUpperCase()}`] : [] + + stream.broadcastArea = new Collection(defaultBroadcastArea) + } + + return stream + }) + + return streams +} diff --git a/scripts/commands/playlist/update.ts b/scripts/commands/playlist/update.ts new file mode 100644 index 000000000..723d19d46 --- /dev/null +++ b/scripts/commands/playlist/update.ts @@ -0,0 +1,143 @@ +import { DB_DIR, DATA_DIR, STREAMS_DIR } from '../../constants' +import { Database, Storage, Logger, Collection, Dictionary, IssueLoader } from '../../core' +import { Stream, Playlist, Channel } from '../../models' + +let processedIssues = new Collection() +let streams: Collection +let groupedChannels: Dictionary + +async function main() { + const logger = new Logger({ disabled: true }) + const loader = new IssueLoader() + + logger.info('loading streams...') + const db = new Database(DB_DIR) + const docs = await db.load('streams.db') + const dbStreams = await docs.find({}) + + streams = new Collection(dbStreams as any[]).map(data => new Stream(data)) + + const storage = new Storage(DATA_DIR) + const channelsContent = await storage.json('channels.json') + groupedChannels = new Collection(channelsContent) + .map(data => new Channel(data)) + .keyBy((channel: Channel) => channel.id) + + logger.info('removing broken streams...') + await removeStreams(loader) + + logger.info('edit stream description...') + await editStreams(loader) + + logger.info('add new streams...') + await addStreams(loader) + + logger.info('normalizing links...') + streams = streams.map(stream => { + stream.normalizeURL() + return stream + }) + + logger.info('sorting links...') + streams = streams.orderBy( + [ + (stream: Stream) => stream.name, + (stream: Stream) => parseInt(stream.quality.replace('p', '')), + (stream: Stream) => stream.label, + (stream: Stream) => stream.url + ], + ['asc', 'desc', 'asc', 'asc'] + ) + + logger.info('saving...') + const streamsStorage = new Storage(STREAMS_DIR) + const groupedStreams = streams.groupBy((stream: Stream) => stream.filepath) + for (let filepath of groupedStreams.keys()) { + const streams = groupedStreams.get(filepath) || [] + + if (!streams.length) return + + const playlist = new Playlist(streams, { public: false }) + await streamsStorage.save(filepath, playlist.toString()) + } + + const output = processedIssues.map(issue_number => `closes #${issue_number}`).join(', ') + console.log(`OUTPUT=${output}`) +} + +main() + +async function removeStreams(loader: IssueLoader) { + const issues = await loader.load({ labels: ['streams:remove', 'approved'] }) + issues.forEach((data: Dictionary) => { + if (data.missing('stream_url')) return + + const removed = streams.remove((_stream: Stream) => _stream.url === data.get('stream_url')) + if (removed.notEmpty()) { + processedIssues.add(data.get('issue_number')) + } + }) +} + +async function editStreams(loader: IssueLoader) { + const issues = await loader.load({ labels: ['streams:edit', 'approved'] }) + issues.forEach((data: Dictionary) => { + if (data.missing('stream_url')) return + + let stream = streams.first( + (_stream: Stream) => _stream.url === data.get('stream_url') + ) as Stream + + if (!stream) return + + if (data.has('channel_id')) { + const channel = groupedChannels.get(data.get('channel_id')) + + if (!channel) return + + stream.channel = data.get('channel_id') + stream.filepath = `${channel.country.toLowerCase()}.m3u` + stream.line = -1 + stream.name = channel.name + } + + if (data.has('channel_name')) stream.name = data.get('channel_name') + if (data.has('label')) stream.label = data.get('label') + if (data.has('quality')) stream.quality = data.get('quality') + if (data.has('user_agent')) stream.userAgent = data.get('user_agent') + if (data.has('http_referrer')) stream.httpReferrer = data.get('http_referrer') + if (data.has('channel_name')) stream.name = data.get('channel_name') + + streams.remove((_stream: Stream) => _stream.channel === stream.channel) + streams.add(stream) + + processedIssues.add(data.get('issue_number')) + }) +} + +async function addStreams(loader: IssueLoader) { + const issues = await loader.load({ labels: ['streams:add', 'approved'] }) + issues.forEach((data: Dictionary) => { + if (data.missing('channel_id') || data.missing('stream_url')) return + if (streams.includes((_stream: Stream) => _stream.url === data.get('stream_url'))) return + + const channel = groupedChannels.get(data.get('channel_id')) + + if (!channel) return + + const stream = new Stream({ + channel: data.get('channel_id'), + url: data.get('stream_url'), + label: data.get('label'), + quality: data.get('quality'), + userAgent: data.get('user_agent'), + httpReferrer: data.get('http_referrer'), + filepath: `${channel.country.toLowerCase()}.m3u`, + line: -1, + name: data.get('channel_name') || channel.name + }) + + streams.add(stream) + processedIssues.add(data.get('issue_number')) + }) +} diff --git a/scripts/commands/playlist/validate.js b/scripts/commands/playlist/validate.js deleted file mode 100644 index fe1959584..000000000 --- a/scripts/commands/playlist/validate.js +++ /dev/null @@ -1,106 +0,0 @@ -const { file, logger, api, parser, id } = require('../../core') -const { program } = require('commander') -const chalk = require('chalk') -const _ = require('lodash') - -program.argument('[filepath]', 'Path to file to validate').parse(process.argv) - -async function main() { - const files = program.args.length ? program.args : await file.list('streams/*.m3u') - - logger.info(`loading blocklist...`) - await api.channels.load() - await api.blocklist.load() - - let blocklist = await api.blocklist.all() - blocklist = blocklist - .map(blocked => { - const channel = api.channels.find({ id: blocked.channel }) - if (!channel) return null - return { ...blocked, name: channel.name } - }) - .filter(i => i) - logger.info(`found ${blocklist.length} records`) - - let errors = [] - let warnings = [] - for (const filepath of files) { - if (!filepath.endsWith('.m3u')) continue - - const basename = file.basename(filepath) - const [__, country] = basename.match(/([a-z]{2})(|_.*)\.m3u/i) || [null, null] - - const buffer = {} - const fileLog = [] - try { - const playlist = await parser.parsePlaylist(filepath) - for (const item of playlist.items) { - if (item.tvg.id && !api.channels.find({ id: item.tvg.id })) { - fileLog.push({ - type: 'warning', - line: item.line, - message: `"${item.tvg.id}" is not in the database` - }) - } - - if (item.url && buffer[item.url]) { - fileLog.push({ - type: 'warning', - line: item.line, - message: `"${item.url}" is already on the playlist` - }) - } else { - buffer[item.url] = true - } - - const channel_id = id.generate(item.name, country) - const found = blocklist.find( - blocked => - item.tvg.id.toLowerCase() === blocked.channel.toLowerCase() || - channel_id.toLowerCase() === blocked.channel.toLowerCase() - ) - if (found) { - fileLog.push({ - type: 'error', - line: item.line, - message: `"${found.name}" is on the blocklist due to claims of copyright holders (${found.ref})` - }) - } - } - } catch (err) { - fileLog.push({ - type: 'error', - line: 0, - message: err.message.toLowerCase() - }) - } - - if (fileLog.length) { - logger.info(`\n${chalk.underline(filepath)}`) - - fileLog.forEach(err => { - const position = err.line.toString().padEnd(6, ' ') - const type = err.type.padEnd(9, ' ') - const status = err.type === 'error' ? chalk.red(type) : chalk.yellow(type) - logger.info(` ${chalk.gray(position)}${status}${err.message}`) - }) - - errors = errors.concat(fileLog.filter(e => e.type === 'error')) - warnings = warnings.concat(fileLog.filter(e => e.type === 'warning')) - } - } - - logger.error( - chalk.red( - `\n${errors.length + warnings.length} problems (${errors.length} errors, ${ - warnings.length - } warnings)` - ) - ) - - if (errors.length) { - process.exit(1) - } -} - -main() diff --git a/scripts/commands/playlist/validate.ts b/scripts/commands/playlist/validate.ts new file mode 100644 index 000000000..03bb782f8 --- /dev/null +++ b/scripts/commands/playlist/validate.ts @@ -0,0 +1,132 @@ +import { Logger, Storage, PlaylistParser, Collection, File, Dictionary } from '../../core' +import { Channel, Stream, Blocked } from '../../models' +import { program } from 'commander' +import chalk from 'chalk' +import { transliterate } from 'transliteration' +import _ from 'lodash' +import { DATA_DIR, STREAMS_DIR } from '../../constants' + +program.argument('[filepath]', 'Path to file to validate').parse(process.argv) + +type LogItem = { + type: string + line: number + message: string +} + +async function main() { + const logger = new Logger() + + logger.info(`loading blocklist...`) + const storage = new Storage(DATA_DIR) + const channelsContent = await storage.json('channels.json') + const channels = new Collection(channelsContent).map(data => new Channel(data)) + const blocklistContent = await storage.json('blocklist.json') + const blocklist = new Collection(blocklistContent).map(data => new Blocked(data)) + + logger.info(`found ${blocklist.count()} records`) + + let errors = new Collection() + let warnings = new Collection() + const streamsStorage = new Storage(STREAMS_DIR) + const parser = new PlaylistParser({ storage: streamsStorage }) + const files = program.args.length ? program.args : await streamsStorage.list('**/*.m3u') + for (const filepath of files) { + const file = new File(filepath) + if (file.extension() !== 'm3u') continue + + const [, countryCode] = file.basename().match(/([a-z]{2})(|_.*)\.m3u/i) || [null, ''] + + const log = new Collection() + const buffer = new Dictionary() + try { + const relativeFilepath = filepath.replace(STREAMS_DIR, '') + const playlist = await parser.parse(relativeFilepath) + playlist.streams.forEach((stream: Stream) => { + const channelNotInDatabase = + stream.channel && !channels.first((channel: Channel) => channel.id === stream.channel) + if (channelNotInDatabase) { + log.add({ + type: 'warning', + line: stream.line, + message: `"${stream.channel}" is not in the database` + }) + } + + const alreadyOnPlaylist = stream.url && buffer.has(stream.url) + if (alreadyOnPlaylist) { + log.add({ + type: 'warning', + line: stream.line, + message: `"${stream.url}" is already on the playlist` + }) + } else { + buffer.set(stream.url, true) + } + + const channelId = generateChannelId(stream.name, countryCode) + const blocked = blocklist.first( + blocked => + stream.channel.toLowerCase() === blocked.channel.toLowerCase() || + channelId.toLowerCase() === blocked.channel.toLowerCase() + ) + if (blocked) { + log.add({ + type: 'error', + line: stream.line, + message: `"${stream.name}" is on the blocklist due to claims of copyright holders (${blocked.ref})` + }) + } + }) + } catch (error) { + log.add({ + type: 'error', + line: 0, + message: error.message.toLowerCase() + }) + } + + if (log.notEmpty()) { + logger.info(`\n${chalk.underline(filepath)}`) + + log.forEach((logItem: LogItem) => { + const position = logItem.line.toString().padEnd(6, ' ') + const type = logItem.type.padEnd(9, ' ') + const status = logItem.type === 'error' ? chalk.red(type) : chalk.yellow(type) + + logger.info(` ${chalk.gray(position)}${status}${logItem.message}`) + }) + + errors = errors.concat(log.filter((logItem: LogItem) => logItem.type === 'error')) + warnings = warnings.concat(log.filter((logItem: LogItem) => logItem.type === 'warning')) + } + } + + logger.error( + chalk.red( + `\n${ + errors.count() + warnings.count() + } problems (${errors.count()} errors, ${warnings.count()} warnings)` + ) + ) + + if (errors.count()) { + process.exit(1) + } +} + +main() + +function generateChannelId(name: string, code: string) { + if (!name || !code) return '' + + name = name.replace(/ *\([^)]*\) */g, '') + name = name.replace(/ *\[[^)]*\] */g, '') + name = name.replace(/\+/gi, 'Plus') + name = name.replace(/[^a-z\d]+/gi, '') + name = name.trim() + name = transliterate(name) + code = code.toLowerCase() + + return `${name}.${code}` +} diff --git a/scripts/commands/readme/update.js b/scripts/commands/readme/update.js deleted file mode 100644 index 0d0c05b56..000000000 --- a/scripts/commands/readme/update.js +++ /dev/null @@ -1,143 +0,0 @@ -const { file, markdown, parser, logger, api } = require('../../core') -const { create: createTable } = require('../../core/table') -const { program } = require('commander') - -const LOGS_DIR = process.env.LOGS_DIR || 'scripts/tmp/logs/generators' - -const options = program - .option('-c, --config ', 'Set path to config file', '.readme/config.json') - .parse(process.argv) - .opts() - -async function main() { - await createCategoryTable() - await createCountryTable() - await createLanguageTable() - await createRegionTable() - await updateReadme() -} - -main() - -async function createCategoryTable() { - logger.info('creating category table...') - const rows = [] - await api.categories.load() - const items = await parser.parseLogs(`${LOGS_DIR}/categories.log`) - for (const item of items) { - const id = file.getFilename(item.filepath) - const category = await api.categories.find({ id }) - rows.push({ - name: category ? category.name : 'Undefined', - channels: item.count, - playlist: `https://iptv-org.github.io/iptv/${item.filepath}` - }) - } - - const table = createTable(rows, [ - { name: 'Category' }, - { name: 'Channels', align: 'right' }, - { name: 'Playlist', nowrap: true } - ]) - - await file.create('./.readme/_categories.md', table) -} - -async function createCountryTable() { - logger.info('creating country table...') - const rows = [] - await api.countries.load() - await api.subdivisions.load() - const items = await parser.parseLogs(`${LOGS_DIR}/countries.log`) - for (const item of items) { - const code = file.getFilename(item.filepath) - const country = await api.countries.find({ code: code.toUpperCase() }) - if (country) { - rows.push({ - name: `${country.flag} ${country.name}`, - channels: item.count, - playlist: `https://iptv-org.github.io/iptv/${item.filepath}` - }) - } else if (code === 'int') { - rows.push({ - name: `๐ŸŒ International`, - channels: item.count, - playlist: `https://iptv-org.github.io/iptv/${item.filepath}` - }) - } else { - const subdivision = await api.subdivisions.find({ code: code.toUpperCase() }) - if (subdivision) { - rows.push({ - name: `      ${subdivision.name}`, - channels: item.count, - playlist: `https://iptv-org.github.io/iptv/${item.filepath}` - }) - } - } - } - - const table = createTable(rows, [ - { name: 'Country' }, - { name: 'Channels', align: 'right' }, - { name: 'Playlist', nowrap: true } - ]) - - await file.create('./.readme/_countries.md', table) -} - -async function createLanguageTable() { - logger.info('creating language table...') - const rows = [] - await api.languages.load() - const items = await parser.parseLogs(`${LOGS_DIR}/languages.log`) - for (const item of items) { - const code = file.getFilename(item.filepath) - const language = await api.languages.find({ code }) - rows.push({ - name: language ? language.name : 'Undefined', - channels: item.count, - playlist: `https://iptv-org.github.io/iptv/${item.filepath}` - }) - } - - const table = createTable(rows, [ - { name: 'Language', align: 'left' }, - { name: 'Channels', align: 'right' }, - { name: 'Playlist', align: 'left', nowrap: true } - ]) - - await file.create('./.readme/_languages.md', table) -} - -async function createRegionTable() { - logger.info('creating region table...') - const rows = [] - await api.regions.load() - const items = await parser.parseLogs(`${LOGS_DIR}/regions.log`) - for (const item of items) { - const code = file.getFilename(item.filepath) - const region = await api.regions.find({ code: code.toUpperCase() }) - if (region) { - rows.push({ - name: region.name, - channels: item.count, - playlist: `https://iptv-org.github.io/iptv/${item.filepath}` - }) - } - } - - const table = createTable(rows, [ - { name: 'Region', align: 'left' }, - { name: 'Channels', align: 'right' }, - { name: 'Playlist', align: 'left', nowrap: true } - ]) - - await file.create('./.readme/_regions.md', table) -} - -async function updateReadme() { - logger.info('updating readme.md...') - const config = require(file.resolve(options.config)) - await file.createDir(file.dirname(config.build)) - await markdown.compile(options.config) -} diff --git a/scripts/commands/readme/update.ts b/scripts/commands/readme/update.ts new file mode 100644 index 000000000..5dc06ae98 --- /dev/null +++ b/scripts/commands/readme/update.ts @@ -0,0 +1,24 @@ +import { CategoryTable, CountryTable, LanguageTable, RegionTable } from '../../tables' +import { Logger, Markdown } from '../../core' +import { README_DIR } from '../../constants' +import path from 'path' + +async function main() { + const logger = new Logger() + + logger.info('creating category table...') + await new CategoryTable().make() + logger.info('creating country table...') + await new CountryTable().make() + logger.info('creating language table...') + await new LanguageTable().make() + logger.info('creating region table...') + await new RegionTable().make() + + logger.info('updating readme.md...') + const configPath = path.join(README_DIR, 'config.json') + const readme = new Markdown(configPath) + readme.compile() +} + +main() diff --git a/scripts/commands/report/create.js b/scripts/commands/report/create.js deleted file mode 100644 index df29fb360..000000000 --- a/scripts/commands/report/create.js +++ /dev/null @@ -1,106 +0,0 @@ -const { api } = require('../../core') -const { Octokit } = require('@octokit/core') -const { paginateRest } = require('@octokit/plugin-paginate-rest') -const CustomOctokit = Octokit.plugin(paginateRest) -const _ = require('lodash') - -const octokit = new CustomOctokit() - -const DATA_DIR = process.env.DATA_DIR || './tmp/data' -const OWNER = 'iptv-org' -const REPO = 'iptv' - -async function main() { - try { - await api.channels.load() - let channels = await api.channels.all() - channels = _.keyBy(channels, 'id') - - await api.blocklist.load() - let blocklist = await api.blocklist.all() - blocklist = _.keyBy(blocklist, 'channel') - - await api.streams.load() - let streams = await api.streams.all() - streams = _.keyBy(streams, 'channel') - - const channelRequests = await loadChannelRequests() - const buffer = {} - const report = channelRequests.map(r => { - let result = { - issueNumber: r.issue.number, - channelId: r.channel.id || undefined, - status: undefined - } - - if (!r.channel || !r.channel.id) result.status = 'error' - else if (blocklist[r.channel.id]) result.status = 'blocked' - else if (!channels[r.channel.id]) result.status = 'invalid_id' - else if (streams[r.channel.id]) result.status = 'fullfilled' - else if (buffer[r.channel.id] && !r.channel.url) result.status = 'duplicate' - else result.status = 'pending' - - buffer[r.channel.id] = true - - return result - }) - console.table(report) - } catch (err) { - console.log(err.message) - } -} - -main() - -async function loadChannelRequests() { - const issues = await fetchIssues('channel request') - - return issues.map(parseIssue) -} - -async function fetchIssues(labels) { - const issues = await octokit.paginate('GET /repos/{owner}/{repo}/issues', { - owner: OWNER, - repo: REPO, - per_page: 100, - labels, - direction: 'asc', - headers: { - 'X-GitHub-Api-Version': '2022-11-28' - } - }) - - return issues -} - -function parseIssue(issue) { - const buffer = {} - const channel = {} - const fields = { - 'Channel ID (required)': 'id', - 'Channel ID': 'id', - 'Stream URL (optional)': 'url', - 'Stream URL': 'url', - 'Notes (optional)': 'notes', - Notes: 'notes' - } - - const matches = issue.body.match(/### ([^\r\n]+)\s+([^\r\n]+)/g) - - if (!matches) return { issue, channel: null } - - matches.forEach(item => { - const [, fieldLabel, value] = item.match(/### ([^\r\n]+)\s+([^\r\n]+)/) - const field = fields[fieldLabel] - - if (!field) return - - buffer[field] = value === '_No response_' ? undefined : value.trim() - }) - - for (let field in buffer) { - channel[field] = buffer[field] - } - - return { issue, channel } -} diff --git a/scripts/commands/report/create.ts b/scripts/commands/report/create.ts new file mode 100644 index 000000000..6194449fd --- /dev/null +++ b/scripts/commands/report/create.ts @@ -0,0 +1,53 @@ +import { DATA_DIR } from '../../constants' +import { Collection, Dictionary, IssueLoader, Storage } from '../../core' +import { Blocked, Channel, Stream } from '../../models' + +async function main() { + const loader = new IssueLoader() + + const storage = new Storage(DATA_DIR) + + const channelsContent = await storage.json('channels.json') + const groupedChannels = new Collection(channelsContent) + .map(data => new Channel(data)) + .groupBy((channel: Channel) => channel.id) + + const streamsContent = await storage.json('streams.json') + const groupedStreams = new Collection(streamsContent) + .map(data => new Stream(data)) + .groupBy((stream: Stream) => stream.url) + + const blocklistContent = await storage.json('blocklist.json') + const groupedBlocklist = new Collection(blocklistContent) + .map(data => new Blocked(data)) + .groupBy((blocked: Blocked) => blocked.channel) + + const issues = await loader.load({ labels: ['streams:add'] }) + + const buffer = new Dictionary() + const report = issues.map(data => { + const channelId = data.get('channel_id') || undefined + const streamUrl = data.get('stream_url') || undefined + + const result = new Dictionary({ + issueNumber: data.get('issue_number'), + channelId, + status: undefined + }) + + if (!channelId || !streamUrl) result.set('status', 'error') + else if (groupedBlocklist.has(channelId)) result.set('status', 'blocked') + else if (groupedChannels.missing(channelId)) result.set('status', 'invalid_id') + else if (groupedStreams.has(streamUrl)) result.set('status', 'fullfilled') + else if (buffer.has(streamUrl)) result.set('status', 'duplicate') + else result.set('status', 'pending') + + buffer.set(streamUrl, true) + + return result.data() + }) + + console.table(report.all()) +} + +main() diff --git a/scripts/constants.ts b/scripts/constants.ts new file mode 100644 index 000000000..7609d051f --- /dev/null +++ b/scripts/constants.ts @@ -0,0 +1,11 @@ +export const ROOT_DIR = process.env.ROOT_DIR || './' +export const STREAMS_DIR = process.env.STREAMS_DIR || './streams' +export const PUBLIC_DIR = process.env.PUBLIC_DIR || './.gh-pages' +export const README_DIR = process.env.README_DIR || './.readme' +export const API_DIR = process.env.API_DIR || './.api' +export const DATA_DIR = process.env.DATA_DIR || './temp/data' +export const LOGS_DIR = process.env.LOGS_DIR || './temp/logs' +export const DB_DIR = process.env.DB_DIR || './temp/database' +export const TESTING = process.env.NODE_ENV === 'test' ? true : false +export const OWNER = 'iptv-org' +export const REPO = 'iptv' diff --git a/scripts/core/api.js b/scripts/core/api.js deleted file mode 100644 index abf6cf04b..000000000 --- a/scripts/core/api.js +++ /dev/null @@ -1,41 +0,0 @@ -const _ = require('lodash') -const file = require('./file') - -const DATA_DIR = process.env.DATA_DIR || './scripts/tmp/data' - -class API { - constructor(filepath) { - this.filepath = file.resolve(filepath) - } - - async load() { - const data = await file.read(this.filepath) - this.collection = JSON.parse(data) - } - - find(query) { - return _.find(this.collection, query) - } - - filter(query) { - return _.filter(this.collection, query) - } - - all() { - return this.collection - } -} - -const api = {} - -api.channels = new API(`${DATA_DIR}/channels.json`) -api.streams = new API(`${DATA_DIR}/streams.json`) -api.countries = new API(`${DATA_DIR}/countries.json`) -api.guides = new API(`${DATA_DIR}/guides.json`) -api.categories = new API(`${DATA_DIR}/categories.json`) -api.languages = new API(`${DATA_DIR}/languages.json`) -api.regions = new API(`${DATA_DIR}/regions.json`) -api.blocklist = new API(`${DATA_DIR}/blocklist.json`) -api.subdivisions = new API(`${DATA_DIR}/subdivisions.json`) - -module.exports = api diff --git a/scripts/core/checker.js b/scripts/core/checker.js deleted file mode 100644 index 014a92246..000000000 --- a/scripts/core/checker.js +++ /dev/null @@ -1,19 +0,0 @@ -const IPTVChecker = require('iptv-checker') - -const checker = {} - -checker.check = async function (item, config) { - const ic = new IPTVChecker(config) - const result = await ic.checkStream({ url: item.url, http: item.http }) - - return { - _id: item._id, - url: item.url, - http: item.http, - error: !result.status.ok ? { code: result.status.code, message: result.status.message } : null, - streams: result.status.ok ? result.status.metadata.streams : [], - requests: result.status.ok ? result.status.metadata.requests : [] - } -} - -module.exports = checker diff --git a/scripts/core/collection.ts b/scripts/core/collection.ts new file mode 100644 index 000000000..92836dcb5 --- /dev/null +++ b/scripts/core/collection.ts @@ -0,0 +1,175 @@ +import _ from 'lodash' +import { orderBy, Order } from 'natural-orderby' +import { Dictionary } from './' + +type Iteratee = (value: any, value2?: any) => void + +export class Collection { + _items: any[] + + constructor(items?: any[]) { + this._items = Array.isArray(items) ? items : [] + } + + first(predicate?: Iteratee) { + if (predicate) { + return this._items.find(predicate) + } + + return this._items[0] + } + + last(predicate?: Iteratee) { + if (predicate) { + return _.findLast(this._items, predicate) + } + + return this._items[this._items.length - 1] + } + + find(iteratee: Iteratee): Collection { + const found = this._items.filter(iteratee) + + return new Collection(found) + } + + add(data: any) { + this._items.push(data) + + return this + } + + intersects(collection: Collection): boolean { + return _.intersection(this._items, collection.all()).length > 0 + } + + count() { + return this._items.length + } + + join(separator: string) { + return this._items.join(separator) + } + + indexOf(value: string) { + return this._items.indexOf(value) + } + + push(data: any) { + this.add(data) + } + + uniq() { + const items = _.uniq(this._items) + + return new Collection(items) + } + + reduce(iteratee: Iteratee, accumulator: any) { + const items = _.reduce(this._items, iteratee, accumulator) + + return new Collection(items) + } + + filter(iteratee: Iteratee) { + const items = _.filter(this._items, iteratee) + + return new Collection(items) + } + + forEach(iteratee: Iteratee) { + for (let item of this._items) { + iteratee(item) + } + + return this + } + + remove(iteratee: Iteratee): Collection { + const removed = _.remove(this._items, iteratee) + + return new Collection(removed) + } + + concat(collection: Collection) { + const items = this._items.concat(collection._items) + + return new Collection(items) + } + + isEmpty(): boolean { + return this._items.length === 0 + } + + notEmpty(): boolean { + return this._items.length > 0 + } + + sort() { + const items = this._items.sort() + + return new Collection(items) + } + + orderBy(iteratees: Iteratee | Iteratee[], orders?: Order | Order[]) { + const items = orderBy(this._items, iteratees, orders) + + return new Collection(items) + } + + keyBy(iteratee: Iteratee) { + const items = _.keyBy(this._items, iteratee) + + return new Dictionary(items) + } + + empty() { + return this._items.length === 0 + } + + includes(value: any) { + if (typeof value === 'function') { + const found = this._items.find(value) + + return !!found + } + + return this._items.includes(value) + } + + missing(value: any) { + if (typeof value === 'function') { + const found = this._items.find(value) + + return !found + } + + return !this._items.includes(value) + } + + uniqBy(iteratee: Iteratee) { + const items = _.uniqBy(this._items, iteratee) + + return new Collection(items) + } + + groupBy(iteratee: Iteratee) { + const object = _.groupBy(this._items, iteratee) + + return new Dictionary(object) + } + + map(iteratee: Iteratee) { + const items = this._items.map(iteratee) + + return new Collection(items) + } + + all() { + return this._items + } + + toJSON() { + return JSON.stringify(this._items) + } +} diff --git a/scripts/core/database.ts b/scripts/core/database.ts new file mode 100644 index 000000000..c2d231320 --- /dev/null +++ b/scripts/core/database.ts @@ -0,0 +1,22 @@ +import Datastore from '@seald-io/nedb' +import * as path from 'path' + +export class Database { + rootDir: string + + constructor(rootDir: string) { + this.rootDir = rootDir + } + + async load(filepath: string) { + const absFilepath = path.join(this.rootDir, filepath) + + return new Datastore({ + filename: path.resolve(absFilepath), + autoload: true, + onload: (error: Error): any => { + if (error) console.error(error.message) + } + }) + } +} diff --git a/scripts/core/date.js b/scripts/core/date.js deleted file mode 100644 index 9872b5a41..000000000 --- a/scripts/core/date.js +++ /dev/null @@ -1,12 +0,0 @@ -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') - -dayjs.extend(utc) - -const date = {} - -date.utc = d => { - return dayjs.utc(d) -} - -module.exports = date diff --git a/scripts/core/db.js b/scripts/core/db.js deleted file mode 100644 index 6d016e816..000000000 --- a/scripts/core/db.js +++ /dev/null @@ -1,82 +0,0 @@ -const nedb = require('nedb-promises') -const fs = require('fs-extra') -const file = require('./file') - -const DB_DIR = process.env.DB_DIR || './scripts/tmp/database' - -fs.ensureDirSync(DB_DIR) - -class Database { - constructor(filepath) { - this.filepath = filepath - } - - load() { - this.db = nedb.create({ - filename: file.resolve(this.filepath), - autoload: true, - onload: err => { - if (err) console.error(err) - }, - compareStrings: (a, b) => { - a = a.replace(/\s/g, '_') - b = b.replace(/\s/g, '_') - - return a.localeCompare(b, undefined, { - sensitivity: 'accent', - numeric: true - }) - } - }) - } - - removeIndex(field) { - return this.db.removeIndex(field) - } - - addIndex(options) { - return this.db.ensureIndex(options) - } - - compact() { - return this.db.persistence.compactDatafile() - } - - stopAutocompact() { - return this.db.persistence.stopAutocompaction() - } - - reset() { - return file.clear(this.filepath) - } - - count(query) { - return this.db.count(query) - } - - insert(doc) { - return this.db.insert(doc) - } - - update(query, update) { - return this.db.update(query, update) - } - - find(query) { - return this.db.find(query) - } - - all() { - return this.find({}) - } - - remove(query, options) { - return this.db.remove(query, options) - } -} - -const db = {} - -db.streams = new Database(`${DB_DIR}/streams.db`) - -module.exports = db diff --git a/scripts/core/dictionary.ts b/scripts/core/dictionary.ts new file mode 100644 index 000000000..0058f58e4 --- /dev/null +++ b/scripts/core/dictionary.ts @@ -0,0 +1,31 @@ +export class Dictionary { + dict: any + + constructor(dict?: any) { + this.dict = dict || {} + } + + set(key: string, value: any) { + this.dict[key] = value + } + + has(key: string): boolean { + return !!this.dict[key] + } + + missing(key: string): boolean { + return !this.dict[key] + } + + get(key: string): any { + return this.dict[key] ? this.dict[key] : undefined + } + + keys(): string[] { + return Object.keys(this.dict) + } + + data() { + return this.dict + } +} diff --git a/scripts/core/file.js b/scripts/core/file.js deleted file mode 100644 index b36db5ee3..000000000 --- a/scripts/core/file.js +++ /dev/null @@ -1,70 +0,0 @@ -const { create: createPlaylist } = require('./playlist') -const store = require('./store') -const path = require('path') -const glob = require('glob') -const fs = require('fs-extra') -const _ = require('lodash') - -const file = {} - -file.list = function (pattern) { - return new Promise(resolve => { - glob(pattern, function (err, files) { - resolve(files) - }) - }) -} - -file.getFilename = function (filepath) { - return path.parse(filepath).name -} - -file.createDir = async function (dir) { - if (await file.exists(dir)) return - - return fs.mkdir(dir, { recursive: true }).catch(console.error) -} - -file.exists = function (filepath) { - return fs.exists(path.resolve(filepath)) -} - -file.read = function (filepath) { - return fs.readFile(path.resolve(filepath), { encoding: 'utf8' }).catch(console.error) -} - -file.append = function (filepath, data) { - return fs.appendFile(path.resolve(filepath), data).catch(console.error) -} - -file.create = function (filepath, data = '') { - filepath = path.resolve(filepath) - const dir = path.dirname(filepath) - - return file - .createDir(dir) - .then(() => fs.writeFile(filepath, data, { encoding: 'utf8', flag: 'w' })) - .catch(console.error) -} - -file.write = function (filepath, data = '') { - return fs.writeFile(path.resolve(filepath), data).catch(console.error) -} - -file.clear = function (filepath) { - return file.write(filepath, '') -} - -file.resolve = function (filepath) { - return path.resolve(filepath) -} - -file.dirname = function (filepath) { - return path.dirname(filepath) -} - -file.basename = function (filepath) { - return path.basename(filepath) -} - -module.exports = file diff --git a/scripts/core/file.ts b/scripts/core/file.ts new file mode 100644 index 000000000..f12e8ba6d --- /dev/null +++ b/scripts/core/file.ts @@ -0,0 +1,31 @@ +import * as path from 'path' + +export class File { + filepath: string + content: string + + constructor(filepath: string, content?: string) { + this.filepath = filepath + this.content = content || '' + } + + getFilename() { + return path.parse(this.filepath).name + } + + dirname() { + return path.dirname(this.filepath) + } + + basename() { + return path.basename(this.filepath) + } + + append(data: string) { + this.content = this.content + data + } + + extension() { + return this.filepath.split('.').pop() + } +} diff --git a/scripts/core/generator.js b/scripts/core/generator.js deleted file mode 100644 index 5f22e901b..000000000 --- a/scripts/core/generator.js +++ /dev/null @@ -1,33 +0,0 @@ -const { create: createPlaylist } = require('./playlist') -const generators = require('../generators') -const logger = require('./logger') -const file = require('./file') - -const PUBLIC_DIR = process.env.PUBLIC_DIR || '.gh-pages' -const LOGS_DIR = process.env.LOGS_DIR || 'scripts/tmp/logs/generators' - -const generator = {} - -generator.generate = async function (name, streams = []) { - if (typeof generators[name] === 'function') { - try { - let output = await generators[name].bind()(streams) - output = Array.isArray(output) ? output : [output] - for (const type of output) { - const playlist = createPlaylist(type.items, { public: true }) - await file.create(`${PUBLIC_DIR}/${type.filepath}`, playlist.toString()) - } - await file.create(`${LOGS_DIR}/${name}.log`, output.map(toJSON).join('\n')) - } catch (error) { - logger.error(`generators/${name}.js: ${error.message}`) - } - } -} - -module.exports = generator - -function toJSON(type) { - type.count = type.items.length - delete type.items - return JSON.stringify(type) -} diff --git a/scripts/core/htmlTable.ts b/scripts/core/htmlTable.ts new file mode 100644 index 000000000..12c39bbea --- /dev/null +++ b/scripts/core/htmlTable.ts @@ -0,0 +1,46 @@ +type Column = { + name: string + nowrap?: boolean + align?: string +} + +type DataItem = string[] + +export class HTMLTable { + data: DataItem[] + columns: Column[] + + constructor(data: DataItem[], columns: Column[]) { + this.data = data + this.columns = columns + } + + toString() { + let output = '\n' + + output += ' \n ' + for (let column of this.columns) { + output += `` + } + output += '\n \n' + + output += ' \n' + for (let item of this.data) { + output += ' ' + let i = 0 + for (let prop in item) { + const column = this.columns[i] + let nowrap = column.nowrap ? ` nowrap` : '' + let align = column.align ? ` align="${column.align}"` : '' + output += `${item[prop]}` + i++ + } + output += '\n' + } + output += ' \n' + + output += '
${column.name}
' + + return output + } +} diff --git a/scripts/core/id.js b/scripts/core/id.js deleted file mode 100644 index 9fb7fd7e7..000000000 --- a/scripts/core/id.js +++ /dev/null @@ -1,19 +0,0 @@ -const { transliterate } = require('transliteration') - -const id = {} - -id.generate = function (name, code) { - if (!name || !code) return null - - name = name.replace(/ *\([^)]*\) */g, '') - name = name.replace(/ *\[[^)]*\] */g, '') - name = name.replace(/\+/gi, 'Plus') - name = name.replace(/[^a-z\d]+/gi, '') - name = name.trim() - name = transliterate(name) - code = code.toLowerCase() - - return `${name}.${code}` -} - -module.exports = id diff --git a/scripts/core/index.js b/scripts/core/index.js deleted file mode 100644 index 98fc70ae9..000000000 --- a/scripts/core/index.js +++ /dev/null @@ -1,14 +0,0 @@ -exports.db = require('./db') -exports.logger = require('./logger') -exports.file = require('./file') -exports.timer = require('./timer') -exports.parser = require('./parser') -exports.checker = require('./checker') -exports.generator = require('./generator') -exports.playlist = require('./playlist') -exports.store = require('./store') -exports.markdown = require('./markdown') -exports.api = require('./api') -exports.id = require('./id') -exports.m3u = require('./m3u') -exports.date = require('./date') diff --git a/scripts/core/index.ts b/scripts/core/index.ts new file mode 100644 index 000000000..c090ad9b0 --- /dev/null +++ b/scripts/core/index.ts @@ -0,0 +1,14 @@ +export * from './database' +export * from './logger' +export * from './playlistParser' +export * from './numberParser' +export * from './logParser' +export * from './markdown' +export * from './file' +export * from './collection' +export * from './dictionary' +export * from './storage' +export * from './url' +export * from './issueLoader' +export * from './issueParser' +export * from './htmlTable' diff --git a/scripts/core/issueLoader.ts b/scripts/core/issueLoader.ts new file mode 100644 index 000000000..572e9d789 --- /dev/null +++ b/scripts/core/issueLoader.ts @@ -0,0 +1,46 @@ +import { restEndpointMethods } from '@octokit/plugin-rest-endpoint-methods' +import { paginateRest } from '@octokit/plugin-paginate-rest' +import { Octokit } from '@octokit/core' +import { Collection, IssueParser } from './' +import { TESTING, OWNER, REPO } from '../constants' + +const CustomOctokit = Octokit.plugin(paginateRest, restEndpointMethods) +const octokit = new CustomOctokit() + +export class IssueLoader { + async load({ labels }: { labels: string[] | string }) { + labels = Array.isArray(labels) ? labels.join(',') : labels + let issues: any[] = [] + if (TESTING) { + switch (labels) { + case 'streams:add': + issues = (await import('../../tests/__data__/input/issues/streams_add')).default + break + case 'streams:add,approved': + issues = (await import('../../tests/__data__/input/issues/streams_add_approved')).default + break + case 'streams:edit,approved': + issues = (await import('../../tests/__data__/input/issues/streams_edit_approved')).default + break + case 'streams:remove,approved': + issues = (await import('../../tests/__data__/input/issues/streams_remove_approved')) + .default + break + } + } else { + issues = await octokit.paginate(octokit.rest.issues.listForRepo, { + owner: OWNER, + repo: REPO, + per_page: 100, + labels, + headers: { + 'X-GitHub-Api-Version': '2022-11-28' + } + }) + } + + const parser = new IssueParser() + + return new Collection(issues).map(parser.parse) + } +} diff --git a/scripts/core/issueParser.ts b/scripts/core/issueParser.ts new file mode 100644 index 000000000..c97a7a7f2 --- /dev/null +++ b/scripts/core/issueParser.ts @@ -0,0 +1,48 @@ +import { Dictionary } from './' + +export class IssueParser { + parse(issue: any): Dictionary { + const data = new Dictionary() + data.set('issue_number', issue.number) + + const idDict = new Dictionary({ + 'Channel ID': 'channel_id', + 'Channel ID (required)': 'channel_id', + 'Broken Link': 'stream_url', + 'Stream URL': 'stream_url', + 'Stream URL (optional)': 'stream_url', + 'Stream URL (required)': 'stream_url', + Label: 'label', + Quality: 'quality', + 'Channel Name': 'channel_name', + 'HTTP User-Agent': 'user_agent', + 'HTTP Referrer': 'http_referrer', + Reason: 'reason', + 'What happened to the stream?': 'reason', + 'Possible Replacement (optional)': 'possible_replacement', + Notes: 'notes', + 'Notes (optional)': 'notes' + }) + + const fields = issue.body.split('###') + + if (!fields.length) return data + + fields.forEach((field: string) => { + let [_label, , _value] = field.split(/\r?\n/) + _label = _label ? _label.trim() : '' + _value = _value ? _value.trim() : '' + + if (!_label || !_value) return data + + const id: string = idDict.get(_label) + const value: string = _value === '_No response_' || _value === 'None' ? '' : _value + + if (!id) return + + data.set(id, value) + }) + + return data + } +} diff --git a/scripts/core/logParser.ts b/scripts/core/logParser.ts new file mode 100644 index 000000000..51b739fc9 --- /dev/null +++ b/scripts/core/logParser.ts @@ -0,0 +1,13 @@ +export type LogItem = { + filepath: string + count: number +} + +export class LogParser { + parse(content: string): any[] { + if (!content) return [] + const lines = content.split('\n') + + return lines.map(line => (line ? JSON.parse(line) : null)).filter(l => l) + } +} diff --git a/scripts/core/logger.js b/scripts/core/logger.js deleted file mode 100644 index 2be5eda2d..000000000 --- a/scripts/core/logger.js +++ /dev/null @@ -1,13 +0,0 @@ -const { Signale } = require('signale') - -const options = {} - -const logger = new Signale(options) - -logger.config({ - displayLabel: false, - displayScope: false, - displayBadge: false -}) - -module.exports = logger diff --git a/scripts/core/logger.ts b/scripts/core/logger.ts new file mode 100644 index 000000000..0305ddd00 --- /dev/null +++ b/scripts/core/logger.ts @@ -0,0 +1,9 @@ +import signale from 'signale' + +const { Signale } = signale + +export class Logger extends Signale { + constructor(options?: any) { + super(options) + } +} diff --git a/scripts/core/m3u.js b/scripts/core/m3u.js deleted file mode 100644 index 5b93f22ed..000000000 --- a/scripts/core/m3u.js +++ /dev/null @@ -1,34 +0,0 @@ -const m3u = {} - -m3u.create = function (links = [], header = {}) { - let output = `#EXTM3U` - for (const attr in header) { - const value = header[attr] - output += ` ${attr}="${value}"` - } - output += `\n` - - for (const link of links) { - output += `#EXTINF:-1` - for (const name in link.attrs) { - const value = link.attrs[name] - if (value !== undefined) { - output += ` ${name}="${value}"` - } - } - output += `,${link.title}\n` - - for (const name in link.vlcOpts) { - const value = link.vlcOpts[name] - if (value !== undefined) { - output += `#EXTVLCOPT:${name}=${value}\n` - } - } - - output += `${link.url}\n` - } - - return output -} - -module.exports = m3u diff --git a/scripts/core/markdown.js b/scripts/core/markdown.js deleted file mode 100644 index 2729f0b7b..000000000 --- a/scripts/core/markdown.js +++ /dev/null @@ -1,10 +0,0 @@ -const markdownInclude = require('markdown-include') -const file = require('./file') - -const markdown = {} - -markdown.compile = function (filepath) { - markdownInclude.compileFiles(file.resolve(filepath)) -} - -module.exports = markdown diff --git a/scripts/core/markdown.ts b/scripts/core/markdown.ts new file mode 100644 index 000000000..b43b5608e --- /dev/null +++ b/scripts/core/markdown.ts @@ -0,0 +1,13 @@ +import markdownInclude from 'markdown-include' + +export class Markdown { + filepath: string + + constructor(filepath: string) { + this.filepath = filepath + } + + compile() { + markdownInclude.compileFiles(this.filepath) + } +} diff --git a/scripts/core/numberParser.ts b/scripts/core/numberParser.ts new file mode 100644 index 000000000..187cc7469 --- /dev/null +++ b/scripts/core/numberParser.ts @@ -0,0 +1,10 @@ +export default class NumberParser { + async parse(number: string) { + const parsed = parseInt(number) + if (isNaN(parsed)) { + throw new Error('numberParser:parse() Input value is not a number') + } + + return parsed + } +} diff --git a/scripts/core/parser.js b/scripts/core/parser.js deleted file mode 100644 index ac0e31a72..000000000 --- a/scripts/core/parser.js +++ /dev/null @@ -1,30 +0,0 @@ -const ipp = require('iptv-playlist-parser') -const logger = require('./logger') -const file = require('./file') - -const parser = {} - -parser.parsePlaylist = async function (filepath) { - const content = await file.read(filepath) - - return ipp.parse(content) -} - -parser.parseLogs = async function (filepath) { - const content = await file.read(filepath) - if (!content) return [] - const lines = content.split('\n') - - return lines.map(line => (line ? JSON.parse(line) : null)).filter(l => l) -} - -parser.parseNumber = function (string) { - const parsed = parseInt(string) - if (isNaN(parsed)) { - throw new Error('scripts/core/parser.js:parseNumber() Input value is not a number') - } - - return parsed -} - -module.exports = parser diff --git a/scripts/core/playlist.js b/scripts/core/playlist.js deleted file mode 100644 index 4c7888a8d..000000000 --- a/scripts/core/playlist.js +++ /dev/null @@ -1,53 +0,0 @@ -const store = require('./store') -const m3u = require('./m3u') -const _ = require('lodash') - -const playlist = {} - -class Playlist { - constructor(items = [], options = {}) { - this.header = {} - - this.links = [] - for (const item of items) { - const stream = store.create(item) - - let attrs - if (options.public) { - attrs = { - 'tvg-id': stream.get('tvg_id'), - 'tvg-logo': stream.get('tvg_logo'), - 'group-title': stream.get('group_title'), - 'user-agent': stream.get('user_agent') || undefined - } - } else { - attrs = { - 'tvg-id': stream.get('tvg_id'), - 'user-agent': stream.get('user_agent') || undefined - } - } - - const vlcOpts = { - 'http-referrer': stream.get('http_referrer') || undefined, - 'http-user-agent': stream.get('user_agent') || undefined - } - - this.links.push({ - url: stream.get('url'), - title: stream.get('title'), - attrs, - vlcOpts - }) - } - } - - toString() { - return m3u.create(this.links, this.header) - } -} - -playlist.create = function (items, options) { - return new Playlist(items, options) -} - -module.exports = playlist diff --git a/scripts/core/playlistParser.ts b/scripts/core/playlistParser.ts new file mode 100644 index 000000000..96ab8b2b3 --- /dev/null +++ b/scripts/core/playlistParser.ts @@ -0,0 +1,45 @@ +import parser from 'iptv-playlist-parser' +import { Playlist, Stream } from '../models' +import { Collection, Storage } from './' + +export class PlaylistParser { + storage: Storage + + constructor({ storage }: { storage: Storage }) { + this.storage = storage + } + + async parse(filepath: string): Promise { + const streams = new Collection() + + const content = await this.storage.read(filepath) + const parsed: parser.Playlist = parser.parse(content) + + parsed.items.forEach((item: parser.PlaylistItem) => { + const { name, label, quality } = parseTitle(item.name) + const stream = new Stream({ + channel: item.tvg.id, + name, + label, + quality, + filepath, + line: item.line, + url: item.url, + httpReferrer: item.http.referrer, + userAgent: item.http['user-agent'] + }) + + streams.add(stream) + }) + + return new Playlist(streams) + } +} + +function parseTitle(title: string): { name: string; label: string; quality: string } { + const [, label] = title.match(/ \[(.*)\]$/) || [null, ''] + const [, quality] = title.match(/ \(([0-9]+p)\)/) || [null, ''] + const name = title.replace(` (${quality})`, '').replace(` [${label}]`, '') + + return { name, label, quality } +} diff --git a/scripts/core/storage.ts b/scripts/core/storage.ts new file mode 100644 index 000000000..e1831a625 --- /dev/null +++ b/scripts/core/storage.ts @@ -0,0 +1,82 @@ +import { File, Collection } from './' +import * as path from 'path' +import fs from 'fs-extra' +import { glob } from 'glob' + +export class Storage { + rootDir: string + + constructor(rootDir?: string) { + this.rootDir = rootDir || './' + } + + list(pattern: string): Promise { + return glob(pattern, { + cwd: this.rootDir + }) + } + + async createDir(dir: string): Promise { + if (await fs.exists(dir)) return + + await fs.mkdir(dir, { recursive: true }).catch(console.error) + } + + async load(filepath: string): Promise { + return this.read(filepath) + } + + async read(filepath: string): Promise { + const absFilepath = path.join(this.rootDir, filepath) + + return await fs.readFile(absFilepath, { encoding: 'utf8' }) + } + + async json(filepath: string): Promise { + const absFilepath = path.join(this.rootDir, filepath) + const content = await fs.readFile(absFilepath, { encoding: 'utf8' }) + + return JSON.parse(content) + } + + async exists(filepath: string): Promise { + const absFilepath = path.join(this.rootDir, filepath) + + return await fs.exists(absFilepath) + } + + async write(filepath: string, data: string = ''): Promise { + const absFilepath = path.join(this.rootDir, filepath) + const dir = path.dirname(absFilepath) + + await this.createDir(dir) + await fs.writeFile(absFilepath, data, { encoding: 'utf8', flag: 'w' }) + } + + async append(filepath: string, data: string = ''): Promise { + const absFilepath = path.join(this.rootDir, filepath) + + await fs.appendFile(absFilepath, data, { encoding: 'utf8', flag: 'w' }) + } + + async clear(filepath: string): Promise { + await this.write(filepath) + } + + async createStream(filepath: string): Promise { + const absFilepath = path.join(this.rootDir, filepath) + const dir = path.dirname(absFilepath) + + await this.createDir(dir) + + return fs.createWriteStream(absFilepath) as unknown as NodeJS.WriteStream + } + + async save(filepath: string, content: string): Promise { + await this.write(filepath, content) + } + + async saveFile(file: File): Promise { + await this.write(file.filepath, file.content) + } +} diff --git a/scripts/core/store.js b/scripts/core/store.js deleted file mode 100644 index c41594403..000000000 --- a/scripts/core/store.js +++ /dev/null @@ -1,56 +0,0 @@ -const _ = require('lodash') -const logger = require('./logger') -const setters = require('../store/setters') -const getters = require('../store/getters') - -module.exports = { - create(state = {}) { - return { - state, - changed: false, - set: function (prop, value) { - const prevState = JSON.stringify(this.state) - - const setter = setters[prop] - if (typeof setter === 'function') { - try { - this.state[prop] = setter.bind()(value) - } catch (error) { - logger.error(`store/setters/${prop}.js: ${error.message}`) - } - } else if (typeof value === 'object') { - this.state[prop] = value[prop] - } else { - this.state[prop] = value - } - - const newState = JSON.stringify(this.state) - if (prevState !== newState) { - this.changed = true - } - - return this - }, - get: function (prop) { - const getter = getters[prop] - if (typeof getter === 'function') { - try { - return getter.bind(this.state)() - } catch (error) { - logger.error(`store/getters/${prop}.js: ${error.message}`) - } - } else { - return prop.split('.').reduce((o, i) => (o ? o[i] : undefined), this.state) - } - }, - has: function (prop) { - const value = this.get(prop) - - return !_.isEmpty(value) - }, - data: function () { - return this.state - } - } - } -} diff --git a/scripts/core/table.js b/scripts/core/table.js deleted file mode 100644 index 563cb9bfa..000000000 --- a/scripts/core/table.js +++ /dev/null @@ -1,32 +0,0 @@ -const table = {} - -table.create = function (data, cols) { - let output = '\n' - - output += ' \n ' - for (let column of cols) { - output += `` - } - output += '\n \n' - - output += ' \n' - for (let item of data) { - output += ' ' - let i = 0 - for (let prop in item) { - const column = cols[i] - let nowrap = column.nowrap ? ` nowrap` : '' - let align = column.align ? ` align="${column.align}"` : '' - output += `${item[prop]}` - i++ - } - output += '\n' - } - output += ' \n' - - output += '
${column.name}
' - - return output -} - -module.exports = table diff --git a/scripts/core/timer.js b/scripts/core/timer.js deleted file mode 100644 index 6e5f381d9..000000000 --- a/scripts/core/timer.js +++ /dev/null @@ -1,29 +0,0 @@ -const { performance } = require('perf_hooks') -const dayjs = require('dayjs') -const duration = require('dayjs/plugin/duration') -const relativeTime = require('dayjs/plugin/relativeTime') - -dayjs.extend(relativeTime) -dayjs.extend(duration) - -const timer = {} - -let t0 = 0 - -timer.start = function () { - t0 = performance.now() -} - -timer.format = function (f) { - let t1 = performance.now() - - return dayjs.duration(t1 - t0).format(f) -} - -timer.humanize = function (suffix = true) { - let t1 = performance.now() - - return dayjs.duration(t1 - t0).humanize(suffix) -} - -module.exports = timer diff --git a/scripts/core/url.js b/scripts/core/url.js deleted file mode 100644 index 939e42493..000000000 --- a/scripts/core/url.js +++ /dev/null @@ -1,11 +0,0 @@ -const normalize = require('normalize-url') - -const url = {} - -url.normalize = function (string) { - const normalized = normalize(string, { stripWWW: false }) - - return decodeURIComponent(normalized).replace(/\s/g, '+') -} - -module.exports = url diff --git a/scripts/core/url.ts b/scripts/core/url.ts new file mode 100644 index 000000000..df6ff4dd8 --- /dev/null +++ b/scripts/core/url.ts @@ -0,0 +1,20 @@ +import normalizeUrl from 'normalize-url' + +export class URL { + url: string + + constructor(url: string) { + this.url = url + } + + normalize(): URL { + const normalized = normalizeUrl(this.url, { stripWWW: false }) + this.url = decodeURIComponent(normalized).replace(/\s/g, '+') + + return this + } + + toString(): string { + return this.url + } +} diff --git a/scripts/generators/categories.js b/scripts/generators/categories.js deleted file mode 100644 index abbfc0cd1..000000000 --- a/scripts/generators/categories.js +++ /dev/null @@ -1,18 +0,0 @@ -const api = require('../core/api') -const _ = require('lodash') - -module.exports = async function (streams = []) { - await api.categories.load() - const categories = await api.categories.all() - - const output = [] - for (const category of categories) { - let items = _.filter(streams, { categories: [{ id: category.id }] }) - output.push({ filepath: `categories/${category.id}.m3u`, items }) - } - - let items = _.filter(streams, stream => !stream.categories.length) - output.push({ filepath: 'categories/undefined.m3u', items }) - - return output -} diff --git a/scripts/generators/categoriesGenerator.ts b/scripts/generators/categoriesGenerator.ts new file mode 100644 index 000000000..48a99107e --- /dev/null +++ b/scripts/generators/categoriesGenerator.ts @@ -0,0 +1,55 @@ +import { Generator } from './generator' +import { Collection, Storage, Logger } from '../core' +import { Stream, Category, Playlist } from '../models' +import { PUBLIC_DIR } from '../constants' + +type CategoriesGeneratorProps = { + streams: Collection + categories: Collection + logger: Logger +} + +export class CategoriesGenerator implements Generator { + streams: Collection + categories: Collection + storage: Storage + logger: Logger + + constructor({ streams, categories, logger }: CategoriesGeneratorProps) { + this.streams = streams + this.categories = categories + this.storage = new Storage(PUBLIC_DIR) + this.logger = logger + } + + async generate() { + const streams = this.streams.orderBy([(stream: Stream) => stream.getTitle()]) + + this.categories.forEach(async (category: Category) => { + let categoryStreams = streams + .filter((stream: Stream) => stream.hasCategory(category)) + .map((stream: Stream) => { + const groupTitle = stream.categories + ? stream.categories + .map((category: Category) => category.name) + .sort() + .join(';') + : '' + stream.groupTitle = groupTitle + + return stream + }) + + const playlist = new Playlist(categoryStreams, { public: true }) + const filepath = `categories/${category.id}.m3u` + await this.storage.save(filepath, playlist.toString()) + this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() })) + }) + + const undefinedStreams = streams.filter((stream: Stream) => stream.noCategories()) + const playlist = new Playlist(undefinedStreams, { public: true }) + const filepath = `categories/undefined.m3u` + await this.storage.save(filepath, playlist.toString()) + this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() })) + } +} diff --git a/scripts/generators/countries.js b/scripts/generators/countries.js deleted file mode 100644 index 10b1b6573..000000000 --- a/scripts/generators/countries.js +++ /dev/null @@ -1,53 +0,0 @@ -const api = require('../core/api') -const _ = require('lodash') - -module.exports = async function (streams = []) { - streams = _.filter(streams, stream => stream.is_nsfw === false) - - await api.countries.load() - const countries = await api.countries.all() - await api.regions.load() - let regions = await api.regions.all() - regions = regions.filter(r => r.code !== 'INT') - await api.subdivisions.load() - const subdivisions = await api.subdivisions.all() - - let output = [] - for (const country of countries) { - let countryRegionCodes = _.filter(regions, { countries: [country.code] }).map( - r => `r/${r.code}` - ) - const countrySubdivisions = _.filter(subdivisions, { country: country.code }) - const countryAreaCodes = countryRegionCodes.concat(countrySubdivisions.map(s => `s/${s.code}`)) - countryAreaCodes.push(`c/${country.code}`) - - let items = _.filter(streams, stream => { - return _.intersection(stream.broadcast_area, countryAreaCodes).length - }) - - output.push({ filepath: `countries/${country.code.toLowerCase()}.m3u`, items }) - - for (let subdivision of countrySubdivisions) { - let subdivisionItems = _.filter(streams, stream => { - return stream.broadcast_area.includes(`s/${subdivision.code}`) - }) - - if (subdivisionItems.length) { - output.push({ - filepath: `subdivisions/${subdivision.code.toLowerCase()}.m3u`, - items: subdivisionItems - }) - } - } - } - - let intItems = _.filter(streams, stream => stream.broadcast_area.includes('r/INT')) - output.push({ - filepath: `countries/int.m3u`, - items: intItems - }) - - output = output.filter(f => f.items.length > 0) - - return output -} diff --git a/scripts/generators/countriesGenerator.ts b/scripts/generators/countriesGenerator.ts new file mode 100644 index 000000000..bd683760a --- /dev/null +++ b/scripts/generators/countriesGenerator.ts @@ -0,0 +1,85 @@ +import { Generator } from './generator' +import { Collection, Storage, Logger } from '../core' +import { Country, Region, Subdivision, Stream, Playlist } from '../models' +import { PUBLIC_DIR } from '../constants' + +type CountriesGeneratorProps = { + streams: Collection + regions: Collection + subdivisions: Collection + countries: Collection + logger: Logger +} + +export class CountriesGenerator implements Generator { + streams: Collection + countries: Collection + regions: Collection + subdivisions: Collection + storage: Storage + logger: Logger + + constructor({ streams, countries, regions, subdivisions, logger }: CountriesGeneratorProps) { + this.streams = streams + this.countries = countries + this.regions = regions + this.subdivisions = subdivisions + this.storage = new Storage(PUBLIC_DIR) + this.logger = logger + } + + async generate(): Promise { + let streams = this.streams + .orderBy([stream => stream.getTitle()]) + .filter((stream: Stream) => stream.isSFW()) + let regions = this.regions.filter((region: Region) => region.code !== 'INT') + + this.countries.forEach(async (country: Country) => { + const countrySubdivisions = this.subdivisions.filter( + (subdivision: Subdivision) => subdivision.country === country.code + ) + + const countrySubdivisionsCodes = countrySubdivisions.map( + (subdivision: Subdivision) => `s/${subdivision.code}` + ) + + const countryAreaCodes = regions + .filter((region: Region) => region.countries.includes(country.code)) + .map((region: Region) => `r/${region.code}`) + .concat(countrySubdivisionsCodes) + .add(`c/${country.code}`) + + const countryStreams = streams.filter(stream => + stream.broadcastArea.intersects(countryAreaCodes) + ) + + if (countryStreams.isEmpty()) return + + const playlist = new Playlist(countryStreams, { public: true }) + const filepath = `countries/${country.code.toLowerCase()}.m3u` + await this.storage.save(filepath, playlist.toString()) + this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() })) + + countrySubdivisions.forEach(async (subdivision: Subdivision) => { + const subdivisionStreams = streams.filter(stream => + stream.broadcastArea.includes(`s/${subdivision.code}`) + ) + + if (subdivisionStreams.isEmpty()) return + + const playlist = new Playlist(subdivisionStreams, { public: true }) + const filepath = `subdivisions/${subdivision.code.toLowerCase()}.m3u` + await this.storage.save(filepath, playlist.toString()) + this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() })) + }) + }) + + const internationalStreams = streams.filter(stream => stream.isInternational()) + if (internationalStreams.notEmpty()) { + const playlist = new Playlist(internationalStreams, { public: true }) + const filepath = `countries/int.m3u` + await this.storage.save(filepath, playlist.toString()) + this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() })) + } + } +} diff --git a/scripts/generators/generator.ts b/scripts/generators/generator.ts new file mode 100644 index 000000000..4220df727 --- /dev/null +++ b/scripts/generators/generator.ts @@ -0,0 +1,3 @@ +export interface Generator { + generate(): Promise +} diff --git a/scripts/generators/index.js b/scripts/generators/index.js deleted file mode 100644 index 50e75cfeb..000000000 --- a/scripts/generators/index.js +++ /dev/null @@ -1,10 +0,0 @@ -exports.categories = require('./categories') -exports.countries = require('./countries') -exports.languages = require('./languages') -exports.regions = require('./regions') -exports.index_m3u = require('./index_m3u') -exports.index_nsfw_m3u = require('./index_nsfw_m3u') -exports.index_category_m3u = require('./index_category_m3u') -exports.index_country_m3u = require('./index_country_m3u') -exports.index_language_m3u = require('./index_language_m3u') -exports.index_region_m3u = require('./index_region_m3u') diff --git a/scripts/generators/index.ts b/scripts/generators/index.ts new file mode 100644 index 000000000..f2825f0c4 --- /dev/null +++ b/scripts/generators/index.ts @@ -0,0 +1,10 @@ +export * from './categoriesGenerator' +export * from './countriesGenerator' +export * from './languagesGenerator' +export * from './regionsGenerator' +export * from './indexGenerator' +export * from './indexNsfwGenerator' +export * from './indexCategoryGenerator' +export * from './indexCountryGenerator' +export * from './indexLanguageGenerator' +export * from './indexRegionGenerator' diff --git a/scripts/generators/indexCategoryGenerator.ts b/scripts/generators/indexCategoryGenerator.ts new file mode 100644 index 000000000..733eb9186 --- /dev/null +++ b/scripts/generators/indexCategoryGenerator.ts @@ -0,0 +1,53 @@ +import { Generator } from './generator' +import { Collection, Storage, Logger } from '../core' +import { Stream, Playlist, Category } from '../models' +import { PUBLIC_DIR } from '../constants' + +type IndexCategoryGeneratorProps = { + streams: Collection + logger: Logger +} + +export class IndexCategoryGenerator implements Generator { + streams: Collection + storage: Storage + logger: Logger + + constructor({ streams, logger }: IndexCategoryGeneratorProps) { + this.streams = streams + this.storage = new Storage(PUBLIC_DIR) + this.logger = logger + } + + async generate(): Promise { + const streams = this.streams + .orderBy(stream => stream.getTitle()) + .filter(stream => stream.isSFW()) + + let groupedStreams = new Collection() + streams.forEach((stream: Stream) => { + if (stream.noCategories()) { + const streamClone = stream.clone() + streamClone.groupTitle = 'Undefined' + groupedStreams.add(streamClone) + return + } + + stream.categories.forEach((category: Category) => { + const streamClone = stream.clone() + streamClone.groupTitle = category.name + groupedStreams.push(streamClone) + }) + }) + + groupedStreams = groupedStreams.orderBy(stream => { + if (stream.groupTitle === 'Undefined') return 'ZZ' + return stream.groupTitle + }) + + const playlist = new Playlist(groupedStreams, { public: true }) + const filepath = 'index.category.m3u' + await this.storage.save(filepath, playlist.toString()) + this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() })) + } +} diff --git a/scripts/generators/indexCountryGenerator.ts b/scripts/generators/indexCountryGenerator.ts new file mode 100644 index 000000000..f48945047 --- /dev/null +++ b/scripts/generators/indexCountryGenerator.ts @@ -0,0 +1,104 @@ +import { Generator } from './generator' +import { Collection, Storage, Logger } from '../core' +import { Stream, Playlist, Country, Subdivision, Region } from '../models' +import { PUBLIC_DIR } from '../constants' + +type IndexCountryGeneratorProps = { + streams: Collection + regions: Collection + countries: Collection + subdivisions: Collection + logger: Logger +} + +export class IndexCountryGenerator implements Generator { + streams: Collection + countries: Collection + regions: Collection + subdivisions: Collection + storage: Storage + logger: Logger + + constructor({ streams, regions, countries, subdivisions, logger }: IndexCountryGeneratorProps) { + this.streams = streams + this.countries = countries + this.regions = regions + this.subdivisions = subdivisions + this.storage = new Storage(PUBLIC_DIR) + this.logger = logger + } + + async generate(): Promise { + let groupedStreams = new Collection() + + this.streams + .orderBy(stream => stream.getTitle()) + .filter(stream => stream.isSFW()) + .forEach(stream => { + if (stream.noBroadcastArea()) { + const streamClone = stream.clone() + streamClone.groupTitle = 'Undefined' + groupedStreams.add(streamClone) + return + } + + if (stream.isInternational()) { + const streamClone = stream.clone() + streamClone.groupTitle = 'International' + groupedStreams.add(streamClone) + } + + this.getStreamBroadcastCountries(stream).forEach((country: Country) => { + const streamClone = stream.clone() + streamClone.groupTitle = country.name + groupedStreams.add(streamClone) + }) + }) + + groupedStreams = groupedStreams.orderBy((stream: Stream) => { + if (stream.groupTitle === 'International') return 'ZZ' + if (stream.groupTitle === 'Undefined') return 'ZZZ' + + return stream.groupTitle + }) + + const playlist = new Playlist(groupedStreams, { public: true }) + const filepath = 'index.country.m3u' + await this.storage.save(filepath, playlist.toString()) + this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() })) + } + + getStreamBroadcastCountries(stream: Stream) { + const groupedRegions = this.regions.keyBy((region: Region) => region.code) + const groupedCountries = this.countries.keyBy((country: Country) => country.code) + const groupedSubdivisions = this.subdivisions.keyBy( + (subdivision: Subdivision) => subdivision.code + ) + + let broadcastCountries = new Collection() + + stream.broadcastArea.forEach(broadcastAreaCode => { + const [type, code] = broadcastAreaCode.split('/') + switch (type) { + case 'c': + broadcastCountries.add(code) + break + case 'r': + if (code !== 'INT' && groupedRegions.has(code)) { + broadcastCountries = broadcastCountries.concat(groupedRegions.get(code).countries) + } + break + case 's': + if (groupedSubdivisions.has(code)) { + broadcastCountries.add(groupedSubdivisions.get(code).country) + } + break + } + }) + + return broadcastCountries + .uniq() + .map(code => groupedCountries.get(code)) + .filter(Boolean) + } +} diff --git a/scripts/generators/indexGenerator.ts b/scripts/generators/indexGenerator.ts new file mode 100644 index 000000000..9a8754db9 --- /dev/null +++ b/scripts/generators/indexGenerator.ts @@ -0,0 +1,32 @@ +import { Collection, Logger, Storage } from '../core' +import { Stream, Playlist } from '../models' +import { Generator } from './generator' +import { PUBLIC_DIR } from '../constants' + +type IndexGeneratorProps = { + streams: Collection + logger: Logger +} + +export class IndexGenerator implements Generator { + streams: Collection + storage: Storage + logger: Logger + + constructor({ streams, logger }: IndexGeneratorProps) { + this.streams = streams + this.storage = new Storage(PUBLIC_DIR) + this.logger = logger + } + + async generate(): Promise { + const sfwStreams = this.streams + .orderBy(stream => stream.getTitle()) + .filter((stream: Stream) => stream.isSFW()) + + const playlist = new Playlist(sfwStreams, { public: true }) + const filepath = 'index.m3u' + await this.storage.save(filepath, playlist.toString()) + this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() })) + } +} diff --git a/scripts/generators/indexLanguageGenerator.ts b/scripts/generators/indexLanguageGenerator.ts new file mode 100644 index 000000000..692e896dd --- /dev/null +++ b/scripts/generators/indexLanguageGenerator.ts @@ -0,0 +1,52 @@ +import { Generator } from './generator' +import { Collection, Storage, Logger } from '../core' +import { Stream, Playlist, Language } from '../models' +import { PUBLIC_DIR } from '../constants' + +type IndexLanguageGeneratorProps = { + streams: Collection + logger: Logger +} + +export class IndexLanguageGenerator implements Generator { + streams: Collection + storage: Storage + logger: Logger + + constructor({ streams, logger }: IndexLanguageGeneratorProps) { + this.streams = streams + this.storage = new Storage(PUBLIC_DIR) + this.logger = logger + } + + async generate(): Promise { + let groupedStreams = new Collection() + this.streams + .orderBy(stream => stream.getTitle()) + .filter(stream => stream.isSFW()) + .forEach(stream => { + if (stream.noLanguages()) { + const streamClone = stream.clone() + streamClone.groupTitle = 'Undefined' + groupedStreams.add(streamClone) + return + } + + stream.languages.forEach((language: Language) => { + const streamClone = stream.clone() + streamClone.groupTitle = language.name + groupedStreams.add(streamClone) + }) + }) + + groupedStreams = groupedStreams.orderBy((stream: Stream) => { + if (stream.groupTitle === 'Undefined') return 'ZZ' + return stream.groupTitle + }) + + const playlist = new Playlist(groupedStreams, { public: true }) + const filepath = 'index.language.m3u' + await this.storage.save(filepath, playlist.toString()) + this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() })) + } +} diff --git a/scripts/generators/indexNsfwGenerator.ts b/scripts/generators/indexNsfwGenerator.ts new file mode 100644 index 000000000..500d51c9a --- /dev/null +++ b/scripts/generators/indexNsfwGenerator.ts @@ -0,0 +1,30 @@ +import { Collection, Logger, Storage } from '../core' +import { Stream, Playlist } from '../models' +import { Generator } from './generator' +import { PUBLIC_DIR } from '../constants' + +type IndexNsfwGeneratorProps = { + streams: Collection + logger: Logger +} + +export class IndexNsfwGenerator implements Generator { + streams: Collection + storage: Storage + logger: Logger + + constructor({ streams, logger }: IndexNsfwGeneratorProps) { + this.streams = streams + this.storage = new Storage(PUBLIC_DIR) + this.logger = logger + } + + async generate(): Promise { + const allStreams = this.streams.orderBy((stream: Stream) => stream.getTitle()) + + const playlist = new Playlist(allStreams, { public: true }) + const filepath = 'index.nsfw.m3u' + await this.storage.save(filepath, playlist.toString()) + this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() })) + } +} diff --git a/scripts/generators/indexRegionGenerator.ts b/scripts/generators/indexRegionGenerator.ts new file mode 100644 index 000000000..ebebb85e6 --- /dev/null +++ b/scripts/generators/indexRegionGenerator.ts @@ -0,0 +1,83 @@ +import { Generator } from './generator' +import { Collection, Storage, Logger } from '../core' +import { Stream, Playlist, Region } from '../models' +import { PUBLIC_DIR } from '../constants' + +type IndexRegionGeneratorProps = { + streams: Collection + regions: Collection + logger: Logger +} + +export class IndexRegionGenerator implements Generator { + streams: Collection + regions: Collection + storage: Storage + logger: Logger + + constructor({ streams, regions, logger }: IndexRegionGeneratorProps) { + this.streams = streams + this.regions = regions + this.storage = new Storage(PUBLIC_DIR) + this.logger = logger + } + + async generate(): Promise { + let groupedStreams = new Collection() + this.streams + .orderBy((stream: Stream) => stream.getTitle()) + .filter((stream: Stream) => stream.isSFW()) + .forEach((stream: Stream) => { + if (stream.noBroadcastArea()) { + const streamClone = stream.clone() + streamClone.groupTitle = 'Undefined' + groupedStreams.push(streamClone) + return + } + + this.getStreamRegions(stream).forEach((region: Region) => { + const streamClone = stream.clone() + streamClone.groupTitle = region.name + groupedStreams.push(streamClone) + }) + }) + + groupedStreams = groupedStreams.orderBy((stream: Stream) => { + if (stream.groupTitle === 'Undefined') return 'ZZ' + return stream.groupTitle + }) + + const playlist = new Playlist(groupedStreams, { public: true }) + const filepath = 'index.region.m3u' + await this.storage.save(filepath, playlist.toString()) + this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() })) + } + + getStreamRegions(stream: Stream) { + let streamRegions = new Collection() + stream.broadcastArea.forEach(broadcastAreaCode => { + const [type, code] = broadcastAreaCode.split('/') + switch (type) { + case 'r': + const groupedRegions = this.regions.keyBy((region: Region) => region.code) + streamRegions.add(groupedRegions.get(code)) + break + case 's': + const [countryCode] = code.split('-') + const subdivisionRegions = this.regions.filter((region: Region) => + region.countries.includes(countryCode) + ) + streamRegions = streamRegions.concat(subdivisionRegions) + break + case 'c': + const countryRegions = this.regions.filter((region: Region) => + region.countries.includes(code) + ) + streamRegions = streamRegions.concat(countryRegions) + break + } + }) + + return streamRegions + } +} diff --git a/scripts/generators/index_category_m3u.js b/scripts/generators/index_category_m3u.js deleted file mode 100644 index 3ee1ce156..000000000 --- a/scripts/generators/index_category_m3u.js +++ /dev/null @@ -1,32 +0,0 @@ -const _ = require('lodash') - -module.exports = async function (streams = []) { - streams = _.filter(streams, stream => stream.is_nsfw === false) - - let items = [] - streams.forEach(stream => { - if (!stream.categories.length) { - const item = _.cloneDeep(stream) - item.group_title = 'Undefined' - items.push(item) - - return - } - - stream.categories - .filter(c => c) - .forEach(category => { - const item = _.cloneDeep(stream) - item.group_title = category.name - items.push(item) - }) - }) - - items = _.sortBy(items, item => { - if (item.group_title === 'Undefined') return '๎ บ' - - return item.group_title - }) - - return { filepath: 'index.category.m3u', items } -} diff --git a/scripts/generators/index_country_m3u.js b/scripts/generators/index_country_m3u.js deleted file mode 100644 index 3a1f7e538..000000000 --- a/scripts/generators/index_country_m3u.js +++ /dev/null @@ -1,80 +0,0 @@ -const api = require('../core/api') -const _ = require('lodash') - -module.exports = async function (streams = []) { - streams = _.filter(streams, stream => stream.is_nsfw === false) - - await api.regions.load() - let regions = await api.regions.all() - regions = _.keyBy(regions, 'code') - - await api.countries.load() - let countries = await api.countries.all() - countries = _.keyBy(countries, 'code') - - await api.subdivisions.load() - let subdivisions = await api.subdivisions.all() - subdivisions = _.keyBy(subdivisions, 'code') - - let items = [] - streams.forEach(stream => { - if (!stream.broadcast_area.length) { - const item = _.cloneDeep(stream) - item.group_title = 'Undefined' - items.push(item) - return - } - - if (stream.broadcast_area.includes('r/INT')) { - const item = _.cloneDeep(stream) - item.group_title = 'International' - items.push(item) - } - - const broadcastCountries = getBroadcastCountries(stream, { countries, regions, subdivisions }) - broadcastCountries.forEach(country => { - const item = _.cloneDeep(stream) - item.group_title = country.name - items.push(item) - }) - }) - - items = sortByGroupTitle(items) - - return { filepath: 'index.country.m3u', items } -} - -function getBroadcastCountries(stream, { countries, regions, subdivisions }) { - let codes = stream.broadcast_area.reduce((acc, item) => { - const [type, code] = item.split('/') - switch (type) { - case 'c': - acc.push(code) - break - case 'r': - if (code !== 'INT' && regions[code]) { - acc = acc.concat(regions[code].countries) - } - break - case 's': - if (subdivisions[code]) { - acc.push(subdivisions[code].country) - } - break - } - return acc - }, []) - - codes = _.uniq(codes) - - return codes.map(code => countries[code]).filter(c => c) -} - -function sortByGroupTitle(items) { - return _.sortBy(items, item => { - if (item.group_title === 'International') return '[' // ASCII character 91 - if (item.group_title === 'Undefined') return ']' // ASCII character 93 - - return item.group_title - }) -} diff --git a/scripts/generators/index_language_m3u.js b/scripts/generators/index_language_m3u.js deleted file mode 100644 index 9ae1adb23..000000000 --- a/scripts/generators/index_language_m3u.js +++ /dev/null @@ -1,29 +0,0 @@ -const _ = require('lodash') - -module.exports = async function (streams = []) { - streams = _.filter(streams, stream => stream.is_nsfw === false) - - let items = [] - streams.forEach(stream => { - if (!stream.languages.length) { - const item = _.cloneDeep(stream) - item.group_title = 'Undefined' - items.push(item) - return - } - - stream.languages.forEach(language => { - const item = _.cloneDeep(stream) - item.group_title = language.name - items.push(item) - }) - }) - - items = _.sortBy(items, i => { - if (i.group_title === 'Undefined') return '๎ บ' - - return i.group_title - }) - - return { filepath: 'index.language.m3u', items } -} diff --git a/scripts/generators/index_m3u.js b/scripts/generators/index_m3u.js deleted file mode 100644 index b236051a4..000000000 --- a/scripts/generators/index_m3u.js +++ /dev/null @@ -1,7 +0,0 @@ -const api = require('../core/api') -const _ = require('lodash') - -module.exports = async function (streams = []) { - streams = _.filter(streams, stream => stream.is_nsfw === false) - return { filepath: 'index.m3u', items: streams } -} diff --git a/scripts/generators/index_nsfw_m3u.js b/scripts/generators/index_nsfw_m3u.js deleted file mode 100644 index a46fec24c..000000000 --- a/scripts/generators/index_nsfw_m3u.js +++ /dev/null @@ -1,6 +0,0 @@ -const api = require('../core/api') -const _ = require('lodash') - -module.exports = async function (streams = []) { - return { filepath: 'index.nsfw.m3u', items: streams } -} diff --git a/scripts/generators/index_region_m3u.js b/scripts/generators/index_region_m3u.js deleted file mode 100644 index 9159dd90f..000000000 --- a/scripts/generators/index_region_m3u.js +++ /dev/null @@ -1,57 +0,0 @@ -const api = require('../core/api') -const _ = require('lodash') - -module.exports = async function (streams = []) { - streams = _.filter(streams, stream => stream.is_nsfw === false) - - await api.regions.load() - let regions = await api.regions.all() - regions = _.keyBy(regions, 'code') - - let items = [] - streams.forEach(stream => { - if (!stream.broadcast_area.length) { - const item = _.cloneDeep(stream) - item.group_title = 'Undefined' - items.push(item) - return - } - - getChannelRegions(stream, { regions }).forEach(region => { - const item = _.cloneDeep(stream) - item.group_title = region.name - items.push(item) - }) - }) - - items = _.sortBy(items, i => { - if (i.group_title === 'Undefined') return '๎ บ' - - return i.group_title - }) - - return { filepath: 'index.region.m3u', items } -} - -function getChannelRegions(stream, { regions }) { - return stream.broadcast_area - .reduce((acc, item) => { - const [type, code] = item.split('/') - switch (type) { - case 'r': - acc.push(regions[code]) - break - case 's': - const [c] = code.split('-') - const r1 = _.filter(regions, { countries: [c] }) - acc = acc.concat(r1) - break - case 'c': - const r2 = _.filter(regions, { countries: [code] }) - acc = acc.concat(r2) - break - } - return acc - }, []) - .filter(i => i) -} diff --git a/scripts/generators/languages.js b/scripts/generators/languages.js deleted file mode 100644 index 9edb426e3..000000000 --- a/scripts/generators/languages.js +++ /dev/null @@ -1,25 +0,0 @@ -const _ = require('lodash') - -module.exports = async function (streams = []) { - streams = _.filter(streams, stream => stream.is_nsfw === false) - - let languages = [] - streams.forEach(stream => { - languages = languages.concat(stream.languages) - }) - languages = _.uniqBy(languages, 'code') - languages = _.sortBy(languages, 'name') - - const output = [] - for (const language of languages) { - let items = _.filter(streams, { languages: [{ code: language.code }] }) - if (items.length) { - output.push({ filepath: `languages/${language.code}.m3u`, items }) - } - } - - let items = _.filter(streams, stream => !stream.languages.length) - output.push({ filepath: 'languages/undefined.m3u', items }) - - return output -} diff --git a/scripts/generators/languagesGenerator.ts b/scripts/generators/languagesGenerator.ts new file mode 100644 index 000000000..728807e9a --- /dev/null +++ b/scripts/generators/languagesGenerator.ts @@ -0,0 +1,50 @@ +import { Generator } from './generator' +import { Collection, Storage, Logger } from '../core' +import { Playlist, Language, Stream } from '../models' +import { PUBLIC_DIR } from '../constants' + +type LanguagesGeneratorProps = { streams: Collection; logger: Logger } + +export class LanguagesGenerator implements Generator { + streams: Collection + storage: Storage + logger: Logger + + constructor({ streams, logger }: LanguagesGeneratorProps) { + this.streams = streams + this.storage = new Storage(PUBLIC_DIR) + this.logger = logger + } + + async generate(): Promise { + let streams = this.streams.orderBy(stream => stream.getTitle()).filter(stream => stream.isSFW()) + + let languages = new Collection() + streams.forEach((stream: Stream) => { + languages = languages.concat(stream.languages) + }) + + languages + .uniqBy((language: Language) => language.code) + .orderBy((language: Language) => language.name) + .forEach(async (language: Language) => { + const languageStreams = streams.filter(stream => stream.hasLanguage(language)) + + if (languageStreams.isEmpty()) return + + const playlist = new Playlist(languageStreams, { public: true }) + const filepath = `languages/${language.code}.m3u` + await this.storage.save(filepath, playlist.toString()) + this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() })) + }) + + const undefinedStreams = streams.filter(stream => stream.noLanguages()) + + if (undefinedStreams.isEmpty()) return + + const playlist = new Playlist(undefinedStreams, { public: true }) + const filepath = 'languages/undefined.m3u' + await this.storage.save(filepath, playlist.toString()) + this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() })) + } +} diff --git a/scripts/generators/regions.js b/scripts/generators/regions.js deleted file mode 100644 index c2b08146f..000000000 --- a/scripts/generators/regions.js +++ /dev/null @@ -1,33 +0,0 @@ -const api = require('../core/api') -const _ = require('lodash') - -module.exports = async function (streams = []) { - streams = _.filter(streams, stream => stream.is_nsfw === false) - - await api.regions.load() - const regions = await api.regions.all() - - await api.subdivisions.load() - const subdivisions = await api.subdivisions.all() - - const output = [] - for (const region of regions) { - if (region.code === 'INT') continue - - const regionCountries = region.countries - let areaCodes = regionCountries.map(code => `c/${code}`) - - const regionSubdivisions = _.filter( - subdivisions, - s => regionCountries.indexOf(s.country) > -1 - ).map(s => `s/${s.code}`) - areaCodes = areaCodes.concat(regionSubdivisions) - - areaCodes.push(`r/${region.code}`) - - let items = _.filter(streams, stream => _.intersection(stream.broadcast_area, areaCodes).length) - output.push({ filepath: `regions/${region.code.toLowerCase()}.m3u`, items }) - } - - return output -} diff --git a/scripts/generators/regionsGenerator.ts b/scripts/generators/regionsGenerator.ts new file mode 100644 index 000000000..d2325c3a6 --- /dev/null +++ b/scripts/generators/regionsGenerator.ts @@ -0,0 +1,51 @@ +import { Generator } from './generator' +import { Collection, Storage, Logger } from '../core' +import { Playlist, Subdivision, Region } from '../models' +import { PUBLIC_DIR } from '../constants' + +type RegionsGeneratorProps = { + streams: Collection + regions: Collection + subdivisions: Collection + logger: Logger +} + +export class RegionsGenerator implements Generator { + streams: Collection + regions: Collection + subdivisions: Collection + storage: Storage + logger: Logger + + constructor({ streams, regions, subdivisions, logger }: RegionsGeneratorProps) { + this.streams = streams + this.regions = regions + this.subdivisions = subdivisions + this.storage = new Storage(PUBLIC_DIR) + this.logger = logger + } + + async generate(): Promise { + let streams = this.streams.orderBy(stream => stream.getTitle()).filter(stream => stream.isSFW()) + + this.regions.forEach(async (region: Region) => { + if (region.code === 'INT') return + + const regionSubdivisionsCodes = this.subdivisions + .filter((subdivision: Subdivision) => region.countries.indexOf(subdivision.country) > -1) + .map((subdivision: Subdivision) => `s/${subdivision.code}`) + + const regionCodes = region.countries + .map((code: string) => `c/${code}`) + .concat(regionSubdivisionsCodes) + .add(`r/${region.code}`) + + const regionStreams = streams.filter(stream => stream.broadcastArea.intersects(regionCodes)) + + const playlist = new Playlist(regionStreams, { public: true }) + const filepath = `regions/${region.code.toLowerCase()}.m3u` + await this.storage.save(filepath, playlist.toString()) + this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() })) + }) + } +} diff --git a/scripts/models/blocked.ts b/scripts/models/blocked.ts new file mode 100644 index 000000000..1de7a1982 --- /dev/null +++ b/scripts/models/blocked.ts @@ -0,0 +1,14 @@ +type BlockedProps = { + channel: string + ref: string +} + +export class Blocked { + channel: string + ref: string + + constructor({ ref, channel }: BlockedProps) { + this.channel = channel + this.ref = ref + } +} diff --git a/scripts/models/category.ts b/scripts/models/category.ts new file mode 100644 index 000000000..885cea849 --- /dev/null +++ b/scripts/models/category.ts @@ -0,0 +1,14 @@ +type CategoryProps = { + id: string + name: string +} + +export class Category { + id: string + name: string + + constructor({ id, name }: CategoryProps) { + this.id = id + this.name = name + } +} diff --git a/scripts/models/channel.ts b/scripts/models/channel.ts new file mode 100644 index 000000000..668b72914 --- /dev/null +++ b/scripts/models/channel.ts @@ -0,0 +1,79 @@ +import { Collection } from '../core' + +type ChannelProps = { + id: string + name: string + alt_names: string[] + network: string + owners: string[] + country: string + subdivision: string + city: string + broadcast_area: string[] + languages: string[] + categories: string[] + is_nsfw: boolean + launched: string + closed: string + replaced_by: string + website: string + logo: string +} + +export class Channel { + id: string + name: string + altNames: Collection + network: string + owners: Collection + country: string + subdivision: string + city: string + broadcastArea: Collection + languages: Collection + categories: Collection + isNSFW: boolean + launched: string + closed: string + replacedBy: string + website: string + logo: string + + constructor({ + id, + name, + alt_names, + network, + owners, + country, + subdivision, + city, + broadcast_area, + languages, + categories, + is_nsfw, + launched, + closed, + replaced_by, + website, + logo + }: ChannelProps) { + this.id = id + this.name = name + this.altNames = new Collection(alt_names) + this.network = network + this.owners = new Collection(owners) + this.country = country + this.subdivision = subdivision + this.city = city + this.broadcastArea = new Collection(broadcast_area) + this.languages = new Collection(languages) + this.categories = new Collection(categories) + this.isNSFW = is_nsfw + this.launched = launched + this.closed = closed + this.replacedBy = replaced_by + this.website = website + this.logo = logo + } +} diff --git a/scripts/models/country.ts b/scripts/models/country.ts new file mode 100644 index 000000000..5b33858ce --- /dev/null +++ b/scripts/models/country.ts @@ -0,0 +1,20 @@ +type CountryProps = { + code: string + name: string + languages: string[] + flag: string +} + +export class Country { + code: string + name: string + languages: string[] + flag: string + + constructor({ code, name, languages, flag }: CountryProps) { + this.code = code + this.name = name + this.languages = languages + this.flag = flag + } +} diff --git a/scripts/models/index.ts b/scripts/models/index.ts new file mode 100644 index 000000000..9cdfbba30 --- /dev/null +++ b/scripts/models/index.ts @@ -0,0 +1,9 @@ +export * from './playlist' +export * from './blocked' +export * from './stream' +export * from './category' +export * from './channel' +export * from './language' +export * from './country' +export * from './region' +export * from './subdivision' diff --git a/scripts/models/language.ts b/scripts/models/language.ts new file mode 100644 index 000000000..84433abca --- /dev/null +++ b/scripts/models/language.ts @@ -0,0 +1,14 @@ +type LanguageProps = { + code: string + name: string +} + +export class Language { + code: string + name: string + + constructor({ code, name }: LanguageProps) { + this.code = code + this.name = name + } +} diff --git a/scripts/models/playlist.ts b/scripts/models/playlist.ts new file mode 100644 index 000000000..b9b5c60ac --- /dev/null +++ b/scripts/models/playlist.ts @@ -0,0 +1,28 @@ +import { Collection } from '../core' +import { Stream } from '../models' + +type PlaylistOptions = { + public: boolean +} + +export class Playlist { + streams: Collection + options: { + public: boolean + } + + constructor(streams: Collection, options?: PlaylistOptions) { + this.streams = streams + this.options = options || { public: false } + } + + toString() { + let output = `#EXTM3U\n` + + this.streams.forEach((stream: Stream) => { + output += stream.toString(this.options) + `\n` + }) + + return output + } +} diff --git a/scripts/models/region.ts b/scripts/models/region.ts new file mode 100644 index 000000000..6db1c3a43 --- /dev/null +++ b/scripts/models/region.ts @@ -0,0 +1,19 @@ +import { Collection } from '../core' + +type RegionProps = { + code: string + name: string + countries: string[] +} + +export class Region { + code: string + name: string + countries: Collection + + constructor({ code, name, countries }: RegionProps) { + this.code = code + this.name = name + this.countries = new Collection(countries) + } +} diff --git a/scripts/models/stream.ts b/scripts/models/stream.ts new file mode 100644 index 000000000..25c2c9a60 --- /dev/null +++ b/scripts/models/stream.ts @@ -0,0 +1,177 @@ +import { URL, Collection } from '../core' +import { Category, Language } from './index' + +type StreamProps = { + name: string + url: string + filepath: string + line: number + channel?: string + httpReferrer?: string + label?: string + quality?: string + userAgent?: string +} + +export class Stream { + channel: string + filepath: string + line: number + httpReferrer: string + label: string + name: string + quality: string + url: string + userAgent: string + logo: string + broadcastArea: Collection + categories: Collection + languages: Collection + isNSFW: boolean + groupTitle: string + + constructor({ + channel, + filepath, + line, + httpReferrer, + label, + name, + quality, + url, + userAgent + }: StreamProps) { + this.channel = channel || '' + this.filepath = filepath + this.line = line + this.httpReferrer = httpReferrer || '' + this.label = label || '' + this.name = name + this.quality = quality || '' + this.url = url + this.userAgent = userAgent || '' + this.logo = '' + this.broadcastArea = new Collection() + this.categories = new Collection() + this.languages = new Collection() + this.isNSFW = false + this.groupTitle = 'Undefined' + } + + normalizeURL() { + const url = new URL(this.url) + + this.url = url.normalize().toString() + } + + clone(): Stream { + return Object.assign(Object.create(Object.getPrototypeOf(this)), this) + } + + hasName(): boolean { + return !!this.name + } + + noName(): boolean { + return !this.name + } + + hasChannel() { + return !!this.channel + } + + hasCategories(): boolean { + return this.categories.notEmpty() + } + + noCategories(): boolean { + return this.categories.empty() + } + + hasCategory(category: Category): boolean { + return this.categories.includes((_category: Category) => _category.id === category.id) + } + + noLanguages(): boolean { + return this.languages.empty() + } + + hasLanguage(language: Language): boolean { + return this.languages.includes((_language: Language) => _language.code === language.code) + } + + noBroadcastArea(): boolean { + return this.broadcastArea.empty() + } + + isInternational(): boolean { + return this.broadcastArea.includes('r/INT') + } + + isSFW(): boolean { + return this.isNSFW === false + } + + getTitle(): string { + let title = `${this.name}` + + if (this.quality) { + title += ` (${this.quality})` + } + + if (this.label) { + title += ` [${this.label}]` + } + + return title + } + + data() { + return { + channel: this.channel, + filepath: this.filepath, + httpReferrer: this.httpReferrer, + label: this.label, + name: this.name, + quality: this.quality, + url: this.url, + userAgent: this.userAgent, + line: this.line + } + } + + toJSON() { + return { + channel: this.channel, + url: this.url, + http_referrer: this.httpReferrer || null, + user_agent: this.userAgent || null + } + } + + toString(options: { public: boolean }) { + let output = `#EXTINF:-1 tvg-id="${this.channel}"` + + if (options.public) { + output += ` tvg-logo="${this.logo}" group-title="${this.groupTitle}"` + } + + if (this.userAgent) { + output += ` user-agent="${this.userAgent}"` + } + + output += `,${this.getTitle()}` + + if (this.httpReferrer) { + output += `\n#EXTVLCOPT:http-referrer=${this.httpReferrer}` + } + + if (this.userAgent) { + output += `\n#EXTVLCOPT:http-user-agent=${this.userAgent}` + } + + output += `\n${this.url}` + + return output + } +} diff --git a/scripts/models/subdivision.ts b/scripts/models/subdivision.ts new file mode 100644 index 000000000..c3209ca3d --- /dev/null +++ b/scripts/models/subdivision.ts @@ -0,0 +1,17 @@ +type SubdivisionProps = { + code: string + name: string + country: string +} + +export class Subdivision { + code: string + name: string + country: string + + constructor({ code, name, country }: SubdivisionProps) { + this.code = code + this.name = name + this.country = country + } +} diff --git a/scripts/store/getters/group_title.js b/scripts/store/getters/group_title.js deleted file mode 100644 index 38592828c..000000000 --- a/scripts/store/getters/group_title.js +++ /dev/null @@ -1,13 +0,0 @@ -module.exports = function () { - if (this.group_title) return this.group_title - - if (this.categories.length) { - return this.categories - .filter(c => c) - .map(category => category.name) - .sort() - .join(';') - } - - return 'Undefined' -} diff --git a/scripts/store/getters/index.js b/scripts/store/getters/index.js deleted file mode 100644 index 8a1c3fa51..000000000 --- a/scripts/store/getters/index.js +++ /dev/null @@ -1,5 +0,0 @@ -exports.group_title = require('./group_title') -exports.tvg_id = require('./tvg_id') -exports.tvg_logo = require('./tvg_logo') -exports.tvg_country = require('./tvg_country') -exports.tvg_language = require('./tvg_language') diff --git a/scripts/store/getters/tvg_country.js b/scripts/store/getters/tvg_country.js deleted file mode 100644 index dd2f2c3cc..000000000 --- a/scripts/store/getters/tvg_country.js +++ /dev/null @@ -1,16 +0,0 @@ -module.exports = function () { - if (this.tvg_country) return this.tvg_country - - if (this.broadcast_area.length) { - return this.broadcast_area - .map(item => { - const [_, code] = item.split('/') - return code - }) - .filter(i => i) - .sort() - .join(';') - } - - return '' -} diff --git a/scripts/store/getters/tvg_id.js b/scripts/store/getters/tvg_id.js deleted file mode 100644 index 2cd3fda83..000000000 --- a/scripts/store/getters/tvg_id.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = function () { - return this.channel || '' -} diff --git a/scripts/store/getters/tvg_language.js b/scripts/store/getters/tvg_language.js deleted file mode 100644 index a9b60a161..000000000 --- a/scripts/store/getters/tvg_language.js +++ /dev/null @@ -1,13 +0,0 @@ -module.exports = function () { - if (this.tvg_language) return this.tvg_language - - if (this.languages.length) { - return this.languages - .map(language => (language ? language.name : null)) - .filter(l => l) - .sort() - .join(';') - } - - return '' -} diff --git a/scripts/store/getters/tvg_logo.js b/scripts/store/getters/tvg_logo.js deleted file mode 100644 index 7067ddabd..000000000 --- a/scripts/store/getters/tvg_logo.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = function () { - if (this.tvg_logo) return this.tvg_logo - - return this.logo || '' -} diff --git a/scripts/store/setters/channel.js b/scripts/store/setters/channel.js deleted file mode 100644 index a1aed8f2e..000000000 --- a/scripts/store/setters/channel.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = function (channel) { - return channel || null -} diff --git a/scripts/store/setters/http_referrer.js b/scripts/store/setters/http_referrer.js deleted file mode 100644 index d7cc83b24..000000000 --- a/scripts/store/setters/http_referrer.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = function (http_referrer) { - return http_referrer || null -} diff --git a/scripts/store/setters/index.js b/scripts/store/setters/index.js deleted file mode 100644 index a09baefae..000000000 --- a/scripts/store/setters/index.js +++ /dev/null @@ -1,3 +0,0 @@ -exports.http_referrer = require('./http_referrer') -exports.user_agent = require('./user_agent') -exports.channel = require('./channel') diff --git a/scripts/store/setters/user_agent.js b/scripts/store/setters/user_agent.js deleted file mode 100644 index 38cbbaa21..000000000 --- a/scripts/store/setters/user_agent.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = function (user_agent) { - return user_agent || null -} diff --git a/scripts/tables/categoryTable.ts b/scripts/tables/categoryTable.ts new file mode 100644 index 000000000..57f11c15b --- /dev/null +++ b/scripts/tables/categoryTable.ts @@ -0,0 +1,52 @@ +import { Storage, HTMLTable, Collection, LogParser, LogItem, File } from '../core' +import { Category } from '../models' +import { DATA_DIR, LOGS_DIR, README_DIR } from '../constants' +import { Table } from './table' + +export class CategoryTable implements Table { + constructor() {} + + async make() { + const dataStorage = new Storage(DATA_DIR) + const categoriesContent = await dataStorage.json('categories.json') + const categories = new Collection(categoriesContent).map(data => new Category(data)) + + const parser = new LogParser() + const logsStorage = new Storage(LOGS_DIR) + const generatorsLog = await logsStorage.read('generators.log') + + let data = new Collection() + parser + .parse(generatorsLog) + .filter((logItem: LogItem) => logItem.filepath.includes('categories/')) + .forEach((logItem: LogItem) => { + const file = new File(logItem.filepath) + const categoryId = file.getFilename() + const category: Category = categories.first( + (category: Category) => category.id === categoryId + ) + data.add([ + category ? category.name : 'ZZ', + category ? category.name : 'Undefined', + logItem.count, + `https://iptv-org.github.io/iptv/${logItem.filepath}` + ]) + }) + + data = data + .orderBy(item => item[0]) + .map(item => { + item.shift() + return item + }) + + const table = new HTMLTable(data.all(), [ + { name: 'Category' }, + { name: 'Channels', align: 'right' }, + { name: 'Playlist', nowrap: true } + ]) + + const readmeStorage = new Storage(README_DIR) + await readmeStorage.save('_categories.md', table.toString()) + } +} diff --git a/scripts/tables/countryTable.ts b/scripts/tables/countryTable.ts new file mode 100644 index 000000000..c78a23eaa --- /dev/null +++ b/scripts/tables/countryTable.ts @@ -0,0 +1,81 @@ +import { Storage, HTMLTable, Collection, LogParser, LogItem, File } from '../core' +import { Country, Subdivision } from '../models' +import { DATA_DIR, LOGS_DIR, README_DIR } from '../constants' +import { Table } from './table' + +export class CountryTable implements Table { + constructor() {} + + async make() { + const dataStorage = new Storage(DATA_DIR) + + const countriesContent = await dataStorage.json('countries.json') + const countries = new Collection(countriesContent).map(data => new Country(data)) + + const subdivisionsContent = await dataStorage.json('subdivisions.json') + const subdivisions = new Collection(subdivisionsContent).map(data => new Subdivision(data)) + + const parser = new LogParser() + const logsStorage = new Storage(LOGS_DIR) + const generatorsLog = await logsStorage.read('generators.log') + + let data = new Collection() + parser + .parse(generatorsLog) + .filter( + (logItem: LogItem) => + logItem.filepath.includes('countries/') || logItem.filepath.includes('subdivisions/') + ) + .forEach((logItem: LogItem) => { + const file = new File(logItem.filepath) + const code = file.getFilename().toUpperCase() + const [countryCode, subdivisionCode] = code.split('-') || ['', ''] + + if (subdivisionCode) { + const subdivision = subdivisions.first( + (subdivision: Subdivision) => subdivision.code === code + ) + const country = countries.first( + (country: Country) => country.code === subdivision.country + ) + data.add([ + `${country.name}/${subdivision.name}`, + `      ${subdivision.name}`, + logItem.count, + `https://iptv-org.github.io/iptv/${logItem.filepath}` + ]) + } else if (countryCode === 'INT') { + data.add([ + 'ZZ', + `๐ŸŒ International`, + logItem.count, + `https://iptv-org.github.io/iptv/${logItem.filepath}` + ]) + } else { + const country = countries.first((country: Country) => country.code === countryCode) + data.add([ + country.name, + `${country.flag} ${country.name}`, + logItem.count, + `https://iptv-org.github.io/iptv/${logItem.filepath}` + ]) + } + }) + + data = data + .orderBy(item => item[0]) + .map(item => { + item.shift() + return item + }) + + const table = new HTMLTable(data.all(), [ + { name: 'Country' }, + { name: 'Channels', align: 'right' }, + { name: 'Playlist', nowrap: true } + ]) + + const readmeStorage = new Storage(README_DIR) + await readmeStorage.save('_countries.md', table.toString()) + } +} diff --git a/scripts/tables/index.ts b/scripts/tables/index.ts new file mode 100644 index 000000000..f951a21f2 --- /dev/null +++ b/scripts/tables/index.ts @@ -0,0 +1,4 @@ +export * from './categoryTable' +export * from './countryTable' +export * from './languageTable' +export * from './regionTable' diff --git a/scripts/tables/languageTable.ts b/scripts/tables/languageTable.ts new file mode 100644 index 000000000..2b298b180 --- /dev/null +++ b/scripts/tables/languageTable.ts @@ -0,0 +1,53 @@ +import { Storage, HTMLTable, Collection, LogParser, LogItem, File } from '../core' +import { Language } from '../models' +import { DATA_DIR, LOGS_DIR, README_DIR } from '../constants' +import { Table } from './table' + +export class LanguageTable implements Table { + constructor() {} + + async make() { + const dataStorage = new Storage(DATA_DIR) + const languagesContent = await dataStorage.json('languages.json') + const languages = new Collection(languagesContent).map(data => new Language(data)) + + const parser = new LogParser() + const logsStorage = new Storage(LOGS_DIR) + const generatorsLog = await logsStorage.read('generators.log') + + let data = new Collection() + parser + .parse(generatorsLog) + .filter((logItem: LogItem) => logItem.filepath.includes('languages/')) + .forEach((logItem: LogItem) => { + const file = new File(logItem.filepath) + const languageCode = file.getFilename() + const language: Language = languages.first( + (language: Language) => language.code === languageCode + ) + + data.add([ + language ? language.name : 'ZZ', + language ? language.name : 'Undefined', + logItem.count, + `https://iptv-org.github.io/iptv/${logItem.filepath}` + ]) + }) + + data = data + .orderBy(item => item[0]) + .map(item => { + item.shift() + return item + }) + + const table = new HTMLTable(data.all(), [ + { name: 'Language', align: 'left' }, + { name: 'Channels', align: 'right' }, + { name: 'Playlist', align: 'left', nowrap: true } + ]) + + const readmeStorage = new Storage(README_DIR) + await readmeStorage.save('_languages.md', table.toString()) + } +} diff --git a/scripts/tables/regionTable.ts b/scripts/tables/regionTable.ts new file mode 100644 index 000000000..ee29f4088 --- /dev/null +++ b/scripts/tables/regionTable.ts @@ -0,0 +1,47 @@ +import { Storage, HTMLTable, Collection, LogParser, LogItem, File } from '../core' +import { Region } from '../models' +import { DATA_DIR, LOGS_DIR, README_DIR } from '../constants' +import { Table } from './table' + +export class RegionTable implements Table { + constructor() {} + + async make() { + const dataStorage = new Storage(DATA_DIR) + const regionsContent = await dataStorage.json('regions.json') + const regions = new Collection(regionsContent).map(data => new Region(data)) + + const parser = new LogParser() + const logsStorage = new Storage(LOGS_DIR) + const generatorsLog = await logsStorage.read('generators.log') + + let data = new Collection() + parser + .parse(generatorsLog) + .filter((logItem: LogItem) => logItem.filepath.includes('regions/')) + .forEach((logItem: LogItem) => { + const file = new File(logItem.filepath) + const regionCode = file.getFilename().toUpperCase() + const region: Region = regions.first((region: Region) => region.code === regionCode) + + if (region) { + data.add([ + region.name, + logItem.count, + `https://iptv-org.github.io/iptv/${logItem.filepath}` + ]) + } + }) + + data = data.orderBy(item => item[0]) + + const table = new HTMLTable(data.all(), [ + { name: 'Region', align: 'left' }, + { name: 'Channels', align: 'right' }, + { name: 'Playlist', align: 'left', nowrap: true } + ]) + + const readmeStorage = new Storage(README_DIR) + await readmeStorage.save('_regions.md', table.toString()) + } +} diff --git a/scripts/tables/table.ts b/scripts/tables/table.ts new file mode 100644 index 000000000..b8bd21bd7 --- /dev/null +++ b/scripts/tables/table.ts @@ -0,0 +1,3 @@ +export interface Table { + make(): void +} diff --git a/scripts/tmp/.gitignore b/scripts/tmp/.gitignore deleted file mode 100644 index c96a04f00..000000000 --- a/scripts/tmp/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore \ No newline at end of file diff --git a/scripts/types/markdown-include.d.ts b/scripts/types/markdown-include.d.ts new file mode 100644 index 000000000..d607a01b5 --- /dev/null +++ b/scripts/types/markdown-include.d.ts @@ -0,0 +1 @@ +declare module 'markdown-include' diff --git a/streams/cr.m3u b/streams/cr.m3u index 5a57d2701..ee66f55fa 100644 --- a/streams/cr.m3u +++ b/streams/cr.m3u @@ -7,20 +7,16 @@ https://5fc584f3f19c9.streamlock.net/agrotendencia/videoagrotendencia_hls1/playl https://liveingesta118.cdnmedia.tv/trivision36live/smil:dvrlive.smil/playlist.m3u8?DVR= #EXTINF:-1 tvg-id="AntenaSeisTV.cr",Antena Seis TV (720p) [Geo-blocked] http://inliveserver.com:1935/14510/14510/playlist.m3u8 -#EXTINF:-1 tvg-id="Canal2.cr",Canal 2 (360p) -https://d25v5vivhcrrh5.cloudfront.net/hls/canal2.m3u8 -#EXTINF:-1 tvg-id="Canal4.cr",Canal 4 (720p) [Geo-blocked] -https://d25v5vivhcrrh5.cloudfront.net/hls/canal4.m3u8 -#EXTINF:-1 tvg-id="Canal6.cr",Canal 6 (720p) [Geo-blocked] -https://d25v5vivhcrrh5.cloudfront.net/hls/canal6.m3u8 -#EXTINF:-1 tvg-id="Canal8.cr",Canal 8 (720p) [Geo-blocked] +#EXTINF:-1 tvg-id="Canal2.cr",Canal 2 (576p) [Not 24/7] +https://d2t46xrpai3it5.cloudfront.net/Canal2CR/1ccdc8545fd05b83e9c57826d0de1069.sdp/playlist.m3u8 +#EXTINF:-1 tvg-id="Canal4.cr",Canal 4 (720p) [Not 24/7] +https://d2t46xrpai3it5.cloudfront.net/Canal4CR/e78ef5ae92191a83ba896fbe4bfda83e.sdp/playlist.m3u8 +#EXTINF:-1 tvg-id="Canal6.cr",Canal 6 (720p) [Not 24/7] +https://d2t46xrpai3it5.cloudfront.net/Canal6CR/201cac55f42a87a46e2d27a75e0c7c84.sdp/playlist.m3u8 +#EXTINF:-1 tvg-id="Canal8.cr",Canal 8 (720p) [Not 24/7] https://mdstrm.com/live-stream-playlist/5a7b1e63a8da282c34d65445.m3u8 -#EXTINF:-1 tvg-id="Canal11.cr",Canal 11 (720p) [Geo-blocked] -https://d25v5vivhcrrh5.cloudfront.net/hls/canal11.m3u8 -#EXTINF:-1 tvg-id="Canal38.cr",Canal 38 (720p) [Not 24/7] -https://rtmp.info/canal38/envivo/chunks.m3u8 -#EXTINF:-1 tvg-id="Canal38.cr",Canal 38 (720p) [Not 24/7] -https://rtmp.info/canal38/envivo/playlist.m3u8 +#EXTINF:-1 tvg-id="Canal11.cr",Canal 11 (720p) [Not 24/7] +https://d2t46xrpai3it5.cloudfront.net/Repretel11/b3e2798525101c45f84a48573676853a.sdp/playlist.m3u8 #EXTINF:-1 tvg-id="ColosalTV.cr",Colosal TV (720p) [Not 24/7] http://tv.ticosmedia.com:1935/COLOSAL/COLOSAL/playlist.m3u8 #EXTINF:-1 tvg-id="Enlace.cr",Enlace (720p) @@ -28,7 +24,7 @@ https://11554-1.b.cdn13.com/EnlaceTV/smil:enlace-hd.smil/playlist.m3u8 #EXTINF:-1 tvg-id="EnlaceJuvenil.cr",Enlace Juvenil (720p) https://11554-1.b.cdn13.com/EJTV/smil:ejtv-hd.smil/playlist.m3u8 #EXTINF:-1 tvg-id="ExtremaTV.cr",Extrema TV (720p) -https://www.livestreamcdn.net:444/ExtremaTV/ExtremaTV/playlist.m3u8 +https://627bb251f23c7.streamlock.net:444/ExtremaTV/ExtremaTV/playlist.m3u8 #EXTINF:-1 tvg-id="GuatusoTV.cr",Guatuso TV (720p) https://5cf4a2c2512a2.streamlock.net/8162/8162/master.m3u8 #EXTINF:-1 tvg-id="HBTVTicaVision.cr",HBTV TicaVisiรณn (1080p) @@ -39,15 +35,11 @@ https://rtmp.info/iqtv/envivo/playlist.m3u8 https://lstv.duckdns.org:449/hls/lstv.m3u8 #EXTINF:-1 tvg-id="LuzNacienteTV.cr",Luz Naciente TV (720p) https://streeming.protoscr.com:3858/live/streeminglive.m3u8 -#EXTINF:-1 tvg-id="MoraTV.cr",MoraTV (804p) -https://stmv1.zcasthn.com.br/moratv1/moratv1/playlist.m3u8 -#EXTINF:-1 tvg-id="MZSports.cr",MZ Sports (720p) -https://cloudvideo.servers10.com:8081/8248/index.m3u8 #EXTINF:-1 tvg-id="NicoyaTV.cr",Nicoya TV (720p) [Not 24/7] https://59ef525c24caa.streamlock.net/nicoyatv/nicoyatv/playlist.m3u8 #EXTINF:-1 tvg-id="OldiesHits.cr",Oldies Hits (360p) https://video01.logicahost.com.br/oldieshits/oldieshits/playlist.m3u8 -#EXTINF:-1 tvg-id="RTTV.cr",RTTV (720p) +#EXTINF:-1 tvg-id="RTTV.cr",RTTV (720p) [Not 24/7] https://cloudvideo.servers10.com:19360/8212/8212.m3u8 #EXTINF:-1 tvg-id="SanVitoTelevision.cr",San Vito Televisiรณn (720p) https://stmv.streamingvip.click/sanvitotv/sanvitotv/playlist.m3u8 @@ -55,9 +47,7 @@ https://stmv.streamingvip.click/sanvitotv/sanvitotv/playlist.m3u8 https://lstv.duckdns.org:449/hls/stv.m3u8 #EXTINF:-1 tvg-id="SarapiquiTV.cr",Sarapiqui TV (720p) [Not 24/7] http://tiquiciatv.com:1935/stv/web/playlist.m3u8 -#EXTINF:-1 tvg-id="SMOTV.cr",SMO TV -http://186.15.50.30:8080/hls/smotv.m3u8 -#EXTINF:-1 tvg-id="Telesistema.cr",Telesistema (486p) +#EXTINF:-1 tvg-id="Telesistema.cr",Telesistema (480p) [Not 24/7] https://59ef525c24caa.streamlock.net/ARBtv/ARBtv/playlist.m3u8 #EXTINF:-1 tvg-id="TeleSURCostaRica.cr",TeleSUR Costa Rica (720p) [Not 24/7] http://k3.usastreams.com/telesur/telesur/playlist.m3u8 @@ -69,7 +59,7 @@ http://tv.teleunotv.cr:1935/TVUNO/TVUNO/playlist.m3u8 https://5d16127744872.streamlock.net/TVUNO/TVUNO/playlist.m3u8 #EXTINF:-1 tvg-id="TicaTVPlus.cr",Tica TV+ (288p) https://593b04c4c5670.streamlock.net/portalfoxmix/portalfoxmix/.m3u8 -#EXTINF:-1 tvg-id="TVN14.cr",Canal 14 San Carlos (720p) +#EXTINF:-1 tvg-id="TVN14.cr",Canal 14 San Carlos (720p) [Not 24/7] http://tvn.obix.tv:1935/TVN/CH14.stream_720p/playlist.m3u8 #EXTINF:-1 tvg-id="TVSurCanal9.cr",TV Sur Canal 9 (480p) [Not 24/7] http://tv.ticosmedia.com:1935/TVSUR/TVSUR/playlist.m3u8 @@ -108,5 +98,9 @@ https://cdn01.teletica.com/TeleticaLiveStreamCR/Stream/playlist_dvr.m3u8 https://video20.klm99.com:3558/live/teleredlive.m3u8 #EXTINF:-1 tvg-id="TVPlus.cr",TV+ Canal 54 (480p) https://59ef525c24caa.streamlock.net/Tvpluscr/Tvpluscr/playlist.m3u8 -#EXTINF:-1 tvg-id="LimonTV.cr",Limรณn TV (1080p) +#EXTINF:-1 tvg-id="LimonTV.cr",Limรณn TV (1080p) [Not 24/7] http://k4.usastreams.com/limontv1/limontv1/playlist.m3u8 +#EXTINF:-1 tvg-id="RetroTVPalmares.cr",Retro TV Palmarรฉs (360p) [Not 24/7] +https://250weu.bozztv.com/ssh101/ssh101/tvretropalmares/playlist.m3u8 +#EXTINF:-1 tvg-id="TVLegislativa.cr",TV Asamblea Legislativa (1080p) [Not 24/7] +https://ythls.onrender.com/channel/UCWN0rIWneMdqRmZ4yHs5GuA.m3u8 diff --git a/streams/do.m3u b/streams/do.m3u index 0d4c08a42..e3fb992fc 100644 --- a/streams/do.m3u +++ b/streams/do.m3u @@ -11,42 +11,40 @@ https://vdo.aiontelevision.com:3735/live/aiontelevisionlive.m3u8 https://vsrv2.az-streamingserver.com:3149/live/alegretvlive.m3u8 #EXTINF:-1 tvg-id="Ame47.do",Amรฉ 47 (720p) https://ss9.domint.net:3040/ame_str/amecanal47/playlist.m3u8 -#EXTINF:-1 tvg-id="AnimeZoneTV.do",Anime Zone TV -https://azxtv.com/hls/stream.m3u8 -#EXTINF:-1 tvg-id="Antena7.do",Antena 7 (360p) -https://d3qhvst5vzq4y9.cloudfront.net/hls/antena7.m3u8 -#EXTINF:-1 tvg-id="Antena21.do",Antena 21 (360p) -https://d3qhvst5vzq4y9.cloudfront.net/hls/canal21.m3u8 -#EXTINF:-1 tvg-id="BajoTechoTV.do",Bajo Techo TV -https://cdn4.hostlagarto.com:8081/static/bajotechotv/playlist.m3u8 +#EXTINF:-1 tvg-id="AnimeZoneTV.do",Anime Zone TV (480p) +http://animezonetv.net/hls/stream.m3u8 +#EXTINF:-1 tvg-id="Antena7.do",Antena 7 (480p) [Not 24/7] +https://d1841z6ti5nz2v.cloudfront.net/Antena7DO/34cdaa501a0217ea217d8f4f083c1728.sdp/playlist.m3u8 +#EXTINF:-1 tvg-id="Antena21.do",Antena 21 (480p) [Not 24/7] +https://d1841z6ti5nz2v.cloudfront.net/Canal21DO/f260159f04ed124e08b9ee0364dd4ca7.sdp/playlist.m3u8 +#EXTINF:-1 tvg-id="BajoTechoTV.do",Bajo Techo TV (1080p) [Not 24/7] +https://rdn.essastream.com:3042/live/bajotechotvlive.m3u8 #EXTINF:-1 tvg-id="Bellavision.do",Bellavisiรณn (1080p) -https://cdn4.hostlagarto.com:8081/static/Bellavision8hd/playlist.m3u8 -#EXTINF:-1 tvg-id="BonaoTV.do",Bonao TV +https://rdn.essastream.com:3110/live/bellavision8hdlive.m3u8 +#EXTINF:-1 tvg-id="BonaoTV.do",Bonao TV (720p) https://ss5.domint.net:3026/btv_str/bonao/playlist.m3u8 -#EXTINF:-1 tvg-id="Boreal.do",Boreal +#EXTINF:-1 tvg-id="Boreal.do",Boreal (720p) https://cdn.borealtelevision.com:3712/live/borealtelevisionhdlive.m3u8 #EXTINF:-1 tvg-id="CaminoRealTV.do",Camino Real TV (720p) https://5bf8041cb3fed.streamlock.net/PuertoTV/PuertoTV/playlist.m3u8 -#EXTINF:-1 tvg-id="Canal4RD.do",Canal 4 RD +#EXTINF:-1 tvg-id="Canal4RD.do",Canal 4 RD (1080p) https://protvradiostream.com:1936/canal4rd-1/ngrp:canal4rd-1_all/playlist.m3u8 -#EXTINF:-1 tvg-id="Canal25.do",Canal 25 +#EXTINF:-1 tvg-id="Canal25.do",Canal 25 (1080p) [Not 24/7] https://ss3.domint.net:3150/c25_str/canal25/playlist.m3u8 -#EXTINF:-1 tvg-id="Canal56.do",Canal 56 +#EXTINF:-1 tvg-id="Canal56.do",Canal 56 (720p) https://cdn5.streamgato.us:3371/live/canal56live.m3u8 -#EXTINF:-1 tvg-id="CanalCatorce.do",Canal Catorce -https://video.misistemareseller.com/catorcetv/catorcetv/playlist.m3u8 +#EXTINF:-1 tvg-id="CanalCatorce.do",Canal Catorce (720p) +https://tv.livestreaminggroup.info:3052/live/catorcetvlive.m3u8 #EXTINF:-1 tvg-id="CaribbeanTravelingNetwork.do",Caribbean Traveling Network (486p) https://59ef525c24caa.streamlock.net/ctn/ctn/playlist.m3u8 #EXTINF:-1 tvg-id="Carivision.do",Carivision (1080p) https://ss5.domint.net:3174/car_str/carivision/playlist.m3u8 -#EXTINF:-1 tvg-id="CascaraTV.do",Cรกscara TV +#EXTINF:-1 tvg-id="CascaraTV.do",Cรกscara TV (1080p) https://ss3.domint.net:3144/ctv_str/cascaratv/playlist.m3u8 #EXTINF:-1 tvg-id="CDN.do",CDN (720p) https://dacastmmd.mmdlive.lldns.net/dacastmmd/5f85ae10c62d4be3a5edbf483cb04f25/playlist.m3u8 -#EXTINF:-1 tvg-id="CDNDeportes.do",CDN Deportes (480p) -http://51.81.93.29:8084/hls/cdnsm.m3u8 #EXTINF:-1 tvg-id="ChinolaTV.do",Chinola TV (480p) -https://cdn3.streamgato.us:3434/live/chinolatvlive.m3u8?DVR= +https://streaming.ath.cx:1936/chinolatv/chinolatv/playlist.m3u8 #EXTINF:-1 tvg-id="CibaenaTV.do",Cibaeรฑa TV (720p) https://vsrv2.az-streamingserver.com:3958/live/cibaenatvlive.m3u8 #EXTINF:-1 tvg-id="CieloTV.do",Cielo TV (1080p) @@ -54,198 +52,180 @@ https://streaming.servervideo.net:1936/cielotv/cielotv/playlist.m3u8 #EXTINF:-1 tvg-id="CinevisionCanal19.do",Cinevision Canal 19 (720p) https://live.teledom.info:3713/live/cinevisionlive.m3u8 #EXTINF:-1 tvg-id="CitricoTV.do",Cรญtrico TV (240p) -https://cdn4.hostlagarto.com:8081/static/citricotv/playlist.m3u8 +https://rdn.essastream.com:3996/live/citricotvlive.m3u8 #EXTINF:-1 tvg-id="COCOTV.do",COCO TV (720p) https://cloudflare.streamgato.us:3253/live/canalcocotvlive.m3u8 -#EXTINF:-1 tvg-id="ConstanzaTV.do",ConstanzaTV +#EXTINF:-1 tvg-id="ConstanzaTV.do",ConstanzaTV (720p) https://ss9.domint.net:3026/ctv8_str/contanzatv/playlist.m3u8 -#EXTINF:-1 tvg-id="CotubanamaTV.do",Cotubanama TV -https://cdn4.hostlagarto.com:8081/static/cotubanamatv/playlist.m3u8 -#EXTINF:-1 tvg-id="CromTV.do",CromTV -https://cdn4.hostlagarto.com:8081/static/cromtv/playlist.m3u8 +#EXTINF:-1 tvg-id="CotubanamaTV.do",Cotubanama TV (1080p) +https://rdn.essastream.com:3539/live/cotubanamatvlive.m3u8 +#EXTINF:-1 tvg-id="CromTV.do",CromTV (480p) +https://cnn.essastream.com:3333/live/cromtvlive.m3u8 #EXTINF:-1 tvg-id="CTVCanal76.do",CTV Canal 76 (720p) https://vdo2.streamgato.us:3978/live/ctvlive.m3u8 #EXTINF:-1 tvg-id="DANTV.do",DAN TV (720p) [Not 24/7] http://cm.hostlagarto.com:8081/Punaltv/punaltvHD.myStream/playlist.m3u8 -#EXTINF:-1 tvg-id="Digital809TV.do",Digital809 TV +#EXTINF:-1 tvg-id="Digital809TV.do",Digital809 TV (720p) https://inliveserver.com:1936/digital809tv/digital809tv/playlist.m3u8 #EXTINF:-1 tvg-id="DigitalVision63.do",Digital Visiรณn 63 (720p) https://ss3.domint.net:3120/dv6_str/digitalvision/playlist.m3u8 #EXTINF:-1 tvg-id="Ecovision.do",Ecovisiรณn (480p) [Not 24/7] https://vdo1.streamgato.us:3014/live/ecovisionlive.m3u8 -#EXTINF:-1 tvg-id="entelevision.do",Entelevisiรณn -https://video.misistemareseller.com/entelevision/entelevision/playlist.m3u8 +#EXTINF:-1 tvg-id="entelevision.do",Entelevisiรณn (720p) +https://tv.livestreaminggroup.info:3985/live/entelevisionlive.m3u8 #EXTINF:-1 tvg-id="EStyloTV.do",EStylo TV (720p) https://vdo2.streamgato.us:3035/live/estylotvlive.m3u8 -#EXTINF:-1 tvg-id="Farovision.do",Farovisiรณn -https://5790d294af2dc.streamlock.net/8128/8128/playlist.m3u8 +#EXTINF:-1 tvg-id="Farovision.do",Farovisiรณn (720p) +https://streamtv.intervenhosting.net:3754/hybrid/play.m3u8 #EXTINF:-1 tvg-id="FuegoTV.do",Fuego TV (720p) [Not 24/7] https://video.misistemareseller.com/Fuegotv/Fuegotv/playlist.m3u8 -#EXTINF:-1 tvg-id="GalaxiaTeVe.do",GalaxiaTeVe +#EXTINF:-1 tvg-id="GalaxiaTeVe.do",GalaxiaTeVe (360p) https://vdo1.streamgato.us:3839/live/galaxiatvlive.m3u8 #EXTINF:-1 tvg-id="GDMTV.do",GDMTV (720p) [Not 24/7] https://ss2.domint.net:3200/gdm_str/gdmtv/playlist.m3u8 -#EXTINF:-1 tvg-id="GHTelevision.do",GH Television +#EXTINF:-1 tvg-id="GHTelevision.do",GH Television (1080p) https://tv.ghtelevision.com:3018/live/ghtelevisionlive.m3u8 -#EXTINF:-1 tvg-id="GuacaraTV.do",Guacara TV -https://cloudflare.streamgato.us:3180/live/guacaratvlive.m3u8 +#EXTINF:-1 tvg-id="GuacaraTV.do",Guacara TV (720p) +https://imagenuniversaltv.net:3820/live/guacaratvlive.m3u8 #EXTINF:-1 tvg-id="GuaymateTV.do",Guaymate TV (360p) https://5790d294af2dc.streamlock.net/8100/8100/playlist.m3u8 #EXTINF:-1 tvg-id="HainaVision.do",Haina Vision (720p) https://cdn.streamingcpanel.com:3447/live/hainavisionlive.m3u8 -#EXTINF:-1 tvg-id="HAYTV.do",HAY TV (720p) -https://5790d294af2dc.streamlock.net/8078/8078/playlist.m3u8 #EXTINF:-1 tvg-id="HermanasMirabalTV.do",Hermanas Mirabal TV (720p) [Not 24/7] https://cm.hostlagarto.com:4445/Hmtv/hmtv.myStream/playlist.m3u8 -#EXTINF:-1 tvg-id="HilandoFinoTV.do",Hilando Fino TV -https://pop-hls.iptv-global.net/loadbalancer/hilandofino.m3u8 +#EXTINF:-1 tvg-id="HilandoFinoTV.do",Hilando Fino TV (1080p) +https://hilandofinotv.essastream.com:3606/live/canalhilandofinotvlive.m3u8 #EXTINF:-1 tvg-id="Hits360TV.do",Hits 360 TV (720p) [Not 24/7] http://cm.hostlagarto.com:8081/hits360tv/hits360HD.myStream/playlist.m3u8 -#EXTINF:-1 tvg-id="HM.do",HM (720p) [Geo-blocked] -http://cm.hostlagarto.com:8081/Hmtv/hmtv.myStream/playlist.m3u8 +#EXTINF:-1 tvg-id="HM.do",HMTV (720p) +https://cm.hostlagarto.com:4445/Hmtv/hmtv.myStream/playlist.m3u8 #EXTINF:-1 tvg-id="HTVLive.do",HTV Live (1080p) https://vdo1.streamgato.us:3833/live/canalhtvlivelive.m3u8 #EXTINF:-1 tvg-id="ImagenUniversalTV.do",Imagen Universal TV https://imagenuniversaltv.net:3771/live/iutvlive.m3u8 #EXTINF:-1 tvg-id="JazminTV.do",Jazmรญn TV (360p) https://tvdatta.com:3957/hybrid/play.m3u8 -#EXTINF:-1 tvg-id="LaCaletaTV.do",La Caleta TV -https://cdn4.hostlagarto.com:8081/static/lacaletatv/playlist.m3u8 +#EXTINF:-1 tvg-id="LaCaletaTV.do",La Caleta TV (360p) +https://rdn.essastream.com:3168/live/lacaletatvlive.m3u8 #EXTINF:-1 tvg-id="LAMIATV.do",LA MIA TV (720p) [Not 24/7] -https://ss8.domint.net:3108/mia_str/lamiatv/playlist.m3u8 -#EXTINF:-1 tvg-id="LatinaTVInternacional.do",Latina TV Internacional (480p) -https://ss2.domint.net:3210/ltv_str/latinatv/playlist.m3u8 +https://ss5.domint.net:3184/mia_str/lamiatv/playlist.m3u8 +#EXTINF:-1 tvg-id="LatinaTVInternacional.do",Latina TV Internacional (720p) +https://ss3.domint.net:3156/ltv_str/latinatvint/playlist.m3u8 #EXTINF:-1 tvg-id="LaVozdeMaria.do",La Voz de Marรญa (720p) https://uni01rtmp.tulix.tv/playout2multi9/lavozdemaria.stream/playlist.m3u8 -#EXTINF:-1 tvg-id="LunaTVCanal53.do",Luna TV Canal 53 -https://ss2.domint.net:3228/luna_str/lunatv/playlist.m3u8 +#EXTINF:-1 tvg-id="LunaTVCanal53.do",Luna TV Canal 53 (1080p) +https://streaming.ath.cx:1936/lunatv/lunatv/playlist.m3u8 #EXTINF:-1 tvg-id="MaimonTVCanal3.do",Maimรณn TV Canal 3 (720p) https://ss3.domint.net:3138/mtv_str/maimon/playlist.m3u8 -#EXTINF:-1 tvg-id="MakaoTV.do",Makao TV +#EXTINF:-1 tvg-id="MakaoTV.do",Makao TV (360p) https://live.obslivestream.com/makaomux/tracks-v2a1/playlist.m3u8 -#EXTINF:-1 tvg-id="MegaVisionTV.do",Megavisiรณn +#EXTINF:-1 tvg-id="MegaVisionTV.do",Megavisiรณn TV (480p) http://server3.prostudionetwork.com:1943/megavision/MV/playlist.m3u8 #EXTINF:-1 tvg-id="MegaVisionTV.do",Megavision Canal 43 (480p) [Not 24/7] http://stream3.prostudionetwork.com:1943/megavision/MV/playlist.m3u8 #EXTINF:-1 tvg-id="Microvision10.do",Microvision 10 (720p) [Not 24/7] -http://190.103.183.24:1935/live/MicroHD/playlist.m3u8 +https://streaming.telecablecentral.com.do/live/MicroHD/playlist.m3u8 #EXTINF:-1 tvg-id="MisionELTV.do",Misiรณn ELTV (360p) https://paz.sytes.net:5443/live/streams/misioneltv.m3u8 -#EXTINF:-1 tvg-id="MiTV.do",MiTV +#EXTINF:-1 tvg-id="MiTV.do",MiTV (720p) [Not 24/7] https://ss2.domint.net:3204/mitv_str/mitv/playlist.m3u8 -#EXTINF:-1 tvg-id="MorroTV.do",MorroTV +#EXTINF:-1 tvg-id="MorroTV.do",MorroTV (414p) https://cloudflare.streamgato.us:3044/live/morrotvlive.m3u8 #EXTINF:-1 tvg-id="Mun2TV.do",Mun2TV (720p) https://play.amelbasoluciones.co:3309/live/mun2tvlive.m3u8 -#EXTINF:-1 tvg-id="Musavision.do",Musavision +#EXTINF:-1 tvg-id="Musavision.do",Musavision (1080p) https://soportedvb.click:3827/live/musavisiontvlive.m3u8 -#EXTINF:-1 tvg-id="NaranjaTV.do",Naranja TV +#EXTINF:-1 tvg-id="NaranjaTV.do",Naranja TV (720p) https://cdn.streamingcpanel.com:3526/live/teleraiceslive.m3u8 -#EXTINF:-1 tvg-id="NexxoTV.do",Nexxo TV [Not 24/7] +#EXTINF:-1 tvg-id="NexxoTV.do",Nexxo TV (720p) [Not 24/7] https://cdn3.streamgato.us:3938/live/nexxotvlive.m3u8 -#EXTINF:-1 tvg-id="NitidaTV.do",Nรญtida TV -https://live.teledomdr.com:3131/live/nitidatvlive.m3u8 #EXTINF:-1 tvg-id="OndaTV.do",Onda TV (720p) https://ss5.domint.net:3176/otv_str/ondatv/playlist.m3u8 -#EXTINF:-1 tvg-id="ORBITTV.do",ORBIT TV (480p) [Geo-blocked] +#EXTINF:-1 tvg-id="ORBITTV.do",ORBIT TV (480p) [Not 24/7] https://ss3.domint.net:3134/otv_str/orbittv/playlist.m3u8 #EXTINF:-1 tvg-id="OrientalTV.do",Oriental TV (360p) https://paz.sytes.net:5443/live/streams/orientaltv.m3u8 -#EXTINF:-1 tvg-id="PeraviaVision.do",Peravรญa Visiรณn +#EXTINF:-1 tvg-id="PeraviaVision.do",Peravรญa Visiรณn (480p) https://ss5.domint.net:3048/pvv_str/peravia/playlist.m3u8 -#EXTINF:-1 tvg-id="PHTV.do",PH (720p) [Not 24/7] +#EXTINF:-1 tvg-id="PHTV.do",PHTV (720p) [Not 24/7] https://cm.hostlagarto.com:4445/phtv/Phtv.myStream/playlist.m3u8 -#EXTINF:-1 tvg-id="PoliciaTV.do",Policรญa TV (480p) +#EXTINF:-1 tvg-id="PoliciaTV.do",Policรญa TV (480p) [Not 24/7] https://cdn2.streamgato.us/policiard/policiard/playlist.m3u8 #EXTINF:-1 tvg-id="PulaTV.do",Pula TV (720p) https://vdo2.streamgato.us:3239/live/pulatvlive.m3u8 #EXTINF:-1 tvg-id="PuntaCanaTV.do",Punta Cana TV (720p) [Not 24/7] -https://cdn4.hostlagarto.com:8081/static/puntacanatv/playlist.m3u8 +https://rdn.essastream.com:3544/live/puntacanatvlive.m3u8 #EXTINF:-1 tvg-id="RDN.do",RDN (720p) https://cm.hostlagarto.com:4445/rdn/rdn.myStream/playlist.m3u8 #EXTINF:-1 tvg-id="ReadyTVCanal6.do",Ready TV Canal 6 (720p) [Not 24/7] -http://190.103.183.24:1935/ReadyTV/ReadyHD/playlist.m3u8 +https://streaming.telecablecentral.com.do/ReadyTV/ReadyHD/playlist.m3u8 #EXTINF:-1 tvg-id="RedSocialCodiTV.do",Red Social Cรณdi TV (360p) https://video.misistemareseller.com/redsocial/redsocial/playlist.m3u8 #EXTINF:-1 tvg-id="ResplandorTV.do",Resplandor TV (720p) https://ss2.domint.net:3100/rtv_str/rvision/playlist.m3u8 #EXTINF:-1 tvg-id="RNN.do",RNN (720p) [Not 24/7] https://ss2.domint.net:3202/rnn_str/canal27/playlist.m3u8 -#EXTINF:-1 tvg-id="RomanaTVCanal42.do",Romana TV Canal 42 +#EXTINF:-1 tvg-id="RomanaTVCanal42.do",Romana TV Canal 42 (480p) https://videoserver.tmcreativos.com:19360/cvmhbyrcat/cvmhbyrcat.m3u8 -#EXTINF:-1 tvg-id="SanIsidroTV.do",San Isidro TV (360p) [Not 24/7] -https://cdn4.hostlagarto.com:8081/static/sanisidrotv/playlist.m3u8 +#EXTINF:-1 tvg-id="SanIsidroTV.do",San Isidro TV (720p) [Not 24/7] +https://rdn.essastream.com:3160/live/sanisidrotvlive.m3u8 #EXTINF:-1 tvg-id="SantiagoTV.do",Santiago TV (720p) http://cdn.santiagotv.net:3228/live/santiagotvlive.m3u8 -#EXTINF:-1 tvg-id="SenalesTV.do",Seรฑales TV (480p) -https://live.teledom.info:4000/live/senalestvlive.m3u8 -#EXTINF:-1 tvg-id="SensacionTV.do",Sensaciรณn TV +#EXTINF:-1 tvg-id="SensacionTV.do",Sensaciรณn TV (360p) https://ss5.domint.net:3002/stv_str/sensaciontv/playlist.m3u8 #EXTINF:-1 tvg-id="SiTV.do",SiTV (720p) http://190.122.104.221/Player/sitv.m3u8 -#EXTINF:-1 tvg-id="SportVision.do",Sport Visiรณn -https://5fa5de1a545ae.streamlock.net/sportvision35tv/sportvision35tv/playlist.m3u8 -#EXTINF:-1 tvg-id="SuMundoTV.do",Su Mundo TV +#EXTINF:-1 tvg-id="SuMundoTV.do",Su Mundo TV (1080p) https://175036.global.ssl.fastly.net/6217e980d5bee0e090792fdf/live_75f5635097ba11ecb9f1255c8fe65a34/index.m3u8 -#EXTINF:-1 tvg-id="SuperCanal.do",Super Canal 33 (480p) -http://190.122.96.186:8888/http/005 #EXTINF:-1 tvg-id="SuperTV55.do",Super TV 55 (Santiago) (720p) [Not 24/7] -http://ss8.domint.net:2128/stv_str/tv55/playlist.m3u8 -#EXTINF:-1 tvg-id="SuperTV55.do",Super TV 55 (Santiago) (720p) [Not 24/7] -https://ss8.domint.net:3128/stv_str/tv55/master.m3u8 -#EXTINF:-1 tvg-id="TDNMedios.do",TDN Medios (480p) [Not 24/7] -http://108.175.14.125:1935/tdn/tdn/playlist.m3u8 +https://ss2.domint.net:3236/stv_str/supertv55/playlist.m3u8 #EXTINF:-1 tvg-id="Telealtura.do",Telealtura (720p) -https://pacific.direcnode.com:3250/live/telealturalive.m3u8 +https://5790d294af2dc.streamlock.net/telealtura/telealtura/playlist.m3u8 #EXTINF:-1 tvg-id="TeleAntillas.do",Tele Antillas (480p) -https://tunzilla.com/http://51.81.106.157:8084/hls/tantillas.m3u8 +https://tunzilla.com/http://51.81.93.29:8084/hls/tantillas.m3u8 #EXTINF:-1 tvg-id="TeleBendicion.do",TeleBendicion (720p) [Not 24/7] -http://ss8.domint.net:2124/tbt_str/telebendicion/playlist.m3u8 +https://ss5.domint.net:3180/tbt_str/telebendicion/playlist.m3u8 #EXTINF:-1 tvg-id="Telecanal12.do",Telecanal 12 (720p) [Not 24/7] -https://cdn4.hostlagarto.com:8081/static/telecanal12/playlist.m3u8 -#EXTINF:-1 tvg-id="Telecanal28.do",Telecanal 28 (360p) [Geo-blocked] +https://rdn.essastream.com:3258/live/telecanal12live.m3u8 +#EXTINF:-1 tvg-id="Telecanal28.do",Telecanal 28 (360p) [Not 24/7] http://cm.hostlagarto.com:8081/Telecanal-28/telecanal.myStream/playlist.m3u8 -#EXTINF:-1 tvg-id="TeleCaribe.do",Tele Caribe (1080p) -https://cloudflare.streamgato.us:3413/live/telecaribehdlive.m3u8 #EXTINF:-1 tvg-id="TeleCibaoHD.do",TeleCibao (720p) [Not 24/7] http://cm.hostlagarto.com:8081/Telecibao/Telecibao/playlist.m3u8 #EXTINF:-1 tvg-id="TeleCibaoHD.do",TeleCibao (720p) [Not 24/7] https://cm.hostlagarto.com:4445/Telecibao/Telecibao/playlist.m3u8 -#EXTINF:-1 tvg-id="Telecontacto.do",Telecontacto +#EXTINF:-1 tvg-id="Telecontacto.do",Telecontacto (720p) https://vdo1.streamgato.us:3578/live/telecontactohdlive.m3u8 -#EXTINF:-1 tvg-id="Telefuturo.do",Telefuturo Canal 23 (720p) [Not 24/7] -http://ss8.domint.net:2118/tf_str/futu/master.m3u8 -#EXTINF:-1 tvg-id="Telefuturo.do",Telefuturo +#EXTINF:-1 tvg-id="Telefuturo.do",Telefuturo (1080p) https://ss9.domint.net:3054/tf_str/telefuturo/playlist.m3u8 #EXTINF:-1 tvg-id="Teleimpacto.do",Teleimpacto (720p) [Not 24/7] -http://190.122.96.188:8888/http/013 +https://vpss2003.streamprolive.com/hls/live.m3u8 #EXTINF:-1 tvg-id="Telemax.do",Telemax (1080p) https://cdn2.streamgato.us/telemax/telemax/playlist.m3u8 #EXTINF:-1 tvg-id="Telemilenio.do",Telemilenio (720p) [Not 24/7] http://cm.hostlagarto.com:8081/Telemilenio/Telemilenio.myStream/playlist.m3u8 #EXTINF:-1 tvg-id="Telenord8.do",Telenord 8 (1080p) [Not 24/7] http://newyorkstream.ddns.net:1935/telenord8/telenord8/playlist.m3u8 -#EXTINF:-1 tvg-id="Telenord10.do",Telenord Canal 10 (1080p) [Not 24/7] +#EXTINF:-1 tvg-id="Telenord10.do",Telenord Canal 10 (720p) [Not 24/7] http://newyorkstream.ddns.net:1935/telenord10/telenord10/playlist.m3u8 #EXTINF:-1 tvg-id="Telenord12.do",Telenord 12 (720p) [Not 24/7] http://newyorkstream.ddns.net:1935/telenord12/telenord12/playlist.m3u8 -#EXTINF:-1 tvg-id="Telenovisa43.do",Telenovisa 43 -http://ramgolive.ddns.net:1935/telenovisa43/telenovisa43/playlist.m3u8 +#EXTINF:-1 tvg-id="Telenovisa43.do",Telenovisa 43 (720p) +http://streamatlantistv.ddns.net:8081/telenovisa43/telenovisa43/playlist.m3u8 #EXTINF:-1 tvg-id="TeleOriental.do",Tele Oriental (720p) https://vdo1.streamgato.us:3592/live/teleorientaldigitallive.m3u8 #EXTINF:-1 tvg-id="TeleRadioNorte.do",TeleRadioNorte (720p) https://angelistic.live:3785/live/tvoficiallive.m3u8 -#EXTINF:-1 tvg-id="Telesantodomingo.do",Telesantodomingo +#EXTINF:-1 tvg-id="Telesantodomingo.do",Telesantodomingo (720p) https://cdn5.streamgato.us:3315/live/telesantodomingolive.m3u8 #EXTINF:-1 tvg-id="Telesistema11.do",Telesistema (480p) -http://51.81.93.239:8084/hls/tsistemas.m3u8 +https://tunzilla.com/http://51.81.106.157:8084/hls/tsistemas.m3u8 #EXTINF:-1 tvg-id="TelesurCanal10.do",Telesur Canal 10 (720p) https://ss3.domint.net:3124/tls_str/telesur/playlist.m3u8 -#EXTINF:-1 tvg-id="Teletur.do",Teletur -https://cdn4.hostlagarto.com:8081/static/teletur/playlist.m3u8 +#EXTINF:-1 tvg-id="Teletur.do",Teletur (1080p) +https://cloudflare.streamgato.us:3227/live/teleturtvlive.m3u8 #EXTINF:-1 tvg-id="Teleunion.do",Teleunion (480p) [Not 24/7] http://server3.prostudionetwork.com:1945/teleunion/TU/playlist.m3u8 -#EXTINF:-1 tvg-id="Teleuniverso.do",Teleuniverso +#EXTINF:-1 tvg-id="Teleuniverso.do",Teleuniverso (720p) https://teleuniversotv.streamgato.us:3110/live/teleuniversotvlive.m3u8 #EXTINF:-1 tvg-id="Telever.do",Telever (1080p) [Not 24/7] https://servilive.com:3758/live/televerlive.m3u8 @@ -253,41 +233,37 @@ https://servilive.com:3758/live/televerlive.m3u8 http://cm.hostlagarto.com:8081/ESTV/estv.myStream/playlist.m3u8?fluxustv.m3u8= #EXTINF:-1 tvg-id="TNICanal51.do",TNI Canal51 (720p) [Not 24/7] https://ss5.domint.net:3188/tni_str/tni51/playlist.m3u8 -#EXTINF:-1 tvg-id="TRA2.do",TRA 2 (720p) -https://live.teledom.info:3242/live/teleradiohdlive.m3u8 -#EXTINF:-1 tvg-id="TRANoticias.do",TRA Noticias -https://live.teledom.info:3625/live/tra45live.m3u8 +#EXTINF:-1 tvg-id="TRA2.do",TRA 2 (576p) +https://203677.global.ssl.fastly.net/64b98ca5465883a424fe1c82/live_dabf38f04a9d11ee8eeb577c693b7d74/index.m3u8 +#EXTINF:-1 tvg-id="TRANoticias.do",TRA Noticias (576p) +https://203677.global.ssl.fastly.net/64b98ca5465883a424fe1c82/live_5d48c3204a9b11eea0c82f8ad2e16732/index.m3u8 #EXTINF:-1 tvg-id="TuMusicaHD.do",Tu Mรบsica HD (1080p) https://cloudflare.streamgato.us:3125/live/megacinetvlive.m3u8 #EXTINF:-1 tvg-id="TV10SanJuan.do",TV 10 San Juan (720p) https://cloud2.streaminglivehd.com:1936/8024/8024/playlist.m3u8 -#EXTINF:-1 tvg-id="TVDaja.do",TV Daja -https://cm.hostlagarto.com:4445/Dajatv/Dajatv.myStream/playlist.m3u8 +#EXTINF:-1 tvg-id="TVDaja.do",TV Daja (1080p) +https://rdn.essastream.com:3388/live/dajatvlive.m3u8 #EXTINF:-1 tvg-id="TVExitos.do",TV ร‰xitos (720p) [Not 24/7] https://vdo1.streamgato.us:3359/live/tvexitoslive.m3u8 -#EXTINF:-1 tvg-id="TVHigueyDigital.do",TV Higuey Digital +#EXTINF:-1 tvg-id="TVHigueyDigital.do",TV Higuey Digital (720p) https://vdo1.streamgato.us:3046/live/tvhigueycanal12live.m3u8 #EXTINF:-1 tvg-id="TVMontanaCanal10.do",TV Montaรฑa Canal 10 (1080p) https://ss5.domint.net:3064/tvm_str/montanatv/playlist.m3u8 -#EXTINF:-1 tvg-id="TVO.do",TVO -https://rctvhd.net:8081/tvoromanalive/index.m3u8 +#EXTINF:-1 tvg-id="TVO.do",TVO (720p) +https://cdn.mycloudstream.io/hls/live/broadcast/aa5i1jfn/index.m3u8?DVR #EXTINF:-1 tvg-id="TVPlata.do",TV Plata (720p) https://ss9.domint.net:3032/tvp_str/tvp2111/playlist.m3u8 -#EXTINF:-1 tvg-id="TVS.do",TVS (540p) +#EXTINF:-1 tvg-id="TVS.do",TVS (540p) [Not 24/7] http://cm.hostlagarto.com:8081/Tvstv/TvstvHD.myStream/playlist.m3u8 -#EXTINF:-1 tvg-id="TVVision.do",TV Visiรณn (720p) +#EXTINF:-1 tvg-id="TVVision.do",TV Visiรณn (720p) [Not 24/7] https://cloudflare.streamgato.us:3691/live/tvvisionlive.m3u8 -#EXTINF:-1 tvg-id="UrbancristTV.do",Urbancrist TV (720p) -https://5790d294af2dc.streamlock.net/8160/8160/playlist.m3u8 -#EXTINF:-1 tvg-id="Vallevision.do",Vallevision (720p) [Not 24/7] -http://190.103.183.24:1935/Vallevision/ValleHD/playlist.m3u8 #EXTINF:-1 tvg-id="Vallevision.do",Vallevision Canal 10 (720p) [Not 24/7] https://streaming.telecablecentral.com.do/Vallevision/ValleHD/playlist.m3u8 #EXTINF:-1 tvg-id="VegavisionCanal18.do",Vegavisiรณn Canal 18 (720p) -https://cdn4.hostlagarto.com:8081/static/canal18hd/playlist.m3u8 +https://rdn.essastream.com:3400/live/canal18hdlive.m3u8 #EXTINF:-1 tvg-id="XtremoChannel.do",Xtremo Channel (720p) https://tv.xtremochannel.com:3730/live/xtremochannellive.m3u8 -#EXTINF:-1 tvg-id="Yunavision.do",Yunavisiรณn +#EXTINF:-1 tvg-id="Yunavision.do",Yunavisiรณn (720p) https://ss9.domint.net:3036/yv_str/yunavision/playlist.m3u8 #EXTINF:-1 tvg-id="Zol106.do",Zol106 (720p) [Not 24/7] https://ss3.domint.net:3108/zol_str/vzol/playlist.m3u8 @@ -295,5 +271,53 @@ https://ss3.domint.net:3108/zol_str/vzol/playlist.m3u8 https://lb00zdigital.streamprolive.com/mnt/hls/live.m3u8 #EXTINF:-1 tvg-id="Area809ElOriginal.do",Area 809 El Original (1080p) https://samson.streamerr.co:8081/rudydurisimotv/index.m3u8 -#EXTINF:-1 tvg-id="LunaTVCanal53.do",LunaTV (1080p) -https://streaming.ath.cx:1936/lunatv/lunatv/playlist.m3u8 +#EXTINF:-1 tvg-id="Telemicro.do",Telemicro (480p) +http://51.81.93.239:8084/hls/tmicro.m3u8 +#EXTINF:-1 tvg-id="Digital15.do",Digital 15 (480p) +http://51.81.93.29:8084/hls/d15.m3u8 +#EXTINF:-1 tvg-id="Telecentro.do",Telecentro (480p) +http://51.81.93.239:8084/hls/telecentro.m3u8 +#EXTINF:-1 tvg-id="ColorVision.do",Color Visiรณn (720p) [Not 24/7] +http://paz.sytes.net:32769/memfs/6aa68aa7-49e0-427c-be37-d60daecb939f.m3u8 +#EXTINF:-1 tvg-id="BonchesLatinosTV.do",Bonches Latinos TV (720p) +https://ss5.domint.net:3172/btv_str/bonchestv/playlist.m3u8 +#EXTINF:-1 tvg-id="ClaroTelevisionDominicana.do",Claro Televisiรณn Dominicana (360p) +https://vsrv2.az-streamingserver.com:3960/live/claroteledomlive.m3u8 +#EXTINF:-1 tvg-id="ClaroVisionTV.do",Claro Visiรณn TV (720p) +https://vsrv2.az-streamingserver.com:3057/live/clarovisiontvlive.m3u8 +#EXTINF:-1 tvg-id="El75.do",El 75 (720p) +https://castv10.plugstreaming.com:19360/el75/el75.m3u8 +#EXTINF:-1 tvg-id="Enntivision.do",Enntivisiรณn (720p) +https://rdn.essastream.com:3356/live/enntivisiontvlive.m3u8 +#EXTINF:-1 tvg-id="FRATATV.do",FRATA TV (720p) +https://cdn9.streamgato.us:3602/live/fratatvlive.m3u8 +#EXTINF:-1 tvg-id="LaVozdelTropico.do",La Voz del Trรณpico (480p) [Not 24/7] +https://ss2.domint.net:3226/vttv_str/tropicotv/playlist.m3u8 +#EXTINF:-1 tvg-id="LocomotionTV.do",Locomotion TV (480p) [Not 24/7] +http://51.222.85.85:81/hls/loco/index.m3u8 +#EXTINF:-1 tvg-id="NisibonTV.do",Nisibon TV (480p) +https://250weu.bozztv.com/ssh101/ssh101/nisibontv48/playlist.m3u8 +#EXTINF:-1 tvg-id="PinponTV.do",Pinpon TV (720p) +https://vdo2.streamgato.us:3613/live/pinpontvlive.m3u8 +#EXTINF:-1 tvg-id="RETV.do",R&E TV (480p) [Not 24/7] +https://multimedia.tmcreativos.com:1936/ekhmygctur/ekhmygctur/playlist.m3u8 +#EXTINF:-1 tvg-id="Rumba985FM.do",Rumba 98.5 FM (720p) +https://ss5.domint.net:3038/rum_str/rumba985fm/playlist.m3u8 +#EXTINF:-1 tvg-id="SomosTopoPointTV.do",Somos Topo Point TV (1080p) [Not 24/7] +https://cloudflare.streamgato.us:3901/live/somostopopointtvlive.m3u8 +#EXTINF:-1 tvg-id="Televida.do",Televida Canal 41 (720p) [Not 24/7] +https://ythls.onrender.com/channel/UCGwhsjKuqSNscX-XjtuF_yA.m3u8 +#EXTINF:-1 tvg-id="TVLuz.do",TV Luz (480p) +https://rdn.essastream.com:3307/live/tvluzlive.m3u8 +#EXTINF:-1 tvg-id="VegaTeve.do",VegaTeve (1080p) [Not 24/7] +https://kali.vdopanel.com:3396/live/arseniolive.m3u8 +#EXTINF:-1 tvg-id="VTVCanal32.do",VTV Canal 32 (1080p) +https://cnn.livestreaminggroup.info:3507/live/vtv32live.m3u8 +#EXTINF:-1 tvg-id="CanaTVDigital.do",Cana TV Digital (720p) [Not 24/7] +https://livetv.305streamhd.com:3707/live/canatvdigitallive.m3u8 +#EXTINF:-1 tvg-id="ValleNuevoTV.do",Valle Nuevo TV (720p) [Not 24/7] +https://vdo2.streamgato.us:3639/live/generacionestvlive.m3u8 +#EXTINF:-1 tvg-id="Super7FM.do",Super7FM (720p) +https://tv.livestreaminggroup.info:3295/live/super7tvlive.m3u8 +#EXTINF:-1 tvg-id="DimeloTV.do",Dimelo TV (1080p) +https://cloud2.streaminglivehd.com:19360/8062/8062.m3u8 diff --git a/streams/mx.m3u b/streams/mx.m3u index f43badd2c..912944b91 100644 --- a/streams/mx.m3u +++ b/streams/mx.m3u @@ -13,17 +13,13 @@ https://mdstrm.com/live-stream-playlist/60b56be1000ea50835fa1e63.m3u8 https://mdstrm.com/live-stream-playlist/609b243156cca108312822a6.m3u8 #EXTINF:-1 tvg-id="B15.mx",B15 (1080p) https://60ed5b6d0df78.streamlock.net:1936/envio2/envio2/playlist.m3u8 -#EXTINF:-1 tvg-id="Canal5.mx",Canal 5 (480p) -http://190.61.102.67:2000/play/a038/index.m3u8 #EXTINF:-1 tvg-id="Canal10Cancun.mx",Canal 10 Cancรบn (720p) [Not 24/7] http://stream2.dynalias.com:1935/live/tvlive1/playlist.m3u8 -#EXTINF:-1 tvg-id="Canal22Nacional.mx",Canal 22 Nacional (720p) [Geo-blocked] -http://mc-qs.lanesh4d0w.tech/iptv-query?streaming-ip=https://conceptoweb-studio.com/radio/video/canal22/ #EXTINF:-1 tvg-id="Canal26.mx",Canal 26 Aguascalientes (1080p) https://60417ddeaf0d9.streamlock.net/telemetrika3/smil:telemetrika3.smil/playlist.m3u8 #EXTINF:-1 tvg-id="Canal28.mx",Canal 28 (720p) [Not 24/7] https://api.new.livestream.com/accounts/3789491/events/8003011/live.m3u8 -#EXTINF:-1 tvg-id="Canal44.mx",Canal 44 Ciudad Juรกrez (720p) [Geo-blocked] +#EXTINF:-1 tvg-id="XHIJTDT.mx",Canal 44 Ciudad Juรกrez (720p) [Geo-blocked] https://5e50264bd6766.streamlock.net/canal44/videocanal44/playlist.m3u8 #EXTINF:-1 tvg-id="Canal44.mx",Canal 44 Chihuahua (720p) [Not 24/7] https://5e50264bd6766.streamlock.net/canal442/videocanal442/playlist.m3u8 @@ -41,14 +37,10 @@ https://video.cdmx.gob.mx/livestream/stream.m3u8 https://playout.cdn.cartoonnetwork.com.br/playout_04/playlist-720p.m3u8 #EXTINF:-1 tvg-id="CartoonNetworkMexico.mx",Cartoon Network Mรฉxico (720p) https://playout.cdn.cartoonnetwork.com.br/playout_02/playlist-720p.m3u8 -#EXTINF:-1 tvg-id="CBTVMichoacan.mx",CB TV Michoacรกn (720p) -https://5ca3e84a76d30.streamlock.net/cbtv/videocbtv/playlist.m3u8 #EXTINF:-1 tvg-id="ConectaTV.mx",Conecta TV (720p) -http://204.12.211.210:1935/conectatv/conectatv/playlist.m3u8 +https://stream8.mexiserver.com:1936/conectatv/conectatv/playlist.m3u8 #EXTINF:-1 tvg-id="CorTV.mx",CorTV (800p) https://stream.oursnetworktv.com/latin/encoder29/playlist.m3u8 -#EXTINF:-1 tvg-id="ElNu9ve.mx",El NU9VE (1080p) -https://linear-352.frequency.stream/352/hls/master/playlist.m3u8 #EXTINF:-1 tvg-id="ExcelsiorTV.mx",Excรฉlsior TV (720p) [Not 24/7] https://ythls.onrender.com/channel/UClqo4ZAAZ01HQdCTlovCgkA.m3u8 #EXTINF:-1 tvg-id="ExpresaTV.mx",Expresa TV (720p) @@ -57,8 +49,6 @@ https://5ca9af4645e15.streamlock.net/teleradio/smil:teleradio.smil/playlist.m3u8 https://filmex-filmex-xumo.amagi.tv/playlist.m3u8 #EXTINF:-1 tvg-id="FilmexClasico.mx",Filmex Clรกsico (1080p) [Geo-blocked] https://filmex-filmexclasico-xumo.amagi.tv/playlist.m3u8 -#EXTINF:-1 tvg-id="Foro.mx",Foro TV (720p) [Geo-blocked] -https://live-streams-notusa.televisa.com/channel02-b/index.m3u8 #EXTINF:-1 tvg-id="Foro.mx",Foro TV (1080p) https://channel02-notusa.akamaized.net/hls/live/2023914/event01/index.m3u8 #EXTINF:-1 tvg-id="HipodromodelasAmericas.mx",Hipรณdromo de las Amรฉricas (480p) [Geo-blocked] @@ -69,7 +59,7 @@ https://live-ilce.ovp-vivaro.digital/ovp-origin-abr/ngrp:6359ef999f3fb_all/playl https://stream8.mexiserver.com:1936/morelostv/morelostv/playlist.m3u8 #EXTINF:-1 tvg-id="IngenioTV.mx",Ingenio TV (720p) [Geo-blocked] https://dgtve-usso.streaming.media.azure.net/f6d9bfec-5e3d-48fb-b42a-d2a233e261ce/ca87097a-e200-4702-b523-2dc1b6bbc40f.ism/manifest(format=m3u8-aapl).m3u8 -#EXTINF:-1 tvg-id="JaliscoTV.mx",Jalisco TV (720p) [Geo-blocked] +#EXTINF:-1 tvg-id="JaliscoTV.mx",Jalisco TV (720p) https://5fa5de1a545ae.streamlock.net/sisjalisciense/sisjalisciense/playlist.m3u8 #EXTINF:-1 tvg-id="JusticiaTV.mx",Justicia TV (720p) https://live-scjn.ovp-vivaro.digital/ovp-origin/638a22b47746d/playlist.m3u8 @@ -81,19 +71,15 @@ https://1601580044.rsc.cdn77.org/live/_jcn_/amlst:Mariavision/master.m3u8 https://5e50264bd6766.streamlock.net/mexiquense/videomexiquense/playlist.m3u8 #EXTINF:-1 tvg-id="MonteMaria.mx",Monte Maria (1080p) https://616eee1852d6c.streamlock.net/live/myStream/playlist.m3u8 -#EXTINF:-1 tvg-id="MonteMaria.mx",Monte Maria (720p) -https://rbaca.livestreamingcdn.com/envivo3/smil:live.smil/playlist.m3u8 -#EXTINF:-1 tvg-id="MultiPremier.mx",Multipremier (480p) -http://201.168.205.12:8000/play/a0cp/index.m3u8 #EXTINF:-1 tvg-id="MVMNoticias.mx",MVM Noticias [Geo-blocked] https://dish.akamaized.net/Content/HLS_HLS_CLR/Live/channel(mvs)/variant.m3u8 #EXTINF:-1 tvg-id="NoticiasCanal10.mx",Noticias Canal 10 (360p) [Not 24/7] https://canal10.mediaflix.istream.mx/wza_live/live/movil/playlist.m3u8 -#EXTINF:-1 tvg-id="NPlus.mx",NMรกs (1080p) [Geo-blocked] +#EXTINF:-1 tvg-id="NPlus.mx",NMรกs (1080p) https://channel07-notusa.akamaized.net/hls/live/2036971/event01/index.m3u8 -#EXTINF:-1 tvg-id="NPlusMedia.mx",NMรกs Media (1080p) [Geo-blocked] +#EXTINF:-1 tvg-id="NPlusMedia.mx",NMรกs Media (1080p) https://channel04-notusa.akamaized.net/hls/live/2029754-b/event01/index.m3u8 -#EXTINF:-1 tvg-id="NPlusMedia.mx",NMรกs Media (1080p) [Geo-blocked] +#EXTINF:-1 tvg-id="NPlusMedia.mx",NMรกs Media (1080p) https://channel04-notusa.akamaized.net/hls/live/2029754/event01/index.m3u8 #EXTINF:-1 tvg-id="NRTMexico.mx",NRT Mรฉxico Canal 4 (720p) https://59e88b197fb16.streamlock.net:4443/live/canal4/playlist.m3u8 @@ -102,14 +88,12 @@ https://5ca9af4645e15.streamlock.net/nuevetv/videonuevetv/.m3u8 #EXTINF:-1 tvg-id="PresumiendoMexico.mx",Presumiendo Mรฉxico (720p) https://5ca39be538307.streamlock.net/telemetrika/smil:telemetrika.smil/playlist.m3u8 #EXTINF:-1 tvg-id="RCGTV2.mx",RCG TV 2 (360p) [Not 24/7] -http://wowzacontrol.com:1936/stream23/stream23/playlist.m3u8 -#EXTINF:-1 tvg-id="RCGTV2.mx",RCG TV 2 (360p) [Not 24/7] -https://5caf24a595d94.streamlock.net:1937/stream23/stream23/playlist.m3u8 +https://5caf24a595d94.streamlock.net:1937/stream56/stream56/playlist.m3u8 #EXTINF:-1 tvg-id="RCGTV.mx",RCG TV (1080p) https://video1.getstreamhosting.com:1936/8172/8172/playlist.m3u8 #EXTINF:-1 tvg-id="RTG.mx",RTG (720p) https://5e50264bd6766.streamlock.net/rtg/videortg/playlist.m3u8 -#EXTINF:-1 tvg-id="RTQQueretaro.mx",RTQ Queretaro (360p) [Not 24/7] +#EXTINF:-1 tvg-id="RTQQueretaro.mx",RTQ Querรฉtaro (360p) [Not 24/7] http://wms.tecnoxia.com:1935/rytqrolive/rytqrolive/master.m3u8 #EXTINF:-1 tvg-id="SintesisTV.mx",Sรญntesis TV (480p) https://raw.githubusercontent.com/azgaresncf/strm2hls/main/streams/sintesis_tv.m3u8 @@ -121,17 +105,17 @@ https://5fa5de1a545ae.streamlock.net/4982/4982/playlist.m3u8 https://servilive.com:3263/live/channel12live.m3u8 #EXTINF:-1 tvg-id="TeleFormula.mx",TeleFรณrmula (720p) [Geo-blocked] https://mdstrm.com/live-stream-playlist/62f2c855f7981b5a5a2d8763.m3u8 -#EXTINF:-1 tvg-id="TelemarCampeche.mx",Telemar Campeche (720p) [Geo-blocked] +#EXTINF:-1 tvg-id="TelemarCampeche.mx",Telemar Campeche (720p) [Not 24/7] https://5e50264bd6766.streamlock.net/telemarcampeche/videotelemarcampeche/playlist.m3u8 #EXTINF:-1 tvg-id="TeleplaySureste.mx",Teleplay Sureste (360p) https://teleplay.mediaflix.istream.mx/livestream/teleplay/livesd/playlist.m3u8 -#EXTINF:-1 tvg-id="Teleritmo.mx",Teleritmo (720p) [Geo-blocked] +#EXTINF:-1 tvg-id="Teleritmo.mx",Teleritmo (720p) [Not 24/7] https://mdstrm.com/live-stream-playlist/57b4dc126338448314449d0c.m3u8 #EXTINF:-1 tvg-id="TlaxcalaTV.mx",Tlaxcala Televisiรณn (360p) [Not 24/7] https://vid.mega00.com:5443/LiveApp/streams/928111829917388844551988/928111829917388844551988.m3u8?token=null -#EXTINF:-1 tvg-id="TransmediaTelevisionMorelia.mx",Transmedia Televisiรณn Morelia (614p) [Not 24/7] +#EXTINF:-1 tvg-id="TransmediaTelevisionMorelia.mx",Transmedia Televisiรณn Morelia (614p) [Geo-blocked] http://streamingcws20.com:1935/tmtv/videotmtv/playlist.m3u8 -#EXTINF:-1 tvg-id="TransmediaTelevisionMorelia.mx",Transmedia Televisiรณn Morelia (614p) [Not 24/7] +#EXTINF:-1 tvg-id="TransmediaTelevisionMorelia.mx",Transmedia Televisiรณn Morelia (614p) [Geo-blocked] https://5ca3e84a76d30.streamlock.net/tmtv/videotmtv/playlist.m3u8 #EXTINF:-1 tvg-id="TRCTV.mx",TRC Televisiรณn (720p) https://stream.oursnetworktv.com/latin/SRTC/playlist.m3u8 @@ -167,37 +151,25 @@ https://5ca3e84a76d30.streamlock.net/gpacifico4/smil:mazatlan.smil/playlist.m3u8 https://5ca3e84a76d30.streamlock.net/gpacifico1/smil:gpculiacan.smil/playlist.m3u8 #EXTINF:-1 tvg-id="TVPLosMochis.mx",TVP Los Mochis (720p) [Not 24/7] https://5ca3e84a76d30.streamlock.net/gpacifico2/mochis.smil/playlist.m3u8 -#EXTINF:-1 tvg-id="TVPObregon.mx",TVP Obregรณn (542p) [Not 24/7] +#EXTINF:-1 tvg-id="TVPObregon.mx",TVP Obregรณn (720p) [Not 24/7] https://5ca3e84a76d30.streamlock.net/gpacifico3/obregon.smil/playlist.m3u8 #EXTINF:-1 tvg-id="TVT.mx",TVT Tabasco (720p) [Not 24/7] https://5e50264bd6766.streamlock.net/tabasco/videotabasco/playlist.m3u8 #EXTINF:-1 tvg-id="TVUJAT.mx",TV UJAT (XHUJAT-TDT) (720p) [Not 24/7] https://5e50264bd6766.streamlock.net/ujat/videoujat/playlist.m3u8 -#EXTINF:-1 tvg-id="TVUNAM.mx",TV UNAM (720p) -https://60ed5b6d0df78.streamlock.net:1936/canalcatorce/canalcatorce/playlist.m3u8 #EXTINF:-1 tvg-id="UltraTVPuebla.mx",Ultra TV Puebla (720p) [Not 24/7] https://5e50264bd6766.streamlock.net/telemetrika2/smil:telemetrika2.smil/playlist.m3u8 #EXTINF:-1 tvg-id="VBMediaTV.mx",VB Media TV (1080p) https://capomo01-enitv.eninetworks.com/locales_vbmedia_publico/index.m3u8 -#EXTINF:-1 tvg-id="ViXCineClub.mx",ViX Cine Club (720p) -https://linear-192.frequency.stream/192/hls/master/playlist.m3u8 -#EXTINF:-1 tvg-id="ViXFamilia.mx",ViX Familia (720p) -https://linear-195.frequency.stream/195/hls/master/playlist.m3u8 #EXTINF:-1 tvg-id="ViXJajaja.mx",ViX Jajaja (1080p) https://d1406h321fcaxw.cloudfront.net/v1/master/3722c60a815c199d9c0ef36c5b73da68a62b09d1/cc-hlqsnnxad8rlq-ssai-prd/dist/samsungtv/310/hls/master/playlist.m3u8 -#EXTINF:-1 tvg-id="ViXLoMejordeLaLiga.mx",ViX Lo Mejor De La Liga MX (720p) -https://linear-193.frequency.stream/193/hls/master/playlist.m3u8 -#EXTINF:-1 tvg-id="VixNovelasdeOro.mx",ViX Novelas de Oro (720p) -https://linear-196.frequency.stream/196/hls/master/playlist.m3u8 -#EXTINF:-1 tvg-id="ViXNovelasdeRomance.mx",ViX Novelas de Romance (720p) -https://linear-194.frequency.stream/194/hls/master/playlist.m3u8 #EXTINF:-1 tvg-id="ViXParejas.mx",ViX Parejas (1080p) https://d1f3q72l8uy8ur.cloudfront.net/v1/master/3722c60a815c199d9c0ef36c5b73da68a62b09d1/cc-z46pswns8dp1b-ssai-prd/dist/samsungtv/318/hls/master/playlist.m3u8 #EXTINF:-1 tvg-id="XEIPNTDT.mx",Once Mexico (1080p) https://vivo.canaloncelive.tv/alivepkgr3/ngrp:cepro_all/playlist.m3u8 #EXTINF:-1 tvg-id="XEJTDT.mx",Canal 50.1 Juรกrez (XEJ-TDT) (614p) https://stream.oursnetworktv.com/latin/juarez50/playlist.m3u8 -#EXTINF:-1 tvg-id="XEWHTDT.mx",Telemax (XEWH-TDT) (720p) +#EXTINF:-1 tvg-id="XEWHTDT.mx",Telemax (XEWH-TDT) (1080p) http://s5.mexside.net:1935/telemax/telemax/playlist.m3u8 #EXTINF:-1 tvg-id="XHBZCTDT.mx",IERTBCS Canal 8 La Paz (1080p) [Not 24/7] https://60ed5b6d0df78.streamlock.net:1936/iertbcs/iertbcs/playlist.m3u8 @@ -218,8 +190,6 @@ http://189.240.210.28:1935/live/setpuebla/playlist.m3u8 #EXTINF:-1 tvg-id="XHSDDTDT.mx",15tv Sabinas (XHSDD-TDT) (360p) https://hls.gvstream.live/telesistemas/15tv.stream/playlist.m3u8 #EXTINF:-1 tvg-id="XHSPRTDT1.mx",Canal Catorce (XHSPR-TDT1) (720p) -https://60ed5b6d0df78.streamlock.net:1936/segundo/segundo/playlist.m3u8 -#EXTINF:-1 tvg-id="XHSPRTDT1.mx",Canal Catorce (XHSPR-TDT1) (720p) https://s6.mexside.net:1936/canal14/canal14/playlist.m3u8 #EXTINF:-1 tvg-id="XHTTGTDT.mx",Canal 10 Chiapas (720p) https://5ca9af4645e15.streamlock.net/chiapas/videochiapas/playlist.m3u8 @@ -233,13 +203,29 @@ https://channel07-notusa.akamaized.net/hls/live/2036971-b/event01/index.m3u8 http://190.61.102.67:2000/play/a08j/index.m3u8 #EXTINF:-1 tvg-id="LasEstrellasLatinAmerica.mx",Las Estrellas Latin America (720p) https://channel01.akamaized.net/hls/live/2022749/event01/index.m3u8 -#EXTINF:-1 tvg-id="XHXTDT1.mx",Las Estrellas-HD (XHX-TDT1) (480p) -http://190.61.102.67:2000/play/a00g/index.m3u8 -#EXTINF:-1 tvg-id="LasEstrellasLatinAmerica.mx",Las Estrellas Latin America (1080p) -https://linear-416.frequency.stream/416/hls/master/playlist.m3u8 #EXTINF:-1 tvg-id="CanalOchoTV.mx",Canal Ocho TV (1080p) https://ssh101.bozztv.com/ssh101/ochotv/playlist.m3u8 -#EXTINF:-1 tvg-id="Bandamax.mx",Bandamax (480p) -http://190.61.102.67:2000/play/a08h/index.m3u8 #EXTINF:-1 tvg-id="UMTV.mx",UMTV (1080p) [Not 24/7] https://60417ddeaf0d9.streamlock.net:443/montemorelos/videomontemorelos/playlist.m3u8 +#EXTINF:-1 tvg-id="RomanzaPlusAfrica.mx",Romanza+ Africa (720p) +https://origin3.afxp.telemedia.co.za/PremiumFree/romanza/playlist.m3u8 +#EXTINF:-1 tvg-id="Canal13Oaxaca.mx",Canal 13 Oaxaca (720p) [Not 24/7] +https://dbdfj5y8nz2u4.cloudfront.net/c13oaxaca/d0dbe915091d400bd8ee7f27f0791303.sdp/playlist.m3u8 +#EXTINF:-1 tvg-id="Canal13Bajio.mx",Canal 13 Bajรญo (720p) [Not 24/7] +https://dbdfj5y8nz2u4.cloudfront.net/c13bajio/d0dbe915091d400bd8ee7f27f0791303.sdp/playlist.m3u8 +#EXTINF:-1 tvg-id="Canal13Campeche.mx",Canal 13 Campeche (720p) [Not 24/7] +https://dbdfj5y8nz2u4.cloudfront.net/c13campeche/d0dbe915091d400bd8ee7f27f0791303.sdp/playlist.m3u8 +#EXTINF:-1 tvg-id="Canal13Chiapas.mx",Canal 13 Chiapas (720p) [Not 24/7] +https://dbdfj5y8nz2u4.cloudfront.net/c13chiapas/d0dbe915091d400bd8ee7f27f0791303.sdp/playlist.m3u8 +#EXTINF:-1 tvg-id="Canal13Michoacan.mx",Canal 13 Michoacรกn (720p) [Not 24/7] +https://dbdfj5y8nz2u4.cloudfront.net/c13michoacan/d0dbe915091d400bd8ee7f27f0791303.sdp/playlist.m3u8 +#EXTINF:-1 tvg-id="Canal13Puebla.mx",Canal 13 Puebla (720p) [Not 24/7] +https://dbdfj5y8nz2u4.cloudfront.net/c13puebla/d0dbe915091d400bd8ee7f27f0791303.sdp/playlist.m3u8 +#EXTINF:-1 tvg-id="Canal13Tabasco.mx",Canal 13 Tabasco (720p) [Not 24/7] +https://dbdfj5y8nz2u4.cloudfront.net/c13tabasco/d0dbe915091d400bd8ee7f27f0791303.sdp/playlist.m3u8 +#EXTINF:-1 tvg-id="Canal13Tapachula.mx",Canal 13 Tapachula (720p) [Not 24/7] +https://dbdfj5y8nz2u4.cloudfront.net/c13tapachula/d0dbe915091d400bd8ee7f27f0791303.sdp/playlist.m3u8 +#EXTINF:-1 tvg-id="Canal13Yucatan.mx",Canal 13 Yucatรกn (720p) [Not 24/7] +https://dbdfj5y8nz2u4.cloudfront.net/c13yucatan/d0dbe915091d400bd8ee7f27f0791303.sdp/playlist.m3u8 +#EXTINF:-1 tvg-id="TN23.mx",TN23 Mรฉxico (720p) [Not 24/7] +https://dbdfj5y8nz2u4.cloudfront.net/TN23/139a1b22959c10235fe85f3db0041ecf.sdp/playlist.m3u8 diff --git a/streams/us_stirr.m3u b/streams/us_stirr.m3u index b9c8f84ee..af8254e30 100644 --- a/streams/us_stirr.m3u +++ b/streams/us_stirr.m3u @@ -7,8 +7,6 @@ https://dai.google.com/linear/hls/event/0e06oV-NTI2ygS2MRQk9ZA/master.m3u8 https://dai.google.com/linear/hls/event/-A9339ixSzydnZQZHd1u2A/master.m3u8 #EXTINF:-1 tvg-id="beINSPORTSXTRA.us",beIN Sports Xtra (1080p) https://dai.google.com/linear/hls/event/3e-9BOvHQrCI9hboMYjb6w/master.m3u8 -#EXTINF:-1 tvg-id="BigLifeTV.us",Big Life TV (720p) -https://biglife.sinclair.wurl.com/manifest/playlist.m3u8 #EXTINF:-1 tvg-id="BloombergTV.us",Bloomberg TV (1080p) [Not 24/7] https://dai.google.com/linear/hls/event/NiumF4GTSGe-pXM-iMsP0A/master.m3u8 #EXTINF:-1 tvg-id="Buzzr.us",Buzzr (1080p) @@ -49,10 +47,6 @@ https://dai.google.com/linear/hls/event/2C5P0JGUSj65s8KpeyIDcQ/master.m3u8 https://dai.google.com/linear/hls/event/N3c94WZQQq2fruixzfcCUQ/master.m3u8 #EXTINF:-1 tvg-id="CineLife.us",STIRR CineLife (1080p) https://dai.google.com/linear/hls/event/PFJ1Jhd6SsSMcu3qq86wzQ/master.m3u8 -#EXTINF:-1 tvg-id="CineLife.us",CineLife (720p) -https://magselect-stirr.amagi.tv/playlist720p.m3u8 -#EXTINF:-1 tvg-id="CineLife.us",CineLife (1080p) -https://magselect-stirr.amagi.tv/playlist1080p.m3u8 #EXTINF:-1 tvg-id="Classica.us",STIRR Classica (1080p) https://dai.google.com/linear/hls/event/AaFxJXOhQl-BsTVC9OCunQ/master.m3u8 #EXTINF:-1 tvg-id="ComedyDynamics.us",STIRR Comedy Dynamics (1080p) @@ -65,8 +59,6 @@ https://usgeowall.sinclairstoryline.com/channel/3e45c6b5354a40f787e0b2aadb0f5d6a http://dai.google.com/linear/hls/event/oIKcyC8QThaW4F2KeB-Tdw/master.m3u8 #EXTINF:-1 tvg-id="DealorNoDeal.us",STIRR Deal or No Deal (720p) [Not 24/7] https://dai.google.com/linear/hls/event/9cq79TtPR6WbyaQGeDlHjA/master.m3u8 -#EXTINF:-1 tvg-id="DealorNoDeal.us",Deal or No Deal (720p) [Not 24/7] -https://endemol-dealornodeal-1.sinclair.wurl.com/manifest/playlist.m3u8 #EXTINF:-1 tvg-id="DickCavett.us",Dick Cavett (768p) https://dai.google.com/linear/hls/event/-NacIpMDTZ2y1bhkJN96Vg/master.m3u8 #EXTINF:-1 tvg-id="Docurama.us",STIRR Docurama (1080p) [Not 24/7] @@ -75,8 +67,6 @@ https://dai.google.com/linear/hls/event/Hx_PEMEsSzOCcZgy0Tq2YQ/master.m3u8 https://dai.google.com/linear/hls/event/dfbBGQhPQQqypdEAjpUGlA/master.m3u8 #EXTINF:-1 tvg-id="DUST.us",Dust (1080p) https://dai.google.com/linear/hls/event/xuMJ1vhQQDGjEWlxK9Qh4w/master.m3u8 -#EXTINF:-1 tvg-id="DUSTx.us",DUSTx (720p) -https://dust.sinclair.wurl.com/manifest/playlist.m3u8 #EXTINF:-1 tvg-id="ElectricNow.us",STIRR Electric Now (1080p) [Not 24/7] https://dai.google.com/linear/hls/event/KsvJAc81Qoewj6opYso6Fw/master.m3u8 #EXTINF:-1 tvg-id="ETLive.us",ET Live (1080p) @@ -93,10 +83,10 @@ https://dai.google.com/linear/hls/event/Va1QEor0SWO_x_SQNyaF0w/master.m3u8 https://dai.google.com/linear/hls/event/ChWV1GupQOWE92uG4DvbkQ/master.m3u8 #EXTINF:-1 tvg-id="GravitasMovies.us",STIRR Gravitas Movies (720p) https://dai.google.com/linear/hls/event/EpqgwRlpQKq73ySVSohJWA/master.m3u8 -#EXTINF:-1 tvg-id="GravitasMovies.us",STIRR Gravitas Movies (720p) -https://gravitas-movies.sinclair.wurl.com/manifest/playlist.m3u8 #EXTINF:-1 tvg-id="HorseShoppingChannel.us",Horse Shopping Channel (720p) https://uplynkcontent.sinclairstoryline.com/channel/26c7a77fd6ed453da6846a16ad0625d9.m3u8 +#EXTINF:-1 tvg-id="HorseShoppingChannel.us",Horse Shopping Channel (720p) [Geo-blocked] +https://playoutengine.sinclairstoryline.com/playout/c16448cc-ef21-44a5-a5b4-192f943b2dbb.m3u8 #EXTINF:-1 tvg-id="HSN.us",STIRR HSN (720p) https://dai.google.com/linear/hls/event/akursTHNTo6qGf1TtlHNsw/master.m3u8 #EXTINF:-1 tvg-id="ItsShowtimeattheApollo.us",STIRR It's Showtime at the Apollo (720p) @@ -111,20 +101,20 @@ https://dai.google.com/linear/hls/event/xC8SDBfbTKCTCa20kFJQXQ/master.m3u8 https://dai.google.com/linear/hls/event/5xreV3X4T9WxeIbrwOmdMA/master.m3u8 #EXTINF:-1 tvg-id="MAVTV.us",STIRR MavTV (720p) https://dai.google.com/linear/hls/event/YoBM0ae5Q62TPdrfFHS4RQ/master.m3u8 -#EXTINF:-1 tvg-id="MAVTV.us",STIRR MavTV (720p) -https://mavtv-1.sinclair.wurl.com/manifest/playlist.m3u8 +#EXTINF:-1 tvg-id="MidnightPulp.us",Midnight Pulp (1080p) +https://dai.google.com/linear/hls/event/1fO2zbpBRyy6S5yve_fnaw/master.m3u8 #EXTINF:-1 tvg-id="Mobcrush.us",Mobcrush (720p) https://dai.google.com/linear/hls/event/LGDVXxxyT8SxrL4-ZodxKw/master.m3u8 #EXTINF:-1 tvg-id="MysteryScienceTheater3000.us",STIRR Mystery Science Theater 3000 (1080p) https://dai.google.com/linear/hls/event/rmBGeSwhQEG64TrT0_JO2A/master.m3u8 #EXTINF:-1 tvg-id="NASATV.us",NASA TV (720p) https://uplynkcontent.sinclairstoryline.com/channel/ddd76fdc1c0a456ba537e4f48e827d3e.m3u8 +#EXTINF:-1 tvg-id="OnTV4U.us",ONTV4U (720p) +https://dai.google.com/linear/hls/event/571lW-W1Th6Go5EV3Qa19Q/master.m3u8 #EXTINF:-1 tvg-id="OutdoorAmerica.us",Outdoor America (720p) https://dai.google.com/linear/hls/event/WB-7LjdsRVm0wVoLZjR8mA/master.m3u8 #EXTINF:-1 tvg-id="OutsideTV.us",STIRR Outside TV (1080p) https://dai.google.com/linear/hls/event/HJAq3zH1SUy_B6fb1j80_Q/master.m3u8 -#EXTINF:-1 tvg-id="OutsideTV.us",Outside TV (1080p) -https://outsidetvplus-stirr.amagi.tv/playlist.m3u8 #EXTINF:-1 tvg-id="PeopleTV.us",STIRR People TV (1080p) https://dai.google.com/linear/hls/event/Fe9LYYCFR5Csif-I5dyMHg/master.m3u8 #EXTINF:-1 tvg-id="PopstarTV.us",STIRR Popstar! TV (1080p) @@ -139,6 +129,8 @@ https://dai.google.com/linear/hls/event/6ANW1HGeSTKzJlnAa9u1AQ/master.m3u8 https://dai.google.com/linear/hls/event/roEbn_l7Tzezwy22F1NSfA/master.m3u8 #EXTINF:-1 tvg-id="Revry.us",STIRR Revry (720p) https://dai.google.com/linear/hls/event/gvO6-Y6TTjCxRf1QALU4VQ/master.m3u8 +#EXTINF:-1 tvg-id="ShopLC.us",Shop LC (720p) +https://dai.google.com/linear/hls/event/9WYzyYxrRvafiVxUGKV2OA/master.m3u8 #EXTINF:-1 tvg-id="ShoutFactoryTV.us",Shout! Factory TV (1080p) https://dai.google.com/linear/hls/event/JX5KKhKKRPqchP3LfXD-1A/master.m3u8 #EXTINF:-1 tvg-id="SoReal.us",So...Real (1080p) @@ -341,6 +333,10 @@ https://dai.google.com/linear/hls/event/dKG_ZFd_S82FPgNxHmhdJw/master.m3u8 https://dai.google.com/linear/hls/event/r9VoxPU7TYmpydEn2ZR0jA/master.m3u8 #EXTINF:-1 tvg-id="STIRRWesterns.us",STIRR Westerns (360p) https://dai.google.com/linear/hls/event/YF2jfXh_QROPxoHEwp1Abw/master.m3u8 +#EXTINF:-1 tvg-id="SwerveSports.us",Swerve Sports (1080p) +https://dai.google.com/linear/hls/event/5qa-mJF2R0iBw8S1JwF7FQ/master.m3u8 +#EXTINF:-1 tvg-id="TBD.us",TBD (720p) +https://dai.google.com/linear/hls/event/_xtY848OSRCm_k0veSjMHg/master.m3u8 #EXTINF:-1 tvg-id="TennisChannel.us",STIRR Tennis Channel (720p) [Geo-blocked] https://playoutengine.sinclairstoryline.com/playout/9f87522c-5a0e-4ff4-b82c-d5564216132f.m3u8 #EXTINF:-1 tvg-id="TennisChannel.us",Tennis Channel (504p) [Geo-blocked] @@ -349,14 +345,10 @@ https://playoutengine.sinclairstoryline.com/playout/9f87522c-5a0e-4ff4-b82c-d556 https://playoutengine.sinclairstoryline.com/playout/9f87522c-5a0e-4ff4-b82c-d5564216132f/g.m3u8 #EXTINF:-1 tvg-id="TheArchive.us",STIRR The Archive (720p) https://dai.google.com/linear/hls/event/MdbYPXWRStmMq1DaQhsBUw/master.m3u8 -#EXTINF:-1 tvg-id="TheAsylum.us",The Asylum (1080p) -https://asylum-stirr.amagi.tv/playlist.m3u8 #EXTINF:-1 tvg-id="TheBobRossChannel.us",STIRR The Bob Ross Channel (240p) https://dai.google.com/linear/hls/event/3dbJrQmVT_-psb-KBYuKQA/master.m3u8 #EXTINF:-1 tvg-id="TheFilmDetective.us",The Film Detective (720p) https://dai.google.com/linear/hls/event/OYH9J7rZSK2fabKXWAYcfA/master.m3u8 -#EXTINF:-1 tvg-id="TheFilmDetective.us",The Film Detective (720p) -https://filmdetective-stirr.amagi.tv/index.m3u8 #EXTINF:-1 tvg-id="TheFirstTV.us",The First (1080p) https://dai.google.com/linear/hls/event/nX39-giHRPuKQiVAhua0Kg/master.m3u8 #EXTINF:-1 tvg-id="TheTimConwayShow.us",The Tim Conway Show (720p) @@ -383,8 +375,6 @@ https://dai.google.com/linear/hls/event/_PDxBUttQYqkxPnmh3VOZA/master.m3u8 https://dai.google.com/linear/hls/event/NeKNJHuzSeCiN_7Fcuo83Q/master.m3u8 #EXTINF:-1 tvg-id="",STIRR Stadium (720p) https://dai.google.com/linear/hls/event/0jRU1DBXSW6a_TFheLfAUQ/master.m3u8 -#EXTINF:-1 tvg-id="",STIRR Stadium (720p) -https://stadium.sinclair.wurl.com/manifest/playlist.m3u8 #EXTINF:-1 tvg-id="",STIRR Stingray Pop Adult (1080p) https://ott-linear-channels.stingray.com/hls/stirr/104.m3u8 #EXTINF:-1 tvg-id="",STIRR TV Mix (720p) diff --git a/streams/us_tubi.m3u b/streams/us_tubi.m3u index b03c7791a..ef1d082ea 100644 --- a/streams/us_tubi.m3u +++ b/streams/us_tubi.m3u @@ -1,115 +1,107 @@ #EXTM3U #EXTINF:-1 tvg-id="EstrellaNews.us",Estrella News (720p) -https://csm-e-eb.csm.tubi.video/csm/live/247083838.m3u8 +https://lnc-estrella.tubi.video/playlist.m3u8 #EXTINF:-1 tvg-id="FoxSoul.us",Fox Soul (720p) https://lnc-fox-soul-scte.tubi.video/index.m3u8 #EXTINF:-1 tvg-id="FoxWeather.us",Fox Weather (720p) -https://csm-e-eb.csm.tubi.video/csm/extlive/tubiprd01,Fox-Weather.m3u8 -#EXTINF:-1 tvg-id="FoxWeather.us",Fox Weather (720p) -https://live-news-manifest.tubi.video/live-news-manifest/csm/extlive/tubiprd01,Fox-Weather.m3u8 +https://lnc-fox-weather.tubi.video/index.m3u8 #EXTINF:-1 tvg-id="KCCIDT1.us",KCCI-TV News Des Moines IA (720p) -https://live-news-manifest.tubi.video/live-news-manifest/csm/extlive/tubiprd01,Cloudfront-KCCI.m3u8 +https://lnc-kcci.tubi.video/playlist.m3u8 #EXTINF:-1 tvg-id="KCPQDT1.us",FOX Q13 Seattle WA (KCPQ) (720p) -https://csm-e-eb.csm.tubi.video/csm/extlive/tubiprd01,p-KCPQ-Monetizer.m3u8 +https://lnc-kcpq.tubi.video/index.m3u8 #EXTINF:-1 tvg-id="KCRADT1.us",KCRA-TV News Sacramento CA (720p) [Not 24/7] -https://live-news-manifest.tubi.video/live-news-manifest/csm/extlive/tubiprd01,Cloudfront-KCRA.m3u8 +https://lnc-kcra.tubi.video/playlist.m3u8 #EXTINF:-1 tvg-id="KDFWDT1.us",FOX 4 Dallas / Fort Worth TX (KDFW) (720p) -https://csm-e-eb.csm.tubi.video/csm/extlive/tubiprd01,p-KDFW-Monetizer.m3u8 +https://lnc-kdfw.tubi.video/index.m3u8 #EXTINF:-1 tvg-id="KETVDT1.us",ABC 7 Omaha NE (KETV) (720p) [Not 24/7] -https://live-news-manifest.tubi.video/live-news-manifest/csm/extlive/tubiprd01,Cloudfront-KETV.m3u8 +https://lnc-ketv.tubi.video/playlist.m3u8 #EXTINF:-1 tvg-id="KHBSDT1.us",KHBS-TV News Fort Smith AR (720p) -https://live-news-manifest.tubi.video/live-news-manifest/csm/extlive/tubiprd01,Cloudfront-KHBS.m3u8 +https://lnc-khbs.tubi.video/playlist.m3u8 #EXTINF:-1 tvg-id="KMBCDT1.us",ABC 9 Kansas City MO (KMBC-TV) (720p) [Not 24/7] -https://live-news-manifest.tubi.video/live-news-manifest/csm/extlive/tubiprd01,Cloudfront-KMBC.m3u8 +https://lnc-kmbc.tubi.video/playlist.m3u8 #EXTINF:-1 tvg-id="KMSPDT1.us",FOX 9 ST Paul Minneapolis MN (KMSP) (720p) -https://csm-e-eb.csm.tubi.video/csm/extlive/tubiprd01,p-KMSP-Monetizer.m3u8 +https://lnc-kmsp.tubi.video/index.m3u8 #EXTINF:-1 tvg-id="KOATDT1.us",KOAT-TV News Albuquerque NM (720p) -https://live-news-manifest.tubi.video/live-news-manifest/csm/extlive/tubiprd01,Cloudfront-KOAT.m3u8 +https://lnc-koat.tubi.video/playlist.m3u8 #EXTINF:-1 tvg-id="KOCODT1.us",ABC 5 Oklahoma City OK (KOCO) (576p) [Not 24/7] -https://csm-e-eb.csm.tubi.video/csm/extlive/tubiprd01,Cloudfront-KOCO.m3u8 +https://lnc-koco.tubi.video/playlist.m3u8 #EXTINF:-1 tvg-id="KRIVDT1.us",FOX 26 Houston TX (KRIV) (720p) -https://csm-e-eb.csm.tubi.video/csm/extlive/tubiprd01,p-KRIV-Monetizer.m3u8 -#EXTINF:-1 tvg-id="KSAZDT1.us",FOX 10 Phoenix AZ (KZAS) (720p) -https://csm-e-eb.csm.tubi.video/csm/extlive/tubiprd01,p-KSAZ-Monetizer.m3u8 +https://lnc-kriv.tubi.video/index.m3u8 +#EXTINF:-1 tvg-id="KSAZDT1.us",FOX 10 Phoenix AZ (KSAZ) (720p) +https://lnc-ksaz.tubi.video/index.m3u8 #EXTINF:-1 tvg-id="KSBWDT1.us",KSBW-TV News Salinas CA (720p) -https://live-news-manifest.tubi.video/live-news-manifest/csm/extlive/tubiprd01,Cloudfront-KSBW.m3u8 +https://lnc-ksbw.tubi.video/playlist.m3u8 #EXTINF:-1 tvg-id="KTBCDT1.us",FOX 7 Austin TX (KTBC) (720p) [Not 24/7] -https://csm-e-eb.csm.tubi.video/csm/extlive/tubiprd01,p-KTBC-Monetizer.m3u8 +https://lnc-ktbc.tubi.video/index.m3u8 #EXTINF:-1 tvg-id="KTTVDT1.us",FOX 11 Los Angeles CA (KTTV) (720p) -https://csm-e-eb.csm.tubi.video/csm/extlive/tubiprd01,p-KTTV-Monetizer.m3u8 +https://lnc-kttv.tubi.video/index.m3u8 #EXTINF:-1 tvg-id="KTVUDT1.us",FOX 2 San Francisco CA (KTVU) (720p) -https://csm-e-eb.csm.tubi.video/csm/extlive/tubiprd01,p-KTVU-Monetizer.m3u8 +https://lnc-ktvu.tubi.video/index.m3u8 #EXTINF:-1 tvg-id="LiveNOWfromFOX.us",LiveNOW from FOX (720p) https://lnc-fox-live-now.tubi.video/index.m3u8 #EXTINF:-1 tvg-id="Localish.us",Localish (720p) -https://live-news-manifest.tubi.video/live-news-manifest/csm/extlive/tubiprd01,Localish.m3u8 +https://lnc-localish.tubi.video/index.m3u8 #EXTINF:-1 tvg-id="News12NewYork.us",News 12 New York (1080p) https://lnc-news12.tubi.video/index.m3u8 -#EXTINF:-1 tvg-id="PeopleTV.us",People TV (1080p) -https://lnc-people-tv.tubi.video/index.m3u8 -#EXTINF:-1 tvg-id="RealMadridTV.es",Real Madrid TV US Version (720p) [Not 24/7] -https://live-news-manifest.tubi.video/live-news-manifest/csm/extlive/tubiprd01,Real-Madrid.m3u8 +#EXTINF:-1 tvg-id="RealMadridTV.es",Real Madrid TV US Version (720p) [Not 24/7] [Geo-blocked] +https://lnc-real-madrid.tubi.video/playlist.m3u8 #EXTINF:-1 tvg-id="Reelz.us",Reelz -https://live-news-manifest.tubi.video/live-news-manifest/csm/extlive/tubiprd01,Reelz.m3u8 -#EXTINF:-1 tvg-id="TODAYAllDay.us",Today All Day (720p) -https://live-news-manifest.tubi.video/live-news-manifest/csm/extlive/tubiprd01,Cloudfront-Today.m3u8 +https://lnc-reelz.tubi.video/playlist.m3u8 #EXTINF:-1 tvg-id="USATODAY.us",USA Today (720p) -https://live-news-manifest.tubi.video/live-news-manifest/csm/extlive/tubiprd01,Cloudfront-USA-Today.m3u8 +https://lnc-usa-today.tubi.video/playlist.m3u8 +#EXTINF:-1 tvg-id="USATODAYSPORTS.us",USA Today SportsWire +https://lnc-sportswire.tubi.video/playlist.m3u8 #EXTINF:-1 tvg-id="WAGADT1.us",FOX 5 Atlanta GA (WAGA-TV) (720p) -https://csm-e-eb.csm.tubi.video/csm/extlive/tubiprd01,p-WAGA-Monetizer.m3u8 +https://lnc-waga.tubi.video/index.m3u8 #EXTINF:-1 tvg-id="WAPTDT1.us",WAPT-TV News Jackson MS (720p) -https://live-news-manifest.tubi.video/live-news-manifest/csm/extlive/tubiprd01,Cloudfront-WAPT.m3u8 +https://lnc-wapt.tubi.video/playlist.m3u8 #EXTINF:-1 tvg-id="WBALDT1.us",WBAL-TV News Baltimore MD (576p) -https://live-news-manifest.tubi.video/live-news-manifest/csm/extlive/tubiprd01,Cloudfront-WBAL.m3u8 +https://lnc-wbal.tubi.video/playlist.m3u8 #EXTINF:-1 tvg-id="WCVBDT1.us",WCVB-TV News Boston MA (720p) [Not 24/7] -https://live-news-manifest.tubi.video/live-news-manifest/csm/extlive/tubiprd01,Cloudfront-WCVB.m3u8 +https://lnc-wcvb.tubi.video/playlist.m3u8 #EXTINF:-1 tvg-id="WDSUDT1.us",NBC 6 New Orleans LA (WDSU) (720p) -https://csm-e-eb.csm.tubi.video/csm/extlive/tubiprd01,Cloudfront-WDSU.m3u8 -#EXTINF:-1 tvg-id="WeatherNation.us",Weathernation (720p) [Geo-blocked] +https://lnc-wdsu.tubi.video/playlist.m3u8 +#EXTINF:-1 tvg-id="WeatherNation.us",Weathernation (720p) https://live-news-manifest.tubi.video/live-news-manifest/csm/extlive/tubiprd01,Cloudfront-Weather-Nation.m3u8 #EXTINF:-1 tvg-id="WESHDT1.us",WESH-TV News Orlando FL (720p) [Not 24/7] -https://live-news-manifest.tubi.video/live-news-manifest/csm/extlive/tubiprd01,Cloudfront-WESH.m3u8 +https://lnc-wesh.tubi.video/playlist.m3u8 #EXTINF:-1 tvg-id="WFLDDT1.us",FOX 32 Chicago IL (WFLD) (720p) -https://csm-e-eb.csm.tubi.video/csm/extlive/tubiprd01,p-WFLD-Monetizer.m3u8 +https://lnc-wfld.tubi.video/index.m3u8 #EXTINF:-1 tvg-id="WGALDT1.us",WGAL-TV News Lancaster PA (720p) [Not 24/7] -https://live-news-manifest.tubi.video/live-news-manifest/csm/extlive/tubiprd01,Cloudfront-WGAL.m3u8 +https://lnc-wgal.tubi.video/playlist.m3u8 #EXTINF:-1 tvg-id="WISNDT1.us",WISN-TV News Milwaukee WI (720p) -https://live-news-manifest.tubi.video/live-news-manifest/csm/extlive/tubiprd01,Cloudfront-WISN.m3u8 +https://lnc-wisn.tubi.video/playlist.m3u8 #EXTINF:-1 tvg-id="WITIDT1.us",FOX 6 Milwaukee WI (WITI) (720p) [Not 24/7] -https://csm-e-eb.csm.tubi.video/csm/extlive/tubiprd01,p-WITI-Monetizer.m3u8 +https://lnc-witi.tubi.video/index.m3u8 #EXTINF:-1 tvg-id="WJBKDT1.us",FOX 2 Detroit MI (WJBK) (720p) [Not 24/7] -https://csm-e-eb.csm.tubi.video/csm/extlive/tubiprd01,p-WJBK-Monetizer.m3u8 +https://lnc-wjbk.tubi.video/index.m3u8 #EXTINF:-1 tvg-id="WJCLDT1.us",WJCL-TV News Savannah GA (720p) -https://live-news-manifest.tubi.video/live-news-manifest/csm/extlive/tubiprd01,Cloudfront-WJCL.m3u8 +https://lnc-wjcl.tubi.video/playlist.m3u8 #EXTINF:-1 tvg-id="WLKYDT1.us",WLKY-TV News Louisville KY (720p) -https://live-news-manifest.tubi.video/live-news-manifest/csm/extlive/tubiprd01,Cloudfront-WLKY.m3u8 +https://lnc-wlky.tubi.video/playlist.m3u8 #EXTINF:-1 tvg-id="WLWTDT1.us",NBC 5 Cincinnati OH (WLWT) (720p) [Not 24/7] -https://live-news-manifest.tubi.video/live-news-manifest/csm/extlive/tubiprd01,Cloudfront-WLWT.m3u8 +https://lnc-wlwt.tubi.video/playlist.m3u8 #EXTINF:-1 tvg-id="WMORDT1.us",WMOR-TV News Lakeland FL (720p) -https://live-news-manifest.tubi.video/live-news-manifest/csm/extlive/tubiprd01,Cloudfront-WMOR.m3u8 +https://lnc-wmor.tubi.video/playlist.m3u8 #EXTINF:-1 tvg-id="WMTWDT1.us",WMTW-TV News Portland ME (720p) -https://live-news-manifest.tubi.video/live-news-manifest/csm/extlive/tubiprd01,Cloudfront-WMTW.m3u8 +https://lnc-wmtw.tubi.video/playlist.m3u8 #EXTINF:-1 tvg-id="WMURDT1.us",ABC 9 Manchester NH (WMUR-TV) (720p) -https://csm-e-eb.csm.tubi.video/csm/extlive/tubiprd01,Cloudfront-WMUR.m3u8 +https://lnc-wmur.tubi.video/playlist.m3u8 #EXTINF:-1 tvg-id="WNYWDT1.us",FOX 5 New York NY (WNYW) (720p) -https://csm-e-eb.csm.tubi.video/csm/extlive/tubiprd01,p-WNYW-Monetizer.m3u8 +https://lnc-wnyw.tubi.video/index.m3u8 #EXTINF:-1 tvg-id="WOFLDT1.us",FOX 35 Orlando FL (WOFL) (720p) -https://csm-e-eb.csm.tubi.video/csm/extlive/tubiprd01,p-WOFL-Monetizer.m3u8 +https://lnc-wofl.tubi.video/index.m3u8 #EXTINF:-1 tvg-id="WPBFDT1.us",WPBF-TV News West Palm Beach FL (720p) -https://live-news-manifest.tubi.video/live-news-manifest/csm/extlive/tubiprd01,Cloudfront-WPBF.m3u8 +https://lnc-wpbf.tubi.video/playlist.m3u8 #EXTINF:-1 tvg-id="WPTZDT1.us",WPTZ-TV News Plattsburgh NY (720p) -https://live-news-manifest.tubi.video/live-news-manifest/csm/extlive/tubiprd01,Cloudfront-WPTZ.m3u8 +https://lnc-wptz.tubi.video/playlist.m3u8 #EXTINF:-1 tvg-id="WTAEDT1.us",ABC 4 Pittsburg PA (WTAE) (720p) -https://live-news-manifest.tubi.video/live-news-manifest/csm/extlive/tubiprd01,Cloudfront-WTAE.m3u8 +https://lnc-wtae.tubi.video/playlist.m3u8 #EXTINF:-1 tvg-id="WTTGDT1.us",FOX 5 Washington DC (WTTG) (720p) -https://csm-e-eb.csm.tubi.video/csm/extlive/tubiprd01,p-WTTG-Monetizer.m3u8 +https://lnc-wttg.tubi.video/index.m3u8 #EXTINF:-1 tvg-id="WTVTDT1.us",FOX 13 Tampa Bay FL (WTVT) (720p) -https://csm-e-eb.csm.tubi.video/csm/extlive/tubiprd01,p-WTVT-Monetizer.m3u8 +https://lnc-wtvt.tubi.video/index.m3u8 #EXTINF:-1 tvg-id="WTXFDT1.us",FOX 29 Philadelphia PA (WTXF-TV) (720p) [Not 24/7] -https://csm-e-eb.csm.tubi.video/csm/extlive/tubiprd01,p-WTXF-Monetizer.m3u8 +https://lnc-wtxf.tubi.video/index.m3u8 #EXTINF:-1 tvg-id="WVTMDT1.us",Very Alabama (576p) -https://csm-e-eb.csm.tubi.video/csm/extlive/tubiprd01,Cloudfront-WVTM.m3u8 -#EXTINF:-1 tvg-id="",CBC News Highlights (720p) -https://csm-e-eb.csm.tubi.video/csm/live/243017997.m3u8 -#EXTINF:-1 tvg-id="",USA Today SportsWire -https://live-news-manifest.tubi.video/live-news-manifest/csm/extlive/tubiprd01,Sportswire.m3u8 +https://lnc-wvtm.tubi.video/playlist.m3u8 diff --git a/tests/__data__/expected/_readme.md b/tests/__data__/expected/_readme.md index cd7ec179f..7cd308c41 100644 --- a/tests/__data__/expected/_readme.md +++ b/tests/__data__/expected/_readme.md @@ -1,4 +1,4 @@ -# IPTV +# IPTV [![update](https://github.com/iptv-org/iptv/actions/workflows/update.yml/badge.svg)](https://github.com/iptv-org/iptv/actions/workflows/update.yml) Collection of publicly available IPTV (Internet Protocol television) channels from all over the world. @@ -59,8 +59,8 @@ Same thing, but split up into separate files: CategoryChannelsPlaylist - Auto0https://iptv-org.github.io/iptv/categories/auto.m3u Animation0https://iptv-org.github.io/iptv/categories/animation.m3u + Auto0https://iptv-org.github.io/iptv/categories/auto.m3u Business0https://iptv-org.github.io/iptv/categories/business.m3u Classic0https://iptv-org.github.io/iptv/categories/classic.m3u Comedy0https://iptv-org.github.io/iptv/categories/comedy.m3u @@ -80,8 +80,8 @@ Same thing, but split up into separate files: Outdoor0https://iptv-org.github.io/iptv/categories/outdoor.m3u Relax0https://iptv-org.github.io/iptv/categories/relax.m3u Religious0https://iptv-org.github.io/iptv/categories/religious.m3u - Series0https://iptv-org.github.io/iptv/categories/series.m3u Science0https://iptv-org.github.io/iptv/categories/science.m3u + Series0https://iptv-org.github.io/iptv/categories/series.m3u Shop0https://iptv-org.github.io/iptv/categories/shop.m3u Sports0https://iptv-org.github.io/iptv/categories/sports.m3u Travel0https://iptv-org.github.io/iptv/categories/travel.m3u @@ -143,257 +143,18 @@ Same thing, but split up into separate files: CountryChannelsPlaylist - ๐Ÿ‡ฆ๐Ÿ‡ซ Afghanistan1https://iptv-org.github.io/iptv/countries/af.m3u - ๐Ÿ‡ฆ๐Ÿ‡ฑ Albania1https://iptv-org.github.io/iptv/countries/al.m3u - ๐Ÿ‡ฉ๐Ÿ‡ฟ Algeria1https://iptv-org.github.io/iptv/countries/dz.m3u - ๐Ÿ‡ฆ๐Ÿ‡ธ American Samoa1https://iptv-org.github.io/iptv/countries/as.m3u - ๐Ÿ‡ฆ๐Ÿ‡ฉ Andorra2https://iptv-org.github.io/iptv/countries/ad.m3u - ๐Ÿ‡ฆ๐Ÿ‡ด Angola1https://iptv-org.github.io/iptv/countries/ao.m3u - ๐Ÿ‡ฆ๐Ÿ‡ฎ Anguilla1https://iptv-org.github.io/iptv/countries/ai.m3u - ๐Ÿ‡ฆ๐Ÿ‡ถ Antarctica1https://iptv-org.github.io/iptv/countries/aq.m3u - ๐Ÿ‡ฆ๐Ÿ‡ฌ Antigua and Barbuda1https://iptv-org.github.io/iptv/countries/ag.m3u - ๐Ÿ‡ฆ๐Ÿ‡ท Argentina1https://iptv-org.github.io/iptv/countries/ar.m3u - ๐Ÿ‡ฆ๐Ÿ‡ฒ Armenia1https://iptv-org.github.io/iptv/countries/am.m3u - ๐Ÿ‡ฆ๐Ÿ‡ผ Aruba1https://iptv-org.github.io/iptv/countries/aw.m3u - ๐Ÿ‡ฆ๐Ÿ‡บ Australia1https://iptv-org.github.io/iptv/countries/au.m3u - ๐Ÿ‡ฆ๐Ÿ‡น Austria1https://iptv-org.github.io/iptv/countries/at.m3u - ๐Ÿ‡ฆ๐Ÿ‡ฟ Azerbaijan1https://iptv-org.github.io/iptv/countries/az.m3u - ๐Ÿ‡ง๐Ÿ‡ธ Bahamas1https://iptv-org.github.io/iptv/countries/bs.m3u - ๐Ÿ‡ง๐Ÿ‡ญ Bahrain1https://iptv-org.github.io/iptv/countries/bh.m3u - ๐Ÿ‡ง๐Ÿ‡ฉ Bangladesh1https://iptv-org.github.io/iptv/countries/bd.m3u - ๐Ÿ‡ง๐Ÿ‡ง Barbados1https://iptv-org.github.io/iptv/countries/bb.m3u - ๐Ÿ‡ง๐Ÿ‡พ Belarus1https://iptv-org.github.io/iptv/countries/by.m3u - ๐Ÿ‡ง๐Ÿ‡ช Belgium1https://iptv-org.github.io/iptv/countries/be.m3u - ๐Ÿ‡ง๐Ÿ‡ฟ Belize1https://iptv-org.github.io/iptv/countries/bz.m3u - ๐Ÿ‡ง๐Ÿ‡ฏ Benin1https://iptv-org.github.io/iptv/countries/bj.m3u - ๐Ÿ‡ง๐Ÿ‡ฒ Bermuda1https://iptv-org.github.io/iptv/countries/bm.m3u - ๐Ÿ‡ง๐Ÿ‡น Bhutan1https://iptv-org.github.io/iptv/countries/bt.m3u - ๐Ÿ‡ง๐Ÿ‡ด Bolivia1https://iptv-org.github.io/iptv/countries/bo.m3u - ๐Ÿ‡ง๐Ÿ‡ถ Bonaire1https://iptv-org.github.io/iptv/countries/bq.m3u - ๐Ÿ‡ง๐Ÿ‡ฆ Bosnia and Herzegovina1https://iptv-org.github.io/iptv/countries/ba.m3u - ๐Ÿ‡ง๐Ÿ‡ผ Botswana1https://iptv-org.github.io/iptv/countries/bw.m3u - ๐Ÿ‡ง๐Ÿ‡ป Bouvet Island1https://iptv-org.github.io/iptv/countries/bv.m3u - ๐Ÿ‡ง๐Ÿ‡ท Brazil1https://iptv-org.github.io/iptv/countries/br.m3u - ๐Ÿ‡ฎ๐Ÿ‡ด British Indian Ocean Territory1https://iptv-org.github.io/iptv/countries/io.m3u - ๐Ÿ‡ป๐Ÿ‡ฌ British Virgin Islands1https://iptv-org.github.io/iptv/countries/vg.m3u - ๐Ÿ‡ง๐Ÿ‡ณ Brunei1https://iptv-org.github.io/iptv/countries/bn.m3u - ๐Ÿ‡ง๐Ÿ‡ฌ Bulgaria1https://iptv-org.github.io/iptv/countries/bg.m3u - ๐Ÿ‡ง๐Ÿ‡ซ Burkina Faso1https://iptv-org.github.io/iptv/countries/bf.m3u - ๐Ÿ‡ง๐Ÿ‡ฎ Burundi1https://iptv-org.github.io/iptv/countries/bi.m3u - ๐Ÿ‡ฐ๐Ÿ‡ญ Cambodia1https://iptv-org.github.io/iptv/countries/kh.m3u ๐Ÿ‡จ๐Ÿ‡ฒ Cameroon1https://iptv-org.github.io/iptv/countries/cm.m3u ๐Ÿ‡จ๐Ÿ‡ฆ Canada2https://iptv-org.github.io/iptv/countries/ca.m3u       Ontario1https://iptv-org.github.io/iptv/subdivisions/ca-on.m3u ๐Ÿ‡จ๐Ÿ‡ป Cape Verde1https://iptv-org.github.io/iptv/countries/cv.m3u - ๐Ÿ‡ฐ๐Ÿ‡พ Cayman Islands1https://iptv-org.github.io/iptv/countries/ky.m3u - ๐Ÿ‡จ๐Ÿ‡ซ Central African Republic1https://iptv-org.github.io/iptv/countries/cf.m3u - ๐Ÿ‡น๐Ÿ‡ฉ Chad1https://iptv-org.github.io/iptv/countries/td.m3u - ๐Ÿ‡จ๐Ÿ‡ฑ Chile1https://iptv-org.github.io/iptv/countries/cl.m3u - ๐Ÿ‡จ๐Ÿ‡ณ China1https://iptv-org.github.io/iptv/countries/cn.m3u - ๐Ÿ‡จ๐Ÿ‡ฝ Christmas Island1https://iptv-org.github.io/iptv/countries/cx.m3u - ๐Ÿ‡จ๐Ÿ‡จ Cocos (Keeling) Islands1https://iptv-org.github.io/iptv/countries/cc.m3u - ๐Ÿ‡จ๐Ÿ‡ด Colombia1https://iptv-org.github.io/iptv/countries/co.m3u - ๐Ÿ‡ฐ๐Ÿ‡ฒ Comoros1https://iptv-org.github.io/iptv/countries/km.m3u - ๐Ÿ‡จ๐Ÿ‡ฐ Cook Islands1https://iptv-org.github.io/iptv/countries/ck.m3u - ๐Ÿ‡จ๐Ÿ‡ท Costa Rica1https://iptv-org.github.io/iptv/countries/cr.m3u - ๐Ÿ‡ญ๐Ÿ‡ท Croatia1https://iptv-org.github.io/iptv/countries/hr.m3u - ๐Ÿ‡จ๐Ÿ‡บ Cuba1https://iptv-org.github.io/iptv/countries/cu.m3u - ๐Ÿ‡จ๐Ÿ‡ผ Curacao1https://iptv-org.github.io/iptv/countries/cw.m3u - ๐Ÿ‡จ๐Ÿ‡พ Cyprus1https://iptv-org.github.io/iptv/countries/cy.m3u - ๐Ÿ‡จ๐Ÿ‡ฟ Czech Republic1https://iptv-org.github.io/iptv/countries/cz.m3u - ๐Ÿ‡จ๐Ÿ‡ฉ Democratic Republic of the Congo1https://iptv-org.github.io/iptv/countries/cd.m3u - ๐Ÿ‡ฉ๐Ÿ‡ฐ Denmark1https://iptv-org.github.io/iptv/countries/dk.m3u - ๐Ÿ‡ฉ๐Ÿ‡ฏ Djibouti1https://iptv-org.github.io/iptv/countries/dj.m3u - ๐Ÿ‡ฉ๐Ÿ‡ฒ Dominica1https://iptv-org.github.io/iptv/countries/dm.m3u - ๐Ÿ‡ฉ๐Ÿ‡ด Dominican Republic1https://iptv-org.github.io/iptv/countries/do.m3u - ๐Ÿ‡น๐Ÿ‡ฑ East Timor1https://iptv-org.github.io/iptv/countries/tl.m3u - ๐Ÿ‡ช๐Ÿ‡จ Ecuador1https://iptv-org.github.io/iptv/countries/ec.m3u - ๐Ÿ‡ช๐Ÿ‡ฌ Egypt1https://iptv-org.github.io/iptv/countries/eg.m3u - ๐Ÿ‡ธ๐Ÿ‡ป El Salvador1https://iptv-org.github.io/iptv/countries/sv.m3u - ๐Ÿ‡ฌ๐Ÿ‡ถ Equatorial Guinea1https://iptv-org.github.io/iptv/countries/gq.m3u - ๐Ÿ‡ช๐Ÿ‡ท Eritrea1https://iptv-org.github.io/iptv/countries/er.m3u - ๐Ÿ‡ช๐Ÿ‡ช Estonia1https://iptv-org.github.io/iptv/countries/ee.m3u - ๐Ÿ‡ช๐Ÿ‡น Ethiopia1https://iptv-org.github.io/iptv/countries/et.m3u - ๐Ÿ‡ซ๐Ÿ‡ฐ Falkland Islands1https://iptv-org.github.io/iptv/countries/fk.m3u - ๐Ÿ‡ซ๐Ÿ‡ด Faroe Islands1https://iptv-org.github.io/iptv/countries/fo.m3u - ๐Ÿ‡ซ๐Ÿ‡ฏ Fiji1https://iptv-org.github.io/iptv/countries/fj.m3u - ๐Ÿ‡ซ๐Ÿ‡ฎ Finland1https://iptv-org.github.io/iptv/countries/fi.m3u - ๐Ÿ‡ซ๐Ÿ‡ท France1https://iptv-org.github.io/iptv/countries/fr.m3u - ๐Ÿ‡ฌ๐Ÿ‡ซ French Guiana1https://iptv-org.github.io/iptv/countries/gf.m3u - ๐Ÿ‡ต๐Ÿ‡ซ French Polynesia1https://iptv-org.github.io/iptv/countries/pf.m3u - ๐Ÿ‡น๐Ÿ‡ซ French Southern Territories1https://iptv-org.github.io/iptv/countries/tf.m3u - ๐Ÿ‡ฌ๐Ÿ‡ฆ Gabon1https://iptv-org.github.io/iptv/countries/ga.m3u - ๐Ÿ‡ฌ๐Ÿ‡ฒ Gambia1https://iptv-org.github.io/iptv/countries/gm.m3u - ๐Ÿ‡ฌ๐Ÿ‡ช Georgia1https://iptv-org.github.io/iptv/countries/ge.m3u - ๐Ÿ‡ฉ๐Ÿ‡ช Germany1https://iptv-org.github.io/iptv/countries/de.m3u - ๐Ÿ‡ฌ๐Ÿ‡ญ Ghana1https://iptv-org.github.io/iptv/countries/gh.m3u - ๐Ÿ‡ฌ๐Ÿ‡ฎ Gibraltar1https://iptv-org.github.io/iptv/countries/gi.m3u - ๐Ÿ‡ฌ๐Ÿ‡ท Greece1https://iptv-org.github.io/iptv/countries/gr.m3u - ๐Ÿ‡ฌ๐Ÿ‡ฑ Greenland1https://iptv-org.github.io/iptv/countries/gl.m3u - ๐Ÿ‡ฌ๐Ÿ‡ฉ Grenada1https://iptv-org.github.io/iptv/countries/gd.m3u - ๐Ÿ‡ฌ๐Ÿ‡ต Guadeloupe1https://iptv-org.github.io/iptv/countries/gp.m3u - ๐Ÿ‡ฌ๐Ÿ‡บ Guam1https://iptv-org.github.io/iptv/countries/gu.m3u - ๐Ÿ‡ฌ๐Ÿ‡น Guatemala1https://iptv-org.github.io/iptv/countries/gt.m3u - ๐Ÿ‡ฌ๐Ÿ‡ฌ Guernsey1https://iptv-org.github.io/iptv/countries/gg.m3u - ๐Ÿ‡ฌ๐Ÿ‡ณ Guinea1https://iptv-org.github.io/iptv/countries/gn.m3u - ๐Ÿ‡ฌ๐Ÿ‡ผ Guinea-Bissau1https://iptv-org.github.io/iptv/countries/gw.m3u - ๐Ÿ‡ฌ๐Ÿ‡พ Guyana1https://iptv-org.github.io/iptv/countries/gy.m3u - ๐Ÿ‡ญ๐Ÿ‡น Haiti1https://iptv-org.github.io/iptv/countries/ht.m3u - ๐Ÿ‡ญ๐Ÿ‡ฒ Heard Island and McDonald Islands1https://iptv-org.github.io/iptv/countries/hm.m3u - ๐Ÿ‡ญ๐Ÿ‡ณ Honduras1https://iptv-org.github.io/iptv/countries/hn.m3u - ๐Ÿ‡ญ๐Ÿ‡ฐ Hong Kong1https://iptv-org.github.io/iptv/countries/hk.m3u - ๐Ÿ‡ญ๐Ÿ‡บ Hungary1https://iptv-org.github.io/iptv/countries/hu.m3u - ๐Ÿ‡ฎ๐Ÿ‡ธ Iceland1https://iptv-org.github.io/iptv/countries/is.m3u - ๐Ÿ‡ฎ๐Ÿ‡ณ India1https://iptv-org.github.io/iptv/countries/in.m3u - ๐Ÿ‡ฎ๐Ÿ‡ฉ Indonesia1https://iptv-org.github.io/iptv/countries/id.m3u - ๐Ÿ‡ฎ๐Ÿ‡ท Iran1https://iptv-org.github.io/iptv/countries/ir.m3u - ๐Ÿ‡ฎ๐Ÿ‡ถ Iraq1https://iptv-org.github.io/iptv/countries/iq.m3u - ๐Ÿ‡ฎ๐Ÿ‡ช Ireland1https://iptv-org.github.io/iptv/countries/ie.m3u - ๐Ÿ‡ฎ๐Ÿ‡ฒ Isle of Man1https://iptv-org.github.io/iptv/countries/im.m3u - ๐Ÿ‡ฎ๐Ÿ‡ฑ Israel1https://iptv-org.github.io/iptv/countries/il.m3u - ๐Ÿ‡ฎ๐Ÿ‡น Italy1https://iptv-org.github.io/iptv/countries/it.m3u - ๐Ÿ‡จ๐Ÿ‡ฎ Ivory Coast1https://iptv-org.github.io/iptv/countries/ci.m3u - ๐Ÿ‡ฏ๐Ÿ‡ฒ Jamaica1https://iptv-org.github.io/iptv/countries/jm.m3u - ๐Ÿ‡ฏ๐Ÿ‡ต Japan1https://iptv-org.github.io/iptv/countries/jp.m3u - ๐Ÿ‡ฏ๐Ÿ‡ช Jersey1https://iptv-org.github.io/iptv/countries/je.m3u - ๐Ÿ‡ฏ๐Ÿ‡ด Jordan1https://iptv-org.github.io/iptv/countries/jo.m3u - ๐Ÿ‡ฐ๐Ÿ‡ฟ Kazakhstan1https://iptv-org.github.io/iptv/countries/kz.m3u - ๐Ÿ‡ฐ๐Ÿ‡ช Kenya1https://iptv-org.github.io/iptv/countries/ke.m3u - ๐Ÿ‡ฐ๐Ÿ‡ฎ Kiribati1https://iptv-org.github.io/iptv/countries/ki.m3u - ๐Ÿ‡ฝ๐Ÿ‡ฐ Kosovo1https://iptv-org.github.io/iptv/countries/xk.m3u - ๐Ÿ‡ฐ๐Ÿ‡ผ Kuwait1https://iptv-org.github.io/iptv/countries/kw.m3u - ๐Ÿ‡ฐ๐Ÿ‡ฌ Kyrgyzstan1https://iptv-org.github.io/iptv/countries/kg.m3u - ๐Ÿ‡ฑ๐Ÿ‡ฆ Laos1https://iptv-org.github.io/iptv/countries/la.m3u - ๐Ÿ‡ฑ๐Ÿ‡ป Latvia1https://iptv-org.github.io/iptv/countries/lv.m3u - ๐Ÿ‡ฑ๐Ÿ‡ง Lebanon1https://iptv-org.github.io/iptv/countries/lb.m3u - ๐Ÿ‡ฑ๐Ÿ‡ธ Lesotho1https://iptv-org.github.io/iptv/countries/ls.m3u - ๐Ÿ‡ฑ๐Ÿ‡ท Liberia1https://iptv-org.github.io/iptv/countries/lr.m3u - ๐Ÿ‡ฑ๐Ÿ‡พ Libya1https://iptv-org.github.io/iptv/countries/ly.m3u - ๐Ÿ‡ฑ๐Ÿ‡ฎ Liechtenstein1https://iptv-org.github.io/iptv/countries/li.m3u - ๐Ÿ‡ฑ๐Ÿ‡น Lithuania1https://iptv-org.github.io/iptv/countries/lt.m3u - ๐Ÿ‡ฑ๐Ÿ‡บ Luxembourg1https://iptv-org.github.io/iptv/countries/lu.m3u - ๐Ÿ‡ฒ๐Ÿ‡ด Macao1https://iptv-org.github.io/iptv/countries/mo.m3u - ๐Ÿ‡ฒ๐Ÿ‡ฌ Madagascar1https://iptv-org.github.io/iptv/countries/mg.m3u - ๐Ÿ‡ฒ๐Ÿ‡ผ Malawi1https://iptv-org.github.io/iptv/countries/mw.m3u - ๐Ÿ‡ฒ๐Ÿ‡พ Malaysia1https://iptv-org.github.io/iptv/countries/my.m3u - ๐Ÿ‡ฒ๐Ÿ‡ป Maldives1https://iptv-org.github.io/iptv/countries/mv.m3u - ๐Ÿ‡ฒ๐Ÿ‡ฑ Mali1https://iptv-org.github.io/iptv/countries/ml.m3u - ๐Ÿ‡ฒ๐Ÿ‡น Malta1https://iptv-org.github.io/iptv/countries/mt.m3u - ๐Ÿ‡ฒ๐Ÿ‡ญ Marshall Islands1https://iptv-org.github.io/iptv/countries/mh.m3u - ๐Ÿ‡ฒ๐Ÿ‡ถ Martinique1https://iptv-org.github.io/iptv/countries/mq.m3u - ๐Ÿ‡ฒ๐Ÿ‡ท Mauritania1https://iptv-org.github.io/iptv/countries/mr.m3u - ๐Ÿ‡ฒ๐Ÿ‡บ Mauritius1https://iptv-org.github.io/iptv/countries/mu.m3u - ๐Ÿ‡พ๐Ÿ‡น Mayotte1https://iptv-org.github.io/iptv/countries/yt.m3u - ๐Ÿ‡ฒ๐Ÿ‡ฝ Mexico1https://iptv-org.github.io/iptv/countries/mx.m3u - ๐Ÿ‡ซ๐Ÿ‡ฒ Micronesia1https://iptv-org.github.io/iptv/countries/fm.m3u - ๐Ÿ‡ฒ๐Ÿ‡ฉ Moldova1https://iptv-org.github.io/iptv/countries/md.m3u - ๐Ÿ‡ฒ๐Ÿ‡จ Monaco1https://iptv-org.github.io/iptv/countries/mc.m3u - ๐Ÿ‡ฒ๐Ÿ‡ณ Mongolia1https://iptv-org.github.io/iptv/countries/mn.m3u - ๐Ÿ‡ฒ๐Ÿ‡ช Montenegro1https://iptv-org.github.io/iptv/countries/me.m3u - ๐Ÿ‡ฒ๐Ÿ‡ธ Montserrat1https://iptv-org.github.io/iptv/countries/ms.m3u - ๐Ÿ‡ฒ๐Ÿ‡ฆ Morocco1https://iptv-org.github.io/iptv/countries/ma.m3u - ๐Ÿ‡ฒ๐Ÿ‡ฟ Mozambique1https://iptv-org.github.io/iptv/countries/mz.m3u - ๐Ÿ‡ฒ๐Ÿ‡ฒ Myanmar (Burma)1https://iptv-org.github.io/iptv/countries/mm.m3u - ๐Ÿ‡ณ๐Ÿ‡ฆ Namibia1https://iptv-org.github.io/iptv/countries/na.m3u - ๐Ÿ‡ณ๐Ÿ‡ท Nauru1https://iptv-org.github.io/iptv/countries/nr.m3u - ๐Ÿ‡ณ๐Ÿ‡ต Nepal1https://iptv-org.github.io/iptv/countries/np.m3u - ๐Ÿ‡ณ๐Ÿ‡ฑ Netherlands1https://iptv-org.github.io/iptv/countries/nl.m3u - ๐Ÿ‡ณ๐Ÿ‡จ New Caledonia1https://iptv-org.github.io/iptv/countries/nc.m3u - ๐Ÿ‡ณ๐Ÿ‡ฟ New Zealand1https://iptv-org.github.io/iptv/countries/nz.m3u - ๐Ÿ‡ณ๐Ÿ‡ฎ Nicaragua1https://iptv-org.github.io/iptv/countries/ni.m3u - ๐Ÿ‡ณ๐Ÿ‡ช Niger1https://iptv-org.github.io/iptv/countries/ne.m3u - ๐Ÿ‡ณ๐Ÿ‡ฌ Nigeria1https://iptv-org.github.io/iptv/countries/ng.m3u - ๐Ÿ‡ณ๐Ÿ‡บ Niue1https://iptv-org.github.io/iptv/countries/nu.m3u - ๐Ÿ‡ณ๐Ÿ‡ซ Norfolk Island1https://iptv-org.github.io/iptv/countries/nf.m3u - ๐Ÿ‡ฐ๐Ÿ‡ต North Korea1https://iptv-org.github.io/iptv/countries/kp.m3u - ๐Ÿ‡ฒ๐Ÿ‡ฐ North Macedonia1https://iptv-org.github.io/iptv/countries/mk.m3u - ๐Ÿ‡ฒ๐Ÿ‡ต Northern Mariana Islands1https://iptv-org.github.io/iptv/countries/mp.m3u - ๐Ÿ‡ณ๐Ÿ‡ด Norway1https://iptv-org.github.io/iptv/countries/no.m3u - ๐Ÿ‡ด๐Ÿ‡ฒ Oman1https://iptv-org.github.io/iptv/countries/om.m3u - ๐Ÿ‡ต๐Ÿ‡ฐ Pakistan1https://iptv-org.github.io/iptv/countries/pk.m3u - ๐Ÿ‡ต๐Ÿ‡ผ Palau1https://iptv-org.github.io/iptv/countries/pw.m3u - ๐Ÿ‡ต๐Ÿ‡ธ Palestine1https://iptv-org.github.io/iptv/countries/ps.m3u - ๐Ÿ‡ต๐Ÿ‡ฆ Panama1https://iptv-org.github.io/iptv/countries/pa.m3u - ๐Ÿ‡ต๐Ÿ‡ฌ Papua New Guinea1https://iptv-org.github.io/iptv/countries/pg.m3u - ๐Ÿ‡ต๐Ÿ‡พ Paraguay1https://iptv-org.github.io/iptv/countries/py.m3u - ๐Ÿ‡ต๐Ÿ‡ช Peru1https://iptv-org.github.io/iptv/countries/pe.m3u - ๐Ÿ‡ต๐Ÿ‡ญ Philippines1https://iptv-org.github.io/iptv/countries/ph.m3u - ๐Ÿ‡ต๐Ÿ‡ณ Pitcairn Islands1https://iptv-org.github.io/iptv/countries/pn.m3u - ๐Ÿ‡ต๐Ÿ‡ฑ Poland1https://iptv-org.github.io/iptv/countries/pl.m3u - ๐Ÿ‡ต๐Ÿ‡น Portugal1https://iptv-org.github.io/iptv/countries/pt.m3u - ๐Ÿ‡ต๐Ÿ‡ท Puerto Rico1https://iptv-org.github.io/iptv/countries/pr.m3u - ๐Ÿ‡ถ๐Ÿ‡ฆ Qatar1https://iptv-org.github.io/iptv/countries/qa.m3u ๐Ÿ‡จ๐Ÿ‡ฌ Republic of the Congo1https://iptv-org.github.io/iptv/countries/cg.m3u + ๐Ÿ‡ท๐Ÿ‡ช Rรฉunion1https://iptv-org.github.io/iptv/countries/re.m3u ๐Ÿ‡ท๐Ÿ‡ด Romania1https://iptv-org.github.io/iptv/countries/ro.m3u ๐Ÿ‡ท๐Ÿ‡บ Russia2https://iptv-org.github.io/iptv/countries/ru.m3u ๐Ÿ‡ท๐Ÿ‡ผ Rwanda1https://iptv-org.github.io/iptv/countries/rw.m3u - ๐Ÿ‡ท๐Ÿ‡ช Rรฉunion1https://iptv-org.github.io/iptv/countries/re.m3u ๐Ÿ‡ง๐Ÿ‡ฑ Saint Barthรฉlemy1https://iptv-org.github.io/iptv/countries/bl.m3u ๐Ÿ‡ธ๐Ÿ‡ญ Saint Helena1https://iptv-org.github.io/iptv/countries/sh.m3u ๐Ÿ‡ฐ๐Ÿ‡ณ Saint Kitts and Nevis1https://iptv-org.github.io/iptv/countries/kn.m3u - ๐Ÿ‡ฑ๐Ÿ‡จ Saint Lucia1https://iptv-org.github.io/iptv/countries/lc.m3u - ๐Ÿ‡ฒ๐Ÿ‡ซ Saint Martin1https://iptv-org.github.io/iptv/countries/mf.m3u - ๐Ÿ‡ต๐Ÿ‡ฒ Saint Pierre and Miquelon1https://iptv-org.github.io/iptv/countries/pm.m3u - ๐Ÿ‡ป๐Ÿ‡จ Saint Vincent and the Grenadines1https://iptv-org.github.io/iptv/countries/vc.m3u - ๐Ÿ‡ผ๐Ÿ‡ธ Samoa1https://iptv-org.github.io/iptv/countries/ws.m3u - ๐Ÿ‡ธ๐Ÿ‡ฒ San Marino1https://iptv-org.github.io/iptv/countries/sm.m3u - ๐Ÿ‡ธ๐Ÿ‡ฆ Saudi Arabia1https://iptv-org.github.io/iptv/countries/sa.m3u - ๐Ÿ‡ธ๐Ÿ‡ณ Senegal1https://iptv-org.github.io/iptv/countries/sn.m3u - ๐Ÿ‡ท๐Ÿ‡ธ Serbia1https://iptv-org.github.io/iptv/countries/rs.m3u - ๐Ÿ‡ธ๐Ÿ‡จ Seychelles1https://iptv-org.github.io/iptv/countries/sc.m3u - ๐Ÿ‡ธ๐Ÿ‡ฑ Sierra Leone1https://iptv-org.github.io/iptv/countries/sl.m3u - ๐Ÿ‡ธ๐Ÿ‡ฌ Singapore1https://iptv-org.github.io/iptv/countries/sg.m3u - ๐Ÿ‡ธ๐Ÿ‡ฝ Sint Maarten1https://iptv-org.github.io/iptv/countries/sx.m3u - ๐Ÿ‡ธ๐Ÿ‡ฐ Slovakia1https://iptv-org.github.io/iptv/countries/sk.m3u - ๐Ÿ‡ธ๐Ÿ‡ฎ Slovenia1https://iptv-org.github.io/iptv/countries/si.m3u - ๐Ÿ‡ธ๐Ÿ‡ง Solomon Islands1https://iptv-org.github.io/iptv/countries/sb.m3u - ๐Ÿ‡ธ๐Ÿ‡ด Somalia1https://iptv-org.github.io/iptv/countries/so.m3u - ๐Ÿ‡ฟ๐Ÿ‡ฆ South Africa1https://iptv-org.github.io/iptv/countries/za.m3u - ๐Ÿ‡ฌ๐Ÿ‡ธ South Georgia and the South Sandwich Islands1https://iptv-org.github.io/iptv/countries/gs.m3u - ๐Ÿ‡ฐ๐Ÿ‡ท South Korea1https://iptv-org.github.io/iptv/countries/kr.m3u - ๐Ÿ‡ธ๐Ÿ‡ธ South Sudan1https://iptv-org.github.io/iptv/countries/ss.m3u - ๐Ÿ‡ช๐Ÿ‡ธ Spain1https://iptv-org.github.io/iptv/countries/es.m3u - ๐Ÿ‡ฑ๐Ÿ‡ฐ Sri Lanka1https://iptv-org.github.io/iptv/countries/lk.m3u - ๐Ÿ‡ธ๐Ÿ‡ฉ Sudan1https://iptv-org.github.io/iptv/countries/sd.m3u - ๐Ÿ‡ธ๐Ÿ‡ท Suriname1https://iptv-org.github.io/iptv/countries/sr.m3u - ๐Ÿ‡ธ๐Ÿ‡ฏ Svalbard and Jan Mayen1https://iptv-org.github.io/iptv/countries/sj.m3u - ๐Ÿ‡ธ๐Ÿ‡ฟ Swaziland1https://iptv-org.github.io/iptv/countries/sz.m3u - ๐Ÿ‡ธ๐Ÿ‡ช Sweden1https://iptv-org.github.io/iptv/countries/se.m3u - ๐Ÿ‡จ๐Ÿ‡ญ Switzerland1https://iptv-org.github.io/iptv/countries/ch.m3u - ๐Ÿ‡ธ๐Ÿ‡พ Syria1https://iptv-org.github.io/iptv/countries/sy.m3u - ๐Ÿ‡ธ๐Ÿ‡น Sรฃo Tomรฉ and Prรญncipe1https://iptv-org.github.io/iptv/countries/st.m3u - ๐Ÿ‡น๐Ÿ‡ผ Taiwan1https://iptv-org.github.io/iptv/countries/tw.m3u - ๐Ÿ‡น๐Ÿ‡ฏ Tajikistan1https://iptv-org.github.io/iptv/countries/tj.m3u - ๐Ÿ‡น๐Ÿ‡ฟ Tanzania1https://iptv-org.github.io/iptv/countries/tz.m3u - ๐Ÿ‡น๐Ÿ‡ญ Thailand1https://iptv-org.github.io/iptv/countries/th.m3u - ๐Ÿ‡น๐Ÿ‡ฌ Togo1https://iptv-org.github.io/iptv/countries/tg.m3u - ๐Ÿ‡น๐Ÿ‡ฐ Tokelau1https://iptv-org.github.io/iptv/countries/tk.m3u - ๐Ÿ‡น๐Ÿ‡ด Tonga1https://iptv-org.github.io/iptv/countries/to.m3u - ๐Ÿ‡น๐Ÿ‡น Trinidad and Tobago1https://iptv-org.github.io/iptv/countries/tt.m3u - ๐Ÿ‡น๐Ÿ‡ณ Tunisia1https://iptv-org.github.io/iptv/countries/tn.m3u - ๐Ÿ‡น๐Ÿ‡ท Turkey1https://iptv-org.github.io/iptv/countries/tr.m3u - ๐Ÿ‡น๐Ÿ‡ฒ Turkmenistan1https://iptv-org.github.io/iptv/countries/tm.m3u - ๐Ÿ‡น๐Ÿ‡จ Turks and Caicos Islands1https://iptv-org.github.io/iptv/countries/tc.m3u - ๐Ÿ‡น๐Ÿ‡ป Tuvalu1https://iptv-org.github.io/iptv/countries/tv.m3u - ๐Ÿ‡บ๐Ÿ‡ฒ U.S. Minor Outlying Islands1https://iptv-org.github.io/iptv/countries/um.m3u - ๐Ÿ‡ป๐Ÿ‡ฎ U.S. Virgin Islands1https://iptv-org.github.io/iptv/countries/vi.m3u - ๐Ÿ‡บ๐Ÿ‡ฌ Uganda1https://iptv-org.github.io/iptv/countries/ug.m3u - ๐Ÿ‡บ๐Ÿ‡ฆ Ukraine1https://iptv-org.github.io/iptv/countries/ua.m3u - ๐Ÿ‡ฆ๐Ÿ‡ช United Arab Emirates1https://iptv-org.github.io/iptv/countries/ae.m3u - ๐Ÿ‡ฌ๐Ÿ‡ง United Kingdom1https://iptv-org.github.io/iptv/countries/uk.m3u - ๐Ÿ‡บ๐Ÿ‡ธ United States1https://iptv-org.github.io/iptv/countries/us.m3u - ๐Ÿ‡บ๐Ÿ‡พ Uruguay1https://iptv-org.github.io/iptv/countries/uy.m3u - ๐Ÿ‡บ๐Ÿ‡ฟ Uzbekistan1https://iptv-org.github.io/iptv/countries/uz.m3u - ๐Ÿ‡ป๐Ÿ‡บ Vanuatu1https://iptv-org.github.io/iptv/countries/vu.m3u - ๐Ÿ‡ป๐Ÿ‡ฆ Vatican City1https://iptv-org.github.io/iptv/countries/va.m3u - ๐Ÿ‡ป๐Ÿ‡ช Venezuela1https://iptv-org.github.io/iptv/countries/ve.m3u - ๐Ÿ‡ป๐Ÿ‡ณ Vietnam1https://iptv-org.github.io/iptv/countries/vn.m3u - ๐Ÿ‡ผ๐Ÿ‡ซ Wallis and Futuna1https://iptv-org.github.io/iptv/countries/wf.m3u - ๐Ÿ‡ช๐Ÿ‡ญ Western Sahara1https://iptv-org.github.io/iptv/countries/eh.m3u - ๐Ÿ‡พ๐Ÿ‡ช Yemen1https://iptv-org.github.io/iptv/countries/ye.m3u - ๐Ÿ‡ฟ๐Ÿ‡ฒ Zambia1https://iptv-org.github.io/iptv/countries/zm.m3u - ๐Ÿ‡ฟ๐Ÿ‡ผ Zimbabwe1https://iptv-org.github.io/iptv/countries/zw.m3u - ๐Ÿ‡ฆ๐Ÿ‡ฝ ร…land1https://iptv-org.github.io/iptv/countries/ax.m3u ๐ŸŒ International1https://iptv-org.github.io/iptv/countries/int.m3u @@ -422,28 +183,28 @@ Same thing, but split up into separate files: Africa0https://iptv-org.github.io/iptv/regions/afr.m3u Americas1https://iptv-org.github.io/iptv/regions/amer.m3u - Asia-Pacific1https://iptv-org.github.io/iptv/regions/apac.m3u Arab world0https://iptv-org.github.io/iptv/regions/arab.m3u - Association of Southeast Asian Nations0https://iptv-org.github.io/iptv/regions/asean.m3u Asia2https://iptv-org.github.io/iptv/regions/asia.m3u + Asia-Pacific1https://iptv-org.github.io/iptv/regions/apac.m3u + Association of Southeast Asian Nations0https://iptv-org.github.io/iptv/regions/asean.m3u Caribbean0https://iptv-org.github.io/iptv/regions/carib.m3u - Central Asia0https://iptv-org.github.io/iptv/regions/cas.m3u Central America0https://iptv-org.github.io/iptv/regions/cenamer.m3u + Central Asia0https://iptv-org.github.io/iptv/regions/cas.m3u Commonwealth of Independent States1https://iptv-org.github.io/iptv/regions/cis.m3u - Europe, the Middle East and Africa3https://iptv-org.github.io/iptv/regions/emea.m3u Europe3https://iptv-org.github.io/iptv/regions/eur.m3u + Europe, the Middle East and Africa3https://iptv-org.github.io/iptv/regions/emea.m3u Hispanic America0https://iptv-org.github.io/iptv/regions/hispam.m3u - Latin America and the Caribbean0https://iptv-org.github.io/iptv/regions/lac.m3u Latin America0https://iptv-org.github.io/iptv/regions/latam.m3u + Latin America and the Caribbean0https://iptv-org.github.io/iptv/regions/lac.m3u Maghreb0https://iptv-org.github.io/iptv/regions/maghreb.m3u - Middle East and North Africa0https://iptv-org.github.io/iptv/regions/mena.m3u Middle East0https://iptv-org.github.io/iptv/regions/mideast.m3u - Northern America1https://iptv-org.github.io/iptv/regions/nam.m3u - North America1https://iptv-org.github.io/iptv/regions/noram.m3u + Middle East and North Africa0https://iptv-org.github.io/iptv/regions/mena.m3u Nordics0https://iptv-org.github.io/iptv/regions/nord.m3u + North America1https://iptv-org.github.io/iptv/regions/noram.m3u + Northern America1https://iptv-org.github.io/iptv/regions/nam.m3u Oceania0https://iptv-org.github.io/iptv/regions/oce.m3u - South Asia1https://iptv-org.github.io/iptv/regions/sas.m3u South America0https://iptv-org.github.io/iptv/regions/southam.m3u + South Asia1https://iptv-org.github.io/iptv/regions/sas.m3u Sub-Saharan Africa0https://iptv-org.github.io/iptv/regions/ssa.m3u West Africa0https://iptv-org.github.io/iptv/regions/wafr.m3u @@ -465,7 +226,7 @@ Links to other useful IPTV-related resources can be found in the [iptv-org/aweso ## Discussions -If you have a question or an idea, you can post it in the [Discussions](https://github.com/iptv-org/iptv/discussions) tab. +If you need help finding a channel, have a question or idea, welcome to the [Discussions](https://github.com/orgs/iptv-org/discussions). ## FAQ diff --git a/tests/__data__/expected/database/db_create.streams.db b/tests/__data__/expected/database/db_create.streams.db index 5ea1bca76..be143f27e 100644 --- a/tests/__data__/expected/database/db_create.streams.db +++ b/tests/__data__/expected/database/db_create.streams.db @@ -1,7 +1,7 @@ -{"channel":"ATV.ad","title":"ATV (720p) [Offline]","filepath":"tests/__data__/input/streams/ad.m3u","url":"https://iptv-all.lanesh4d0w.repl.co/andorra/atv","http_referrer":"http://imn.iq","user_agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148","_id":"k4XpZHQAyqyTbcf0"} -{"channel":"LibyasChannel.ly","title":"Libyas Channel","filepath":"tests/__data__/input/streams/ly.m3u","url":"https://master.starmena-cloud.com/hls/libyas.m3u8","http_referrer":null,"user_agent":null,"_id":"ki4YjAoNNoIY8sSm"} -{"channel":null,"title":"1A Network (720p)","filepath":"tests/__data__/input/streams/unsorted.m3u","url":"https://simultv.s.llnwi.net/n4s4/2ANetwork/interlink.m3u8","http_referrer":null,"user_agent":null,"_id":"IZpCJjjWPaBYh7Dr"} -{"channel":null,"title":"Fox Sports 2 Asia (Thai) (720p)","filepath":"tests/__data__/input/streams/us_blocked.m3u","url":"https://example.com/playlist.m3u8","http_referrer":null,"user_agent":null,"_id":"6c4J4vs8K69wMJ7S"} -{"channel":null,"title":"TVN","filepath":"tests/__data__/input/streams/us_blocked.m3u","url":"https://example.com/playlist2.m3u8","http_referrer":null,"user_agent":null,"_id":"xEmbX384v3t3F5Wg"} -{"channel":"EverydayHeroes.us","title":"Everyday Heroes (720p)","filepath":"tests/__data__/input/streams/us_blocked.m3u","url":"https://a.jsrdn.com/broadcast/7b1451fa52/+0000/c.m3u8","http_referrer":null,"user_agent":null,"_id":"BZsRPt8VS4kIJnfi"} -{"channel":"qib22lAq1L.us","title":"ABC (720p)","filepath":"tests/__data__/input/streams/wrong_id.m3u","url":"https://example.com/playlist2.m3u8","http_referrer":null,"user_agent":null,"_id":"eFUlUnST5zJSBWAF"} +{"line":2,"channel":"ATV.ad","quality":"720p","label":"Offline","name":"ATV","filepath":"ad.m3u","url":"https://iptv-all.lanesh4d0w.repl.co/andorra/atv","httpReferrer":"http://imn.iq","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148","_id":"k4XpZHQAyqyTbcf0"} +{"line":2,"channel":"LibyasChannel.ly","quality":"","label":"","name":"Libyas Channel","filepath":"ly.m3u","url":"https://master.starmena-cloud.com/hls/libyas.m3u8","httpReferrer":"","userAgent":"","_id":"ki4YjAoNNoIY8sSm"} +{"line":2,"channel":"","quality":"720p","label":"","name":"1A Network","filepath":"unsorted.m3u","url":"https://simultv.s.llnwi.net/n4s4/2ANetwork/interlink.m3u8","httpReferrer":"","userAgent":"","_id":"IZpCJjjWPaBYh7Dr"} +{"line":2,"channel":"","quality":"720p","label":"","name":"Fox Sports 2 Asia (Thai)","filepath":"us_blocked.m3u","url":"https://example.com/playlist.m3u8","httpReferrer":"","userAgent":"","_id":"6c4J4vs8K69wMJ7S"} +{"line":4,"channel":"","quality":"","label":"","name":"TVN","filepath":"us_blocked.m3u","url":"https://example.com/playlist2.m3u8","httpReferrer":"","userAgent":"","_id":"xEmbX384v3t3F5Wg"} +{"line":6,"channel":"EverydayHeroes.us","quality":"720p","label":"","name":"Everyday Heroes","filepath":"us_blocked.m3u","url":"https://a.jsrdn.com/broadcast/7b1451fa52/+0000/c.m3u8","httpReferrer":"","userAgent":"","_id":"BZsRPt8VS4kIJnfi"} +{"line":2,"channel":"qib22lAq1L.us","quality":"720p","label":"","name":"ABC","filepath":"wrong_id.m3u","url":"https://example.com/playlist2.m3u8","httpReferrer":"","userAgent":"","_id":"eFUlUnST5zJSBWAF"} diff --git a/tests/__data__/expected/logs/generators.log b/tests/__data__/expected/logs/generators.log new file mode 100644 index 000000000..eb311d382 --- /dev/null +++ b/tests/__data__/expected/logs/generators.log @@ -0,0 +1,72 @@ +{"filepath":"categories/auto.m3u","count":0} +{"filepath":"categories/animation.m3u","count":0} +{"filepath":"categories/business.m3u","count":0} +{"filepath":"categories/classic.m3u","count":0} +{"filepath":"categories/comedy.m3u","count":0} +{"filepath":"categories/cooking.m3u","count":0} +{"filepath":"categories/culture.m3u","count":0} +{"filepath":"categories/documentary.m3u","count":0} +{"filepath":"categories/education.m3u","count":0} +{"filepath":"categories/entertainment.m3u","count":0} +{"filepath":"categories/family.m3u","count":0} +{"filepath":"categories/general.m3u","count":2} +{"filepath":"categories/kids.m3u","count":0} +{"filepath":"categories/legislative.m3u","count":0} +{"filepath":"categories/lifestyle.m3u","count":0} +{"filepath":"categories/movies.m3u","count":0} +{"filepath":"categories/music.m3u","count":0} +{"filepath":"categories/news.m3u","count":1} +{"filepath":"categories/outdoor.m3u","count":0} +{"filepath":"categories/relax.m3u","count":0} +{"filepath":"categories/religious.m3u","count":0} +{"filepath":"categories/series.m3u","count":0} +{"filepath":"categories/science.m3u","count":0} +{"filepath":"categories/shop.m3u","count":0} +{"filepath":"categories/sports.m3u","count":0} +{"filepath":"categories/travel.m3u","count":0} +{"filepath":"categories/weather.m3u","count":1} +{"filepath":"categories/xxx.m3u","count":1} +{"filepath":"categories/undefined.m3u","count":4} +{"filepath":"countries/ad.m3u","count":2} +{"filepath":"countries/ca.m3u","count":1} +{"filepath":"subdivisions/ca-on.m3u","count":1} +{"filepath":"countries/in.m3u","count":1} +{"filepath":"countries/ru.m3u","count":1} +{"filepath":"countries/uk.m3u","count":1} +{"filepath":"countries/int.m3u","count":1} +{"filepath":"index.category.m3u","count":8} +{"filepath":"index.country.m3u","count":7} +{"filepath":"index.language.m3u","count":7} +{"filepath":"index.m3u","count":7} +{"filepath":"index.nsfw.m3u","count":8} +{"filepath":"index.region.m3u","count":23} +{"filepath":"languages/eng.m3u","count":1} +{"filepath":"languages/rus.m3u","count":1} +{"filepath":"languages/cat.m3u","count":1} +{"filepath":"languages/undefined.m3u","count":4} +{"filepath":"regions/afr.m3u","count":0} +{"filepath":"regions/amer.m3u","count":1} +{"filepath":"regions/apac.m3u","count":1} +{"filepath":"regions/arab.m3u","count":0} +{"filepath":"regions/asean.m3u","count":0} +{"filepath":"regions/asia.m3u","count":2} +{"filepath":"regions/carib.m3u","count":0} +{"filepath":"regions/cas.m3u","count":0} +{"filepath":"regions/cenamer.m3u","count":0} +{"filepath":"regions/cis.m3u","count":1} +{"filepath":"regions/emea.m3u","count":4} +{"filepath":"regions/eur.m3u","count":4} +{"filepath":"regions/hispam.m3u","count":0} +{"filepath":"regions/lac.m3u","count":0} +{"filepath":"regions/latam.m3u","count":0} +{"filepath":"regions/maghreb.m3u","count":0} +{"filepath":"regions/mena.m3u","count":0} +{"filepath":"regions/mideast.m3u","count":0} +{"filepath":"regions/nam.m3u","count":1} +{"filepath":"regions/noram.m3u","count":1} +{"filepath":"regions/nord.m3u","count":0} +{"filepath":"regions/oce.m3u","count":0} +{"filepath":"regions/sas.m3u","count":1} +{"filepath":"regions/southam.m3u","count":0} +{"filepath":"regions/ssa.m3u","count":0} +{"filepath":"regions/wafr.m3u","count":0} diff --git a/tests/__data__/expected/logs/generators/categories.log b/tests/__data__/expected/logs/generators/categories.log deleted file mode 100644 index 9e170e51c..000000000 --- a/tests/__data__/expected/logs/generators/categories.log +++ /dev/null @@ -1,29 +0,0 @@ -{"filepath":"categories/auto.m3u","count":0} -{"filepath":"categories/animation.m3u","count":0} -{"filepath":"categories/business.m3u","count":0} -{"filepath":"categories/classic.m3u","count":0} -{"filepath":"categories/comedy.m3u","count":0} -{"filepath":"categories/cooking.m3u","count":0} -{"filepath":"categories/culture.m3u","count":0} -{"filepath":"categories/documentary.m3u","count":0} -{"filepath":"categories/education.m3u","count":0} -{"filepath":"categories/entertainment.m3u","count":0} -{"filepath":"categories/family.m3u","count":0} -{"filepath":"categories/general.m3u","count":2} -{"filepath":"categories/kids.m3u","count":0} -{"filepath":"categories/legislative.m3u","count":0} -{"filepath":"categories/lifestyle.m3u","count":0} -{"filepath":"categories/movies.m3u","count":0} -{"filepath":"categories/music.m3u","count":0} -{"filepath":"categories/news.m3u","count":1} -{"filepath":"categories/outdoor.m3u","count":0} -{"filepath":"categories/relax.m3u","count":0} -{"filepath":"categories/religious.m3u","count":0} -{"filepath":"categories/series.m3u","count":0} -{"filepath":"categories/science.m3u","count":0} -{"filepath":"categories/shop.m3u","count":0} -{"filepath":"categories/sports.m3u","count":0} -{"filepath":"categories/travel.m3u","count":0} -{"filepath":"categories/weather.m3u","count":1} -{"filepath":"categories/xxx.m3u","count":1} -{"filepath":"categories/undefined.m3u","count":4} \ No newline at end of file diff --git a/tests/__data__/expected/logs/generators/countries.log b/tests/__data__/expected/logs/generators/countries.log deleted file mode 100644 index e4db1dc62..000000000 --- a/tests/__data__/expected/logs/generators/countries.log +++ /dev/null @@ -1,7 +0,0 @@ -{"filepath":"countries/ad.m3u","count":2} -{"filepath":"countries/ca.m3u","count":1} -{"filepath":"subdivisions/ca-on.m3u","count":1} -{"filepath":"countries/in.m3u","count":1} -{"filepath":"countries/ru.m3u","count":1} -{"filepath":"countries/uk.m3u","count":1} -{"filepath":"countries/int.m3u","count":1} \ No newline at end of file diff --git a/tests/__data__/expected/logs/generators/index_category_m3u.log b/tests/__data__/expected/logs/generators/index_category_m3u.log deleted file mode 100644 index fa8ba62b8..000000000 --- a/tests/__data__/expected/logs/generators/index_category_m3u.log +++ /dev/null @@ -1 +0,0 @@ -{"filepath":"index.category.m3u","count":8} \ No newline at end of file diff --git a/tests/__data__/expected/logs/generators/index_country_m3u.log b/tests/__data__/expected/logs/generators/index_country_m3u.log deleted file mode 100644 index aae6be8f1..000000000 --- a/tests/__data__/expected/logs/generators/index_country_m3u.log +++ /dev/null @@ -1 +0,0 @@ -{"filepath":"index.country.m3u","count":7} \ No newline at end of file diff --git a/tests/__data__/expected/logs/generators/index_language_m3u.log b/tests/__data__/expected/logs/generators/index_language_m3u.log deleted file mode 100644 index c3d549c79..000000000 --- a/tests/__data__/expected/logs/generators/index_language_m3u.log +++ /dev/null @@ -1 +0,0 @@ -{"filepath":"index.language.m3u","count":7} \ No newline at end of file diff --git a/tests/__data__/expected/logs/generators/index_m3u.log b/tests/__data__/expected/logs/generators/index_m3u.log deleted file mode 100644 index eb39be430..000000000 --- a/tests/__data__/expected/logs/generators/index_m3u.log +++ /dev/null @@ -1 +0,0 @@ -{"filepath":"index.m3u","count":7} \ No newline at end of file diff --git a/tests/__data__/expected/logs/generators/index_nsfw_m3u.log b/tests/__data__/expected/logs/generators/index_nsfw_m3u.log deleted file mode 100644 index c44134e77..000000000 --- a/tests/__data__/expected/logs/generators/index_nsfw_m3u.log +++ /dev/null @@ -1 +0,0 @@ -{"filepath":"index.nsfw.m3u","count":8} \ No newline at end of file diff --git a/tests/__data__/expected/logs/generators/index_region_m3u.log b/tests/__data__/expected/logs/generators/index_region_m3u.log deleted file mode 100644 index 0837333ba..000000000 --- a/tests/__data__/expected/logs/generators/index_region_m3u.log +++ /dev/null @@ -1 +0,0 @@ -{"filepath":"index.region.m3u","count":23} \ No newline at end of file diff --git a/tests/__data__/expected/logs/generators/languages.log b/tests/__data__/expected/logs/generators/languages.log deleted file mode 100644 index a513712f7..000000000 --- a/tests/__data__/expected/logs/generators/languages.log +++ /dev/null @@ -1,4 +0,0 @@ -{"filepath":"languages/eng.m3u","count":1} -{"filepath":"languages/rus.m3u","count":1} -{"filepath":"languages/cat.m3u","count":1} -{"filepath":"languages/undefined.m3u","count":4} \ No newline at end of file diff --git a/tests/__data__/expected/logs/generators/regions.log b/tests/__data__/expected/logs/generators/regions.log deleted file mode 100644 index eea6863e6..000000000 --- a/tests/__data__/expected/logs/generators/regions.log +++ /dev/null @@ -1,26 +0,0 @@ -{"filepath":"regions/afr.m3u","count":0} -{"filepath":"regions/amer.m3u","count":1} -{"filepath":"regions/apac.m3u","count":1} -{"filepath":"regions/arab.m3u","count":0} -{"filepath":"regions/asean.m3u","count":0} -{"filepath":"regions/asia.m3u","count":2} -{"filepath":"regions/carib.m3u","count":0} -{"filepath":"regions/cas.m3u","count":0} -{"filepath":"regions/cenamer.m3u","count":0} -{"filepath":"regions/cis.m3u","count":1} -{"filepath":"regions/emea.m3u","count":4} -{"filepath":"regions/eur.m3u","count":4} -{"filepath":"regions/hispam.m3u","count":0} -{"filepath":"regions/lac.m3u","count":0} -{"filepath":"regions/latam.m3u","count":0} -{"filepath":"regions/maghreb.m3u","count":0} -{"filepath":"regions/mena.m3u","count":0} -{"filepath":"regions/mideast.m3u","count":0} -{"filepath":"regions/nam.m3u","count":1} -{"filepath":"regions/noram.m3u","count":1} -{"filepath":"regions/nord.m3u","count":0} -{"filepath":"regions/oce.m3u","count":0} -{"filepath":"regions/sas.m3u","count":1} -{"filepath":"regions/southam.m3u","count":0} -{"filepath":"regions/ssa.m3u","count":0} -{"filepath":"regions/wafr.m3u","count":0} \ No newline at end of file diff --git a/tests/__data__/expected/streams/in.m3u b/tests/__data__/expected/streams/in.m3u new file mode 100644 index 000000000..a0f2d135a --- /dev/null +++ b/tests/__data__/expected/streams/in.m3u @@ -0,0 +1,3 @@ +#EXTM3U +#EXTINF:-1 tvg-id="ManoramaNews.in",Manorama News [Not 24/7] +https://ythls.onrender.com/channel/UCP0uG-mcMImgKnJz-VjJZmQ.m3u8 diff --git a/tests/__data__/expected/streams/my.m3u b/tests/__data__/expected/streams/my.m3u new file mode 100644 index 000000000..0c2596a85 --- /dev/null +++ b/tests/__data__/expected/streams/my.m3u @@ -0,0 +1,5 @@ +#EXTM3U +#EXTINF:-1 tvg-id="TV3.my" user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Edge/12.246",TV3 (Vertical) (720p) [Geo-blocked] +#EXTVLCOPT:http-referrer=https://example.com/ +#EXTVLCOPT:http-user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Edge/12.246 +https://live-streams-ssai-01.tonton.com.my/live/2dd2b7cd-1b34-4871-b669-57b5c9beca23/live.isml/.m3u8 diff --git a/tests/__data__/expected/streams/nl.m3u b/tests/__data__/expected/streams/nl.m3u index 1eb378725..0be4e08e1 100644 --- a/tests/__data__/expected/streams/nl.m3u +++ b/tests/__data__/expected/streams/nl.m3u @@ -1,10 +1,10 @@ #EXTM3U -#EXTINF:-1 tvg-id="NPO1.nl",NPO 1 (342p) [Geo-blocked] -http://resolver.streaming.api.nos.nl/livestream?url=/live/npo/tvlive/npo1/npo1.isml/.m3u8 #EXTINF:-1 tvg-id="NPO1.nl",NPO 1 (1080p) [Geo-blocked] http://stream.tvtap.net:8081/live/nl-npo1.stream/30fps.m3u8 #EXTINF:-1 tvg-id="NPO1.nl",NPO 1 (1080p) [Geo-blocked] http://stream.tvtap.net:8081/live/nl-npo1.stream/60fps.m3u8 +#EXTINF:-1 tvg-id="NPO1.nl",NPO 1 (342p) [Geo-blocked] +http://resolver.streaming.api.nos.nl/livestream?url=/live/npo/tvlive/npo1/npo1.isml/.m3u8 #EXTINF:-1 tvg-id="NPO2.nl",NPO 2 (342p) http://resolver.streaming.api.nos.nl/livestream?url=/live/npo/tvlive/npo2/npo2.isml/.m3u8 #EXTINF:-1 tvg-id="NPO2.nl",NPO 2 (302p) [Geo-blocked] diff --git a/tests/__data__/expected/streams/pe.m3u b/tests/__data__/expected/streams/pe.m3u deleted file mode 100644 index a2de651e5..000000000 --- a/tests/__data__/expected/streams/pe.m3u +++ /dev/null @@ -1,3 +0,0 @@ -#EXTM3U -#EXTINF:-1 tvg-id="Tele2000.pe",Tele 2000 -https://servilive.com:3126/live/tele2000live.m3u8 diff --git a/tests/__data__/expected/streams/us.m3u b/tests/__data__/expected/streams/us.m3u new file mode 100644 index 000000000..9e54c4357 --- /dev/null +++ b/tests/__data__/expected/streams/us.m3u @@ -0,0 +1,5 @@ +#EXTM3U +#EXTINF:-1 tvg-id="BBCAmericaEast.us" user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Edge/12.246",BBC America (720p) [Geo-blocked] +#EXTVLCOPT:http-referrer=https://example2.com/ +#EXTVLCOPT:http-user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Edge/12.246 +https://servilive.com:3126/live/tele2000live.m3u8 diff --git a/tests/__data__/input/.readme/config.json b/tests/__data__/input/.readme/config.json new file mode 100644 index 000000000..70c808b32 --- /dev/null +++ b/tests/__data__/input/.readme/config.json @@ -0,0 +1,4 @@ +{ + "build" : "tests/__data__/output/readme.md", + "files" : ["tests/__data__/output/.readme/template.md"] +} \ No newline at end of file diff --git a/tests/__data__/input/.readme/template.md b/tests/__data__/input/.readme/template.md new file mode 100644 index 000000000..04cab4cd5 --- /dev/null +++ b/tests/__data__/input/.readme/template.md @@ -0,0 +1,158 @@ +# IPTV [![update](https://github.com/iptv-org/iptv/actions/workflows/update.yml/badge.svg)](https://github.com/iptv-org/iptv/actions/workflows/update.yml) + +Collection of publicly available IPTV (Internet Protocol television) channels from all over the world. + +## Table of contents + +- ๐Ÿš€ [How to use?](#how-to-use) +- ๐Ÿ“บ [Playlists](#playlists) +- ๐Ÿ—„ [Database](#database) +- ๐Ÿ‘จโ€๐Ÿ’ป [API](#api) +- ๐Ÿ“š [Resources](#resources) +- ๐Ÿ’ฌ [Discussions](#discussions) +- โ“ [FAQ](#faq) +- ๐Ÿ›  [Contribution](#contribution) +- โš– [Legal](#legal) +- ยฉ [License](#license) + +## How to use? + +Simply insert one of the links below into [any video player](https://github.com/iptv-org/awesome-iptv#apps) that supports live streaming and press _Open_. + +![VLC Network Panel](https://github.com/iptv-org/iptv/raw/master/.readme/preview.png) + +## Playlists + +There are several versions of playlists that differ in the way they are grouped. + +### Main playlist + +Playlist includes all known channels except adult channels. + +``` +https://iptv-org.github.io/iptv/index.m3u +``` + +And here is the full version: + +``` +https://iptv-org.github.io/iptv/index.nsfw.m3u +``` + +### Grouped by category + +
+Expand +
+ +Playlist in which each channel has its _category_ as a group title: + +``` +https://iptv-org.github.io/iptv/index.category.m3u +``` + +Same thing, but split up into separate files: + + +#include "tests/__data__/output/.readme/_categories.md" + +
+ +### Grouped by language + +
+Expand +
+ +Playlist in which each channel has its _language_ as a group title: + +``` +https://iptv-org.github.io/iptv/index.language.m3u +``` + +Same thing, but split up into separate files: + + +#include "tests/__data__/output/.readme/_languages.md" + +
+ +### Grouped by country + +
+Expand +
+ +Playlist in which each channel has its _country_ as a group title: + +``` +https://iptv-org.github.io/iptv/index.country.m3u +``` + +Same thing, but split up into separate files: + + +#include "tests/__data__/output/.readme/_countries.md" + +
+ +### Grouped by region + +
+Expand +
+ +Playlist in which each channel has its _region_ as a group title: + +``` +https://iptv-org.github.io/iptv/index.region.m3u +``` + +Same thing, but split up into separate files: + + +#include "tests/__data__/output/.readme/_regions.md" + +
+ +## Database + +All channel data is taken from the [iptv-org/database](https://github.com/iptv-org/database) repository. If you find any errors please open a new [issue](https://github.com/iptv-org/database/issues) there. + +## API + +The API documentation can be found in the [iptv-org/api](https://github.com/iptv-org/api) repository. + +## Resources + +Links to other useful IPTV-related resources can be found in the [iptv-org/awesome-iptv](https://github.com/iptv-org/awesome-iptv) repository. + +## Discussions + +If you need help finding a channel, have a question or idea, welcome to the [Discussions](https://github.com/orgs/iptv-org/discussions). + +## FAQ + +The answers to the most popular questions can be found in the [FAQ.md](FAQ.md) file. + +## Contribution + +Please make sure to read the [Contributing Guide](CONTRIBUTING.md) before sending an issue or making a pull request. + +And thank you to everyone who has already contributed! + +### Backers + + + +### Contributors + + + +## Legal + +No video files are stored in this repository. The repository simply contains user-submitted links to publicly available video stream URLs, which to the best of our knowledge have been intentionally made publicly by the copyright holders. If any links in these playlists infringe on your rights as a copyright holder, they may be removed by sending a [pull request](https://github.com/iptv-org/iptv/pulls) or opening an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=freearhey&labels=removal+request&template=--removal-request.yml&title=Remove%3A+). However, note that we have **no control** over the destination of the link, and just removing the link from the playlist will not remove its contents from the web. Note that linking does not directly infringe copyright because no copy is made on the site providing the link, and thus this is **not** a valid reason to send a DMCA notice to GitHub. To remove this content from the web, you should contact the web host that's actually hosting the content (**not** GitHub, nor the maintainers of this repository). + +## License + +[![CC0](http://mirrors.creativecommons.org/presskit/buttons/88x31/svg/cc-zero.svg)](LICENSE) diff --git a/tests/__data__/input/_readme.json b/tests/__data__/input/_readme.json deleted file mode 100644 index d226f0e66..000000000 --- a/tests/__data__/input/_readme.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "build" : "tests/__data__/output/readme.md", - "files" : ["./.readme/template.md"] -} \ No newline at end of file diff --git a/tests/__data__/input/data/blocklist.json b/tests/__data__/input/data/blocklist.json index 9b1abd250..e774591d4 100644 --- a/tests/__data__/input/data/blocklist.json +++ b/tests/__data__/input/data/blocklist.json @@ -1 +1 @@ -[{"channel":"FoxSports1.us","ref":"https://github.com/iptv-org/iptv/issues/0000"},{"channel":"FoxSports2Asia.us","ref":"https://github.com/iptv-org/iptv/issues/0000"},{"channel":"TVN.pl","ref":"https://github.com/iptv-org/iptv/issues/0000"},{"channel":"Eve.us","ref":"https://github.com/iptv-org/iptv/issues/0000"}] \ No newline at end of file +[{"channel":"FoxSports1.us","ref":"https://github.com/iptv-org/iptv/issues/0000"},{"channel":"FoxSports2Asia.us","ref":"https://github.com/iptv-org/iptv/issues/0000"},{"channel":"TVN.pl","ref":"https://github.com/iptv-org/iptv/issues/0000"},{"channel":"TV3.my","ref":"https://github.com/iptv-org/iptv/issues/0000"}] \ No newline at end of file diff --git a/tests/__data__/input/data/channels.json b/tests/__data__/input/data/channels.json index c7b4d6a85..970cb03bb 100644 --- a/tests/__data__/input/data/channels.json +++ b/tests/__data__/input/data/channels.json @@ -194,5 +194,101 @@ ], "is_nsfw": true, "logo": "https://i.imgur.com/RJ9wbNF.jpg" + }, + { + "id": "TUTV.us", + "name": "TUTV", + "network": null, + "country": "US", + "subdivision": null, + "city": null, + "broadcast_area": [ + "c/US" + ], + "languages": [ + "eng" + ], + "categories": [ + "general" + ], + "is_nsfw": false, + "logo": "https://i.imgur.com/RJ9wbN4.jpg" + }, + { + "id": "ManoramaNews.in", + "name": "Manorama News", + "alt_names": [], + "network": "Malayala Manorama Television", + "owners": [ + "Malayala Manorama Group" + ], + "country": "IN", + "subdivision": null, + "city": null, + "broadcast_area": [ + "c/IN" + ], + "languages": [ + "mal" + ], + "categories": [ + "news" + ], + "is_nsfw": false, + "launched": "2006-08-17", + "closed": null, + "replaced_by": null, + "website": "https://www.manoramanews.com", + "logo": "https://i.imgur.com/adjRrVx.png" + }, + { + "id": "TV3.my", + "name": "TV3", + "alt_names": [], + "network": null, + "owners": [], + "country": "MY", + "subdivision": null, + "city": null, + "broadcast_area": [ + "c/MY" + ], + "languages": [ + "eng" + ], + "categories": [ + "news" + ], + "is_nsfw": false, + "launched": null, + "closed": null, + "replaced_by": null, + "website": null, + "logo": "https://i.imgur.com/adjRrVx.png" + }, + { + "id": "BBCAmericaEast.us", + "name": "BBC America East", + "alt_names": [], + "network": null, + "owners": [], + "country": "US", + "subdivision": null, + "city": null, + "broadcast_area": [ + "c/US" + ], + "languages": [ + "eng" + ], + "categories": [ + "news" + ], + "is_nsfw": false, + "launched": null, + "closed": null, + "replaced_by": null, + "website": null, + "logo": "https://i.imgur.com/adjRrVx.png" } ] \ No newline at end of file diff --git a/tests/__data__/input/data/streams.json b/tests/__data__/input/data/streams.json new file mode 100644 index 000000000..5b97f3e1e --- /dev/null +++ b/tests/__data__/input/data/streams.json @@ -0,0 +1 @@ +[{"channel":"TUTV.us","url":"https://livestream.telvue.com/templeuni1/f7b44cfafd5c52223d5498196c8a2e7b.sdp/playlist.m3u8","http_referrer":null,"user_agent":null}] \ No newline at end of file diff --git a/tests/__data__/input/database/api_generate.streams.db b/tests/__data__/input/database/api_generate.streams.db index b6e975cf0..110767d61 100644 --- a/tests/__data__/input/database/api_generate.streams.db +++ b/tests/__data__/input/database/api_generate.streams.db @@ -1,7 +1,7 @@ -{"title":"ะ›ะ”ะŸะ  ะขะ’","channel":"LDPRTV.ru","filepath":"tests/__data__/output/streams/ru.m3u","url":"http://46.46.143.222:1935/live/mp4:ldpr.stream/playlist.m3u8","http_referrer":null,"user_agent":null,"cluster_id":1,"_id":"2ST8btby3mmsgPF0","status":"error"} -{"title":"BBC News HD","channel":"BBCNews.uk","filepath":"tests/__data__/output/streams/uk.m3u","url":"http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8","http_referrer":null,"user_agent":null,"cluster_id":3,"_id":"3TbieV1ptnZVCIdn","status":"blocked"} -{"title":"ATV","channel":"AndorraTV.ad","filepath":"tests/__data__/output/streams/ad.m3u","url":"https://iptv-all.lanesh4d0w.repl.co/andorra/atv","http_referrer":"http://imn.iq","user_agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148","cluster_id":1,"_id":"I6cjG2xCBRFFP4sz","status":"error"} -{"title":"BBC News HD","channel":"BBCNewsHD.uk","filepath":"tests/__data__/output/streams/uk.m3u","url":"https://master.starmena-cloud.com/hls/bbc.m3u8","http_referrer":null,"user_agent":null,"cluster_id":3,"_id":"WTbieV1ptnXVCIdn","status":"online","bitrate":0,"frame_rate":25,"width":1024,"height":576} -{"title":"Kayhan TV","channel":"KayhanTV.af","filepath":"channels/af.m3u","url":"http://208.93.117.113/live/Stream1/playlist.m3u8","http_referrer":null,"user_agent":null,"cluster_id":1,"_id":"cFFpFVzSn6xFMUF3","status":"error"} -{"title":"Sharq","channel":"Sharq.af","filepath":"channels/af.m3u","bitrate":2226543,"frame_rate":25,"width":1280,"height":720,"url":"https://forerunnerrtmp.livestreamingcdn.com/output18/output18.stream/playlist.m3u8","http_referrer":null,"user_agent":null,"cluster_id":1,"_id":"u7iyA6cjtf1iWWAZ","status":"online"} -{"title":"Libyas Channel","channel":"LibyasChannel.ly","filepath":"tests/__data__/output/streams/ly.m3u","url":"https://master.starmena-cloud.com/hls/libyas.m3u8","http_referrer":null,"user_agent":null,"cluster_id":3,"_id":"WTbieV1ptnZVCIdn","status":"online","bitrate":0,"frame_rate":25,"width":1024,"height":576} +{"line": 2,"quality":null,"label":null,"name":"ะ›ะ”ะŸะ  ะขะ’","channel":"LDPRTV.ru","filepath":"ru.m3u","url":"http://46.46.143.222:1935/live/mp4:ldpr.stream/playlist.m3u8","httpReferrer":null,"userAgent":null,"cluster_id":1,"_id":"2ST8btby3mmsgPF0","status":"error"} +{"line": 2,"quality":null,"label":null,"name":"BBC News HD","channel":"BBCNews.uk","filepath":"uk.m3u","url":"http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8","httpReferrer":null,"userAgent":null,"cluster_id":3,"_id":"3TbieV1ptnZVCIdn","status":"blocked"} +{"line": 2,"quality":null,"label":null,"name":"ATV","channel":"AndorraTV.ad","filepath":"ad.m3u","url":"https://iptv-all.lanesh4d0w.repl.co/andorra/atv","httpReferrer":"http://imn.iq","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148","cluster_id":1,"_id":"I6cjG2xCBRFFP4sz","status":"error"} +{"line": 2,"quality":null,"label":null,"name":"BBC News HD","channel":"BBCNewsHD.uk","filepath":"uk.m3u","url":"https://master.starmena-cloud.com/hls/bbc.m3u8","httpReferrer":null,"userAgent":null,"cluster_id":3,"_id":"WTbieV1ptnXVCIdn","status":"online","bitrate":0,"frame_rate":25,"width":1024,"height":576} +{"line": 2,"quality":null,"label":null,"name":"Kayhan TV","channel":"KayhanTV.af","filepath":"channels/af.m3u","url":"http://208.93.117.113/live/Stream1/playlist.m3u8","httpReferrer":null,"userAgent":null,"cluster_id":1,"_id":"cFFpFVzSn6xFMUF3","status":"error"} +{"line": 2,"quality":null,"label":null,"name":"Sharq","channel":"Sharq.af","filepath":"channels/af.m3u","bitrate":2226543,"frame_rate":25,"width":1280,"height":720,"url":"https://forerunnerrtmp.livestreamingcdn.com/output18/output18.stream/playlist.m3u8","httpReferrer":null,"userAgent":null,"cluster_id":1,"_id":"u7iyA6cjtf1iWWAZ","status":"online"} +{"line": 2,"quality":null,"label":null,"name":"Libyas Channel","channel":"LibyasChannel.ly","filepath":"ly.m3u","url":"https://master.starmena-cloud.com/hls/libyas.m3u8","httpReferrer":null,"userAgent":null,"cluster_id":3,"_id":"WTbieV1ptnZVCIdn","status":"online","bitrate":0,"frame_rate":25,"width":1024,"height":576} diff --git a/tests/__data__/input/database/playlist_format.streams.db b/tests/__data__/input/database/playlist_format.streams.db deleted file mode 100644 index 7cfe4130e..000000000 --- a/tests/__data__/input/database/playlist_format.streams.db +++ /dev/null @@ -1,20 +0,0 @@ -{"title":"ะ›ะ”ะŸะ  ะขะ’ (1080p)","channel":"LDPRTV.ru","filepath":"tests/__data__/output/streams/ru.m3u","url":"https://service-stitcher.clusters.pluto.tv/stitch/hls/channel/5ca525b650be2571e3943c63/master.m3u8?deviceId=5ca525b650be2571e3943c63&appName=web&advertisingId=","http_referrer":null,"user_agent":null,"_id":"2ST8btby3mmsgPF3"} -{"title":"ะ›ะ”ะŸะ  ะขะ’ (1080p)","channel":"LDPRTV.ru","filepath":"tests/__data__/output/streams/ru.m3u","url":"http://46.46.143.222:1935/live/mp4:ldpr.stream/playlist.m3u8","http_referrer":null,"user_agent":null,"_id":"2ST8btby3mmsgPF0"} -{"title":"ะ›ะ”ะŸะ  ะขะ’ (1080p)","channel":"LDPRTV.ru","filepath":"tests/__data__/output/streams/ru.m3u","url":"http://46.46.143.222:1935/live/mp4:ldpr.stream/playlist.m3u8","http_referrer":null,"user_agent":null,"_id":"2ST8btby3mmsgPF1"} -{"title":"ะ›ะ”ะŸะ  ะขะ’ (1080p)","channel":"LDPRTV.ru","filepath":"tests/__data__/output/streams/ru.m3u","url":"http://46.46.143.222:1935/live/mp4:ldpr.stream/playlist.m3u8","http_referrer":null,"user_agent":null,"_id":"2ST8btby3mmsgPF2"} -{"title":"BBC News HD (720p) [Not 24/7]","channel":"BBCNews.uk","filepath":"tests/__data__/output/streams/uk.m3u","url":"http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8","http_referrer":null,"user_agent":null,"_id":"3TbieV1ptnZVCIdn"} -{"title":"ATV (720p) [Offline]","channel":"AndorraTV.ad","filepath":"tests/__data__/output/streams/ad.m3u","url":"https://iptv-all.lanesh4d0w.repl.co/andorra/atv","http_referrer":"http://imn.iq","user_agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148","_id":"I6cjG2xCBRFFP4sz"} -{"title":"BBC News HD (480p) [Geo-blocked]","channel":"BBCNews.uk","filepath":"tests/__data__/output/streams/uk.m3u","url":"http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/playlist.m3u8","http_referrer":null,"user_agent":null,"_id":"WTbieV1ptnZVCIdn"} -{"title":"Kayhan TV","channel":"KayhanTV.af","filepath":"tests/__data__/output/streams/af.m3u","url":"http://208.93.117.113/live/Stream1/playlist.m3u8","http_referrer":null,"user_agent":null,"_id":"cFFpFVzSn6xFMUF3"} -{"title":"Sharq","channel":"Sharq.af","filepath":"tests/__data__/output/streams/af.m3u","url":"http://51.210.199.50/hls/stream.m3u8","http_referrer":null,"user_agent":null,"_id":"u7iyA6cjtf1iWWAZ"} -{"channel":"NPO1.nl","title":"NPO 1 (342p) [Geo-blocked]","filepath":"tests/__data__/output/streams/nl.m3u","url":"http://resolver.streaming.api.nos.nl/livestream?url=/live/npo/tvlive/npo1/npo1.isml/.m3u8","http_referrer":null,"user_agent":null,"_id":"mvUyDVuS5gc8gLJV"} -{"channel":"NPO1.nl","title":"NPO 1 (1080p) [Geo-blocked]","filepath":"tests/__data__/output/streams/nl.m3u","url":"http://stream.tvtap.net:8081/live/nl-npo1.stream/30fps.m3u8","http_referrer":null,"user_agent":null,"_id":"8WVbsxsYeOL7kHQl"} -{"channel":"NPO1.nl","title":"NPO 1 (1080p) [Geo-blocked]","filepath":"tests/__data__/output/streams/nl.m3u","url":"http://stream.tvtap.net:8081/live/nl-npo1.stream/60fps.m3u8","http_referrer":null,"user_agent":null,"_id":"8WVbsxsYeOL7kHQB"} -{"channel":"NPO2.nl","title":"NPO 2 (342p)","filepath":"tests/__data__/output/streams/nl.m3u","url":"http://resolver.streaming.api.nos.nl/livestream?url=/live/npo/tvlive/npo2/npo2.isml/.m3u8","http_referrer":null,"user_agent":null,"_id":"2p1TNGO0mF0MJOGy"} -{"channel":"NPO2.nl","title":"NPO 2 (302p) [Geo-blocked]","filepath":"tests/__data__/output/streams/nl.m3u","url":"http://stream.tvtap.net:8081/live/nl-npo2.stream/playlist.m3u8","http_referrer":null,"user_agent":null,"_id":"nhL85BL7YM5OR7cn"} -{"title":"Tele 2000","channel":"Tele2000.pe","filepath":"tests/__data__/output/streams/pe.m3u","url":"https://servilive.com:3126/live/tele2000live.m3u8","http_referrer":null,"user_agent":null,"_id":"cF0pFVzSn6xFMUF3"} -{"title":"Planeta Junior TV","channel":"","filepath":"tests/__data__/output/streams/es.m3u","url":"https://deaplaneta-planetakidz-1-es.samsung.wurl.tv/playlist.m3u8","http_referrer":null,"user_agent":null,"_id":"1BT8btby3mmsgPF0"} -{"title":"Caillou","channel":"","filepath":"tests/__data__/output/streams/es.m3u","url":"https://dhx-caillou-1-es.samsung.wurl.tv/playlist.m3u8","http_referrer":null,"user_agent":null,"_id":"3BT8btby3mmsgPF0"} -{"title":"iHola Play","channel":"","filepath":"tests/__data__/output/streams/es.m3u","url":"https://rakuten-hola-2-es.samsung.wurl.tv/playlist.m3u8","http_referrer":null,"user_agent":null,"_id":"2BT8btby3mmsgPF0"} -{"title":"Telearuba (720p)","channel":"Telearuba.aw","filepath":"tests/__data__/output/streams/aw.m3u","url":"http://cdn.setar.aw:1935/Telearuba/smil:telearuba.smil/playlist.m3u8","http_referrer":null,"user_agent":null,"_id":"6BT8btby3mmsgPF0"} -{"title":"Telearuba (480p) [Not 24/7]","channel":"Telearuba.aw","filepath":"tests/__data__/output/streams/aw.m3u","url":"https://backend-server-dot-telearuba-app.appspot.com/media/livestream13/playlist.m3u8","http_referrer":null,"user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36","_id":"4BT8btby3mmsgPF0"} \ No newline at end of file diff --git a/tests/__data__/input/database/playlist_generate.streams.db b/tests/__data__/input/database/playlist_generate.streams.db index 534d1b53c..4367a38c1 100644 --- a/tests/__data__/input/database/playlist_generate.streams.db +++ b/tests/__data__/input/database/playlist_generate.streams.db @@ -1,14 +1,14 @@ -{"title":"ะ›ะ”ะŸะ  ะขะ’ (1080p)","channel":"LDPRTV.ru","filepath":"tests/__data__/output/streams/ru.m3u","url":"http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8","http_referrer":null,"user_agent":null,"_id":"2ST8btby3mmsgPF0"} -{"title":"ะ›ะ”ะŸะ  ะขะ’ (1080p)","channel":"LDPRTV.ru","filepath":"tests/__data__/output/streams/ru.m3u","url":"http://46.46.143.222:1935/live/mp4:ldpr.stream/timeout.m3u8","http_referrer":null,"user_agent":null,"_id":"2ST8btby3mmsgPF1"} -{"title":"ะ›ะ”ะŸะ  ะขะ’ (1080p)","channel":"LDPRTV.ru","filepath":"tests/__data__/output/streams/ru.m3u","url":"http://46.46.143.222:1935/live/mp4:ldpr.stream/playlist.m3u8","http_referrer":null,"user_agent":null,"_id":"2ST8btby3mmsgPF2"} -{"title":"ะ›ะ”ะŸะ  ะขะ’ (1080p)","channel":"LDPRTV.ru","filepath":"tests/__data__/output/streams/ru.m3u","url":"http://46.46.143.222:1935/live/mp4:ldpr.stream/error.m3u8","http_referrer":null,"user_agent":null,"_id":"2ST8btby3mmsgPF3"} -{"title":"BBC News HD (720p) [Geo-blocked]","channel":"BBCNews.uk","filepath":"tests/__data__/output/streams/uk.m3u","url":"http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/playlist.m3u8","http_referrer":null,"user_agent":null,"_id":"3TbieV1ptnZVCId5"} -{"title":"BBC News HD","channel":"BBCNews.uk","filepath":"tests/__data__/output/streams/uk.m3u","url":"http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8","http_referrer":null,"user_agent":null,"_id":"3TbieV1ptnZVCIdn"} -{"title":"ATV","channel":"AndorraTV.ad","filepath":"tests/__data__/output/streams/ad.m3u","url":"https://iptv-all.lanesh4d0w.repl.co/andorra/atv","http_referrer":null,"user_agent":null,"_id":"I6cjG2xCBRFFP44z"} -{"title":"Andorra TV (720p) [Not 24/7]","channel":"","filepath":"tests/__data__/output/streams/uk.m3u","url":"http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8","http_referrer":"http://imn.iq","user_agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148","_id":"WTbieV1ptnZVCIdn"} -{"title":"Visit-X TV","channel":"VisitXTV.nl","filepath":"tests/__data__/output/streams/nl.m3u","url":"https://stream.visit-x.tv/vxtv/ngrp:live_all/30fps.m3u8","http_referrer":null,"user_agent":null,"_id":"2ST8btby3mmsgPF5"} -{"title":"Visit-X TV","channel":"VisitXTV.nl","filepath":"tests/__data__/output/streams/nl.m3u","url":"https://stream.visit-x.tv/vxtv/ngrp:live_all/60fps.m3u8","http_referrer":null,"user_agent":null,"_id":"2ST8btby3mmsgPF6"} -{"title":"Daawah TV","channel":"","filepath":"tests/__data__/output/streams/in.m3u","url":"http://51.15.246.58:8081/daawahtv/daawahtv2/playlist.m3u8","http_referrer":null,"user_agent":null,"_id":"2ST8btby3mmsgPF9"} -{"title":"Meteomedia","channel":"MeteoMedia.ca","filepath":"tests/__data__/output/streams/in.m3u","url":"http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8","http_referrer":null,"user_agent":null,"_id":"2ST8btby3mmsgP49"} -{"title":"Zoo (480p)","channel":"Zoo.ad","filepath":"tests/__data__/output/streams/ad.m3u","url":"https://iptv-all.lanesh4d0w.repl.co/andorra/zoo?480","http_referrer":null,"user_agent":null,"_id":"I6cjG2xCBRFFP4s3"} -{"title":"Zoo (720p)","channel":"Zoo.ad","filepath":"tests/__data__/output/streams/ad.m3u","url":"https://iptv-all.lanesh4d0w.repl.co/andorra/zoo","http_referrer":null,"user_agent":null,"_id":"I6cjG2xCBRFFP4sz"} +{"line": 2,"quality":"1080p","label":null,"name":"ะ›ะ”ะŸะ  ะขะ’","channel":"LDPRTV.ru","filepath":"ru.m3u","url":"http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8","httpReferrer":null,"userAgent":null,"_id":"2ST8btby3mmsgPF0"} +{"line": 2,"quality":"1080p","label":null,"name":"ะ›ะ”ะŸะ  ะขะ’","channel":"LDPRTV.ru","filepath":"ru.m3u","url":"http://46.46.143.222:1935/live/mp4:ldpr.stream/timeout.m3u8","httpReferrer":null,"userAgent":null,"_id":"2ST8btby3mmsgPF1"} +{"line": 2,"quality":"1080p","label":null,"name":"ะ›ะ”ะŸะ  ะขะ’","channel":"LDPRTV.ru","filepath":"ru.m3u","url":"http://46.46.143.222:1935/live/mp4:ldpr.stream/playlist.m3u8","httpReferrer":null,"userAgent":null,"_id":"2ST8btby3mmsgPF2"} +{"line": 2,"quality":"1080p","label":null,"name":"ะ›ะ”ะŸะ  ะขะ’","channel":"LDPRTV.ru","filepath":"ru.m3u","url":"http://46.46.143.222:1935/live/mp4:ldpr.stream/error.m3u8","httpReferrer":null,"userAgent":null,"_id":"2ST8btby3mmsgPF3"} +{"line": 2,"quality":"720p","label":"Geo-blocked","name":"BBC News HD","channel":"BBCNews.uk","filepath":"uk.m3u","url":"http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/playlist.m3u8","httpReferrer":null,"userAgent":null,"_id":"3TbieV1ptnZVCId5"} +{"line": 2,"quality":null,"label":null,"name":"BBC News HD","channel":"BBCNews.uk","filepath":"uk.m3u","url":"http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8","httpReferrer":null,"userAgent":null,"_id":"3TbieV1ptnZVCIdn"} +{"line": 2,"quality":null,"label":null,"name":"ATV","channel":"AndorraTV.ad","filepath":"ad.m3u","url":"https://iptv-all.lanesh4d0w.repl.co/andorra/atv","httpReferrer":null,"userAgent":null,"_id":"I6cjG2xCBRFFP44z"} +{"line": 2,"quality":"720p","label":"Not 24/7","name":"Andorra TV","channel":"","filepath":"uk.m3u","url":"http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8","httpReferrer":"http://imn.iq","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148","_id":"WTbieV1ptnZVCIdn"} +{"line": 2,"quality":null,"label":null,"name":"Visit-X TV","channel":"VisitXTV.nl","filepath":"nl.m3u","url":"https://stream.visit-x.tv/vxtv/ngrp:live_all/30fps.m3u8","httpReferrer":null,"userAgent":null,"_id":"2ST8btby3mmsgPF5"} +{"line": 2,"quality":null,"label":null,"name":"Visit-X TV","channel":"VisitXTV.nl","filepath":"nl.m3u","url":"https://stream.visit-x.tv/vxtv/ngrp:live_all/60fps.m3u8","httpReferrer":null,"userAgent":null,"_id":"2ST8btby3mmsgPF6"} +{"line": 2,"quality":null,"label":null,"name":"Daawah TV","channel":"","filepath":"in.m3u","url":"http://51.15.246.58:8081/daawahtv/daawahtv2/playlist.m3u8","httpReferrer":null,"userAgent":null,"_id":"2ST8btby3mmsgPF9"} +{"line": 2,"quality":null,"label":null,"name":"Meteomedia","channel":"MeteoMedia.ca","filepath":"in.m3u","url":"http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8","httpReferrer":null,"userAgent":null,"_id":"2ST8btby3mmsgP49"} +{"line": 2,"quality":"480p","label":null,"name":"Zoo","channel":"Zoo.ad","filepath":"ad.m3u","url":"https://iptv-all.lanesh4d0w.repl.co/andorra/zoo?480","httpReferrer":null,"userAgent":null,"_id":"I6cjG2xCBRFFP4s3"} +{"line": 2,"quality":"720p","label":null,"name":"Zoo","channel":"Zoo.ad","filepath":"ad.m3u","url":"https://iptv-all.lanesh4d0w.repl.co/andorra/zoo","httpReferrer":null,"userAgent":null,"_id":"I6cjG2xCBRFFP4sz"} diff --git a/tests/__data__/input/database/playlist_update.streams.db b/tests/__data__/input/database/playlist_update.streams.db new file mode 100644 index 000000000..898b99357 --- /dev/null +++ b/tests/__data__/input/database/playlist_update.streams.db @@ -0,0 +1,21 @@ +{"line": 2,"name":"ะ›ะ”ะŸะ  ะขะ’","quality":"1080p","label":null,"channel":"LDPRTV.ru","filepath":"ru.m3u","url":"https://service-stitcher.clusters.pluto.tv/stitch/hls/channel/5ca525b650be2571e3943c63/master.m3u8?deviceId=5ca525b650be2571e3943c63&appName=web&advertisingId=","httpReferrer":null,"userAgent":null,"_id":"2ST8btby3mmsgPF3"} +{"line": 2,"name":"ะ›ะ”ะŸะ  ะขะ’","quality":"1080p","label":null,"channel":"LDPRTV.ru","filepath":"ru.m3u","url":"http://46.46.143.222:1935/live/mp4:ldpr.stream/playlist.m3u8","httpReferrer":null,"userAgent":null,"_id":"2ST8btby3mmsgPF0"} +{"line": 2,"name":"ะ›ะ”ะŸะ  ะขะ’","quality":"1080p","label":null,"channel":"LDPRTV.ru","filepath":"ru.m3u","url":"http://46.46.143.222:1935/live/mp4:ldpr.stream/playlist.m3u8","httpReferrer":null,"userAgent":null,"_id":"2ST8btby3mmsgPF1"} +{"line": 2,"name":"ะ›ะ”ะŸะ  ะขะ’","quality":"1080p","label":null,"channel":"LDPRTV.ru","filepath":"ru.m3u","url":"http://46.46.143.222:1935/live/mp4:ldpr.stream/playlist.m3u8","httpReferrer":null,"userAgent":null,"_id":"2ST8btby3mmsgPF2"} +{"line": 2,"name":"BBC News HD","quality":"720p","label":"Not 24/7","channel":"BBCNews.uk","filepath":"uk.m3u","url":"http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8","httpReferrer":null,"userAgent":null,"_id":"3TbieV1ptnZVCIdn"} +{"line": 2,"quality":"720p","label":"Offline","name":"ATV","channel":"AndorraTV.ad","filepath":"ad.m3u","url":"https://iptv-all.lanesh4d0w.repl.co/andorra/atv","httpReferrer":"http://imn.iq","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148","_id":"I6cjG2xCBRFFP4sz"} +{"line": 2,"quality":"480p","label":"Geo-blocked","name":"BBC News HD","channel":"BBCNews.uk","filepath":"uk.m3u","url":"http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/playlist.m3u8","httpReferrer":null,"userAgent":null,"_id":"WTbieV1ptnZVCIdn"} +{"line": 2,"quality":null,"label":null,"name":"Kayhan TV","channel":"KayhanTV.af","filepath":"af.m3u","url":"http://208.93.117.113/live/Stream1/playlist.m3u8","httpReferrer":null,"userAgent":null,"_id":"cFFpFVzSn6xFMUF3"} +{"line": 2,"quality":null,"label":null,"name":"Sharq","channel":"Sharq.af","filepath":"af.m3u","url":"http://51.210.199.50/hls/stream.m3u8","httpReferrer":null,"userAgent":null,"_id":"u7iyA6cjtf1iWWAZ"} +{"line": 2,"quality":"342p","label":"Geo-blocked","channel":"NPO1.nl","name":"NPO 1","filepath":"nl.m3u","url":"http://resolver.streaming.api.nos.nl/livestream?url=/live/npo/tvlive/npo1/npo1.isml/.m3u8","httpReferrer":null,"userAgent":null,"_id":"mvUyDVuS5gc8gLJV"} +{"line": 2,"quality":"1080p","label":"Geo-blocked","channel":"NPO1.nl","name":"NPO 1","filepath":"nl.m3u","url":"http://stream.tvtap.net:8081/live/nl-npo1.stream/30fps.m3u8","httpReferrer":null,"userAgent":null,"_id":"8WVbsxsYeOL7kHQl"} +{"line": 2,"quality":"1080p","label":"Geo-blocked","channel":"NPO1.nl","name":"NPO 1","filepath":"nl.m3u","url":"http://stream.tvtap.net:8081/live/nl-npo1.stream/60fps.m3u8","httpReferrer":null,"userAgent":null,"_id":"8WVbsxsYeOL7kHQB"} +{"line": 2,"quality":"342p","label":null,"channel":"NPO2.nl","name":"NPO 2","filepath":"nl.m3u","url":"http://resolver.streaming.api.nos.nl/livestream?url=/live/npo/tvlive/npo2/npo2.isml/.m3u8","httpReferrer":null,"userAgent":null,"_id":"2p1TNGO0mF0MJOGy"} +{"line": 2,"quality":"302p","label":"Geo-blocked","channel":"NPO2.nl","name":"NPO 2","filepath":"nl.m3u","url":"http://stream.tvtap.net:8081/live/nl-npo2.stream/playlist.m3u8","httpReferrer":null,"userAgent":null,"_id":"nhL85BL7YM5OR7cn"} +{"line": 2,"quality":null,"label":null,"name":"Tele 2000","channel":"Tele2000.pe","filepath":"pe.m3u","url":"https://servilive.com:3126/live/tele2000live.m3u8","httpReferrer":"https://example2.com/","userAgent":null,"_id":"cF0pFVzSn6xFMUF3"} +{"line": 2,"quality":null,"label":null,"name":"Planeta Junior TV","channel":"","filepath":"es.m3u","url":"https://deaplaneta-planetakidz-1-es.samsung.wurl.tv/playlist.m3u8","httpReferrer":null,"userAgent":null,"_id":"1BT8btby3mmsgPF0"} +{"line": 2,"quality":null,"label":null,"name":"Caillou","channel":"","filepath":"es.m3u","url":"https://dhx-caillou-1-es.samsung.wurl.tv/playlist.m3u8","httpReferrer":null,"userAgent":null,"_id":"3BT8btby3mmsgPF0"} +{"line": 2,"quality":null,"label":null,"name":"iHola Play","channel":"","filepath":"es.m3u","url":"https://rakuten-hola-2-es.samsung.wurl.tv/playlist.m3u8","httpReferrer":null,"userAgent":null,"_id":"2BT8btby3mmsgPF0"} +{"line": 2,"quality":"720p","label":null,"name":"Telearuba","channel":"Telearuba.aw","filepath":"aw.m3u","url":"http://cdn.setar.aw:1935/Telearuba/smil:telearuba.smil/playlist.m3u8","httpReferrer":null,"userAgent":null,"_id":"6BT8btby3mmsgPF0"} +{"line": 2,"quality":"480p","label":"Not 24/7","name":"Telearuba","channel":"Telearuba.aw","filepath":"aw.m3u","url":"https://backend-server-dot-telearuba-app.appspot.com/media/livestream13/playlist.m3u8","httpReferrer":null,"userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36","_id":"4BT8btby3mmsgPF0"} +{"line": 2,"quality":"","label":"","name":"Telearuba","channel":"","filepath":"bg.m3u","url":"https://ythls.onrender.com/channel/UC40TUSUx490U5uR1lZt3Ajgm3u8","httpReferrer":null,"userAgent":null,"_id":"4BT8btby3mmsgSF0"} diff --git a/tests/__data__/input/issues/streams_add.js b/tests/__data__/input/issues/streams_add.js new file mode 100644 index 000000000..c225c57de --- /dev/null +++ b/tests/__data__/input/issues/streams_add.js @@ -0,0 +1,406 @@ +export default [ + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14179', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14179/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14179/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14179/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14179', + id: 1884926953, + node_id: 'I_kwDOCWUK8M5wWbPp', + number: 14179, + title: 'Add: Manorama News', + user: { + login: 'freearhey', + id: 7253922, + node_id: 'MDQ6VXNlcjcyNTM5MjI=', + avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/freearhey', + html_url: 'https://github.com/freearhey', + followers_url: 'https://api.github.com/users/freearhey/followers', + following_url: 'https://api.github.com/users/freearhey/following{/other_user}', + gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}', + starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions', + organizations_url: 'https://api.github.com/users/freearhey/orgs', + repos_url: 'https://api.github.com/users/freearhey/repos', + events_url: 'https://api.github.com/users/freearhey/events{/privacy}', + received_events_url: 'https://api.github.com/users/freearhey/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694119113, + node_id: 'MDU6TGFiZWwxNjk0MTE5MTEz', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/IN', + name: 'IN', + color: 'd8139a', + default: false, + description: 'India' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2023-09-07T00:38:55Z', + updated_at: '2023-09-07T00:48:32Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Channel ID\n\nManoramaNews.in\n\n### Stream URL\n\nhttps://ythls.onrender.com/channel/UCP0uG-mcMImgKnJz-VjJZmQ.m3u8\n\n### Label\n\nNot 24/7\n\n### Notes (optional)\n\nSource: https://github.com/iptv-org/iptv/issues/14007#issuecomment-1686942043\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14179/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14179/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14178', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14178/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14178/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14178/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14178', + id: 1884922249, + node_id: 'I_kwDOCWUK8M5wWaGJ', + number: 14178, + title: 'Add: TV3', + user: { + login: 'freearhey', + id: 7253922, + node_id: 'MDQ6VXNlcjcyNTM5MjI=', + avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/freearhey', + html_url: 'https://github.com/freearhey', + followers_url: 'https://api.github.com/users/freearhey/followers', + following_url: 'https://api.github.com/users/freearhey/following{/other_user}', + gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}', + starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions', + organizations_url: 'https://api.github.com/users/freearhey/orgs', + repos_url: 'https://api.github.com/users/freearhey/repos', + events_url: 'https://api.github.com/users/freearhey/events{/privacy}', + received_events_url: 'https://api.github.com/users/freearhey/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1912922147, + node_id: 'MDU6TGFiZWwxOTEyOTIyMTQ3', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/MY', + name: 'MY', + color: 'ea59cf', + default: false, + description: 'Malaysia' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2023-09-07T00:30:51Z', + updated_at: '2023-09-07T00:48:23Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Channel ID\n\nTV3.my\n\n### Stream URL\n\nhttps://live-streams-ssai-01.tonton.com.my/live/2dd2b7cd-1b34-4871-b669-57b5c9beca23/live.isml/.m3u8\n\n### Label\n\nNone\n\n### Notes (optional)\n\nSource: https://github.com/iptv-org/iptv/issues/14063#issuecomment-1695783106\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14178/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14178/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14177', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14177/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14177/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14177/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14177', + id: 1884920274, + node_id: 'I_kwDOCWUK8M5wWZnS', + number: 14177, + title: 'Add: Temple University TV', + user: { + login: 'freearhey', + id: 7253922, + node_id: 'MDQ6VXNlcjcyNTM5MjI=', + avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/freearhey', + html_url: 'https://github.com/freearhey', + followers_url: 'https://api.github.com/users/freearhey/followers', + following_url: 'https://api.github.com/users/freearhey/following{/other_user}', + gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}', + starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions', + organizations_url: 'https://api.github.com/users/freearhey/orgs', + repos_url: 'https://api.github.com/users/freearhey/repos', + events_url: 'https://api.github.com/users/freearhey/events{/privacy}', + received_events_url: 'https://api.github.com/users/freearhey/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694118251, + node_id: 'MDU6TGFiZWwxNjk0MTE4MjUx', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/US', + name: 'US', + color: '463faa', + default: false, + description: 'United States' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2023-09-07T00:27:51Z', + updated_at: '2023-09-07T00:47:15Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Channel ID\n\nTUTV.us\n\n### Stream URL\n\nhttps://livestream.telvue.com/templeuni1/f7b44cfafd5c52223d5498196c8a2e7b.sdp/playlist.m3u8\n\n### Label\n\nNone\n\n### Notes (optional)\n\nSource: https://github.com/iptv-org/iptv/issues/14096#issue-1874505679\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14177/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14177/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14176', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14176/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14176/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14176/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14176', + id: 1884926953, + node_id: 'I_kwDOCWUK8M5wWbPp', + number: 14176, + title: 'Add: Manorama News', + user: { + login: 'freearhey', + id: 7253922, + node_id: 'MDQ6VXNlcjcyNTM5MjI=', + avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/freearhey', + html_url: 'https://github.com/freearhey', + followers_url: 'https://api.github.com/users/freearhey/followers', + following_url: 'https://api.github.com/users/freearhey/following{/other_user}', + gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}', + starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions', + organizations_url: 'https://api.github.com/users/freearhey/orgs', + repos_url: 'https://api.github.com/users/freearhey/repos', + events_url: 'https://api.github.com/users/freearhey/events{/privacy}', + received_events_url: 'https://api.github.com/users/freearhey/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694119113, + node_id: 'MDU6TGFiZWwxNjk0MTE5MTEz', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/IN', + name: 'IN', + color: 'd8139a', + default: false, + description: 'India' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2023-09-07T00:38:55Z', + updated_at: '2023-09-07T00:48:32Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Channel ID\n\nManoramaNews.in\n\n### Stream URL\n\nhttps://ythls.onrender.com/channel/UCP0uG-mcMImgKnJz-VjJZmQ.m3u8\n\n### Label\n\nNot 24/7\n\n### Notes (optional)\n\nSource: https://github.com/iptv-org/iptv/issues/14007#issuecomment-1686942043\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14176/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14176/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14175', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14175/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14175/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14175/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14175', + id: 1884859778, + node_id: 'I_kwDOCWUK8M5wWK2C', + number: 14175, + title: 'Add: TFX', + user: { + login: 'freearhey', + id: 7253922, + node_id: 'MDQ6VXNlcjcyNTM5MjI=', + avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/freearhey', + html_url: 'https://github.com/freearhey', + followers_url: 'https://api.github.com/users/freearhey/followers', + following_url: 'https://api.github.com/users/freearhey/following{/other_user}', + gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}', + starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions', + organizations_url: 'https://api.github.com/users/freearhey/orgs', + repos_url: 'https://api.github.com/users/freearhey/repos', + events_url: 'https://api.github.com/users/freearhey/events{/privacy}', + received_events_url: 'https://api.github.com/users/freearhey/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694117286, + node_id: 'MDU6TGFiZWwxNjk0MTE3Mjg2', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/FR', + name: 'FR', + color: 'f7ec1b', + default: false, + description: 'France' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2023-09-06T22:54:25Z', + updated_at: '2023-09-07T00:57:11Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Channel ID\n\nTFX.fr\n\n### Stream URL\n\nhttp://livetv.ktv.zone/13/play.m3u8\n\n### Label\n\nNone\n\n### Notes (optional)\n\nSource: https://github.com/iptv-org/iptv-org.github.io/issues/1381\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14175/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14175/timeline', + performed_via_github_app: null, + state_reason: null + } +] diff --git a/tests/__data__/input/issues/streams_add_approved.js b/tests/__data__/input/issues/streams_add_approved.js new file mode 100644 index 000000000..5c0f12b79 --- /dev/null +++ b/tests/__data__/input/issues/streams_add_approved.js @@ -0,0 +1,2651 @@ +export default [ + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14179', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14179/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14179/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14179/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14179', + id: 1884926953, + node_id: 'I_kwDOCWUK8M5wWbPp', + number: 14179, + title: 'Add: Manorama News', + user: { + login: 'freearhey', + id: 7253922, + node_id: 'MDQ6VXNlcjcyNTM5MjI=', + avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/freearhey', + html_url: 'https://github.com/freearhey', + followers_url: 'https://api.github.com/users/freearhey/followers', + following_url: 'https://api.github.com/users/freearhey/following{/other_user}', + gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}', + starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions', + organizations_url: 'https://api.github.com/users/freearhey/orgs', + repos_url: 'https://api.github.com/users/freearhey/repos', + events_url: 'https://api.github.com/users/freearhey/events{/privacy}', + received_events_url: 'https://api.github.com/users/freearhey/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694119113, + node_id: 'MDU6TGFiZWwxNjk0MTE5MTEz', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/IN', + name: 'IN', + color: 'd8139a', + default: false, + description: 'India' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2023-09-07T00:38:55Z', + updated_at: '2023-09-07T00:48:32Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Channel ID\n\nManoramaNews.in\n\n### Stream URL\n\nhttps://ythls.onrender.com/channel/UCP0uG-mcMImgKnJz-VjJZmQ.m3u8\n\n### Label\n\nNot 24/7\n\n### Notes (optional)\n\nSource: https://github.com/iptv-org/iptv/issues/14007#issuecomment-1686942043\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14179/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14179/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14178', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14178/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14178/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14178/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14178', + id: 1884922249, + node_id: 'I_kwDOCWUK8M5wWaGJ', + number: 14178, + title: 'Add: TV3', + user: { + login: 'freearhey', + id: 7253922, + node_id: 'MDQ6VXNlcjcyNTM5MjI=', + avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/freearhey', + html_url: 'https://github.com/freearhey', + followers_url: 'https://api.github.com/users/freearhey/followers', + following_url: 'https://api.github.com/users/freearhey/following{/other_user}', + gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}', + starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions', + organizations_url: 'https://api.github.com/users/freearhey/orgs', + repos_url: 'https://api.github.com/users/freearhey/repos', + events_url: 'https://api.github.com/users/freearhey/events{/privacy}', + received_events_url: 'https://api.github.com/users/freearhey/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1912922147, + node_id: 'MDU6TGFiZWwxOTEyOTIyMTQ3', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/MY', + name: 'MY', + color: 'ea59cf', + default: false, + description: 'Malaysia' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2023-09-07T00:30:51Z', + updated_at: '2023-09-07T00:48:23Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Channel ID\n\nTV3.my\n\n### Stream URL\n\nhttps://live-streams-ssai-01.tonton.com.my/live/2dd2b7cd-1b34-4871-b669-57b5c9beca23/live.isml/.m3u8\n\n### Channel Name\n\nTV3 (Vertical)\n\n### Quality\n\n720p\n\n### Label\n\nGeo-blocked\n\n### HTTP User-Agent\n\nMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Edge/12.246\n\n### HTTP Referrer\n\nhttps://example.com/\n\n### Notes\n\nSource: https://github.com/iptv-org/iptv/issues/14063#issuecomment-1695783106\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14178/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14178/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14175', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14175/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14175/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14175/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14175', + id: 1884859778, + node_id: 'I_kwDOCWUK8M5wWK2C', + number: 14175, + title: 'Add: TFX', + user: { + login: 'freearhey', + id: 7253922, + node_id: 'MDQ6VXNlcjcyNTM5MjI=', + avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/freearhey', + html_url: 'https://github.com/freearhey', + followers_url: 'https://api.github.com/users/freearhey/followers', + following_url: 'https://api.github.com/users/freearhey/following{/other_user}', + gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}', + starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions', + organizations_url: 'https://api.github.com/users/freearhey/orgs', + repos_url: 'https://api.github.com/users/freearhey/repos', + events_url: 'https://api.github.com/users/freearhey/events{/privacy}', + received_events_url: 'https://api.github.com/users/freearhey/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694117286, + node_id: 'MDU6TGFiZWwxNjk0MTE3Mjg2', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/FR', + name: 'FR', + color: 'f7ec1b', + default: false, + description: 'France' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2023-09-06T22:54:25Z', + updated_at: '2023-09-07T00:57:11Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Channel ID\n\nTFX.fr\n\n### Stream URL\n\nhttp://livetv.ktv.zone/13/play.m3u8\n\n### Label\n\nNone\n\n### Notes (optional)\n\nSource: https://github.com/iptv-org/iptv-org.github.io/issues/1381\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14175/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14175/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14174', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14174/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14174/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14174/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14174', + id: 1884858911, + node_id: 'I_kwDOCWUK8M5wWKof', + number: 14174, + title: 'Add: TMC', + user: { + login: 'freearhey', + id: 7253922, + node_id: 'MDQ6VXNlcjcyNTM5MjI=', + avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/freearhey', + html_url: 'https://github.com/freearhey', + followers_url: 'https://api.github.com/users/freearhey/followers', + following_url: 'https://api.github.com/users/freearhey/following{/other_user}', + gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}', + starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions', + organizations_url: 'https://api.github.com/users/freearhey/orgs', + repos_url: 'https://api.github.com/users/freearhey/repos', + events_url: 'https://api.github.com/users/freearhey/events{/privacy}', + received_events_url: 'https://api.github.com/users/freearhey/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694117286, + node_id: 'MDU6TGFiZWwxNjk0MTE3Mjg2', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/FR', + name: 'FR', + color: 'f7ec1b', + default: false, + description: 'France' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2023-09-06T22:53:36Z', + updated_at: '2023-09-07T00:57:48Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Channel ID\n\nTMC.fr\n\n### Stream URL\n\nhttp://livetv.ktv.zone/12/play.m3u8\n\n### Label\n\nNone\n\n### Notes (optional)\n\nSource: https://github.com/iptv-org/iptv-org.github.io/issues/1381\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14174/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14174/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14173', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14173/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14173/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14173/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14173', + id: 1884858511, + node_id: 'I_kwDOCWUK8M5wWKiP', + number: 14173, + title: 'Add: TF1 Sรฉries Films', + user: { + login: 'freearhey', + id: 7253922, + node_id: 'MDQ6VXNlcjcyNTM5MjI=', + avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/freearhey', + html_url: 'https://github.com/freearhey', + followers_url: 'https://api.github.com/users/freearhey/followers', + following_url: 'https://api.github.com/users/freearhey/following{/other_user}', + gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}', + starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions', + organizations_url: 'https://api.github.com/users/freearhey/orgs', + repos_url: 'https://api.github.com/users/freearhey/repos', + events_url: 'https://api.github.com/users/freearhey/events{/privacy}', + received_events_url: 'https://api.github.com/users/freearhey/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694117286, + node_id: 'MDU6TGFiZWwxNjk0MTE3Mjg2', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/FR', + name: 'FR', + color: 'f7ec1b', + default: false, + description: 'France' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2023-09-06T22:52:56Z', + updated_at: '2023-09-07T00:58:41Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Channel ID\n\nTF1SeriesFilms.fr\n\n### Stream URL\n\nhttp://livetv.ktv.zone/22/play.m3u8\n\n### Label\n\nNone\n\n### Notes (optional)\n\nSource: https://github.com/iptv-org/iptv-org.github.io/issues/1381\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14173/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14173/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14172', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14172/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14172/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14172/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14172', + id: 1884857911, + node_id: 'I_kwDOCWUK8M5wWKY3', + number: 14172, + title: 'Add: TF1', + user: { + login: 'freearhey', + id: 7253922, + node_id: 'MDQ6VXNlcjcyNTM5MjI=', + avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/freearhey', + html_url: 'https://github.com/freearhey', + followers_url: 'https://api.github.com/users/freearhey/followers', + following_url: 'https://api.github.com/users/freearhey/following{/other_user}', + gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}', + starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions', + organizations_url: 'https://api.github.com/users/freearhey/orgs', + repos_url: 'https://api.github.com/users/freearhey/repos', + events_url: 'https://api.github.com/users/freearhey/events{/privacy}', + received_events_url: 'https://api.github.com/users/freearhey/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694117286, + node_id: 'MDU6TGFiZWwxNjk0MTE3Mjg2', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/FR', + name: 'FR', + color: 'f7ec1b', + default: false, + description: 'France' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2023-09-06T22:51:59Z', + updated_at: '2023-09-07T00:59:15Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Channel ID\n\nTF1.fr\n\n### Stream URL\n\nhttp://livetv.ktv.zone/3/play.m3u8\n\n### Label\n\nNone\n\n### Notes (optional)\n\nSource: https://github.com/iptv-org/iptv-org.github.io/issues/1381\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14172/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14172/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14171', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14171/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14171/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14171/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14171', + id: 1884848574, + node_id: 'I_kwDOCWUK8M5wWIG-', + number: 14171, + title: 'Add: France 3 Rhรดne-Alpes', + user: { + login: 'freearhey', + id: 7253922, + node_id: 'MDQ6VXNlcjcyNTM5MjI=', + avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/freearhey', + html_url: 'https://github.com/freearhey', + followers_url: 'https://api.github.com/users/freearhey/followers', + following_url: 'https://api.github.com/users/freearhey/following{/other_user}', + gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}', + starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions', + organizations_url: 'https://api.github.com/users/freearhey/orgs', + repos_url: 'https://api.github.com/users/freearhey/repos', + events_url: 'https://api.github.com/users/freearhey/events{/privacy}', + received_events_url: 'https://api.github.com/users/freearhey/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694117286, + node_id: 'MDU6TGFiZWwxNjk0MTE3Mjg2', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/FR', + name: 'FR', + color: 'f7ec1b', + default: false, + description: 'France' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2023-09-06T22:38:57Z', + updated_at: '2023-09-07T11:09:01Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Channel ID\n\nFrance3RhoneAlpes.fr\n\n### Stream URL\n\nhttp://livetv.ktv.zone/233/play.m3u8\n\n### Label\n\nNone\n\n### Notes (optional)\n\nSource: https://github.com/iptv-org/iptv-org.github.io/issues/1369\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14171/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14171/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14170', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14170/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14170/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14170/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14170', + id: 1884848136, + node_id: 'I_kwDOCWUK8M5wWIAI', + number: 14170, + title: 'Add: France 3 Provence-Alpes', + user: { + login: 'freearhey', + id: 7253922, + node_id: 'MDQ6VXNlcjcyNTM5MjI=', + avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/freearhey', + html_url: 'https://github.com/freearhey', + followers_url: 'https://api.github.com/users/freearhey/followers', + following_url: 'https://api.github.com/users/freearhey/following{/other_user}', + gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}', + starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions', + organizations_url: 'https://api.github.com/users/freearhey/orgs', + repos_url: 'https://api.github.com/users/freearhey/repos', + events_url: 'https://api.github.com/users/freearhey/events{/privacy}', + received_events_url: 'https://api.github.com/users/freearhey/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694117286, + node_id: 'MDU6TGFiZWwxNjk0MTE3Mjg2', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/FR', + name: 'FR', + color: 'f7ec1b', + default: false, + description: 'France' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2023-09-06T22:38:21Z', + updated_at: '2023-09-07T11:09:41Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Channel ID\n\nFrance3ProvenceAlpes.fr\n\n### Stream URL\n\nhttp://livetv.ktv.zone/232/play.m3u8\n\n### Label\n\nNone\n\n### Notes (optional)\n\nSource: https://github.com/iptv-org/iptv-org.github.io/issues/1369\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14170/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14170/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14169', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14169/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14169/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14169/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14169', + id: 1884847729, + node_id: 'I_kwDOCWUK8M5wWH5x', + number: 14169, + title: 'Add: France 3 Nouvelle-Aquitaine', + user: { + login: 'freearhey', + id: 7253922, + node_id: 'MDQ6VXNlcjcyNTM5MjI=', + avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/freearhey', + html_url: 'https://github.com/freearhey', + followers_url: 'https://api.github.com/users/freearhey/followers', + following_url: 'https://api.github.com/users/freearhey/following{/other_user}', + gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}', + starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions', + organizations_url: 'https://api.github.com/users/freearhey/orgs', + repos_url: 'https://api.github.com/users/freearhey/repos', + events_url: 'https://api.github.com/users/freearhey/events{/privacy}', + received_events_url: 'https://api.github.com/users/freearhey/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694117286, + node_id: 'MDU6TGFiZWwxNjk0MTE3Mjg2', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/FR', + name: 'FR', + color: 'f7ec1b', + default: false, + description: 'France' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2023-09-06T22:37:48Z', + updated_at: '2023-09-07T11:11:10Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Channel ID\r\n\r\nFrance3NouvelleAquitaine.fr\r\n\r\n### Stream URL\r\n\r\nhttp://livetv.ktv.zone/231/play.m3u8\r\n\r\n### Label\r\n\r\nNone\r\n\r\n### Notes (optional)\r\n\r\nSource: https://github.com/iptv-org/iptv-org.github.io/issues/1369\r\n\r\n### Contributing Guide\r\n\r\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14169/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14169/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14164', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14164/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14164/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14164/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14164', + id: 1884844619, + node_id: 'I_kwDOCWUK8M5wWHJL', + number: 14164, + title: 'Add: France 3 Nouvelle-Aquitaine', + user: { + login: 'freearhey', + id: 7253922, + node_id: 'MDQ6VXNlcjcyNTM5MjI=', + avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/freearhey', + html_url: 'https://github.com/freearhey', + followers_url: 'https://api.github.com/users/freearhey/followers', + following_url: 'https://api.github.com/users/freearhey/following{/other_user}', + gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}', + starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions', + organizations_url: 'https://api.github.com/users/freearhey/orgs', + repos_url: 'https://api.github.com/users/freearhey/repos', + events_url: 'https://api.github.com/users/freearhey/events{/privacy}', + received_events_url: 'https://api.github.com/users/freearhey/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694117286, + node_id: 'MDU6TGFiZWwxNjk0MTE3Mjg2', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/FR', + name: 'FR', + color: 'f7ec1b', + default: false, + description: 'France' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2023-09-06T22:34:48Z', + updated_at: '2023-09-07T11:16:08Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Channel ID\r\n\r\nFrance3NouvelleAquitaine.fr\r\n\r\n### Stream URL\r\n\r\nhttp://livetv.ktv.zone/224/play.m3u8\r\n\r\n### Label\r\n\r\nNone\r\n\r\n### Notes (optional)\r\n\r\nSource: https://github.com/iptv-org/iptv-org.github.io/issues/1369\r\n\r\n### Contributing Guide\r\n\r\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14164/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14164/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14162', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14162/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14162/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14162/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14162', + id: 1884843815, + node_id: 'I_kwDOCWUK8M5wWG8n', + number: 14162, + title: "Add: France 3 Cรดte d'Azur", + user: { + login: 'freearhey', + id: 7253922, + node_id: 'MDQ6VXNlcjcyNTM5MjI=', + avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/freearhey', + html_url: 'https://github.com/freearhey', + followers_url: 'https://api.github.com/users/freearhey/followers', + following_url: 'https://api.github.com/users/freearhey/following{/other_user}', + gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}', + starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions', + organizations_url: 'https://api.github.com/users/freearhey/orgs', + repos_url: 'https://api.github.com/users/freearhey/repos', + events_url: 'https://api.github.com/users/freearhey/events{/privacy}', + received_events_url: 'https://api.github.com/users/freearhey/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694117286, + node_id: 'MDU6TGFiZWwxNjk0MTE3Mjg2', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/FR', + name: 'FR', + color: 'f7ec1b', + default: false, + description: 'France' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2023-09-06T22:33:38Z', + updated_at: '2023-09-07T11:17:29Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Channel ID\n\nFrance3CotedAzur.fr\n\n### Stream URL\n\nhttp://livetv.ktv.zone/220/play.m3u8\n\n### Label\n\nNone\n\n### Notes (optional)\n\nSource: https://github.com/iptv-org/iptv-org.github.io/issues/1369\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14162/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14162/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14160', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14160/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14160/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14160/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14160', + id: 1884842467, + node_id: 'I_kwDOCWUK8M5wWGnj', + number: 14160, + title: 'Add: France 3 Bretagne', + user: { + login: 'freearhey', + id: 7253922, + node_id: 'MDQ6VXNlcjcyNTM5MjI=', + avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/freearhey', + html_url: 'https://github.com/freearhey', + followers_url: 'https://api.github.com/users/freearhey/followers', + following_url: 'https://api.github.com/users/freearhey/following{/other_user}', + gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}', + starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions', + organizations_url: 'https://api.github.com/users/freearhey/orgs', + repos_url: 'https://api.github.com/users/freearhey/repos', + events_url: 'https://api.github.com/users/freearhey/events{/privacy}', + received_events_url: 'https://api.github.com/users/freearhey/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694117286, + node_id: 'MDU6TGFiZWwxNjk0MTE3Mjg2', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/FR', + name: 'FR', + color: 'f7ec1b', + default: false, + description: 'France' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2023-09-06T22:31:53Z', + updated_at: '2023-09-07T11:18:52Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Channel ID\n\nFrance3Bretagne.fr\n\n### Stream URL\n\nhttp://livetv.ktv.zone/216/play.m3u8\n\n### Label\n\nNone\n\n### Notes (optional)\n\nSource: https://github.com/iptv-org/iptv-org.github.io/issues/1369\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14160/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14160/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14159', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14159/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14159/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14159/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14159', + id: 1884839466, + node_id: 'I_kwDOCWUK8M5wWF4q', + number: 14159, + title: 'Add: France 3 Auvergne', + user: { + login: 'freearhey', + id: 7253922, + node_id: 'MDQ6VXNlcjcyNTM5MjI=', + avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/freearhey', + html_url: 'https://github.com/freearhey', + followers_url: 'https://api.github.com/users/freearhey/followers', + following_url: 'https://api.github.com/users/freearhey/following{/other_user}', + gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}', + starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions', + organizations_url: 'https://api.github.com/users/freearhey/orgs', + repos_url: 'https://api.github.com/users/freearhey/repos', + events_url: 'https://api.github.com/users/freearhey/events{/privacy}', + received_events_url: 'https://api.github.com/users/freearhey/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694117286, + node_id: 'MDU6TGFiZWwxNjk0MTE3Mjg2', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/FR', + name: 'FR', + color: 'f7ec1b', + default: false, + description: 'France' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2023-09-06T22:29:42Z', + updated_at: '2023-09-07T11:19:27Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Channel ID\n\nFrance3Auvergne.fr\n\n### Stream URL\n\nhttp://livetv.ktv.zone/213/play.m3u8\n\n### Label\n\nNone\n\n### Notes (optional)\n\nSource: https://github.com/iptv-org/iptv-org.github.io/issues/1369\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14159/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14159/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14158', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14158/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14158/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14158/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14158', + id: 1884838227, + node_id: 'I_kwDOCWUK8M5wWFlT', + number: 14158, + title: 'Add: France 3 Aquitaine', + user: { + login: 'freearhey', + id: 7253922, + node_id: 'MDQ6VXNlcjcyNTM5MjI=', + avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/freearhey', + html_url: 'https://github.com/freearhey', + followers_url: 'https://api.github.com/users/freearhey/followers', + following_url: 'https://api.github.com/users/freearhey/following{/other_user}', + gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}', + starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions', + organizations_url: 'https://api.github.com/users/freearhey/orgs', + repos_url: 'https://api.github.com/users/freearhey/repos', + events_url: 'https://api.github.com/users/freearhey/events{/privacy}', + received_events_url: 'https://api.github.com/users/freearhey/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694117286, + node_id: 'MDU6TGFiZWwxNjk0MTE3Mjg2', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/FR', + name: 'FR', + color: 'f7ec1b', + default: false, + description: 'France' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2023-09-06T22:28:04Z', + updated_at: '2023-09-07T11:20:07Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Channel ID\n\nFrance3Aquitaine.fr\n\n### Stream URL\n\nhttp://livetv.ktv.zone/212/play.m3u8\n\n### Label\n\nNone\n\n### Notes (optional)\n\nSource: https://github.com/iptv-org/iptv-org.github.io/issues/1369\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14158/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14158/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14155', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14155/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14155/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14155/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14155', + id: 1884821412, + node_id: 'I_kwDOCWUK8M5wWBek', + number: 14155, + title: 'Add: France 5', + user: { + login: 'freearhey', + id: 7253922, + node_id: 'MDQ6VXNlcjcyNTM5MjI=', + avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/freearhey', + html_url: 'https://github.com/freearhey', + followers_url: 'https://api.github.com/users/freearhey/followers', + following_url: 'https://api.github.com/users/freearhey/following{/other_user}', + gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}', + starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions', + organizations_url: 'https://api.github.com/users/freearhey/orgs', + repos_url: 'https://api.github.com/users/freearhey/repos', + events_url: 'https://api.github.com/users/freearhey/events{/privacy}', + received_events_url: 'https://api.github.com/users/freearhey/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694117286, + node_id: 'MDU6TGFiZWwxNjk0MTE3Mjg2', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/FR', + name: 'FR', + color: 'f7ec1b', + default: false, + description: 'France' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2023-09-06T22:07:48Z', + updated_at: '2023-09-07T00:59:57Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Channel ID\n\nFrance5.fr\n\n### Stream URL\n\nhttp://livetv.ktv.zone/107/play.m3u8\n\n### Label\n\nNone\n\n### Notes (optional)\n\nSource: https://github.com/iptv-org/iptv/issues/13140#issuecomment-1588155361\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14155/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14155/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14153', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14153/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14153/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14153/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14153', + id: 1884818316, + node_id: 'I_kwDOCWUK8M5wWAuM', + number: 14153, + title: 'Add: France 3', + user: { + login: 'freearhey', + id: 7253922, + node_id: 'MDQ6VXNlcjcyNTM5MjI=', + avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/freearhey', + html_url: 'https://github.com/freearhey', + followers_url: 'https://api.github.com/users/freearhey/followers', + following_url: 'https://api.github.com/users/freearhey/following{/other_user}', + gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}', + starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions', + organizations_url: 'https://api.github.com/users/freearhey/orgs', + repos_url: 'https://api.github.com/users/freearhey/repos', + events_url: 'https://api.github.com/users/freearhey/events{/privacy}', + received_events_url: 'https://api.github.com/users/freearhey/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694117286, + node_id: 'MDU6TGFiZWwxNjk0MTE3Mjg2', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/FR', + name: 'FR', + color: 'f7ec1b', + default: false, + description: 'France' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2023-09-06T22:04:11Z', + updated_at: '2023-09-07T01:01:36Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Channel ID\n\nFrance3.fr\n\n### Stream URL\n\nhttp://livetv.ktv.zone/105/play.m3u8\n\n### Label\n\nNone\n\n### Notes (optional)\n\nSource: https://github.com/iptv-org/iptv/issues/13140#issuecomment-1588155361\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14153/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14153/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14152', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14152/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14152/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14152/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14152', + id: 1884817155, + node_id: 'I_kwDOCWUK8M5wWAcD', + number: 14152, + title: 'Add: France 2', + user: { + login: 'freearhey', + id: 7253922, + node_id: 'MDQ6VXNlcjcyNTM5MjI=', + avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/freearhey', + html_url: 'https://github.com/freearhey', + followers_url: 'https://api.github.com/users/freearhey/followers', + following_url: 'https://api.github.com/users/freearhey/following{/other_user}', + gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}', + starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions', + organizations_url: 'https://api.github.com/users/freearhey/orgs', + repos_url: 'https://api.github.com/users/freearhey/repos', + events_url: 'https://api.github.com/users/freearhey/events{/privacy}', + received_events_url: 'https://api.github.com/users/freearhey/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694117286, + node_id: 'MDU6TGFiZWwxNjk0MTE3Mjg2', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/FR', + name: 'FR', + color: 'f7ec1b', + default: false, + description: 'France' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2023-09-06T22:02:50Z', + updated_at: '2023-09-07T01:01:02Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Channel ID\n\nFrance2.fr\n\n### Stream URL\n\nhttp://livetv.ktv.zone/104/play.m3u8\n\n### Label\n\nNone\n\n### Notes (optional)\n\nSource: https://github.com/iptv-org/iptv/issues/13140#issuecomment-1588155361\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14152/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14152/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14149', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14149/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14149/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14149/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14149', + id: 1884454006, + node_id: 'I_kwDOCWUK8M5wUnx2', + number: 14149, + title: 'Add: Pluto TV More Star Trek', + user: { + login: 'freearhey', + id: 7253922, + node_id: 'MDQ6VXNlcjcyNTM5MjI=', + avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/freearhey', + html_url: 'https://github.com/freearhey', + followers_url: 'https://api.github.com/users/freearhey/followers', + following_url: 'https://api.github.com/users/freearhey/following{/other_user}', + gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}', + starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions', + organizations_url: 'https://api.github.com/users/freearhey/orgs', + repos_url: 'https://api.github.com/users/freearhey/repos', + events_url: 'https://api.github.com/users/freearhey/events{/privacy}', + received_events_url: 'https://api.github.com/users/freearhey/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694118251, + node_id: 'MDU6TGFiZWwxNjk0MTE4MjUx', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/US', + name: 'US', + color: '463faa', + default: false, + description: 'United States' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2023-09-06T17:26:17Z', + updated_at: '2023-09-07T00:49:14Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Channel ID\n\nStarTrek2.us\n\n### Stream URL\n\nhttps://service-stitcher.clusters.pluto.tv/v1/stitch/embed/hls/channel/634dacf51d90320007fcd5fa/master.m3u8?advertisingId=channel&appName=rokuchannel&appVersion=1.0&bmodel=bm1&channel_id=channel&content=channel&content_rating=ROKU_ADS_CONTENT_RATING&content_type=livefeed&coppa=false&deviceDNT=1&deviceId=channel&deviceMake=rokuChannel&deviceModel=web&deviceType=rokuChannel&deviceVersion=1.0&embedPartner=rokuChannel&genre=ROKU_ADS_CONTENT_GENRE&is_lat=1&platform=web&rdid=channel&studio_id=viacom&tags=ROKU_CONTENT_TAGS\n\n### Label\n\nNone\n\n### Notes (optional)\n\nDiscussed in https://github.com/orgs/iptv-org/discussions/989\r\n\r\nimage\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14149/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14149/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14135', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14135/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14135/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14135/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14135', + id: 1880165524, + node_id: 'I_kwDOCWUK8M5wEQyU', + number: 14135, + title: 'Add: BBC World News South Asia ', + user: { + login: 'kheohoanganh', + id: 128283995, + node_id: 'U_kgDOB6V1Ww', + avatar_url: 'https://avatars.githubusercontent.com/u/128283995?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/kheohoanganh', + html_url: 'https://github.com/kheohoanganh', + followers_url: 'https://api.github.com/users/kheohoanganh/followers', + following_url: 'https://api.github.com/users/kheohoanganh/following{/other_user}', + gists_url: 'https://api.github.com/users/kheohoanganh/gists{/gist_id}', + starred_url: 'https://api.github.com/users/kheohoanganh/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/kheohoanganh/subscriptions', + organizations_url: 'https://api.github.com/users/kheohoanganh/orgs', + repos_url: 'https://api.github.com/users/kheohoanganh/repos', + events_url: 'https://api.github.com/users/kheohoanganh/events{/privacy}', + received_events_url: 'https://api.github.com/users/kheohoanganh/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694116077, + node_id: 'MDU6TGFiZWwxNjk0MTE2MDc3', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/UK', + name: 'UK', + color: '99e5e5', + default: false, + description: 'United Kingdom' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2023-09-04T12:22:50Z', + updated_at: '2023-09-07T00:50:28Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Channel ID\n\nBBCWorldNewsSouthAsia.uk\n\n### Stream URL (optional)\n\nhttp://103.199.161.254/Content/bbcworld/Live/Channel%28BBCworld%29/Stream%2801%29/index.m3u8\n\n### Notes (optional)\n\n2 links for BBCWorldNewsSouthAsia.uk\r\nhttp://103.199.161.254/Content/bbcworld/Live/Channel%28BBCworld%29/Stream%2801%29/index.m3u8\r\nhttp://103.199.161.254/Content/bbcworld/Live/Channel%28BBCworld%29/Stream%2802%29/index.m3u8\n\n### Please confirm the following\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md#request-a-channel)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14135/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14135/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14105', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14105/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14105/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14105/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14105', + id: 1876637538, + node_id: 'I_kwDOCWUK8M5v2zdi', + number: 14105, + title: 'Add: Amarin TV (720p)', + user: { + login: 'Soponwit19997', + id: 142583084, + node_id: 'U_kgDOCH-lLA', + avatar_url: 'https://avatars.githubusercontent.com/u/142583084?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/Soponwit19997', + html_url: 'https://github.com/Soponwit19997', + followers_url: 'https://api.github.com/users/Soponwit19997/followers', + following_url: 'https://api.github.com/users/Soponwit19997/following{/other_user}', + gists_url: 'https://api.github.com/users/Soponwit19997/gists{/gist_id}', + starred_url: 'https://api.github.com/users/Soponwit19997/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/Soponwit19997/subscriptions', + organizations_url: 'https://api.github.com/users/Soponwit19997/orgs', + repos_url: 'https://api.github.com/users/Soponwit19997/repos', + events_url: 'https://api.github.com/users/Soponwit19997/events{/privacy}', + received_events_url: 'https://api.github.com/users/Soponwit19997/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 2990740232, + node_id: 'MDU6TGFiZWwyOTkwNzQwMjMy', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/TH', + name: 'TH', + color: 'B798EA', + default: false, + description: 'Thailand' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2023-09-01T03:08:05Z', + updated_at: '2023-09-06T14:19:50Z', + closed_at: null, + author_association: 'CONTRIBUTOR', + active_lock_reason: null, + body: '### Channel ID\n\nAmarinTV.th\n\n### Stream URL (optional)\n\nhttps://cdn6.goprimetime.info/feed/202306140918/chamarin/index.m3u8\n\n### Notes (optional)\n\n_No response_\n\n### Please confirm the following\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md#request-a-channel)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14105/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14105/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14104', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14104/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14104/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14104/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14104', + id: 1876636019, + node_id: 'I_kwDOCWUK8M5v2zFz', + number: 14104, + title: 'Add: MCOT HD (720p)', + user: { + login: 'Soponwit19997', + id: 142583084, + node_id: 'U_kgDOCH-lLA', + avatar_url: 'https://avatars.githubusercontent.com/u/142583084?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/Soponwit19997', + html_url: 'https://github.com/Soponwit19997', + followers_url: 'https://api.github.com/users/Soponwit19997/followers', + following_url: 'https://api.github.com/users/Soponwit19997/following{/other_user}', + gists_url: 'https://api.github.com/users/Soponwit19997/gists{/gist_id}', + starred_url: 'https://api.github.com/users/Soponwit19997/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/Soponwit19997/subscriptions', + organizations_url: 'https://api.github.com/users/Soponwit19997/orgs', + repos_url: 'https://api.github.com/users/Soponwit19997/repos', + events_url: 'https://api.github.com/users/Soponwit19997/events{/privacy}', + received_events_url: 'https://api.github.com/users/Soponwit19997/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 2990740232, + node_id: 'MDU6TGFiZWwyOTkwNzQwMjMy', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/TH', + name: 'TH', + color: 'B798EA', + default: false, + description: 'Thailand' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2023-09-01T03:05:56Z', + updated_at: '2023-09-06T14:21:02Z', + closed_at: null, + author_association: 'CONTRIBUTOR', + active_lock_reason: null, + body: '### Channel ID\n\nMCOTHD.th\n\n### Stream URL (optional)\n\nhttps://cdn6.goprimetime.info/feed/202306140918/chmcothd/index.m3u8\n\n### Notes (optional)\n\n_No response_\n\n### Please confirm the following\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md#request-a-channel)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14104/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14104/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14057', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14057/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14057/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14057/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14057', + id: 1868766252, + node_id: 'I_kwDOCWUK8M5vYxws', + number: 14057, + title: 'Add: MotorTrend Fast TV', + user: { + login: 'AudioNutz', + id: 28129911, + node_id: 'MDQ6VXNlcjI4MTI5OTEx', + avatar_url: 'https://avatars.githubusercontent.com/u/28129911?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/AudioNutz', + html_url: 'https://github.com/AudioNutz', + followers_url: 'https://api.github.com/users/AudioNutz/followers', + following_url: 'https://api.github.com/users/AudioNutz/following{/other_user}', + gists_url: 'https://api.github.com/users/AudioNutz/gists{/gist_id}', + starred_url: 'https://api.github.com/users/AudioNutz/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/AudioNutz/subscriptions', + organizations_url: 'https://api.github.com/users/AudioNutz/orgs', + repos_url: 'https://api.github.com/users/AudioNutz/repos', + events_url: 'https://api.github.com/users/AudioNutz/events{/privacy}', + received_events_url: 'https://api.github.com/users/AudioNutz/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694118251, + node_id: 'MDU6TGFiZWwxNjk0MTE4MjUx', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/US', + name: 'US', + color: '463faa', + default: false, + description: 'United States' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2023-08-28T01:23:43Z', + updated_at: '2023-09-06T13:44:17Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Channel ID\r\n\r\nFastTV.us\r\n\r\n### Stream URL (optional)\r\n\r\nhttps://3fa797d5.wurl.com/manifest/f36d25e7e52f1ba8d7e56eb859c636563214f541/T05PX01vdG9yVHJlbmRGYXN0VFZfSExT/b5e5e0e2-12b3-4312-93c9-c0a7c50b41ca/4.m3u8\r\n\r\n### Notes (optional)\r\n\r\nA free stream from MotorTrend TV\r\n\r\n### Please confirm the following\r\n\r\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md#request-a-channel)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14057/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14057/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14034', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14034/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14034/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14034/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14034', + id: 1863678726, + node_id: 'I_kwDOCWUK8M5vFXsG', + number: 14034, + title: 'Add: match 4(hu)', + user: { + login: 'erich1997', + id: 85035390, + node_id: 'MDQ6VXNlcjg1MDM1Mzkw', + avatar_url: 'https://avatars.githubusercontent.com/u/85035390?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/erich1997', + html_url: 'https://github.com/erich1997', + followers_url: 'https://api.github.com/users/erich1997/followers', + following_url: 'https://api.github.com/users/erich1997/following{/other_user}', + gists_url: 'https://api.github.com/users/erich1997/gists{/gist_id}', + starred_url: 'https://api.github.com/users/erich1997/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/erich1997/subscriptions', + organizations_url: 'https://api.github.com/users/erich1997/orgs', + repos_url: 'https://api.github.com/users/erich1997/repos', + events_url: 'https://api.github.com/users/erich1997/events{/privacy}', + received_events_url: 'https://api.github.com/users/erich1997/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1696015170, + node_id: 'MDU6TGFiZWwxNjk2MDE1MTcw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/HU', + name: 'HU', + color: 'e89bbf', + default: false, + description: 'Hungary' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2023-08-23T16:42:47Z', + updated_at: '2023-09-06T13:07:20Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Channel ID\n\nMatch4.hu\n\n### Stream URL (optional)\n\nhttp://194.76.186.33:8000/play/a04d/index.m3u8\n\n### Notes (optional)\n\n_No response_\n\n### Please confirm the following\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md#request-a-channel)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14034/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14034/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/13964', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13964/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13964/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13964/events', + html_url: 'https://github.com/iptv-org/iptv/issues/13964', + id: 1857666538, + node_id: 'I_kwDOCWUK8M5uub3q', + number: 13964, + title: 'Add: Meth TV [LK] ', + user: { + login: 'Carlinhos027', + id: 111005658, + node_id: 'U_kgDOBp3P2g', + avatar_url: 'https://avatars.githubusercontent.com/u/111005658?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/Carlinhos027', + html_url: 'https://github.com/Carlinhos027', + followers_url: 'https://api.github.com/users/Carlinhos027/followers', + following_url: 'https://api.github.com/users/Carlinhos027/following{/other_user}', + gists_url: 'https://api.github.com/users/Carlinhos027/gists{/gist_id}', + starred_url: 'https://api.github.com/users/Carlinhos027/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/Carlinhos027/subscriptions', + organizations_url: 'https://api.github.com/users/Carlinhos027/orgs', + repos_url: 'https://api.github.com/users/Carlinhos027/repos', + events_url: 'https://api.github.com/users/Carlinhos027/events{/privacy}', + received_events_url: 'https://api.github.com/users/Carlinhos027/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 5432228583, + node_id: 'LA_kwDOCWUK8M8AAAABQ8k65w', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/not%2024/7', + name: 'not 24/7', + color: '40715B', + default: false, + description: '' + }, + { + id: 5641193949, + node_id: 'LA_kwDOCWUK8M8AAAABUD3J3Q', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/LK', + name: 'LK', + color: '0A59ED', + default: false, + description: 'Sri Lanka' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2023-08-19T10:31:37Z', + updated_at: '2023-09-07T11:25:16Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Channel ID\n\nMethTV.lk\n\n### Stream URL (optional)\n\nhttps://ythls.onrender.com/channel/UC7kBHRaynsJMB6JcooGLTmA.m3u8\n\n### Notes (optional)\n\n720p / Not 24/7\n\n### Please confirm the following\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md#request-a-channel)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/13964/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13964/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/13893', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13893/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13893/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13893/events', + html_url: 'https://github.com/iptv-org/iptv/issues/13893', + id: 1850537350, + node_id: 'I_kwDOCWUK8M5uTPWG', + number: 13893, + title: 'Add: Weathernews (JPN) via YouTube', + user: { + login: 'arecki2', + id: 18574440, + node_id: 'MDQ6VXNlcjE4NTc0NDQw', + avatar_url: 'https://avatars.githubusercontent.com/u/18574440?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/arecki2', + html_url: 'https://github.com/arecki2', + followers_url: 'https://api.github.com/users/arecki2/followers', + following_url: 'https://api.github.com/users/arecki2/following{/other_user}', + gists_url: 'https://api.github.com/users/arecki2/gists{/gist_id}', + starred_url: 'https://api.github.com/users/arecki2/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/arecki2/subscriptions', + organizations_url: 'https://api.github.com/users/arecki2/orgs', + repos_url: 'https://api.github.com/users/arecki2/repos', + events_url: 'https://api.github.com/users/arecki2/events{/privacy}', + received_events_url: 'https://api.github.com/users/arecki2/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694117140, + node_id: 'MDU6TGFiZWwxNjk0MTE3MTQw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/JP', + name: 'JP', + color: '350bdd', + default: false, + description: 'Japan' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 2, + created_at: '2023-08-14T21:04:00Z', + updated_at: '2023-09-06T14:30:57Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: "### Channel ID\n\nWeathernews.jp\n\n### Stream URL (optional)\n\nhttps://ythls.onrender.com/channel/UCNsidkYpIAQ4QaufptQBPHQ.m3u8\n\n### Notes (optional)\n\nLet's try them ๐Ÿ˜ผ\r\n\r\nI've just learned that they change streams for their TV broadcasts on YouTube every 3 hours, so even with additional streams they occasionally activate (such as now during Typhoon Lan), the YT API should manage to pick the correct feed in most cases ๐Ÿ˜œ\r\n\r\nOtherwise, an advantage over the two streams that already are in the database is that the YT broadcasts are in 1080p (vs 720p).\n\n### Please confirm the following\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md#request-a-channel)", + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/13893/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13893/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/13881', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13881/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13881/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13881/events', + html_url: 'https://github.com/iptv-org/iptv/issues/13881', + id: 1848780631, + node_id: 'I_kwDOCWUK8M5uMidX', + number: 13881, + title: 'Add: Aaj Tak', + user: { + login: 'R4IN2007', + id: 83226646, + node_id: 'MDQ6VXNlcjgzMjI2NjQ2', + avatar_url: 'https://avatars.githubusercontent.com/u/83226646?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/R4IN2007', + html_url: 'https://github.com/R4IN2007', + followers_url: 'https://api.github.com/users/R4IN2007/followers', + following_url: 'https://api.github.com/users/R4IN2007/following{/other_user}', + gists_url: 'https://api.github.com/users/R4IN2007/gists{/gist_id}', + starred_url: 'https://api.github.com/users/R4IN2007/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/R4IN2007/subscriptions', + organizations_url: 'https://api.github.com/users/R4IN2007/orgs', + repos_url: 'https://api.github.com/users/R4IN2007/repos', + events_url: 'https://api.github.com/users/R4IN2007/events{/privacy}', + received_events_url: 'https://api.github.com/users/R4IN2007/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694119113, + node_id: 'MDU6TGFiZWwxNjk0MTE5MTEz', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/IN', + name: 'IN', + color: 'd8139a', + default: false, + description: 'India' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2023-08-13T23:23:28Z', + updated_at: '2023-09-06T14:32:15Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Channel ID\n\nAajTak.in\n\n### Stream URL (optional)\n\nhttps://feeds.intoday.in/aajtak/api/aajtakhd/master.m3u8\n\n### Notes (optional)\n\n_No response_\n\n### Please confirm the following\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md#request-a-channel)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/13881/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13881/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/13793', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13793/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13793/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13793/events', + html_url: 'https://github.com/iptv-org/iptv/issues/13793', + id: 1846716551, + node_id: 'I_kwDOCWUK8M5uEqiH', + number: 13793, + title: 'Add: AT-X (JPN)', + user: { + login: 'ZXArkin', + id: 21299971, + node_id: 'MDQ6VXNlcjIxMjk5OTcx', + avatar_url: 'https://avatars.githubusercontent.com/u/21299971?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/ZXArkin', + html_url: 'https://github.com/ZXArkin', + followers_url: 'https://api.github.com/users/ZXArkin/followers', + following_url: 'https://api.github.com/users/ZXArkin/following{/other_user}', + gists_url: 'https://api.github.com/users/ZXArkin/gists{/gist_id}', + starred_url: 'https://api.github.com/users/ZXArkin/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/ZXArkin/subscriptions', + organizations_url: 'https://api.github.com/users/ZXArkin/orgs', + repos_url: 'https://api.github.com/users/ZXArkin/repos', + events_url: 'https://api.github.com/users/ZXArkin/events{/privacy}', + received_events_url: 'https://api.github.com/users/ZXArkin/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694117140, + node_id: 'MDU6TGFiZWwxNjk0MTE3MTQw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/JP', + name: 'JP', + color: '350bdd', + default: false, + description: 'Japan' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 4, + created_at: '2023-08-11T12:11:28Z', + updated_at: '2023-09-06T14:17:56Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Channel ID\r\n\r\nATX.jp\r\n\r\n### Stream URL (optional)\r\n\r\nhttp://194.233.72.249:8080/AT-X/index.m3u8\r\n\r\n### Notes (optional)\r\n\r\n![AT-X_20230705_202525 551](https://github.com/iptv-org/iptv/assets/21299971/794c1cd4-fbe4-4b35-8a16-45127953ff65)\r\nThis is test AT-X channel JP without subs\r\n720 Quality\r\n\r\n### Please confirm the following\r\n\r\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md#request-a-channel)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/13793/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13793/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/13751', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13751/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13751/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13751/events', + html_url: 'https://github.com/iptv-org/iptv/issues/13751', + id: 1838199158, + node_id: 'I_kwDOCWUK8M5tkLF2', + number: 13751, + title: 'Add: Beano TV', + user: { + login: 'Ghani201', + id: 132144620, + node_id: 'U_kgDOB-Bd7A', + avatar_url: 'https://avatars.githubusercontent.com/u/132144620?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/Ghani201', + html_url: 'https://github.com/Ghani201', + followers_url: 'https://api.github.com/users/Ghani201/followers', + following_url: 'https://api.github.com/users/Ghani201/following{/other_user}', + gists_url: 'https://api.github.com/users/Ghani201/gists{/gist_id}', + starred_url: 'https://api.github.com/users/Ghani201/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/Ghani201/subscriptions', + organizations_url: 'https://api.github.com/users/Ghani201/orgs', + repos_url: 'https://api.github.com/users/Ghani201/repos', + events_url: 'https://api.github.com/users/Ghani201/events{/privacy}', + received_events_url: 'https://api.github.com/users/Ghani201/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694116077, + node_id: 'MDU6TGFiZWwxNjk0MTE2MDc3', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/UK', + name: 'UK', + color: '99e5e5', + default: false, + description: 'United Kingdom' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 2, + created_at: '2023-08-06T12:54:59Z', + updated_at: '2023-09-06T14:40:01Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Channel ID\r\n\r\nBeanoTV.uk\r\n\r\n### Stream URL (optional)\r\n\r\nhttps://a5b4bacecd47433dad06d3189fc7422e.mediatailor.us-east-1.amazonaws.com/v1/manifest/04fd913bb278d8775298c26fdca9d9841f37601f/RakutenTV-eu_BeanoTV/b1f233d5-847c-437d-aa4f-f73e67a85323/2.m3u8\r\n\r\n### Notes (optional)\r\n\r\n_No response_\r\n\r\n### Please confirm the following\r\n\r\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md#request-a-channel)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/13751/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13751/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/13715', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13715/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13715/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13715/events', + html_url: 'https://github.com/iptv-org/iptv/issues/13715', + id: 1835942409, + node_id: 'I_kwDOCWUK8M5tbkIJ', + number: 13715, + title: 'Add: ATV+ HD (Perรบ) [Linear Version of ATV+]', + user: { + login: 'R4IN2007', + id: 83226646, + node_id: 'MDQ6VXNlcjgzMjI2NjQ2', + avatar_url: 'https://avatars.githubusercontent.com/u/83226646?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/R4IN2007', + html_url: 'https://github.com/R4IN2007', + followers_url: 'https://api.github.com/users/R4IN2007/followers', + following_url: 'https://api.github.com/users/R4IN2007/following{/other_user}', + gists_url: 'https://api.github.com/users/R4IN2007/gists{/gist_id}', + starred_url: 'https://api.github.com/users/R4IN2007/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/R4IN2007/subscriptions', + organizations_url: 'https://api.github.com/users/R4IN2007/orgs', + repos_url: 'https://api.github.com/users/R4IN2007/repos', + events_url: 'https://api.github.com/users/R4IN2007/events{/privacy}', + received_events_url: 'https://api.github.com/users/R4IN2007/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 3046075919, + node_id: 'MDU6TGFiZWwzMDQ2MDc1OTE5', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/PE', + name: 'PE', + color: 'E78203', + default: false, + description: 'Peru' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 2, + created_at: '2023-08-04T01:48:24Z', + updated_at: '2023-09-06T14:41:57Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Channel ID\n\nATVPlus.pe\n\n### Stream URL (optional)\n\nhttps://linear-258.frequency.stream/dist/vix/258/hls/master/playlist.m3u8\n\n### Notes (optional)\n\n(Linear Version & Streaming on VIX.com a spanish televisa-univision site) Might be geo-blocked or geo-locked because by removing /dist/vix/ the m3u8 link stops working #13703 \n\n### Please confirm the following\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md#request-a-channel)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/13715/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13715/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/10055', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/10055/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/10055/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/10055/events', + html_url: 'https://github.com/iptv-org/iptv/issues/10055', + id: 1438379562, + node_id: 'I_kwDOCWUK8M5Vu-4q', + number: 10055, + title: 'Record TV', + user: { + login: 'darrencycheung', + id: 106740926, + node_id: 'U_kgDOBly8vg', + avatar_url: 'https://avatars.githubusercontent.com/u/106740926?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/darrencycheung', + html_url: 'https://github.com/darrencycheung', + followers_url: 'https://api.github.com/users/darrencycheung/followers', + following_url: 'https://api.github.com/users/darrencycheung/following{/other_user}', + gists_url: 'https://api.github.com/users/darrencycheung/gists{/gist_id}', + starred_url: 'https://api.github.com/users/darrencycheung/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/darrencycheung/subscriptions', + organizations_url: 'https://api.github.com/users/darrencycheung/orgs', + repos_url: 'https://api.github.com/users/darrencycheung/repos', + events_url: 'https://api.github.com/users/darrencycheung/events{/privacy}', + received_events_url: 'https://api.github.com/users/darrencycheung/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 2043160604, + node_id: 'MDU6TGFiZWwyMDQzMTYwNjA0', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/BR', + name: 'BR', + color: 'ccdcff', + default: false, + description: 'Brazil' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:add', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 6, + created_at: '2022-11-07T13:35:21Z', + updated_at: '2023-09-07T00:55:45Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Channel ID\n\nRecordTV.br\n\n### Stream URL\n\nhttps://cdn.jmvstream.com/w/LVW-10842/LVW10842_513N26MDBL/chunklist.m3u8\n\n### Notes\n\nValid\n\n### Please confirm the following\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md#request-a-channel)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/10055/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/10055/timeline', + performed_via_github_app: null, + state_reason: null + } +] diff --git a/tests/__data__/input/issues/streams_edit_approved.js b/tests/__data__/input/issues/streams_edit_approved.js new file mode 100644 index 000000000..bf434d422 --- /dev/null +++ b/tests/__data__/input/issues/streams_edit_approved.js @@ -0,0 +1,81 @@ +export default [ + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14110', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14110/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14110/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14110/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14110', + id: 1884922249, + node_id: 'I_kwDOCWUK8M5wWaGJ', + number: 14110, + title: 'Edit: Tele2000', + user: { + login: 'freearhey', + id: 7253922, + node_id: 'MDQ6VXNlcjcyNTM5MjI=', + avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/freearhey', + html_url: 'https://github.com/freearhey', + followers_url: 'https://api.github.com/users/freearhey/followers', + following_url: 'https://api.github.com/users/freearhey/following{/other_user}', + gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}', + starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions', + organizations_url: 'https://api.github.com/users/freearhey/orgs', + repos_url: 'https://api.github.com/users/freearhey/repos', + events_url: 'https://api.github.com/users/freearhey/events{/privacy}', + received_events_url: 'https://api.github.com/users/freearhey/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5923508587, + node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add', + name: 'streams:edit', + color: '017ff9', + default: false, + description: 'Request to add a new link to a playlist' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2023-09-07T00:30:51Z', + updated_at: '2023-09-07T00:48:23Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Stream URL\n\nhttps://servilive.com:3126/live/tele2000live.m3u8\n\n### Channel ID\n\nBBCAmericaEast.us\n\n### Channel Name\n\nBBC America\n\n### Quality\n\n720p\n\n### Label\n\nGeo-blocked\n\n### HTTP User-Agent\n\nMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Edge/12.246\n\n### HTTP Referrer\n\n_No response_\n\n### Notes\n\n_No response_\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14110/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14110/timeline', + performed_via_github_app: null, + state_reason: null + } +] diff --git a/tests/__data__/input/issues/streams_remove_approved.js b/tests/__data__/input/issues/streams_remove_approved.js new file mode 100644 index 000000000..a8b16341a --- /dev/null +++ b/tests/__data__/input/issues/streams_remove_approved.js @@ -0,0 +1,1845 @@ +export default [ + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14151', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14151/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14151/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14151/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14151', + id: 1884653836, + node_id: 'I_kwDOCWUK8M5wVYkM', + number: 14151, + title: 'Broken: VTV', + user: { + login: 'kaikyoofers', + id: 67206080, + node_id: 'MDQ6VXNlcjY3MjA2MDgw', + avatar_url: 'https://avatars.githubusercontent.com/u/67206080?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/kaikyoofers', + html_url: 'https://github.com/kaikyoofers', + followers_url: 'https://api.github.com/users/kaikyoofers/followers', + following_url: 'https://api.github.com/users/kaikyoofers/following{/other_user}', + gists_url: 'https://api.github.com/users/kaikyoofers/gists{/gist_id}', + starred_url: 'https://api.github.com/users/kaikyoofers/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/kaikyoofers/subscriptions', + organizations_url: 'https://api.github.com/users/kaikyoofers/orgs', + repos_url: 'https://api.github.com/users/kaikyoofers/repos', + events_url: 'https://api.github.com/users/kaikyoofers/events{/privacy}', + received_events_url: 'https://api.github.com/users/kaikyoofers/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1707513547, + node_id: 'MDU6TGFiZWwxNzA3NTEzNTQ3', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/broken%20stream', + name: 'broken stream', + color: 'FBCA04', + default: false, + description: 'Stream is not working properly' + }, + { + id: 2043160604, + node_id: 'MDU6TGFiZWwyMDQzMTYwNjA0', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/BR', + name: 'BR', + color: 'ccdcff', + default: false, + description: 'Brazil' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5932506810, + node_id: 'LA_kwDOCWUK8M8AAAABYZreug', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:remove', + name: 'streams:remove', + color: '5373a2', + default: false, + description: '' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2023-09-06T19:51:43Z', + updated_at: '2023-09-07T00:48:57Z', + closed_at: null, + author_association: 'CONTRIBUTOR', + active_lock_reason: null, + body: '### Broken Link\n\nhttps://ythls.onrender.com/channel/UC40TUSUx490U5uR1lZt3Ajgm3u8\n\n### What happened to the stream?\n\nNot loading\n\n### Possible Replacement (optional)\n\nhttps://ythls.onrender.com/channel/UC40TUSUx490U5uR1lZt3Ajg.m3u8\n\n### Notes (optional)\n\nOne link (VTV.br) is misspelled.\n\n### Contributing Guide\n\n- [x] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14151/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14151/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14140', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14140/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14140/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14140/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14140', + id: 1881649602, + node_id: 'I_kwDOCWUK8M5wJ7HC', + number: 14140, + title: 'Broken: RIK HD Cyprus', + user: { + login: 'ROBGagn', + id: 124619576, + node_id: 'U_kgDOB22LOA', + avatar_url: 'https://avatars.githubusercontent.com/u/124619576?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/ROBGagn', + html_url: 'https://github.com/ROBGagn', + followers_url: 'https://api.github.com/users/ROBGagn/followers', + following_url: 'https://api.github.com/users/ROBGagn/following{/other_user}', + gists_url: 'https://api.github.com/users/ROBGagn/gists{/gist_id}', + starred_url: 'https://api.github.com/users/ROBGagn/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/ROBGagn/subscriptions', + organizations_url: 'https://api.github.com/users/ROBGagn/orgs', + repos_url: 'https://api.github.com/users/ROBGagn/repos', + events_url: 'https://api.github.com/users/ROBGagn/events{/privacy}', + received_events_url: 'https://api.github.com/users/ROBGagn/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1707513547, + node_id: 'MDU6TGFiZWwxNzA3NTEzNTQ3', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/broken%20stream', + name: 'broken stream', + color: 'FBCA04', + default: false, + description: 'Stream is not working properly' + }, + { + id: 3241837512, + node_id: 'MDU6TGFiZWwzMjQxODM3NTEy', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/CY', + name: 'CY', + color: '90FA7B', + default: false, + description: 'Cyprus' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5932506810, + node_id: 'LA_kwDOCWUK8M8AAAABYZreug', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:remove', + name: 'streams:remove', + color: '5373a2', + default: false, + description: '' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2023-09-05T10:09:04Z', + updated_at: '2023-09-07T00:50:06Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Broken Link\n\nhttp://l6.cloudskep.com/rikcy/rikhd/playlist.m3u8\n\n### What happened to the stream?\n\nNot loading\n\n### Possible Replacement (optional)\n\n_No response_\n\n### Notes (optional)\n\nToken needed...\r\nSame issue with RIK 1 and 2. May happen in the future with ANT1 Cyprus, Sigma and Omega.\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14140/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14140/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14139', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14139/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14139/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14139/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14139', + id: 1881648047, + node_id: 'I_kwDOCWUK8M5wJ6uv', + number: 14139, + title: 'Broken: RIK2 Cyprus', + user: { + login: 'ROBGagn', + id: 124619576, + node_id: 'U_kgDOB22LOA', + avatar_url: 'https://avatars.githubusercontent.com/u/124619576?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/ROBGagn', + html_url: 'https://github.com/ROBGagn', + followers_url: 'https://api.github.com/users/ROBGagn/followers', + following_url: 'https://api.github.com/users/ROBGagn/following{/other_user}', + gists_url: 'https://api.github.com/users/ROBGagn/gists{/gist_id}', + starred_url: 'https://api.github.com/users/ROBGagn/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/ROBGagn/subscriptions', + organizations_url: 'https://api.github.com/users/ROBGagn/orgs', + repos_url: 'https://api.github.com/users/ROBGagn/repos', + events_url: 'https://api.github.com/users/ROBGagn/events{/privacy}', + received_events_url: 'https://api.github.com/users/ROBGagn/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1707513547, + node_id: 'MDU6TGFiZWwxNzA3NTEzNTQ3', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/broken%20stream', + name: 'broken stream', + color: 'FBCA04', + default: false, + description: 'Stream is not working properly' + }, + { + id: 3241837512, + node_id: 'MDU6TGFiZWwzMjQxODM3NTEy', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/CY', + name: 'CY', + color: '90FA7B', + default: false, + description: 'Cyprus' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5932506810, + node_id: 'LA_kwDOCWUK8M8AAAABYZreug', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:remove', + name: 'streams:remove', + color: '5373a2', + default: false, + description: '' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2023-09-05T10:08:08Z', + updated_at: '2023-09-07T00:50:06Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Broken Link\n\nhttp://l6.cloudskep.com/rikcy/rik2/playlist.m3u8\n\n### What happened to the stream?\n\nNot loading\n\n### Possible Replacement (optional)\n\n_No response_\n\n### Notes (optional)\n\nToken needed...\r\nSame issue with RIK 1 and HD. May happen in the future with ANT1 Cyprus, Sigma and Omega.\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14139/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14139/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14138', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14138/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14138/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14138/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14138', + id: 1881646342, + node_id: 'I_kwDOCWUK8M5wJ6UG', + number: 14138, + title: 'Broken: RIK1 Cyprus', + user: { + login: 'ROBGagn', + id: 124619576, + node_id: 'U_kgDOB22LOA', + avatar_url: 'https://avatars.githubusercontent.com/u/124619576?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/ROBGagn', + html_url: 'https://github.com/ROBGagn', + followers_url: 'https://api.github.com/users/ROBGagn/followers', + following_url: 'https://api.github.com/users/ROBGagn/following{/other_user}', + gists_url: 'https://api.github.com/users/ROBGagn/gists{/gist_id}', + starred_url: 'https://api.github.com/users/ROBGagn/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/ROBGagn/subscriptions', + organizations_url: 'https://api.github.com/users/ROBGagn/orgs', + repos_url: 'https://api.github.com/users/ROBGagn/repos', + events_url: 'https://api.github.com/users/ROBGagn/events{/privacy}', + received_events_url: 'https://api.github.com/users/ROBGagn/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1707513547, + node_id: 'MDU6TGFiZWwxNzA3NTEzNTQ3', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/broken%20stream', + name: 'broken stream', + color: 'FBCA04', + default: false, + description: 'Stream is not working properly' + }, + { + id: 3241837512, + node_id: 'MDU6TGFiZWwzMjQxODM3NTEy', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/CY', + name: 'CY', + color: '90FA7B', + default: false, + description: 'Cyprus' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5932506810, + node_id: 'LA_kwDOCWUK8M8AAAABYZreug', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:remove', + name: 'streams:remove', + color: '5373a2', + default: false, + description: '' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2023-09-05T10:07:08Z', + updated_at: '2023-09-07T00:50:06Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Broken Link\n\nhttp://l6.cloudskep.com/rikcy/rik1/playlist.m3u8\n\n### What happened to the stream?\n\nNot loading\n\n### Possible Replacement (optional)\n\n_No response_\n\n### Notes (optional)\n\nToken needed...\r\nSame issue with RIK 2 and HD, Alpha TV Cyprus. May happen in the future with ANT1 Cyprus, Sigma and Omega.\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14138/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14138/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14137', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14137/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14137/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14137/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14137', + id: 1881642924, + node_id: 'I_kwDOCWUK8M5wJ5es', + number: 14137, + title: 'Broken: Alpha TV Cyprus', + user: { + login: 'ROBGagn', + id: 124619576, + node_id: 'U_kgDOB22LOA', + avatar_url: 'https://avatars.githubusercontent.com/u/124619576?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/ROBGagn', + html_url: 'https://github.com/ROBGagn', + followers_url: 'https://api.github.com/users/ROBGagn/followers', + following_url: 'https://api.github.com/users/ROBGagn/following{/other_user}', + gists_url: 'https://api.github.com/users/ROBGagn/gists{/gist_id}', + starred_url: 'https://api.github.com/users/ROBGagn/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/ROBGagn/subscriptions', + organizations_url: 'https://api.github.com/users/ROBGagn/orgs', + repos_url: 'https://api.github.com/users/ROBGagn/repos', + events_url: 'https://api.github.com/users/ROBGagn/events{/privacy}', + received_events_url: 'https://api.github.com/users/ROBGagn/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1707513547, + node_id: 'MDU6TGFiZWwxNzA3NTEzNTQ3', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/broken%20stream', + name: 'broken stream', + color: 'FBCA04', + default: false, + description: 'Stream is not working properly' + }, + { + id: 3241837512, + node_id: 'MDU6TGFiZWwzMjQxODM3NTEy', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/CY', + name: 'CY', + color: '90FA7B', + default: false, + description: 'Cyprus' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5932506810, + node_id: 'LA_kwDOCWUK8M8AAAABYZreug', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:remove', + name: 'streams:remove', + color: '5373a2', + default: false, + description: '' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2023-09-05T10:05:06Z', + updated_at: '2023-09-07T00:50:05Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Broken Link\n\nhttp://l4.cloudskep.com/alphacyp/acy/playlist.m3u8\n\n### What happened to the stream?\n\nNot loading\n\n### Possible Replacement (optional)\n\n_No response_\n\n### Notes (optional)\n\nToken now needed...\r\nSame issue with RIK 1, 2 and HD. May happen in the future with RIK Sat, ANT1 Cyprus, Sigma and Omega.\r\n\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14137/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14137/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14120', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14120/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14120/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14120/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14120', + id: 1878180439, + node_id: 'I_kwDOCWUK8M5v8sJX', + number: 14120, + title: 'Broken: Canal 5 (MX)', + user: { + login: 'chris202020202020', + id: 141375812, + node_id: 'U_kgDOCG05RA', + avatar_url: 'https://avatars.githubusercontent.com/u/141375812?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/chris202020202020', + html_url: 'https://github.com/chris202020202020', + followers_url: 'https://api.github.com/users/chris202020202020/followers', + following_url: 'https://api.github.com/users/chris202020202020/following{/other_user}', + gists_url: 'https://api.github.com/users/chris202020202020/gists{/gist_id}', + starred_url: 'https://api.github.com/users/chris202020202020/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/chris202020202020/subscriptions', + organizations_url: 'https://api.github.com/users/chris202020202020/orgs', + repos_url: 'https://api.github.com/users/chris202020202020/repos', + events_url: 'https://api.github.com/users/chris202020202020/events{/privacy}', + received_events_url: 'https://api.github.com/users/chris202020202020/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1707513547, + node_id: 'MDU6TGFiZWwxNzA3NTEzNTQ3', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/broken%20stream', + name: 'broken stream', + color: 'FBCA04', + default: false, + description: 'Stream is not working properly' + }, + { + id: 2980444955, + node_id: 'MDU6TGFiZWwyOTgwNDQ0OTU1', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/MX', + name: 'MX', + color: '02A7D1', + default: false, + description: 'Mexico' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5932506810, + node_id: 'LA_kwDOCWUK8M8AAAABYZreug', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:remove', + name: 'streams:remove', + color: '5373a2', + default: false, + description: '' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2023-09-01T23:49:28Z', + updated_at: '2023-09-07T00:24:05Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Broken Link\n\nhttp://190.61.102.67:2000/play/a038/index.m3u8\n\n### What happened to the stream?\n\nNot loading\n\n### Possible Replacement (optional)\n\n_No response_\n\n### Notes (optional)\n\nReplacement For A Broken Stream To A New Stream For Canal 5 (MX) Please\n\n### Please confirm the following\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md#report-a-broken-stream)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14120/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14120/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14108', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14108/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14108/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14108/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14108', + id: 1877534239, + node_id: 'I_kwDOCWUK8M5v6OYf', + number: 14108, + title: 'Broken: SBS TBC (TBC ๋Œ€๊ตฌ๋ฐฉ์†ก) (540p)', + user: { + login: 'AVGCFan1995', + id: 143818591, + node_id: 'U_kgDOCJJ_Xw', + avatar_url: 'https://avatars.githubusercontent.com/u/143818591?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/AVGCFan1995', + html_url: 'https://github.com/AVGCFan1995', + followers_url: 'https://api.github.com/users/AVGCFan1995/followers', + following_url: 'https://api.github.com/users/AVGCFan1995/following{/other_user}', + gists_url: 'https://api.github.com/users/AVGCFan1995/gists{/gist_id}', + starred_url: 'https://api.github.com/users/AVGCFan1995/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/AVGCFan1995/subscriptions', + organizations_url: 'https://api.github.com/users/AVGCFan1995/orgs', + repos_url: 'https://api.github.com/users/AVGCFan1995/repos', + events_url: 'https://api.github.com/users/AVGCFan1995/events{/privacy}', + received_events_url: 'https://api.github.com/users/AVGCFan1995/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694138665, + node_id: 'MDU6TGFiZWwxNjk0MTM4NjY1', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/KR', + name: 'KR', + color: '4fd19f', + default: false, + description: 'South Korea' + }, + { + id: 1707513547, + node_id: 'MDU6TGFiZWwxNzA3NTEzNTQ3', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/broken%20stream', + name: 'broken stream', + color: 'FBCA04', + default: false, + description: 'Stream is not working properly' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5932506810, + node_id: 'LA_kwDOCWUK8M8AAAABYZreug', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:remove', + name: 'streams:remove', + color: '5373a2', + default: false, + description: '' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2023-09-01T14:29:58Z', + updated_at: '2023-09-07T19:13:30Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: "### Broken Link\r\n\r\nhttps://tistory3.daumcdn.net/tistory/2864460/skin/images/Public_8.m3u8\r\n\r\n### What happened to the stream?\r\n\r\nNot loading\r\n\r\n### Possible Replacement (optional)\r\n\r\n_No response_\r\n\r\n### Notes (optional)\r\n\r\nHey guys, I found this link on https://github.com/iptv-org/iptv/blob/master/streams/kr.m3u is either working or not working when I'm using an UrbanVPN in order to switch it to South Korea when I'm using VLC media player despite my South Korean friend claims this link is working probably it was encrypted or unencrypted.\r\n\r\n### Please confirm the following\r\n\r\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md#report-a-broken-stream)", + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14108/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14108/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14096', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14096/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14096/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14096/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14096', + id: 1874505679, + node_id: 'I_kwDOCWUK8M5vuq_P', + number: 14096, + title: 'Broken: Temple University TV', + user: { + login: 'FpFan65', + id: 85830665, + node_id: 'MDQ6VXNlcjg1ODMwNjY1', + avatar_url: 'https://avatars.githubusercontent.com/u/85830665?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/FpFan65', + html_url: 'https://github.com/FpFan65', + followers_url: 'https://api.github.com/users/FpFan65/followers', + following_url: 'https://api.github.com/users/FpFan65/following{/other_user}', + gists_url: 'https://api.github.com/users/FpFan65/gists{/gist_id}', + starred_url: 'https://api.github.com/users/FpFan65/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/FpFan65/subscriptions', + organizations_url: 'https://api.github.com/users/FpFan65/orgs', + repos_url: 'https://api.github.com/users/FpFan65/repos', + events_url: 'https://api.github.com/users/FpFan65/events{/privacy}', + received_events_url: 'https://api.github.com/users/FpFan65/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694118251, + node_id: 'MDU6TGFiZWwxNjk0MTE4MjUx', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/US', + name: 'US', + color: '463faa', + default: false, + description: 'United States' + }, + { + id: 1707513547, + node_id: 'MDU6TGFiZWwxNzA3NTEzNTQ3', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/broken%20stream', + name: 'broken stream', + color: 'FBCA04', + default: false, + description: 'Stream is not working properly' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5932506810, + node_id: 'LA_kwDOCWUK8M8AAAABYZreug', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:remove', + name: 'streams:remove', + color: '5373a2', + default: false, + description: '' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2023-08-30T23:16:51Z', + updated_at: '2023-09-07T00:28:13Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Broken Link\n\nhttps://templeuni.secure.footprint.net/egress/bhandler/templeuni/streama/manifest.m3u8\n\n### What happened to the stream?\n\nOther\n\n### Possible Replacement (optional)\n\nhttps://livestream.telvue.com/templeuni1/f7b44cfafd5c52223d5498196c8a2e7b.sdp/playlist.m3u8\n\n### Notes (optional)\n\nUpdated Stream\n\n### Please confirm the following\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md#report-a-broken-stream)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14096/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14096/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14085', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14085/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14085/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14085/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14085', + id: 1871193001, + node_id: 'I_kwDOCWUK8M5viCOp', + number: 14085, + title: 'Broken: KTV 1', + user: { + login: 'samimasad', + id: 781021, + node_id: 'MDQ6VXNlcjc4MTAyMQ==', + avatar_url: 'https://avatars.githubusercontent.com/u/781021?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/samimasad', + html_url: 'https://github.com/samimasad', + followers_url: 'https://api.github.com/users/samimasad/followers', + following_url: 'https://api.github.com/users/samimasad/following{/other_user}', + gists_url: 'https://api.github.com/users/samimasad/gists{/gist_id}', + starred_url: 'https://api.github.com/users/samimasad/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/samimasad/subscriptions', + organizations_url: 'https://api.github.com/users/samimasad/orgs', + repos_url: 'https://api.github.com/users/samimasad/repos', + events_url: 'https://api.github.com/users/samimasad/events{/privacy}', + received_events_url: 'https://api.github.com/users/samimasad/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1703945966, + node_id: 'MDU6TGFiZWwxNzAzOTQ1OTY2', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/KW', + name: 'KW', + color: 'e55e7f', + default: false, + description: 'Kuwait' + }, + { + id: 1707513547, + node_id: 'MDU6TGFiZWwxNzA3NTEzNTQ3', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/broken%20stream', + name: 'broken stream', + color: 'FBCA04', + default: false, + description: 'Stream is not working properly' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5932506810, + node_id: 'LA_kwDOCWUK8M8AAAABYZreug', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:remove', + name: 'streams:remove', + color: '5373a2', + default: false, + description: '' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2023-08-29T08:51:01Z', + updated_at: '2023-09-07T00:51:39Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Broken Link\n\nhttp://mc-qs.lanesh4d0w.tech/iptv-query?streaming-ip=https://www.media.gov.kw/LiveTV.aspx?PanChannel=KTV1\n\n### What happened to the stream?\n\nNot loading\n\n### Possible Replacement (optional)\n\n_No response_\n\n### Notes (optional)\n\nseems all the streams that start with http://mc-qs.lanesh4d0w.tech/iptv-query?streaming-ip do fail , that got to be repalces,\r\nthe source of the TV , for example https://www.media.gov.kw/LiveTV.aspx?PanChannel=KTV1 works fine\n\n### Please confirm the following\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md#report-a-broken-stream)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14085/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14085/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14063', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14063/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14063/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14063/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14063', + id: 1869737346, + node_id: 'I_kwDOCWUK8M5vce2C', + number: 14063, + title: 'Broken: TV3 Malaysia from my.m3u', + user: { + login: 'e0406370', + id: 79201611, + node_id: 'MDQ6VXNlcjc5MjAxNjEx', + avatar_url: 'https://avatars.githubusercontent.com/u/79201611?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/e0406370', + html_url: 'https://github.com/e0406370', + followers_url: 'https://api.github.com/users/e0406370/followers', + following_url: 'https://api.github.com/users/e0406370/following{/other_user}', + gists_url: 'https://api.github.com/users/e0406370/gists{/gist_id}', + starred_url: 'https://api.github.com/users/e0406370/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/e0406370/subscriptions', + organizations_url: 'https://api.github.com/users/e0406370/orgs', + repos_url: 'https://api.github.com/users/e0406370/repos', + events_url: 'https://api.github.com/users/e0406370/events{/privacy}', + received_events_url: 'https://api.github.com/users/e0406370/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1707513547, + node_id: 'MDU6TGFiZWwxNzA3NTEzNTQ3', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/broken%20stream', + name: 'broken stream', + color: 'FBCA04', + default: false, + description: 'Stream is not working properly' + }, + { + id: 1912922147, + node_id: 'MDU6TGFiZWwxOTEyOTIyMTQ3', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/MY', + name: 'MY', + color: 'ea59cf', + default: false, + description: 'Malaysia' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5932506810, + node_id: 'LA_kwDOCWUK8M8AAAABYZreug', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:remove', + name: 'streams:remove', + color: '5373a2', + default: false, + description: '' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 2, + created_at: '2023-08-28T13:10:07Z', + updated_at: '2023-09-07T00:31:42Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Broken Link\r\n\r\nhttps://live-sg1.global.ssl.fastly.net/live-hls/tonton1.m3u8\r\n\r\n### What happened to the stream?\r\n\r\nNot loading\r\n\r\n### Possible Replacement (optional)\r\n\r\nhttps://www.livetvmalaysia.online/2019/04/tv3.html\r\n\r\n### Notes (optional)\r\n\r\nUnable to access the TV3 stream through iptv player android app, while other links such as TV1 and TV2 in the m3u8 file are functioning correctly.\r\nAny guidance or support provided would be greatly appreciated.\r\n\r\n### Please confirm the following\r\n\r\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md#report-a-broken-stream)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14063/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14063/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14044', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14044/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14044/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14044/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14044', + id: 1866840798, + node_id: 'I_kwDOCWUK8M5vRbre', + number: 14044, + title: 'Broken: Tolo TV', + user: { + login: 'sunyuanzhe', + id: 142400045, + node_id: 'U_kgDOCHzaLQ', + avatar_url: 'https://avatars.githubusercontent.com/u/142400045?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/sunyuanzhe', + html_url: 'https://github.com/sunyuanzhe', + followers_url: 'https://api.github.com/users/sunyuanzhe/followers', + following_url: 'https://api.github.com/users/sunyuanzhe/following{/other_user}', + gists_url: 'https://api.github.com/users/sunyuanzhe/gists{/gist_id}', + starred_url: 'https://api.github.com/users/sunyuanzhe/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/sunyuanzhe/subscriptions', + organizations_url: 'https://api.github.com/users/sunyuanzhe/orgs', + repos_url: 'https://api.github.com/users/sunyuanzhe/repos', + events_url: 'https://api.github.com/users/sunyuanzhe/events{/privacy}', + received_events_url: 'https://api.github.com/users/sunyuanzhe/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1707513547, + node_id: 'MDU6TGFiZWwxNzA3NTEzNTQ3', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/broken%20stream', + name: 'broken stream', + color: 'FBCA04', + default: false, + description: 'Stream is not working properly' + }, + { + id: 5367626646, + node_id: 'LA_kwDOCWUK8M8AAAABP-97lg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/AF', + name: 'AF', + color: '996569', + default: false, + description: 'Afghanistan' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5932506810, + node_id: 'LA_kwDOCWUK8M8AAAABYZreug', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:remove', + name: 'streams:remove', + color: '5373a2', + default: false, + description: '' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2023-08-25T11:04:56Z', + updated_at: '2023-09-07T00:34:06Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Broken Link\n\nhttps://raw.githubusercontent.com/taodicakhia/IPTV_Exception/master/channels/af/tolotv.m3u8\n\n### What happened to the stream?\n\nDisplays a message asking to renew subscription\n\n### Possible Replacement (optional)\n\n_No response_\n\n### Notes (optional)\n\nAccess is Forbidden\n\n### Please confirm the following\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md#report-a-broken-stream)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14044/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14044/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14043', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14043/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14043/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14043/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14043', + id: 1866839527, + node_id: 'I_kwDOCWUK8M5vRbXn', + number: 14043, + title: 'Broken: Lemar TV', + user: { + login: 'sunyuanzhe', + id: 142400045, + node_id: 'U_kgDOCHzaLQ', + avatar_url: 'https://avatars.githubusercontent.com/u/142400045?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/sunyuanzhe', + html_url: 'https://github.com/sunyuanzhe', + followers_url: 'https://api.github.com/users/sunyuanzhe/followers', + following_url: 'https://api.github.com/users/sunyuanzhe/following{/other_user}', + gists_url: 'https://api.github.com/users/sunyuanzhe/gists{/gist_id}', + starred_url: 'https://api.github.com/users/sunyuanzhe/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/sunyuanzhe/subscriptions', + organizations_url: 'https://api.github.com/users/sunyuanzhe/orgs', + repos_url: 'https://api.github.com/users/sunyuanzhe/repos', + events_url: 'https://api.github.com/users/sunyuanzhe/events{/privacy}', + received_events_url: 'https://api.github.com/users/sunyuanzhe/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1707513547, + node_id: 'MDU6TGFiZWwxNzA3NTEzNTQ3', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/broken%20stream', + name: 'broken stream', + color: 'FBCA04', + default: false, + description: 'Stream is not working properly' + }, + { + id: 5367626646, + node_id: 'LA_kwDOCWUK8M8AAAABP-97lg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/AF', + name: 'AF', + color: '996569', + default: false, + description: 'Afghanistan' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5932506810, + node_id: 'LA_kwDOCWUK8M8AAAABYZreug', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:remove', + name: 'streams:remove', + color: '5373a2', + default: false, + description: '' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2023-08-25T11:04:01Z', + updated_at: '2023-09-07T00:34:29Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Broken Link\n\nhttps://raw.githubusercontent.com/taodicakhia/IPTV_Exception/master/channels/af/lemartv.m3u8\n\n### What happened to the stream?\n\nDisplays a message asking to renew subscription\n\n### Possible Replacement (optional)\n\n_No response_\n\n### Notes (optional)\n\nAccess is Forbidden\n\n### Please confirm the following\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md#report-a-broken-stream)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14043/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14043/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14041', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14041/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14041/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14041/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14041', + id: 1866418070, + node_id: 'I_kwDOCWUK8M5vP0eW', + number: 14041, + title: 'Broken: PBS Tucson AZ (KUAT)', + user: { + login: 'OmarLopez18', + id: 14249252, + node_id: 'MDQ6VXNlcjE0MjQ5MjUy', + avatar_url: 'https://avatars.githubusercontent.com/u/14249252?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/OmarLopez18', + html_url: 'https://github.com/OmarLopez18', + followers_url: 'https://api.github.com/users/OmarLopez18/followers', + following_url: 'https://api.github.com/users/OmarLopez18/following{/other_user}', + gists_url: 'https://api.github.com/users/OmarLopez18/gists{/gist_id}', + starred_url: 'https://api.github.com/users/OmarLopez18/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/OmarLopez18/subscriptions', + organizations_url: 'https://api.github.com/users/OmarLopez18/orgs', + repos_url: 'https://api.github.com/users/OmarLopez18/repos', + events_url: 'https://api.github.com/users/OmarLopez18/events{/privacy}', + received_events_url: 'https://api.github.com/users/OmarLopez18/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694118251, + node_id: 'MDU6TGFiZWwxNjk0MTE4MjUx', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/US', + name: 'US', + color: '463faa', + default: false, + description: 'United States' + }, + { + id: 1707513547, + node_id: 'MDU6TGFiZWwxNzA3NTEzNTQ3', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/broken%20stream', + name: 'broken stream', + color: 'FBCA04', + default: false, + description: 'Stream is not working properly' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5932506810, + node_id: 'LA_kwDOCWUK8M8AAAABYZreug', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:remove', + name: 'streams:remove', + color: '5373a2', + default: false, + description: '' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2023-08-25T06:38:27Z', + updated_at: '2023-09-07T00:35:06Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Broken Link\n\nhttps://kuatdt.lls.pbs.org/out/v1/8d95fb8559594a7b9359077ea0a512c3/index.m3u8\n\n### What happened to the stream?\n\nNot loading\n\n### Possible Replacement (optional)\n\n_No response_\n\n### Notes (optional)\n\n_No response_\n\n### Please confirm the following\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md#report-a-broken-stream)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14041/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14041/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14040', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14040/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14040/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14040/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14040', + id: 1866416765, + node_id: 'I_kwDOCWUK8M5vP0J9', + number: 14040, + title: 'Broken: PBS Phoenix AZ (KAET)', + user: { + login: 'OmarLopez18', + id: 14249252, + node_id: 'MDQ6VXNlcjE0MjQ5MjUy', + avatar_url: 'https://avatars.githubusercontent.com/u/14249252?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/OmarLopez18', + html_url: 'https://github.com/OmarLopez18', + followers_url: 'https://api.github.com/users/OmarLopez18/followers', + following_url: 'https://api.github.com/users/OmarLopez18/following{/other_user}', + gists_url: 'https://api.github.com/users/OmarLopez18/gists{/gist_id}', + starred_url: 'https://api.github.com/users/OmarLopez18/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/OmarLopez18/subscriptions', + organizations_url: 'https://api.github.com/users/OmarLopez18/orgs', + repos_url: 'https://api.github.com/users/OmarLopez18/repos', + events_url: 'https://api.github.com/users/OmarLopez18/events{/privacy}', + received_events_url: 'https://api.github.com/users/OmarLopez18/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694118251, + node_id: 'MDU6TGFiZWwxNjk0MTE4MjUx', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/US', + name: 'US', + color: '463faa', + default: false, + description: 'United States' + }, + { + id: 1707513547, + node_id: 'MDU6TGFiZWwxNzA3NTEzNTQ3', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/broken%20stream', + name: 'broken stream', + color: 'FBCA04', + default: false, + description: 'Stream is not working properly' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5932506810, + node_id: 'LA_kwDOCWUK8M8AAAABYZreug', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:remove', + name: 'streams:remove', + color: '5373a2', + default: false, + description: '' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 2, + created_at: '2023-08-25T06:37:33Z', + updated_at: '2023-09-07T00:35:34Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Broken Link\n\nhttps://kaetdt.lls.pbs.org/out/v1/259f25e61b3d47ce8a7e2339a00c5561/index.m3u8\n\n### What happened to the stream?\n\nNot loading\n\n### Possible Replacement (optional)\n\n_No response_\n\n### Notes (optional)\n\n_No response_\n\n### Please confirm the following\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md#report-a-broken-stream)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14040/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14040/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14017', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14017/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14017/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14017/events', + html_url: 'https://github.com/iptv-org/iptv/issues/14017', + id: 1860427275, + node_id: 'I_kwDOCWUK8M5u494L', + number: 14017, + title: 'Broken: Lego Channel', + user: { + login: 'baliebox4916', + id: 28187097, + node_id: 'MDQ6VXNlcjI4MTg3MDk3', + avatar_url: 'https://avatars.githubusercontent.com/u/28187097?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/baliebox4916', + html_url: 'https://github.com/baliebox4916', + followers_url: 'https://api.github.com/users/baliebox4916/followers', + following_url: 'https://api.github.com/users/baliebox4916/following{/other_user}', + gists_url: 'https://api.github.com/users/baliebox4916/gists{/gist_id}', + starred_url: 'https://api.github.com/users/baliebox4916/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/baliebox4916/subscriptions', + organizations_url: 'https://api.github.com/users/baliebox4916/orgs', + repos_url: 'https://api.github.com/users/baliebox4916/repos', + events_url: 'https://api.github.com/users/baliebox4916/events{/privacy}', + received_events_url: 'https://api.github.com/users/baliebox4916/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694118251, + node_id: 'MDU6TGFiZWwxNjk0MTE4MjUx', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/US', + name: 'US', + color: '463faa', + default: false, + description: 'United States' + }, + { + id: 1707513547, + node_id: 'MDU6TGFiZWwxNzA3NTEzNTQ3', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/broken%20stream', + name: 'broken stream', + color: 'FBCA04', + default: false, + description: 'Stream is not working properly' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5932506810, + node_id: 'LA_kwDOCWUK8M8AAAABYZreug', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:remove', + name: 'streams:remove', + color: '5373a2', + default: false, + description: '' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2023-08-22T02:13:54Z', + updated_at: '2023-09-07T00:36:14Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Broken Link\n\nhttps://legochannel-roku.amagi.tv/playlist.m3u8\n\n### What happened to the stream?\n\nNot loading\n\n### Possible Replacement (optional)\n\n_No response_\n\n### Notes (optional)\n\nThis Channel Is/Was a Very Good Lego Channel\r\n\r\nBut i Cant Watch it on My PC\r\n\r\n(Tried Progdvb and it said Please Check Network Connection or Try Another Link to Channel)\r\n\r\nTried MyIPTV Player and it said Error Unsupported video type or invalid file path)\n\n### Please confirm the following\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md#report-a-broken-stream)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/14017/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14017/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/13933', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13933/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13933/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13933/events', + html_url: 'https://github.com/iptv-org/iptv/issues/13933', + id: 1854065855, + node_id: 'I_kwDOCWUK8M5ugsy_', + number: 13933, + title: 'Broken: Rai 1', + user: { + login: 'm3u-playlists', + id: 141451187, + node_id: 'U_kgDOCG5fsw', + avatar_url: 'https://avatars.githubusercontent.com/u/141451187?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/m3u-playlists', + html_url: 'https://github.com/m3u-playlists', + followers_url: 'https://api.github.com/users/m3u-playlists/followers', + following_url: 'https://api.github.com/users/m3u-playlists/following{/other_user}', + gists_url: 'https://api.github.com/users/m3u-playlists/gists{/gist_id}', + starred_url: 'https://api.github.com/users/m3u-playlists/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/m3u-playlists/subscriptions', + organizations_url: 'https://api.github.com/users/m3u-playlists/orgs', + repos_url: 'https://api.github.com/users/m3u-playlists/repos', + events_url: 'https://api.github.com/users/m3u-playlists/events{/privacy}', + received_events_url: 'https://api.github.com/users/m3u-playlists/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694139293, + node_id: 'MDU6TGFiZWwxNjk0MTM5Mjkz', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/IT', + name: 'IT', + color: 'f254ae', + default: false, + description: 'Italy' + }, + { + id: 1707513547, + node_id: 'MDU6TGFiZWwxNzA3NTEzNTQ3', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/broken%20stream', + name: 'broken stream', + color: 'FBCA04', + default: false, + description: 'Stream is not working properly' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5932506810, + node_id: 'LA_kwDOCWUK8M8AAAABYZreug', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:remove', + name: 'streams:remove', + color: '5373a2', + default: false, + description: '' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2023-08-17T00:35:23Z', + updated_at: '2023-09-07T00:39:57Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: "### Broken Link\n\nhttp://ott-cdn.ucom.am/s29/04.m3u8\n\n### What happened to the stream?\n\nNot loading\n\n### Possible Replacement (optional)\n\n_No response_\n\n### Notes (optional)\n\nit doesn't load\n\n### Please confirm the following\n\n- [x] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md#report-a-broken-stream)", + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/13933/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13933/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/13733', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13733/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13733/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13733/events', + html_url: 'https://github.com/iptv-org/iptv/issues/13733', + id: 1837944461, + node_id: 'I_kwDOCWUK8M5tjM6N', + number: 13733, + title: 'Broken: Ary QTV', + user: { + login: 'freearhey', + id: 7253922, + node_id: 'MDQ6VXNlcjcyNTM5MjI=', + avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/freearhey', + html_url: 'https://github.com/freearhey', + followers_url: 'https://api.github.com/users/freearhey/followers', + following_url: 'https://api.github.com/users/freearhey/following{/other_user}', + gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}', + starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions', + organizations_url: 'https://api.github.com/users/freearhey/orgs', + repos_url: 'https://api.github.com/users/freearhey/repos', + events_url: 'https://api.github.com/users/freearhey/events{/privacy}', + received_events_url: 'https://api.github.com/users/freearhey/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694140866, + node_id: 'MDU6TGFiZWwxNjk0MTQwODY2', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/PK', + name: 'PK', + color: '20d68a', + default: false, + description: 'Pakistan' + }, + { + id: 1707513547, + node_id: 'MDU6TGFiZWwxNzA3NTEzNTQ3', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/broken%20stream', + name: 'broken stream', + color: 'FBCA04', + default: false, + description: 'Stream is not working properly' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5932506810, + node_id: 'LA_kwDOCWUK8M8AAAABYZreug', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:remove', + name: 'streams:remove', + color: '5373a2', + default: false, + description: '' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2023-08-05T21:28:12Z', + updated_at: '2023-09-07T00:45:08Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Broken Link\n\nhttps://aryqtv.aryzap.com/24591444d352c03d824757bbf5a60d7d/6459fab3/v1/0183ea2a0eec0b8ed5941a38bc76/0183ea2a4e470b8ed5aa4d793457/main.m3u8\n\n### What happened to the stream?\n\nNot loading\n\n### Possible Replacement (optional)\n\nhttps://aryqtv.aryzap.com/859af40a1493997e1ea86c1054773823/64cfef73/v1/0183ea2a0eec0b8ed5941a38bc76/0183ea2a4e470b8ed5aa4d793457/ARYQTVH264_720p.m3u8\n\n### Notes (optional)\n\nOriginal request: #13731\n\n### Please confirm the following\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md#report-a-broken-stream)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/13733/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13733/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/13555', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13555/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13555/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13555/events', + html_url: 'https://github.com/iptv-org/iptv/issues/13555', + id: 1807032220, + node_id: 'I_kwDOCWUK8M5rtR-c', + number: 13555, + title: 'Broken: Colors Cineplex', + user: { + login: 'uyseeer', + id: 135757448, + node_id: 'U_kgDOCBd-iA', + avatar_url: 'https://avatars.githubusercontent.com/u/135757448?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/uyseeer', + html_url: 'https://github.com/uyseeer', + followers_url: 'https://api.github.com/users/uyseeer/followers', + following_url: 'https://api.github.com/users/uyseeer/following{/other_user}', + gists_url: 'https://api.github.com/users/uyseeer/gists{/gist_id}', + starred_url: 'https://api.github.com/users/uyseeer/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/uyseeer/subscriptions', + organizations_url: 'https://api.github.com/users/uyseeer/orgs', + repos_url: 'https://api.github.com/users/uyseeer/repos', + events_url: 'https://api.github.com/users/uyseeer/events{/privacy}', + received_events_url: 'https://api.github.com/users/uyseeer/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694119113, + node_id: 'MDU6TGFiZWwxNjk0MTE5MTEz', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/IN', + name: 'IN', + color: 'd8139a', + default: false, + description: 'India' + }, + { + id: 1707513547, + node_id: 'MDU6TGFiZWwxNzA3NTEzNTQ3', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/broken%20stream', + name: 'broken stream', + color: 'FBCA04', + default: false, + description: 'Stream is not working properly' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5932506810, + node_id: 'LA_kwDOCWUK8M8AAAABYZreug', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:remove', + name: 'streams:remove', + color: '5373a2', + default: false, + description: '' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2023-07-17T05:54:19Z', + updated_at: '2023-09-07T00:45:31Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Broken Link\n\nhttps://prod-sports-north-gm.jiocinema.com/bpk-tv/Colors_Cineplex_voot_MOB/Fallback/index.m3u8\n\n### What happened to the stream?\n\nNot loading\n\n### Possible Replacement (optional)\n\n_No response_\n\n### Notes (optional)\n\n_No response_\n\n### Please confirm the following\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md#report-a-broken-stream)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/13555/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13555/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/13538', + repository_url: 'https://api.github.com/repos/iptv-org/iptv', + labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13538/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13538/comments', + events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13538/events', + html_url: 'https://github.com/iptv-org/iptv/issues/13538', + id: 1805880578, + node_id: 'I_kwDOCWUK8M5ro40C', + number: 13538, + title: 'Broken: ARY Digital [PK]', + user: { + login: 'uyseeer', + id: 135757448, + node_id: 'U_kgDOCBd-iA', + avatar_url: 'https://avatars.githubusercontent.com/u/135757448?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/uyseeer', + html_url: 'https://github.com/uyseeer', + followers_url: 'https://api.github.com/users/uyseeer/followers', + following_url: 'https://api.github.com/users/uyseeer/following{/other_user}', + gists_url: 'https://api.github.com/users/uyseeer/gists{/gist_id}', + starred_url: 'https://api.github.com/users/uyseeer/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/uyseeer/subscriptions', + organizations_url: 'https://api.github.com/users/uyseeer/orgs', + repos_url: 'https://api.github.com/users/uyseeer/repos', + events_url: 'https://api.github.com/users/uyseeer/events{/privacy}', + received_events_url: 'https://api.github.com/users/uyseeer/received_events', + type: 'User', + site_admin: false + }, + labels: [ + { + id: 1694140866, + node_id: 'MDU6TGFiZWwxNjk0MTQwODY2', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/PK', + name: 'PK', + color: '20d68a', + default: false, + description: 'Pakistan' + }, + { + id: 1707513547, + node_id: 'MDU6TGFiZWwxNzA3NTEzNTQ3', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/broken%20stream', + name: 'broken stream', + color: 'FBCA04', + default: false, + description: 'Stream is not working properly' + }, + { + id: 5923498886, + node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved', + name: 'approved', + color: '85ddde', + default: false, + description: '' + }, + { + id: 5932506810, + node_id: 'LA_kwDOCWUK8M8AAAABYZreug', + url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:remove', + name: 'streams:remove', + color: '5373a2', + default: false, + description: '' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 3, + created_at: '2023-07-15T04:36:15Z', + updated_at: '2023-09-07T00:46:05Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Broken Link\n\nhttps://arydigital.aryzap.com/101647b94a234edb1d8be0996ebedc9e/6459fa3c/v1/0183ea2408f90b8ed5941a38bc72/0183ea24302d0b8ed5941a38bc75/main.m3u8\n\n### What happened to the stream?\n\nNot loading\n\n### Possible Replacement (optional)\n\n_No response_\n\n### Notes (optional)\n\n_No response_\n\n### Please confirm the following\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md#report-a-broken-stream)', + reactions: { + url: 'https://api.github.com/repos/iptv-org/iptv/issues/13538/reactions', + total_count: 0, + '+1': 0, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/13538/timeline', + performed_via_github_app: null, + state_reason: null + } +] diff --git a/tests/__data__/input/logs/generators.log b/tests/__data__/input/logs/generators.log new file mode 100644 index 000000000..4c599f099 --- /dev/null +++ b/tests/__data__/input/logs/generators.log @@ -0,0 +1,73 @@ +{"filepath":"categories/auto.m3u","count":0} +{"filepath":"categories/animation.m3u","count":0} +{"filepath":"categories/business.m3u","count":0} +{"filepath":"categories/classic.m3u","count":0} +{"filepath":"categories/comedy.m3u","count":0} +{"filepath":"categories/cooking.m3u","count":0} +{"filepath":"categories/culture.m3u","count":0} +{"filepath":"categories/documentary.m3u","count":0} +{"filepath":"categories/education.m3u","count":0} +{"filepath":"categories/entertainment.m3u","count":0} +{"filepath":"categories/family.m3u","count":0} +{"filepath":"categories/general.m3u","count":2} +{"filepath":"categories/kids.m3u","count":0} +{"filepath":"categories/legislative.m3u","count":0} +{"filepath":"categories/lifestyle.m3u","count":0} +{"filepath":"categories/movies.m3u","count":0} +{"filepath":"categories/music.m3u","count":0} +{"filepath":"categories/news.m3u","count":1} +{"filepath":"categories/outdoor.m3u","count":0} +{"filepath":"categories/relax.m3u","count":0} +{"filepath":"categories/religious.m3u","count":0} +{"filepath":"categories/series.m3u","count":0} +{"filepath":"categories/science.m3u","count":0} +{"filepath":"categories/shop.m3u","count":0} +{"filepath":"categories/sports.m3u","count":0} +{"filepath":"categories/travel.m3u","count":0} +{"filepath":"categories/weather.m3u","count":1} +{"filepath":"categories/xxx.m3u","count":1} +{"filepath":"categories/undefined.m3u","count":3} +{"filepath":"countries/cm.m3u","count":1} +{"filepath":"countries/ca.m3u","count":2} +{"filepath":"subdivisions/ca-on.m3u","count":1} +{"filepath":"countries/cv.m3u","count":1} +{"filepath":"countries/cg.m3u","count":1} +{"filepath":"countries/ro.m3u","count":1} +{"filepath":"countries/ru.m3u","count":2} +{"filepath":"countries/rw.m3u","count":1} +{"filepath":"countries/re.m3u","count":1} +{"filepath":"countries/bl.m3u","count":1} +{"filepath":"countries/sh.m3u","count":1} +{"filepath":"countries/kn.m3u","count":1} +{"filepath":"countries/int.m3u","count":1} +{"filepath":"languages/cat.m3u","count":1} +{"filepath":"languages/eng.m3u","count":1} +{"filepath":"languages/fra.m3u","count":1} +{"filepath":"languages/rus.m3u","count":1} +{"filepath":"languages/undefined.m3u","count":2} +{"filepath":"regions/afr.m3u","count":0} +{"filepath":"regions/amer.m3u","count":1} +{"filepath":"regions/apac.m3u","count":1} +{"filepath":"regions/arab.m3u","count":0} +{"filepath":"regions/asean.m3u","count":0} +{"filepath":"regions/asia.m3u","count":2} +{"filepath":"regions/carib.m3u","count":0} +{"filepath":"regions/cas.m3u","count":0} +{"filepath":"regions/cenamer.m3u","count":0} +{"filepath":"regions/cis.m3u","count":1} +{"filepath":"regions/emea.m3u","count":3} +{"filepath":"regions/eur.m3u","count":3} +{"filepath":"regions/hispam.m3u","count":0} +{"filepath":"regions/lac.m3u","count":0} +{"filepath":"regions/latam.m3u","count":0} +{"filepath":"regions/maghreb.m3u","count":0} +{"filepath":"regions/mena.m3u","count":0} +{"filepath":"regions/mideast.m3u","count":0} +{"filepath":"regions/nam.m3u","count":1} +{"filepath":"regions/noram.m3u","count":1} +{"filepath":"regions/nord.m3u","count":0} +{"filepath":"regions/oce.m3u","count":0} +{"filepath":"regions/sas.m3u","count":1} +{"filepath":"regions/southam.m3u","count":0} +{"filepath":"regions/ssa.m3u","count":0} +{"filepath":"regions/wafr.m3u","count":0} \ No newline at end of file diff --git a/tests/__data__/input/logs/generators/categories.log b/tests/__data__/input/logs/generators/categories.log deleted file mode 100644 index af68b09a9..000000000 --- a/tests/__data__/input/logs/generators/categories.log +++ /dev/null @@ -1,29 +0,0 @@ -{"filepath":"categories/auto.m3u","count":0} -{"filepath":"categories/animation.m3u","count":0} -{"filepath":"categories/business.m3u","count":0} -{"filepath":"categories/classic.m3u","count":0} -{"filepath":"categories/comedy.m3u","count":0} -{"filepath":"categories/cooking.m3u","count":0} -{"filepath":"categories/culture.m3u","count":0} -{"filepath":"categories/documentary.m3u","count":0} -{"filepath":"categories/education.m3u","count":0} -{"filepath":"categories/entertainment.m3u","count":0} -{"filepath":"categories/family.m3u","count":0} -{"filepath":"categories/general.m3u","count":2} -{"filepath":"categories/kids.m3u","count":0} -{"filepath":"categories/legislative.m3u","count":0} -{"filepath":"categories/lifestyle.m3u","count":0} -{"filepath":"categories/movies.m3u","count":0} -{"filepath":"categories/music.m3u","count":0} -{"filepath":"categories/news.m3u","count":1} -{"filepath":"categories/outdoor.m3u","count":0} -{"filepath":"categories/relax.m3u","count":0} -{"filepath":"categories/religious.m3u","count":0} -{"filepath":"categories/series.m3u","count":0} -{"filepath":"categories/science.m3u","count":0} -{"filepath":"categories/shop.m3u","count":0} -{"filepath":"categories/sports.m3u","count":0} -{"filepath":"categories/travel.m3u","count":0} -{"filepath":"categories/weather.m3u","count":1} -{"filepath":"categories/xxx.m3u","count":1} -{"filepath":"categories/undefined.m3u","count":3} \ No newline at end of file diff --git a/tests/__data__/input/logs/generators/countries.log b/tests/__data__/input/logs/generators/countries.log deleted file mode 100644 index 4fb238f33..000000000 --- a/tests/__data__/input/logs/generators/countries.log +++ /dev/null @@ -1,253 +0,0 @@ -{"filepath":"countries/af.m3u","count":1} -{"filepath":"countries/al.m3u","count":1} -{"filepath":"countries/dz.m3u","count":1} -{"filepath":"countries/as.m3u","count":1} -{"filepath":"countries/ad.m3u","count":2} -{"filepath":"countries/ao.m3u","count":1} -{"filepath":"countries/ai.m3u","count":1} -{"filepath":"countries/aq.m3u","count":1} -{"filepath":"countries/ag.m3u","count":1} -{"filepath":"countries/ar.m3u","count":1} -{"filepath":"countries/am.m3u","count":1} -{"filepath":"countries/aw.m3u","count":1} -{"filepath":"countries/au.m3u","count":1} -{"filepath":"countries/at.m3u","count":1} -{"filepath":"countries/az.m3u","count":1} -{"filepath":"countries/bs.m3u","count":1} -{"filepath":"countries/bh.m3u","count":1} -{"filepath":"countries/bd.m3u","count":1} -{"filepath":"countries/bb.m3u","count":1} -{"filepath":"countries/by.m3u","count":1} -{"filepath":"countries/be.m3u","count":1} -{"filepath":"countries/bz.m3u","count":1} -{"filepath":"countries/bj.m3u","count":1} -{"filepath":"countries/bm.m3u","count":1} -{"filepath":"countries/bt.m3u","count":1} -{"filepath":"countries/bo.m3u","count":1} -{"filepath":"countries/bq.m3u","count":1} -{"filepath":"countries/ba.m3u","count":1} -{"filepath":"countries/bw.m3u","count":1} -{"filepath":"countries/bv.m3u","count":1} -{"filepath":"countries/br.m3u","count":1} -{"filepath":"countries/io.m3u","count":1} -{"filepath":"countries/vg.m3u","count":1} -{"filepath":"countries/bn.m3u","count":1} -{"filepath":"countries/bg.m3u","count":1} -{"filepath":"countries/bf.m3u","count":1} -{"filepath":"countries/bi.m3u","count":1} -{"filepath":"countries/kh.m3u","count":1} -{"filepath":"countries/cm.m3u","count":1} -{"filepath":"countries/ca.m3u","count":2} -{"filepath":"subdivisions/ca-on.m3u","count":1} -{"filepath":"countries/cv.m3u","count":1} -{"filepath":"countries/ky.m3u","count":1} -{"filepath":"countries/cf.m3u","count":1} -{"filepath":"countries/td.m3u","count":1} -{"filepath":"countries/cl.m3u","count":1} -{"filepath":"countries/cn.m3u","count":1} -{"filepath":"countries/cx.m3u","count":1} -{"filepath":"countries/cc.m3u","count":1} -{"filepath":"countries/co.m3u","count":1} -{"filepath":"countries/km.m3u","count":1} -{"filepath":"countries/ck.m3u","count":1} -{"filepath":"countries/cr.m3u","count":1} -{"filepath":"countries/hr.m3u","count":1} -{"filepath":"countries/cu.m3u","count":1} -{"filepath":"countries/cw.m3u","count":1} -{"filepath":"countries/cy.m3u","count":1} -{"filepath":"countries/cz.m3u","count":1} -{"filepath":"countries/cd.m3u","count":1} -{"filepath":"countries/dk.m3u","count":1} -{"filepath":"countries/dj.m3u","count":1} -{"filepath":"countries/dm.m3u","count":1} -{"filepath":"countries/do.m3u","count":1} -{"filepath":"countries/tl.m3u","count":1} -{"filepath":"countries/ec.m3u","count":1} -{"filepath":"countries/eg.m3u","count":1} -{"filepath":"countries/sv.m3u","count":1} -{"filepath":"countries/gq.m3u","count":1} -{"filepath":"countries/er.m3u","count":1} -{"filepath":"countries/ee.m3u","count":1} -{"filepath":"countries/et.m3u","count":1} -{"filepath":"countries/fk.m3u","count":1} -{"filepath":"countries/fo.m3u","count":1} -{"filepath":"countries/fj.m3u","count":1} -{"filepath":"countries/fi.m3u","count":1} -{"filepath":"countries/fr.m3u","count":1} -{"filepath":"countries/gf.m3u","count":1} -{"filepath":"countries/pf.m3u","count":1} -{"filepath":"countries/tf.m3u","count":1} -{"filepath":"countries/ga.m3u","count":1} -{"filepath":"countries/gm.m3u","count":1} -{"filepath":"countries/ge.m3u","count":1} -{"filepath":"countries/de.m3u","count":1} -{"filepath":"countries/gh.m3u","count":1} -{"filepath":"countries/gi.m3u","count":1} -{"filepath":"countries/gr.m3u","count":1} -{"filepath":"countries/gl.m3u","count":1} -{"filepath":"countries/gd.m3u","count":1} -{"filepath":"countries/gp.m3u","count":1} -{"filepath":"countries/gu.m3u","count":1} -{"filepath":"countries/gt.m3u","count":1} -{"filepath":"countries/gg.m3u","count":1} -{"filepath":"countries/gn.m3u","count":1} -{"filepath":"countries/gw.m3u","count":1} -{"filepath":"countries/gy.m3u","count":1} -{"filepath":"countries/ht.m3u","count":1} -{"filepath":"countries/hm.m3u","count":1} -{"filepath":"countries/hn.m3u","count":1} -{"filepath":"countries/hk.m3u","count":1} -{"filepath":"countries/hu.m3u","count":1} -{"filepath":"countries/is.m3u","count":1} -{"filepath":"countries/in.m3u","count":1} -{"filepath":"countries/id.m3u","count":1} -{"filepath":"countries/ir.m3u","count":1} -{"filepath":"countries/iq.m3u","count":1} -{"filepath":"countries/ie.m3u","count":1} -{"filepath":"countries/im.m3u","count":1} -{"filepath":"countries/il.m3u","count":1} -{"filepath":"countries/it.m3u","count":1} -{"filepath":"countries/ci.m3u","count":1} -{"filepath":"countries/jm.m3u","count":1} -{"filepath":"countries/jp.m3u","count":1} -{"filepath":"countries/je.m3u","count":1} -{"filepath":"countries/jo.m3u","count":1} -{"filepath":"countries/kz.m3u","count":1} -{"filepath":"countries/ke.m3u","count":1} -{"filepath":"countries/ki.m3u","count":1} -{"filepath":"countries/xk.m3u","count":1} -{"filepath":"countries/kw.m3u","count":1} -{"filepath":"countries/kg.m3u","count":1} -{"filepath":"countries/la.m3u","count":1} -{"filepath":"countries/lv.m3u","count":1} -{"filepath":"countries/lb.m3u","count":1} -{"filepath":"countries/ls.m3u","count":1} -{"filepath":"countries/lr.m3u","count":1} -{"filepath":"countries/ly.m3u","count":1} -{"filepath":"countries/li.m3u","count":1} -{"filepath":"countries/lt.m3u","count":1} -{"filepath":"countries/lu.m3u","count":1} -{"filepath":"countries/mo.m3u","count":1} -{"filepath":"countries/mg.m3u","count":1} -{"filepath":"countries/mw.m3u","count":1} -{"filepath":"countries/my.m3u","count":1} -{"filepath":"countries/mv.m3u","count":1} -{"filepath":"countries/ml.m3u","count":1} -{"filepath":"countries/mt.m3u","count":1} -{"filepath":"countries/mh.m3u","count":1} -{"filepath":"countries/mq.m3u","count":1} -{"filepath":"countries/mr.m3u","count":1} -{"filepath":"countries/mu.m3u","count":1} -{"filepath":"countries/yt.m3u","count":1} -{"filepath":"countries/mx.m3u","count":1} -{"filepath":"countries/fm.m3u","count":1} -{"filepath":"countries/md.m3u","count":1} -{"filepath":"countries/mc.m3u","count":1} -{"filepath":"countries/mn.m3u","count":1} -{"filepath":"countries/me.m3u","count":1} -{"filepath":"countries/ms.m3u","count":1} -{"filepath":"countries/ma.m3u","count":1} -{"filepath":"countries/mz.m3u","count":1} -{"filepath":"countries/mm.m3u","count":1} -{"filepath":"countries/na.m3u","count":1} -{"filepath":"countries/nr.m3u","count":1} -{"filepath":"countries/np.m3u","count":1} -{"filepath":"countries/nl.m3u","count":1} -{"filepath":"countries/nc.m3u","count":1} -{"filepath":"countries/nz.m3u","count":1} -{"filepath":"countries/ni.m3u","count":1} -{"filepath":"countries/ne.m3u","count":1} -{"filepath":"countries/ng.m3u","count":1} -{"filepath":"countries/nu.m3u","count":1} -{"filepath":"countries/nf.m3u","count":1} -{"filepath":"countries/kp.m3u","count":1} -{"filepath":"countries/mk.m3u","count":1} -{"filepath":"countries/mp.m3u","count":1} -{"filepath":"countries/no.m3u","count":1} -{"filepath":"countries/om.m3u","count":1} -{"filepath":"countries/pk.m3u","count":1} -{"filepath":"countries/pw.m3u","count":1} -{"filepath":"countries/ps.m3u","count":1} -{"filepath":"countries/pa.m3u","count":1} -{"filepath":"countries/pg.m3u","count":1} -{"filepath":"countries/py.m3u","count":1} -{"filepath":"countries/pe.m3u","count":1} -{"filepath":"countries/ph.m3u","count":1} -{"filepath":"countries/pn.m3u","count":1} -{"filepath":"countries/pl.m3u","count":1} -{"filepath":"countries/pt.m3u","count":1} -{"filepath":"countries/pr.m3u","count":1} -{"filepath":"countries/qa.m3u","count":1} -{"filepath":"countries/cg.m3u","count":1} -{"filepath":"countries/ro.m3u","count":1} -{"filepath":"countries/ru.m3u","count":2} -{"filepath":"countries/rw.m3u","count":1} -{"filepath":"countries/re.m3u","count":1} -{"filepath":"countries/bl.m3u","count":1} -{"filepath":"countries/sh.m3u","count":1} -{"filepath":"countries/kn.m3u","count":1} -{"filepath":"countries/lc.m3u","count":1} -{"filepath":"countries/mf.m3u","count":1} -{"filepath":"countries/pm.m3u","count":1} -{"filepath":"countries/vc.m3u","count":1} -{"filepath":"countries/ws.m3u","count":1} -{"filepath":"countries/sm.m3u","count":1} -{"filepath":"countries/sa.m3u","count":1} -{"filepath":"countries/sn.m3u","count":1} -{"filepath":"countries/rs.m3u","count":1} -{"filepath":"countries/sc.m3u","count":1} -{"filepath":"countries/sl.m3u","count":1} -{"filepath":"countries/sg.m3u","count":1} -{"filepath":"countries/sx.m3u","count":1} -{"filepath":"countries/sk.m3u","count":1} -{"filepath":"countries/si.m3u","count":1} -{"filepath":"countries/sb.m3u","count":1} -{"filepath":"countries/so.m3u","count":1} -{"filepath":"countries/za.m3u","count":1} -{"filepath":"countries/gs.m3u","count":1} -{"filepath":"countries/kr.m3u","count":1} -{"filepath":"countries/ss.m3u","count":1} -{"filepath":"countries/es.m3u","count":1} -{"filepath":"countries/lk.m3u","count":1} -{"filepath":"countries/sd.m3u","count":1} -{"filepath":"countries/sr.m3u","count":1} -{"filepath":"countries/sj.m3u","count":1} -{"filepath":"countries/sz.m3u","count":1} -{"filepath":"countries/se.m3u","count":1} -{"filepath":"countries/ch.m3u","count":1} -{"filepath":"countries/sy.m3u","count":1} -{"filepath":"countries/st.m3u","count":1} -{"filepath":"countries/tw.m3u","count":1} -{"filepath":"countries/tj.m3u","count":1} -{"filepath":"countries/tz.m3u","count":1} -{"filepath":"countries/th.m3u","count":1} -{"filepath":"countries/tg.m3u","count":1} -{"filepath":"countries/tk.m3u","count":1} -{"filepath":"countries/to.m3u","count":1} -{"filepath":"countries/tt.m3u","count":1} -{"filepath":"countries/tn.m3u","count":1} -{"filepath":"countries/tr.m3u","count":1} -{"filepath":"countries/tm.m3u","count":1} -{"filepath":"countries/tc.m3u","count":1} -{"filepath":"countries/tv.m3u","count":1} -{"filepath":"countries/um.m3u","count":1} -{"filepath":"countries/vi.m3u","count":1} -{"filepath":"countries/ug.m3u","count":1} -{"filepath":"countries/ua.m3u","count":1} -{"filepath":"countries/ae.m3u","count":1} -{"filepath":"countries/uk.m3u","count":1} -{"filepath":"countries/us.m3u","count":1} -{"filepath":"countries/uy.m3u","count":1} -{"filepath":"countries/uz.m3u","count":1} -{"filepath":"countries/vu.m3u","count":1} -{"filepath":"countries/va.m3u","count":1} -{"filepath":"countries/ve.m3u","count":1} -{"filepath":"countries/vn.m3u","count":1} -{"filepath":"countries/wf.m3u","count":1} -{"filepath":"countries/eh.m3u","count":1} -{"filepath":"countries/ye.m3u","count":1} -{"filepath":"countries/zm.m3u","count":1} -{"filepath":"countries/zw.m3u","count":1} -{"filepath":"countries/ax.m3u","count":1} -{"filepath":"countries/int.m3u","count":1} -{"filepath":"countries/undefined.m3u","count":2} \ No newline at end of file diff --git a/tests/__data__/input/logs/generators/languages.log b/tests/__data__/input/logs/generators/languages.log deleted file mode 100644 index a11820504..000000000 --- a/tests/__data__/input/logs/generators/languages.log +++ /dev/null @@ -1,5 +0,0 @@ -{"filepath":"languages/cat.m3u","count":1} -{"filepath":"languages/eng.m3u","count":1} -{"filepath":"languages/fra.m3u","count":1} -{"filepath":"languages/rus.m3u","count":1} -{"filepath":"languages/undefined.m3u","count":2} \ No newline at end of file diff --git a/tests/__data__/input/logs/generators/regions.log b/tests/__data__/input/logs/generators/regions.log deleted file mode 100644 index d7da61769..000000000 --- a/tests/__data__/input/logs/generators/regions.log +++ /dev/null @@ -1,26 +0,0 @@ -{"filepath":"regions/afr.m3u","count":0} -{"filepath":"regions/amer.m3u","count":1} -{"filepath":"regions/apac.m3u","count":1} -{"filepath":"regions/arab.m3u","count":0} -{"filepath":"regions/asean.m3u","count":0} -{"filepath":"regions/asia.m3u","count":2} -{"filepath":"regions/carib.m3u","count":0} -{"filepath":"regions/cas.m3u","count":0} -{"filepath":"regions/cenamer.m3u","count":0} -{"filepath":"regions/cis.m3u","count":1} -{"filepath":"regions/emea.m3u","count":3} -{"filepath":"regions/eur.m3u","count":3} -{"filepath":"regions/hispam.m3u","count":0} -{"filepath":"regions/lac.m3u","count":0} -{"filepath":"regions/latam.m3u","count":0} -{"filepath":"regions/maghreb.m3u","count":0} -{"filepath":"regions/mena.m3u","count":0} -{"filepath":"regions/mideast.m3u","count":0} -{"filepath":"regions/nam.m3u","count":1} -{"filepath":"regions/noram.m3u","count":1} -{"filepath":"regions/nord.m3u","count":0} -{"filepath":"regions/oce.m3u","count":0} -{"filepath":"regions/sas.m3u","count":1} -{"filepath":"regions/southam.m3u","count":0} -{"filepath":"regions/ssa.m3u","count":0} -{"filepath":"regions/wafr.m3u","count":0} \ No newline at end of file diff --git a/tests/commands/api/generate.test.js b/tests/commands/api/generate.test.ts similarity index 69% rename from tests/commands/api/generate.test.js rename to tests/commands/api/generate.test.ts index 8dbeae838..74a70e11d 100644 --- a/tests/commands/api/generate.test.js +++ b/tests/commands/api/generate.test.ts @@ -1,5 +1,5 @@ -const { execSync } = require('child_process') -const fs = require('fs-extra') +import { execSync } from 'child_process' +import fs from 'fs-extra' beforeEach(() => { fs.emptyDirSync('tests/__data__/output') @@ -10,7 +10,7 @@ beforeEach(() => { ) const stdout = execSync( - 'DB_DIR=tests/__data__/output/database DATA_DIR=tests/__data__/input/data PUBLIC_DIR=tests/__data__/output/.api npm run api:generate', + 'DB_DIR=tests/__data__/output/database API_DIR=tests/__data__/output/.api npm run api:generate', { encoding: 'utf8' } ) }) @@ -19,7 +19,7 @@ it('can create streams.json', () => { expect(content(`output/.api/streams.json`)).toMatchObject(content(`expected/.api/streams.json`)) }) -function content(filepath) { +function content(filepath: string) { return JSON.parse( fs.readFileSync(`tests/__data__/${filepath}`, { encoding: 'utf8' diff --git a/tests/commands/database/create.test.js b/tests/commands/database/create.test.ts similarity index 67% rename from tests/commands/database/create.test.js rename to tests/commands/database/create.test.ts index c5bf75e13..4ca4d4023 100644 --- a/tests/commands/database/create.test.js +++ b/tests/commands/database/create.test.ts @@ -1,13 +1,14 @@ -const fs = require('fs-extra') -const path = require('path') -const { execSync } = require('child_process') +import * as fs from 'fs-extra' +import * as path from 'path' +import { execSync } from 'child_process' +import * as _ from 'lodash' beforeEach(() => { fs.emptyDirSync('tests/__data__/output') fs.mkdirSync('tests/__data__/output/database') const stdout = execSync( - 'DB_DIR=tests/__data__/output/database DATA_DIR=tests/__data__/input/data npm run db:create -- --input-dir=tests/__data__/input/streams', + 'DB_DIR=tests/__data__/output/database DATA_DIR=tests/__data__/input/data STREAMS_DIR=tests/__data__/input/streams npm run db:create', { encoding: 'utf8' } ) }) @@ -25,10 +26,12 @@ it('can create database', () => { return i }) - expect(output).toMatchObject(expect.arrayContaining(expected)) + expect(_.orderBy(output, 'name')).toMatchObject( + expect.arrayContaining(_.orderBy(expected, 'name')) + ) }) -function content(filepath) { +function content(filepath: string) { const data = fs.readFileSync(path.resolve(filepath), { encoding: 'utf8' }) diff --git a/tests/commands/playlist/format.test.js b/tests/commands/playlist/format.test.js deleted file mode 100644 index 0d048732a..000000000 --- a/tests/commands/playlist/format.test.js +++ /dev/null @@ -1,32 +0,0 @@ -const { execSync } = require('child_process') -const fs = require('fs-extra') -const path = require('path') -const glob = require('glob') - -beforeEach(() => { - fs.emptyDirSync('tests/__data__/output') - fs.copyFileSync( - 'tests/__data__/input/database/playlist_format.streams.db', - 'tests/__data__/output/streams.db' - ) - - const stdout = execSync('DB_DIR=tests/__data__/output npm run playlist:format', { - encoding: 'utf8' - }) -}) - -it('can format playlists', () => { - const files = glob - .sync('tests/__data__/expected/streams/*.m3u') - .map(f => f.replace('tests/__data__/expected/', '')) - - files.forEach(filepath => { - expect(content(`output/${filepath}`), filepath).toBe(content(`expected/${filepath}`)) - }) -}) - -function content(filepath) { - return fs.readFileSync(`tests/__data__/${filepath}`, { - encoding: 'utf8' - }) -} diff --git a/tests/commands/playlist/generate.test.js b/tests/commands/playlist/generate.test.ts similarity index 53% rename from tests/commands/playlist/generate.test.js rename to tests/commands/playlist/generate.test.ts index 00540b330..1e2d38abe 100644 --- a/tests/commands/playlist/generate.test.js +++ b/tests/commands/playlist/generate.test.ts @@ -1,7 +1,6 @@ -const { execSync } = require('child_process') -const fs = require('fs-extra') -const path = require('path') -const glob = require('glob') +import { execSync } from 'child_process' +import * as fs from 'fs-extra' +import * as glob from 'glob' beforeEach(() => { fs.emptyDirSync('tests/__data__/output') @@ -10,8 +9,8 @@ beforeEach(() => { 'tests/__data__/output/streams.db' ) - execSync( - 'DB_DIR=tests/__data__/output DATA_DIR=tests/__data__/input/data PUBLIC_DIR=tests/__data__/output/.gh-pages LOGS_DIR=tests/__data__/output/logs/generators npm run playlist:generate', + const stdout = execSync( + 'DB_DIR=tests/__data__/output DATA_DIR=tests/__data__/input/data PUBLIC_DIR=tests/__data__/output/.gh-pages LOGS_DIR=tests/__data__/output/logs npm run playlist:generate', { encoding: 'utf8' } ) }) @@ -19,22 +18,18 @@ beforeEach(() => { it('can generate playlists and logs', () => { const playlists = glob .sync('tests/__data__/expected/.gh-pages/**/*.m3u') - .map(f => f.replace('tests/__data__/expected/', '')) + .map((file: string) => file.replace('tests/__data__/expected/', '')) - playlists.forEach(filepath => { + playlists.forEach((filepath: string) => { expect(content(`output/${filepath}`), filepath).toBe(content(`expected/${filepath}`)) }) - const logs = glob - .sync('tests/__data__/expected/logs/generators/*.log') - .map(f => f.replace('tests/__data__/expected/', '')) - - logs.forEach(filepath => { - expect(content(`output/${filepath}`), filepath).toBe(content(`expected/${filepath}`)) - }) + expect(content(`output/logs/generators.log`).split('\n').sort()).toStrictEqual( + content(`expected/logs/generators.log`).split('\n').sort() + ) }) -function content(filepath) { +function content(filepath: string) { return fs.readFileSync(`tests/__data__/${filepath}`, { encoding: 'utf8' }) diff --git a/tests/commands/playlist/update.test.ts b/tests/commands/playlist/update.test.ts new file mode 100644 index 000000000..01cad1b84 --- /dev/null +++ b/tests/commands/playlist/update.test.ts @@ -0,0 +1,36 @@ +import { execSync } from 'child_process' +import * as fs from 'fs-extra' +import { glob } from 'glob' + +beforeEach(() => { + fs.emptyDirSync('tests/__data__/output') + fs.copyFileSync( + 'tests/__data__/input/database/playlist_update.streams.db', + 'tests/__data__/output/streams.db' + ) +}) + +it('can format playlists', () => { + const stdout = execSync( + 'DEBUG=true DATA_DIR=tests/__data__/input/data STREAMS_DIR=tests/__data__/output/streams DB_DIR=tests/__data__/output npm run playlist:update --silent', + { + encoding: 'utf8' + } + ) + + expect(stdout).toBe(`OUTPUT=closes #14151, closes #14110, closes #14179, closes #14178\n`) + + const files = glob + .sync('tests/__data__/expected/streams/*.m3u') + .map(f => f.replace('tests/__data__/expected/', '')) + + files.forEach(filepath => { + expect(content(`output/${filepath}`), filepath).toBe(content(`expected/${filepath}`)) + }) +}) + +function content(filepath: string) { + return fs.readFileSync(`tests/__data__/${filepath}`, { + encoding: 'utf8' + }) +} diff --git a/tests/commands/playlist/validate.test.js b/tests/commands/playlist/validate.test.js deleted file mode 100644 index 39661980f..000000000 --- a/tests/commands/playlist/validate.test.js +++ /dev/null @@ -1,32 +0,0 @@ -const { execSync } = require('child_process') - -it('show an error if channel name in the blocklist', () => { - try { - const stdout = execSync( - 'DATA_DIR=tests/__data__/input/data npm run playlist:validate -- tests/__data__/input/streams/us_blocked.m3u', - { - encoding: 'utf8' - } - ) - console.log(stdout) - process.exit(1) - } catch (err) { - expect(err.status).toBe(1) - expect(err.stdout).toBe( - `\n> playlist:validate\n> node scripts/commands/playlist/validate.js tests/__data__/input/streams/us_blocked.m3u\n\nloading blocklist...\nfound 4 records\n\ntests/__data__/input/streams/us_blocked.m3u\n 2 error "Fox Sports 2 Asia" is on the blocklist due to claims of copyright holders (https://github.com/iptv-org/iptv/issues/0000)\n\n1 problems (1 errors, 0 warnings)\n` - ) - } -}) - -it('show a warning if channel has wrong id', () => { - const stdout = execSync( - 'DATA_DIR=tests/__data__/input/data npm run playlist:validate -- tests/__data__/input/streams/wrong_id.m3u', - { - encoding: 'utf8' - } - ) - - expect(stdout).toBe( - `\n> playlist:validate\n> node scripts/commands/playlist/validate.js tests/__data__/input/streams/wrong_id.m3u\n\nloading blocklist...\nfound 4 records\n\ntests/__data__/input/streams/wrong_id.m3u\n 2 warning "qib22lAq1L.us" is not in the database\n\n1 problems (0 errors, 1 warnings)\n` - ) -}) diff --git a/tests/commands/playlist/validate.test.ts b/tests/commands/playlist/validate.test.ts new file mode 100644 index 000000000..7f702bb36 --- /dev/null +++ b/tests/commands/playlist/validate.test.ts @@ -0,0 +1,36 @@ +import { execSync } from 'child_process' + +it('show an error if channel name in the blocklist', () => { + try { + const stdout = execSync( + 'DATA_DIR=tests/__data__/input/data STREAMS_DIR=tests/__data__/input/streams npm run playlist:validate -- tests/__data__/input/streams/us_blocked.m3u', + { + encoding: 'utf8' + } + ) + console.log(stdout) + process.exit(1) + } catch (error: any) { + expect(error.status).toBe(1) + expect( + error.stdout.includes( + `loading blocklist...\nfound 4 records\n\ntests/__data__/input/streams/us_blocked.m3u\n 2 error "Fox Sports 2 Asia (Thai)" is on the blocklist due to claims of copyright holders (https://github.com/iptv-org/iptv/issues/0000)\n\n1 problems (1 errors, 0 warnings)\n` + ) + ).toBe(true) + } +}) + +it('show a warning if channel has wrong id', () => { + const stdout = execSync( + 'DATA_DIR=tests/__data__/input/data STREAMS_DIR=tests/__data__/input/streams npm run playlist:validate -- tests/__data__/input/streams/wrong_id.m3u', + { + encoding: 'utf8' + } + ) + + expect( + stdout.includes( + `loading blocklist...\nfound 4 records\n\ntests/__data__/input/streams/wrong_id.m3u\n 2 warning "qib22lAq1L.us" is not in the database\n\n1 problems (0 errors, 1 warnings)\n` + ) + ).toBe(true) +}) diff --git a/tests/commands/readme/update.test.js b/tests/commands/readme/update.test.js deleted file mode 100644 index 1e0308b61..000000000 --- a/tests/commands/readme/update.test.js +++ /dev/null @@ -1,26 +0,0 @@ -const { execSync } = require('child_process') -const fs = require('fs-extra') -const path = require('path') - -beforeEach(() => { - fs.emptyDirSync('tests/__data__/output') - - const stdout = execSync( - 'DATA_DIR=tests/__data__/input/data LOGS_DIR=tests/__data__/input/logs/generators npm run readme:update -- --config=tests/__data__/input/_readme.json', - { encoding: 'utf8' } - ) -}) - -it('can update readme.md', () => { - expect(content('tests/__data__/output/readme.md')).toEqual( - content('tests/__data__/expected/_readme.md') - ) -}) - -function content(filepath) { - const data = fs.readFileSync(path.resolve(filepath), { - encoding: 'utf8' - }) - - return JSON.stringify(data) -} diff --git a/tests/commands/readme/update.test.ts b/tests/commands/readme/update.test.ts new file mode 100644 index 000000000..e703ff1b0 --- /dev/null +++ b/tests/commands/readme/update.test.ts @@ -0,0 +1,35 @@ +import { execSync } from 'child_process' +import fs from 'fs-extra' +import path from 'path' + +beforeEach(() => { + fs.emptyDirSync('tests/__data__/output') + fs.mkdirSync('tests/__data__/output/.readme') + fs.copyFileSync( + 'tests/__data__/input/.readme/config.json', + 'tests/__data__/output/.readme/config.json' + ) + fs.copyFileSync( + 'tests/__data__/input/.readme/template.md', + 'tests/__data__/output/.readme/template.md' + ) + + const stdout = execSync( + 'DATA_DIR=tests/__data__/input/data LOGS_DIR=tests/__data__/input/logs README_DIR=tests/__data__/output/.readme npm run readme:update', + { encoding: 'utf8' } + ) +}) + +it('can update readme.md', () => { + expect(content('tests/__data__/output/readme.md')).toEqual( + content('tests/__data__/expected/_readme.md') + ) +}) + +function content(filepath: string) { + const data = fs.readFileSync(path.resolve(filepath), { + encoding: 'utf8' + }) + + return JSON.stringify(data) +} diff --git a/tests/commands/report/create.test.ts b/tests/commands/report/create.test.ts new file mode 100644 index 000000000..b6002eeba --- /dev/null +++ b/tests/commands/report/create.test.ts @@ -0,0 +1,20 @@ +import { execSync } from 'child_process' + +it('can create report', () => { + const stdout = execSync('DATA_DIR=tests/__data__/input/data npm run report:create', { + encoding: 'utf8' + }) + + expect( + stdout.includes(` +โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +โ”‚ (index) โ”‚ issueNumber โ”‚ channelId โ”‚ status โ”‚ +โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค +โ”‚ 0 โ”‚ 14179 โ”‚ 'ManoramaNews.in' โ”‚ 'pending' โ”‚ +โ”‚ 1 โ”‚ 14178 โ”‚ 'TV3.my' โ”‚ 'blocked' โ”‚ +โ”‚ 2 โ”‚ 14177 โ”‚ 'TUTV.us' โ”‚ 'fullfilled' โ”‚ +โ”‚ 3 โ”‚ 14176 โ”‚ 'ManoramaNews.in' โ”‚ 'duplicate' โ”‚ +โ”‚ 4 โ”‚ 14175 โ”‚ 'TFX.fr' โ”‚ 'invalid_id' โ”‚ +โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜`) + ).toBe(true) +}) diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 000000000..ccc6f3ff7 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "strict": true, + "target": "es2022", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "typeRoots": [ + "./scripts/types", + "./node_modules/@types" + ], + "esModuleInterop": true + }, + "ts-node": { + "esm": true, + "transpileOnly": true + }, + "files": [ + "node_modules/jest-expect-message/types/index.d.ts" + ] +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 1a349cb68..0df54a9ed 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,11 +2,6 @@ # yarn lockfile v1 -"@alex_neo/jest-expect-message@^1.0.5": - version "1.0.5" - resolved "https://registry.npmjs.org/@alex_neo/jest-expect-message/-/jest-expect-message-1.0.5.tgz" - integrity sha512-1eBykZCd0pPGl5qKtV6Z5ARA6yuhXzHsVN2h5GH5/H6svYa37Jr7vMio5OFpiw1LBHtscrZs7amSkZkcwm0cvQ== - "@ampproject/remapping@^2.0.0": version "2.1.1" resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.1.tgz" @@ -14,19 +9,20 @@ dependencies: "@jridgewell/trace-mapping" "^0.3.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz" - integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.22.13": + version "7.22.13" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz" + integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== dependencies: - "@babel/highlight" "^7.16.7" + "@babel/highlight" "^7.22.13" + chalk "^2.4.2" "@babel/compat-data@^7.16.4": version "7.17.0" resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz" integrity sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng== -"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0": +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.8.0", "@babel/core@>=7.0.0-beta.0 <8": version "7.17.2" resolved "https://registry.npmjs.org/@babel/core/-/core-7.17.2.tgz" integrity sha512-R3VH5G42VSDolRHyUO4V2cfag8WHcZyxdq5Z/m8Xyb92lW/Erm/6kM+XtRFGf3Mulre3mveni2NHfEUws8wSvw== @@ -66,28 +62,18 @@ browserslist "^4.17.5" semver "^6.3.0" -"@babel/helper-environment-visitor@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz" - integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== - dependencies: - "@babel/types" "^7.16.7" +"@babel/helper-environment-visitor@^7.16.7", "@babel/helper-environment-visitor@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz" + integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== "@babel/helper-function-name@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz" - integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz" + integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== dependencies: - "@babel/helper-get-function-arity" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/helper-get-function-arity@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz" - integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== - dependencies: - "@babel/types" "^7.16.7" + "@babel/template" "^7.22.5" + "@babel/types" "^7.22.5" "@babel/helper-hoist-variables@^7.16.7": version "7.16.7" @@ -96,55 +82,57 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-module-imports@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz" - integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== +"@babel/helper-module-imports@^7.22.15": + version "7.22.15" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz" + integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== dependencies: - "@babel/types" "^7.16.7" + "@babel/types" "^7.22.15" "@babel/helper-module-transforms@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz" - integrity sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng== + version "7.22.17" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.17.tgz" + integrity sha512-XouDDhQESrLHTpnBtCKExJdyY4gJCdrvH2Pyv8r8kovX2U8G0dRUOT45T9XlbLtuu9CLXP15eusnkprhoPV5iQ== dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-simple-access" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.15" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz" - integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz" + integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== -"@babel/helper-simple-access@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz" - integrity sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g== +"@babel/helper-simple-access@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz" + integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== dependencies: - "@babel/types" "^7.16.7" + "@babel/types" "^7.22.5" -"@babel/helper-split-export-declaration@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz" - integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== +"@babel/helper-split-export-declaration@^7.16.7", "@babel/helper-split-export-declaration@^7.22.6": + version "7.22.6" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz" + integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== dependencies: - "@babel/types" "^7.16.7" + "@babel/types" "^7.22.5" -"@babel/helper-validator-identifier@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz" - integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== +"@babel/helper-string-parser@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz" + integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== + +"@babel/helper-validator-identifier@^7.22.15", "@babel/helper-validator-identifier@^7.22.5": + version "7.22.15" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz" + integrity sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ== "@babel/helper-validator-option@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz" - integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== + version "7.22.15" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz" + integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== "@babel/helpers@^7.17.2": version "7.17.2" @@ -155,19 +143,19 @@ "@babel/traverse" "^7.17.0" "@babel/types" "^7.17.0" -"@babel/highlight@^7.16.7": - version "7.16.10" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz" - integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== +"@babel/highlight@^7.22.13": + version "7.22.13" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz" + integrity sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ== dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - chalk "^2.0.0" + "@babel/helper-validator-identifier" "^7.22.5" + chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.17.0": - version "7.17.0" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz" - integrity sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.17.0", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15": + version "7.22.16" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz" + integrity sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -204,6 +192,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-jsx@^7.7.2": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz" + integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" @@ -254,22 +249,22 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.7.2": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz" - integrity sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A== + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz" + integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/template@^7.16.7", "@babel/template@^7.3.3": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz" - integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== +"@babel/template@^7.16.7", "@babel/template@^7.22.5", "@babel/template@^7.3.3": + version "7.22.15" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz" + integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/parser" "^7.16.7" - "@babel/types" "^7.16.7" + "@babel/code-frame" "^7.22.13" + "@babel/parser" "^7.22.15" + "@babel/types" "^7.22.15" -"@babel/traverse@^7.16.7", "@babel/traverse@^7.17.0", "@babel/traverse@^7.7.2": +"@babel/traverse@^7.17.0": version "7.17.0" resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.0.tgz" integrity sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg== @@ -285,12 +280,13 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.16.7", "@babel/types@^7.17.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3": - version "7.17.0" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz" - integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== +"@babel/types@^7.0.0", "@babel/types@^7.16.7", "@babel/types@^7.17.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.3.3": + version "7.22.17" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.22.17.tgz" + integrity sha512-YSQPHLFtQNE5xN9tHuZnzu8vPr61wVTBZdfv1meex1NBosa4iT05k/Jw06ddJugi4bk7The/oSwQGFcksmEJQg== dependencies: - "@babel/helper-validator-identifier" "^7.16.7" + "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.15" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -298,6 +294,25 @@ resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== +"@cspotcode/source-map-support@^0.8.0": + 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" + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" @@ -314,199 +329,238 @@ resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^27.5.1": - version "27.5.1" - resolved "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz" - integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== +"@jest/console@^29.6.4": + version "29.6.4" + resolved "https://registry.npmjs.org/@jest/console/-/console-29.6.4.tgz" + integrity sha512-wNK6gC0Ha9QeEPSkeJedQuTQqxZYnDPuDcDhVuVatRvMkL4D0VTvFVZj+Yuh6caG2aOfzkUZ36KtCmLNtR02hw== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^27.5.1" - jest-util "^27.5.1" + jest-message-util "^29.6.3" + jest-util "^29.6.3" slash "^3.0.0" -"@jest/core@^27.5.1": - version "27.5.1" - resolved "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz" - integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== +"@jest/core@^29.6.4": + version "29.6.4" + resolved "https://registry.npmjs.org/@jest/core/-/core-29.6.4.tgz" + integrity sha512-U/vq5ccNTSVgYH7mHnodHmCffGWHJnz/E1BEWlLuK5pM4FZmGfBn/nrJGLjUsSmyx3otCeqc1T31F4y08AMDLg== dependencies: - "@jest/console" "^27.5.1" - "@jest/reporters" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.6.4" + "@jest/reporters" "^29.6.4" + "@jest/test-result" "^29.6.4" + "@jest/transform" "^29.6.4" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - emittery "^0.8.1" + ci-info "^3.2.0" exit "^0.1.2" graceful-fs "^4.2.9" - jest-changed-files "^27.5.1" - jest-config "^27.5.1" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-resolve-dependencies "^27.5.1" - jest-runner "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - jest-watcher "^27.5.1" + jest-changed-files "^29.6.3" + jest-config "^29.6.4" + jest-haste-map "^29.6.4" + jest-message-util "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.6.4" + jest-resolve-dependencies "^29.6.4" + jest-runner "^29.6.4" + jest-runtime "^29.6.4" + jest-snapshot "^29.6.4" + jest-util "^29.6.3" + jest-validate "^29.6.3" + jest-watcher "^29.6.4" micromatch "^4.0.4" - rimraf "^3.0.0" + pretty-format "^29.6.3" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^27.5.1": - version "27.5.1" - resolved "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz" - integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== +"@jest/environment@^29.6.4": + version "29.6.4" + resolved "https://registry.npmjs.org/@jest/environment/-/environment-29.6.4.tgz" + integrity sha512-sQ0SULEjA1XUTHmkBRl7A1dyITM9yb1yb3ZNKPX3KlTd6IG7mWUe3e2yfExtC2Zz1Q+mMckOLHmL/qLiuQJrBQ== dependencies: - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/fake-timers" "^29.6.4" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^27.5.1" + jest-mock "^29.6.3" + +"@jest/expect-utils@^29.6.4": + version "29.6.4" + resolved "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.4.tgz" + integrity sha512-FEhkJhqtvBwgSpiTrocquJCdXPsyvNKcl/n7A3u7X4pVoF4bswm11c9d4AV+kfq2Gpv/mM8x7E7DsRvH+djkrg== + dependencies: + jest-get-type "^29.6.3" -"@jest/fake-timers@^27.5.1": - version "27.5.1" - resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz" - integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== +"@jest/expect@^29.6.4": + version "29.6.4" + resolved "https://registry.npmjs.org/@jest/expect/-/expect-29.6.4.tgz" + integrity sha512-Warhsa7d23+3X5bLbrbYvaehcgX5TLYhI03JKoedTiI8uJU4IhqYBWF7OSSgUyz4IgLpUYPkK0AehA5/fRclAA== dependencies: - "@jest/types" "^27.5.1" - "@sinonjs/fake-timers" "^8.0.1" + expect "^29.6.4" + jest-snapshot "^29.6.4" + +"@jest/fake-timers@^29.6.4": + version "29.6.4" + resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.4.tgz" + integrity sha512-6UkCwzoBK60edXIIWb0/KWkuj7R7Qq91vVInOe3De6DSpaEiqjKcJw4F7XUet24Wupahj9J6PlR09JqJ5ySDHw== + dependencies: + "@jest/types" "^29.6.3" + "@sinonjs/fake-timers" "^10.0.2" "@types/node" "*" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-util "^27.5.1" + jest-message-util "^29.6.3" + jest-mock "^29.6.3" + jest-util "^29.6.3" -"@jest/globals@^27.5.1": - version "27.5.1" - resolved "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz" - integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== +"@jest/globals@^29.6.4": + version "29.6.4" + resolved "https://registry.npmjs.org/@jest/globals/-/globals-29.6.4.tgz" + integrity sha512-wVIn5bdtjlChhXAzVXavcY/3PEjf4VqM174BM3eGL5kMxLiZD5CLnbmkEyA1Dwh9q8XjP6E8RwjBsY/iCWrWsA== dependencies: - "@jest/environment" "^27.5.1" - "@jest/types" "^27.5.1" - expect "^27.5.1" + "@jest/environment" "^29.6.4" + "@jest/expect" "^29.6.4" + "@jest/types" "^29.6.3" + jest-mock "^29.6.3" -"@jest/reporters@^27.5.1": - version "27.5.1" - resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz" - integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== +"@jest/reporters@^29.6.4": + version "29.6.4" + resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.4.tgz" + integrity sha512-sxUjWxm7QdchdrD3NfWKrL8FBsortZeibSJv4XLjESOOjSUOkjQcb0ZHJwfhEGIvBvTluTzfG2yZWZhkrXJu8g== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.6.4" + "@jest/test-result" "^29.6.4" + "@jest/transform" "^29.6.4" + "@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.2" + glob "^7.1.3" graceful-fs "^4.2.9" istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^5.1.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-haste-map "^27.5.1" - jest-resolve "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" + jest-message-util "^29.6.3" + jest-util "^29.6.3" + jest-worker "^29.6.4" slash "^3.0.0" - source-map "^0.6.0" string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^8.1.0" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" -"@jest/source-map@^27.5.1": - version "27.5.1" - resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz" - integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== +"@jest/source-map@^29.6.3": + version "29.6.3" + resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz" + integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== dependencies: + "@jridgewell/trace-mapping" "^0.3.18" callsites "^3.0.0" graceful-fs "^4.2.9" - source-map "^0.6.0" -"@jest/test-result@^27.5.1": - version "27.5.1" - resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz" - integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== +"@jest/test-result@^29.6.4": + version "29.6.4" + resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.4.tgz" + integrity sha512-uQ1C0AUEN90/dsyEirgMLlouROgSY+Wc/JanVVk0OiUKa5UFh7sJpMEM3aoUBAz2BRNvUJ8j3d294WFuRxSyOQ== dependencies: - "@jest/console" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.6.4" + "@jest/types" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^27.5.1": - version "27.5.1" - resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz" - integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== +"@jest/test-sequencer@^29.6.4": + version "29.6.4" + resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.4.tgz" + integrity sha512-E84M6LbpcRq3fT4ckfKs9ryVanwkaIB0Ws9bw3/yP4seRLg/VaCZ/LgW0MCq5wwk4/iP/qnilD41aj2fsw2RMg== dependencies: - "@jest/test-result" "^27.5.1" + "@jest/test-result" "^29.6.4" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-runtime "^27.5.1" + jest-haste-map "^29.6.4" + slash "^3.0.0" -"@jest/transform@^27.5.1": - version "27.5.1" - resolved "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz" - integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw== +"@jest/transform@^29.6.4": + version "29.6.4" + resolved "https://registry.npmjs.org/@jest/transform/-/transform-29.6.4.tgz" + integrity sha512-8thgRSiXUqtr/pPGY/OsyHuMjGyhVnWrFAwoxmIemlBuiMyU1WFs0tXoNxzcr4A4uErs/ABre76SGmrr5ab/AA== dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^27.5.1" + "@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 "^1.4.0" - fast-json-stable-stringify "^2.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-regex-util "^27.5.1" - jest-util "^27.5.1" + jest-haste-map "^29.6.4" + jest-regex-util "^29.6.3" + jest-util "^29.6.3" micromatch "^4.0.4" pirates "^4.0.4" slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" + write-file-atomic "^4.0.2" -"@jest/types@^27.5.1": - version "27.5.1" - resolved "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz" - integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== +"@jest/types@^29.0.0", "@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== dependencies: + "@jest/schemas" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" - "@types/yargs" "^16.0.0" + "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/resolve-uri@^3.0.3": - version "3.0.5" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz" - integrity sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew== +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": + version "3.1.1" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== -"@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.11" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz" - integrity sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg== +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.4.15" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@^0.3.0": - version "0.3.4" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz" - integrity sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ== +"@jridgewell/trace-mapping@^0.3.0", "@jridgewell/trace-mapping@0.3.9": + 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" +"@jridgewell/trace-mapping@^0.3.12": + version "0.3.19" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz" + integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@jridgewell/trace-mapping@^0.3.18": + version "0.3.19" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz" + integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + "@octokit/auth-token@^3.0.0": version "3.0.4" resolved "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz" integrity sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ== -"@octokit/core@^4.2.1", "@octokit/core@>=4": +"@octokit/core@^4.2.1", "@octokit/core@>=3", "@octokit/core@>=4": version "4.2.1" resolved "https://registry.npmjs.org/@octokit/core/-/core-4.2.1.tgz" integrity sha512-tEDxFx8E38zF3gT7sSMDrT1tGumDgsw5yPG6BBh/X+5ClIQfMH/Yqocxz1PnHx6CHyF6pxmovUTOfZAUvQ0Lvw== @@ -542,12 +596,19 @@ resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz" integrity sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw== -"@octokit/plugin-paginate-rest@^7.0.0": - version "7.0.0" - resolved "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-7.0.0.tgz" - integrity sha512-NNm6DlYBEyKs9OZvy2Ax9YKn7e0/G7js+/I80icBTHUf6kB/nfaZkdXOF1Z32OaB+LDH6GIYpdYC3Bm3vwX5Ow== +"@octokit/plugin-paginate-rest@^7.1.2": + version "7.1.2" + resolved "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-7.1.2.tgz" + integrity sha512-Jx8KuKqEAVRsK6fMzZKv3h6UH9/NRDHsDRtUAROqqmZlCptM///Uef7A1ViZ/cbDplekz7VbDWdFLAZ/mpuDww== + dependencies: + "@octokit/tsconfig" "^2.0.0" + "@octokit/types" "^9.3.2" + +"@octokit/plugin-rest-endpoint-methods@^7.1.3": + version "7.1.3" + resolved "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.1.3.tgz" + integrity sha512-0aoPd4f1k/KXPTGSX0NbxcBrShBHArgcW3pujEvLa6wUfcfA1BehxQ2Ifwa6CbJ4SfzaO79FvGgaUipoxDsgjA== dependencies: - "@octokit/tsconfig" "^1.0.2" "@octokit/types" "^9.2.3" "@octokit/request-error@^3.0.0": @@ -571,58 +632,104 @@ node-fetch "^2.6.7" universal-user-agent "^6.0.0" -"@octokit/tsconfig@^1.0.2": - version "1.0.2" - resolved "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-1.0.2.tgz" - integrity sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA== +"@octokit/tsconfig@^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-2.0.0.tgz" + integrity sha512-tWnrai3quGt8+gRN2edzo9fmraWekeryXPeXDomMw2oFSpu/lH3VSWGn/q4V+rwjTRMeeXk/ci623/01Zet4VQ== -"@octokit/types@^9.0.0", "@octokit/types@^9.2.3": - version "9.3.0" - resolved "https://registry.npmjs.org/@octokit/types/-/types-9.3.0.tgz" - integrity sha512-ZNO1In0QuWZLDngSLcn5H4ExRhYOd1rDcWnwc/LuR55cO1d6Sex6+T6RiSQwp/tyEg7eNWx+MUdJGL7Fu1kMjw== +"@octokit/types@^11.1.0": + version "11.1.0" + resolved "https://registry.npmjs.org/@octokit/types/-/types-11.1.0.tgz" + integrity sha512-Fz0+7GyLm/bHt8fwEqgvRBWwIV1S6wRRyq+V6exRKLVWaKGsuy6H9QFYeBVDV7rK6fO3XwHgQOPxv+cLj2zpXQ== dependencies: "@octokit/openapi-types" "^18.0.0" -"@seald-io/binary-search-tree@^1.0.2": - version "1.0.2" - resolved "https://registry.npmjs.org/@seald-io/binary-search-tree/-/binary-search-tree-1.0.2.tgz" - integrity sha512-+pYGvPFAk7wUR+ONMOlc6A+LUN4kOCFwyPLjyaeS7wVibADPHWYJNYsNtyIAwjF1AXQkuaXElnIc4XjKt55QZA== +"@octokit/types@^9.0.0": + version "9.3.2" + resolved "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz" + integrity sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA== + dependencies: + "@octokit/openapi-types" "^18.0.0" -"@seald-io/nedb@^2.2.0": - version "2.2.0" - resolved "https://registry.npmjs.org/@seald-io/nedb/-/nedb-2.2.0.tgz" - integrity sha512-whkcx3hpcowNhoSEbIsrfe8TXxDwyj8SJJut2EqF7DSX2GGqQlL7Ix/vzwwOo4FJolzDhZD2DaUTVKmTQS3Rog== +"@octokit/types@^9.2.3": + version "9.3.2" + resolved "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz" + integrity sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA== dependencies: - "@seald-io/binary-search-tree" "^1.0.2" - async "0.2.10" + "@octokit/openapi-types" "^18.0.0" + +"@octokit/types@^9.3.2": + version "9.3.2" + resolved "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz" + integrity sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA== + dependencies: + "@octokit/openapi-types" "^18.0.0" + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@seald-io/binary-search-tree@^1.0.3": + version "1.0.3" + resolved "https://registry.npmjs.org/@seald-io/binary-search-tree/-/binary-search-tree-1.0.3.tgz" + integrity sha512-qv3jnwoakeax2razYaMsGI/luWdliBLHTdC6jU55hQt1hcFqzauH/HsBollQ7IR4ySTtYhT+xyHoijpA16C+tA== + +"@seald-io/nedb@^4.0.2": + version "4.0.2" + resolved "https://registry.npmjs.org/@seald-io/nedb/-/nedb-4.0.2.tgz" + integrity sha512-gJ91fT1sgh2cLXYVcTSh7khZ8LdemI8+SojCdpZ5wy+DUQ4fSrEwGqOwbdV49NDs2BBO6GeBpSb8CnhG2IW1rw== + dependencies: + "@seald-io/binary-search-tree" "^1.0.3" localforage "^1.9.0" + util "^0.12.4" + +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== -"@sinonjs/commons@^1.7.0": - version "1.8.3" - resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz" - integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== +"@sinonjs/commons@^3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz" + integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== dependencies: type-detect "4.0.8" -"@sinonjs/fake-timers@^8.0.1": - version "8.1.0" - resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz" - integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== +"@sinonjs/fake-timers@^10.0.2": + 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== dependencies: - "@sinonjs/commons" "^1.7.0" + "@sinonjs/commons" "^3.0.0" -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": - version "7.1.18" - resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz" - integrity sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ== +"@types/babel__core@^7.1.14": + version "7.20.1" + resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz" + integrity sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw== dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" "@types/babel__generator" "*" "@types/babel__template" "*" "@types/babel__traverse" "*" @@ -642,17 +749,33 @@ "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.14.2" - resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz" - integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA== +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.20.1" + resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz" + integrity sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg== + dependencies: + "@babel/types" "^7.20.7" + +"@types/fs-extra@^11.0.1": + version "11.0.1" + resolved "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.1.tgz" + integrity sha512-MxObHvNl4A69ofaTRU8DFqvgzzv8s9yRtaPPm5gud9HDNvpB3GPQFvNuTWAI59B9huVGV5jXYJwbCsmBsOGYWA== + dependencies: + "@types/jsonfile" "*" + "@types/node" "*" + +"@types/glob@^8.1.0": + version "8.1.0" + resolved "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz" + integrity sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w== dependencies: - "@babel/types" "^7.3.0" + "@types/minimatch" "^5.1.2" + "@types/node" "*" -"@types/graceful-fs@^4.1.2": - version "4.1.5" - resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz" - integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== +"@types/graceful-fs@^4.1.3": + version "4.1.6" + resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz" + integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== dependencies: "@types/node" "*" @@ -675,15 +798,49 @@ dependencies: "@types/istanbul-lib-report" "*" +"@types/jest-expect-message@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@types/jest-expect-message/-/jest-expect-message-1.1.0.tgz" + integrity sha512-PbmZ6pTBpJTzj7KdGP8l8qTyf6RA5BVWg0C51XjCb0GuifXVcu3jAR6+U/W47nmE5S3tLPPEo70UcuhSlSS1hg== + dependencies: + jest-expect-message "*" + +"@types/jest@^29.5.4": + version "29.5.4" + resolved "https://registry.npmjs.org/@types/jest/-/jest-29.5.4.tgz" + integrity sha512-PhglGmhWeD46FYOVLt3X7TiWjzwuVGW9wG/4qocPevXMjCmrIc5b6db9WjeGE4QYVpUAWMDv3v0IiBwObY289A== + dependencies: + expect "^29.0.0" + pretty-format "^29.0.0" + +"@types/jsonfile@*": + version "6.1.1" + resolved "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.1.tgz" + integrity sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png== + dependencies: + "@types/node" "*" + +"@types/lodash@^4.14.198": + version "4.14.198" + resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.198.tgz" + integrity sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg== + +"@types/minimatch@^5.1.2": + version "5.1.2" + resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz" + integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== + "@types/node@*": version "17.0.18" resolved "https://registry.npmjs.org/@types/node/-/node-17.0.18.tgz" integrity sha512-eKj4f/BsN/qcculZiRSujogjvp5O/k4lOW5m35NopjZM/QwLOR075a8pJW5hD+Rtdm2DaCVPENS6KtSQnUD6BA== -"@types/prettier@^2.1.5": - version "2.4.4" - resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.4.tgz" - integrity sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA== +"@types/signale@^1.4.4": + version "1.4.4" + resolved "https://registry.npmjs.org/@types/signale/-/signale-1.4.4.tgz" + integrity sha512-VYy4VL64gA4uyUIYVj4tiGFF0VpdnRbJeqNENKGX42toNiTvt83rRzxdr0XK4DR3V01zPM0JQNIsL+IwWWfhsQ== + dependencies: + "@types/node" "*" "@types/stack-utils@^2.0.0": version "2.0.1" @@ -691,52 +848,27 @@ integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== "@types/yargs-parser@*": - version "20.2.1" - resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz" - integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw== + version "21.0.0" + resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz" + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== -"@types/yargs@^16.0.0": - version "16.0.4" - resolved "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz" - integrity sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw== +"@types/yargs@^17.0.8": + version "17.0.24" + resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz" + integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw== dependencies: "@types/yargs-parser" "*" -abab@^2.0.3, abab@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz" - integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== - -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== - dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" - -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - -acorn@^7.1.1: - version "7.4.1" - resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn@^8.2.4: +acorn@^8.4.1: version "8.7.0" resolved "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz" integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== -agent-base@6: - version "6.0.2" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - ansi-escapes@^4.2.1: version "4.3.2" resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" @@ -744,11 +876,16 @@ ansi-escapes@^4.2.1: dependencies: type-fest "^0.21.3" -ansi-regex@^5.0.0, ansi-regex@^5.0.1: +ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" @@ -768,14 +905,24 @@ ansi-styles@^5.0.0: resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + anymatch@^3.0.3: - version "3.1.2" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + version "3.1.3" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + argparse@^1.0.7: version "1.0.10" resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" @@ -800,38 +947,20 @@ async@^3.2.4: resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz" integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== -async@0.2.10: - version "0.2.10" - resolved "https://registry.npmjs.org/async/-/async-0.2.10.tgz" - integrity sha1-trvgsGdLnXGXCMo43owjfLUmw9E= - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -axios-curlirize@^1.3.7: - version "1.3.7" - resolved "https://registry.npmjs.org/axios-curlirize/-/axios-curlirize-1.3.7.tgz" - integrity sha512-csSsuMyZj1dv1fL0zRPnDAHWrmlISMvK+wx9WJI/igRVDT4VMgbf2AVenaHghFLfI1nQijXUevYEguYV6u5hjA== - -axios@^0.21.1: - version "0.21.4" - resolved "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== - dependencies: - follow-redirects "^1.14.0" +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== -babel-jest@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz" - integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== +babel-jest@^29.0.0, babel-jest@^29.6.4: + version "29.6.4" + resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.4.tgz" + integrity sha512-meLj23UlSLddj6PC+YTOFRgDAtjnZom8w/ACsrx0gtPtv5cJZk0A5Unk5bV4wixD7XaPCN1fQvpww8czkZURmw== dependencies: - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/transform" "^29.6.4" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^27.5.1" + babel-preset-jest "^29.6.3" chalk "^4.0.0" graceful-fs "^4.2.9" slash "^3.0.0" @@ -847,14 +976,14 @@ babel-plugin-istanbul@^6.1.1: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz" - integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ== +babel-plugin-jest-hoist@^29.6.3: + 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== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" - "@types/babel__core" "^7.0.0" + "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" babel-preset-current-node-syntax@^1.0.0: @@ -875,12 +1004,12 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz" - integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag== +babel-preset-jest@^29.6.3: + 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== dependencies: - babel-plugin-jest-hoist "^27.5.1" + babel-plugin-jest-hoist "^29.6.3" babel-preset-current-node-syntax "^1.0.0" balanced-match@^1.0.0: @@ -901,18 +1030,20 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^3.0.1: +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - browserslist@^4.17.5: version "4.19.1" resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz" @@ -924,6 +1055,13 @@ browserslist@^4.17.5: node-releases "^2.0.1" picocolors "^1.0.0" +bs-logger@0.x: + version "0.2.6" + resolved "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + bser@2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" @@ -936,6 +1074,14 @@ buffer-from@^1.0.0: resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== +call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" @@ -956,7 +1102,7 @@ caniuse-lite@^1.0.30001286: resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001481.tgz" integrity sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ== -chalk@^2.0.0: +chalk@^2.3.2: version "2.4.2" resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -965,7 +1111,7 @@ chalk@^2.0.0: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^2.3.2: +chalk@^2.4.2: version "2.4.2" resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -988,33 +1134,33 @@ char-regex@^1.0.2: integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== ci-info@^3.2.0: - version "3.3.0" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz" - integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== + version "3.8.0" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz" + integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== cjs-module-lexer@^1.0.0: - version "1.2.2" - resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz" - integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== + version "1.2.3" + resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz" + integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== +cliui@^8.0.1: + 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== dependencies: string-width "^4.2.0" - strip-ansi "^6.0.0" + strip-ansi "^6.0.1" wrap-ansi "^7.0.0" co@^4.6.0: version "4.6.0" resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== collect-v8-coverage@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz" - integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + 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== color-convert@^1.9.0: version "1.9.3" @@ -1038,35 +1184,13 @@ color-name@~1.1.4: color-name@1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -colors@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -command-exists@^1.2.9: - version "1.2.9" - resolved "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz" - integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== commander@^2.18.0: version "2.20.3" resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^2.20.0: - version "2.20.3" - resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - commander@^7.2.0: version "7.2.0" resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" @@ -1087,14 +1211,24 @@ concat-map@0.0.1: resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: +convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.8.0" resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz" integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== dependencies: safe-buffer "~5.1.1" -cross-spawn@^7.0.3: +convert-source-map@^2.0.0: + 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== + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-spawn@^7.0.0, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -1103,73 +1237,22 @@ cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -cssom@^0.4.4: - version "0.4.4" - resolved "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== - dependencies: - cssom "~0.3.6" - -data-urls@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz" - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== - dependencies: - abab "^2.0.3" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - -dateformat@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz" - integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== - -dayjs@^1.10.7: - version "1.10.7" - resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz" - integrity sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig== - -debug@^4.1.0, debug@^4.1.1, debug@4: +debug@^4.1.0, debug@^4.1.1: version "4.3.3" resolved "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz" integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== dependencies: ms "2.1.2" -decimal.js@^10.2.1: - version "10.3.1" - resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz" - integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== - -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" - integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= - -deep-is@~0.1.3: - 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== +dedent@^1.0.0: + version "1.5.1" + resolved "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz" + integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + 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== deprecation@^2.0.0: version "2.3.1" @@ -1181,17 +1264,20 @@ detect-newline@^3.0.0: resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -diff-sequences@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz" - integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== -domexception@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== - dependencies: - webidl-conversions "^5.0.0" +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== electron-to-chromium@^1.4.17: version "1.4.69" @@ -1203,16 +1289,21 @@ email-addresses@^5.0.0: resolved "https://registry.npmjs.org/email-addresses/-/email-addresses-5.0.0.tgz" integrity sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw== -emittery@^0.8.1: - version "0.8.1" - resolved "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz" - integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + error-ex@^1.3.1: version "1.3.2" resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" @@ -1233,40 +1324,18 @@ escape-string-regexp@^1.0.2: escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -escodegen@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz" - integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -esprima@^4.0.0, esprima@^4.0.1: +esprima@^4.0.0: version "4.0.1" resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - execa@^5.0.0: version "5.1.1" resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" @@ -1285,32 +1354,28 @@ execa@^5.0.0: exit@^0.1.2: version "0.1.2" resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" - integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== -expect@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz" - integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== +expect@^29.0.0, expect@^29.6.4: + version "29.6.4" + resolved "https://registry.npmjs.org/expect/-/expect-29.6.4.tgz" + integrity sha512-F2W2UyQ8XYyftHT57dtfg8Ue3X5qLgm2sSug0ivvLRH/VKNRL/pDxg/TH7zVzbQB0tu80clNFy6LU7OS/VSEKA== dependencies: - "@jest/types" "^27.5.1" - jest-get-type "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" + "@jest/expect-utils" "^29.6.4" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.6.4" + jest-message-util "^29.6.3" + jest-util "^29.6.3" -fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@^2.1.0, fast-json-stable-stringify@2.x: 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== -fast-levenshtein@~2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - fb-watchman@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz" - integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + version "2.0.2" + resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== dependencies: bser "2.1.1" @@ -1366,24 +1431,25 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -follow-redirects@^1.14.0: - version "1.14.8" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz" - integrity sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA== +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" + cross-spawn "^7.0.0" + signal-exit "^4.0.1" -fs-extra@^10.0.0: - version "10.0.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz" - integrity sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ== +fs-extra@^11.1.1: + version "11.1.1" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz" + integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" @@ -1401,12 +1467,12 @@ fs-extra@^8.1.0: fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@^2.3.2: - version "2.3.2" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + version "2.3.3" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== function-bind@^1.1.1: version "1.1.1" @@ -1423,16 +1489,21 @@ get-caller-file@^2.0.5: resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.3: + version "1.2.1" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz" + integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-proto "^1.0.1" + has-symbols "^1.0.3" + get-package-type@^0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-stdin@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz" - integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ== - get-stream@^6.0.0: version "6.0.1" resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" @@ -1451,15 +1522,62 @@ gh-pages@^5.0.0: fs-extra "^8.1.0" globby "^6.1.0" -glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: - version "7.1.6" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== +glob@^10.3.4: + version "10.3.4" + resolved "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz" + integrity sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.0.3" + minimatch "^9.0.1" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry "^1.10.1" + +glob@^7.0.3: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + 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" + +glob@^7.1.4: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + 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" + +glob@^7.1.6: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + 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" @@ -1479,6 +1597,13 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.9: version "4.2.9" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz" @@ -1487,13 +1612,30 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.9: has-flag@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + has@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" @@ -1501,47 +1643,16 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -html-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== - dependencies: - whatwg-encoding "^1.0.5" - html-escaper@^2.0.0: version "2.0.2" resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - -https-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz" - integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== - dependencies: - agent-base "6" - debug "4" - human-signals@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - immediate@~3.0.5: version "3.0.6" resolved "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz" @@ -1558,56 +1669,51 @@ import-local@^3.0.2: imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== inflight@^1.0.4: version "1.0.6" resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" -inherits@2: +inherits@^2.0.3, inherits@2: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -iptv-checker@^0.26.0: - version "0.26.0" - resolved "https://registry.npmjs.org/iptv-checker/-/iptv-checker-0.26.0.tgz" - integrity sha512-8q9RWEpW7rICEj2PEz+6KnfBP5GimsCEsVaXG637ylyLx7vD5miX5MZGJDFslC+RIrQBZiBnNIQPmbhfYEHehg== - dependencies: - axios "^0.21.1" - axios-curlirize "^1.3.7" - colors "^1.4.0" - command-exists "^1.2.9" - commander "^2.20.0" - dateformat "^3.0.3" - get-stdin "^7.0.0" - iptv-playlist-parser "^0.12.0" - jest "^27.0.6" - lodash.chunk "^4.2.0" - progress "^2.0.3" - valid-url "^1.0.9" - -iptv-playlist-parser@^0.12.0, iptv-playlist-parser@^0.12.1: - version "0.12.1" - resolved "https://registry.npmjs.org/iptv-playlist-parser/-/iptv-playlist-parser-0.12.1.tgz" - integrity sha512-N0sJFsV8+FBZiR/kl7F5YfFQsUxFXrABP9+xyHPFEQjHJmXSBbvyHLlaW0GjROTd+iXVHA9glEeEwlzJimt5NA== +iptv-playlist-parser@^0.12.3: + version "0.12.3" + resolved "https://registry.npmjs.org/iptv-playlist-parser/-/iptv-playlist-parser-0.12.3.tgz" + integrity sha512-used+ue0HmHj+zYUSjI+19RnZvl59lwhmzS+6VDAyerT4va3DFg+rImHgdYoNiBQtarMTH4bnoFAOQdCq4ooAA== dependencies: is-valid-path "^0.1.1" validator "^13.7.0" +is-arguments@^1.0.4: + version "1.1.1" + resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= -is-core-module@^2.8.1: - version "2.8.1" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz" - integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== +is-callable@^1.1.3: + version "1.2.7" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.13.0: + version "2.13.0" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz" + integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== dependencies: has "^1.0.3" @@ -1626,6 +1732,13 @@ is-generator-fn@^2.0.0: resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== +is-generator-function@^1.0.7: + version "1.0.10" + resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + is-glob@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz" @@ -1650,20 +1763,17 @@ is-plain-object@^5.0.0: resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== -is-potential-custom-element-name@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - is-stream@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +is-typed-array@^1.1.3: + version "1.1.12" + resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== + dependencies: + which-typed-array "^1.1.11" is-valid-path@^0.1.1: version "0.1.1" @@ -1675,17 +1785,17 @@ is-valid-path@^0.1.1: isexe@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz" integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== -istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz" - integrity sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q== +istanbul-lib-instrument@^5.0.4: + version "5.2.1" + resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== dependencies: "@babel/core" "^7.12.3" "@babel/parser" "^7.14.7" @@ -1693,13 +1803,24 @@ istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: istanbul-lib-coverage "^3.2.0" semver "^6.3.0" +istanbul-lib-instrument@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz" + integrity sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + istanbul-lib-report@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + version "3.0.1" + resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== dependencies: istanbul-lib-coverage "^3.0.0" - make-dir "^3.0.0" + make-dir "^4.0.0" supports-color "^7.1.0" istanbul-lib-source-maps@^4.0.0: @@ -1712,422 +1833,385 @@ istanbul-lib-source-maps@^4.0.0: source-map "^0.6.1" istanbul-reports@^3.1.3: - version "3.1.4" - resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz" - integrity sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw== + version "3.1.6" + resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz" + integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jest-changed-files@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz" - integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== +jackspeak@^2.0.3: + version "2.3.3" + resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.3.tgz" + integrity sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg== dependencies: - "@jest/types" "^27.5.1" - execa "^5.0.0" - throat "^6.0.1" + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" -jest-circus@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz" - integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== +jest-changed-files@^29.6.3: + version "29.6.3" + resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.6.3.tgz" + integrity sha512-G5wDnElqLa4/c66ma5PG9eRjE342lIbF6SUnTJi26C3J28Fv2TVY2rOyKB9YGbSA5ogwevgmxc4j4aVjrEK6Yg== dependencies: - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + execa "^5.0.0" + jest-util "^29.6.3" + p-limit "^3.1.0" + +jest-circus@^29.6.4: + version "29.6.4" + resolved "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.4.tgz" + integrity sha512-YXNrRyntVUgDfZbjXWBMPslX1mQ8MrSG0oM/Y06j9EYubODIyHWP8hMUbjbZ19M3M+zamqEur7O80HODwACoJw== + dependencies: + "@jest/environment" "^29.6.4" + "@jest/expect" "^29.6.4" + "@jest/test-result" "^29.6.4" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - dedent "^0.7.0" - expect "^27.5.1" + dedent "^1.0.0" is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" + jest-each "^29.6.3" + jest-matcher-utils "^29.6.4" + jest-message-util "^29.6.3" + jest-runtime "^29.6.4" + jest-snapshot "^29.6.4" + jest-util "^29.6.3" + p-limit "^3.1.0" + pretty-format "^29.6.3" + pure-rand "^6.0.0" slash "^3.0.0" stack-utils "^2.0.3" - throat "^6.0.1" -jest-cli@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz" - integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== +jest-cli@^29.6.4: + version "29.6.4" + resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.4.tgz" + integrity sha512-+uMCQ7oizMmh8ZwRfZzKIEszFY9ksjjEQnTEMTaL7fYiL3Kw4XhqT9bYh+A4DQKUb67hZn2KbtEnDuHvcgK4pQ== dependencies: - "@jest/core" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/core" "^29.6.4" + "@jest/test-result" "^29.6.4" + "@jest/types" "^29.6.3" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" + jest-config "^29.6.4" + jest-util "^29.6.3" + jest-validate "^29.6.3" prompts "^2.0.1" - yargs "^16.2.0" + yargs "^17.3.1" -jest-config@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz" - integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== +jest-config@^29.6.4: + version "29.6.4" + resolved "https://registry.npmjs.org/jest-config/-/jest-config-29.6.4.tgz" + integrity sha512-JWohr3i9m2cVpBumQFv2akMEnFEPVOh+9L2xIBJhJ0zOaci2ZXuKJj0tgMKQCBZAKA09H049IR4HVS/43Qb19A== dependencies: - "@babel/core" "^7.8.0" - "@jest/test-sequencer" "^27.5.1" - "@jest/types" "^27.5.1" - babel-jest "^27.5.1" + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.6.4" + "@jest/types" "^29.6.3" + babel-jest "^29.6.4" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" - glob "^7.1.1" + glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-get-type "^27.5.1" - jest-jasmine2 "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runner "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" + jest-circus "^29.6.4" + jest-environment-node "^29.6.4" + jest-get-type "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.6.4" + jest-runner "^29.6.4" + jest-util "^29.6.3" + jest-validate "^29.6.3" micromatch "^4.0.4" parse-json "^5.2.0" - pretty-format "^27.5.1" + pretty-format "^29.6.3" slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz" - integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== +jest-diff@^29.6.4: + version "29.6.4" + resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.4.tgz" + integrity sha512-9F48UxR9e4XOEZvoUXEHSWY4qC4zERJaOfrbBg9JpbJOO43R1vN76REt/aMGZoY6GD5g84nnJiBIVlscegefpw== dependencies: chalk "^4.0.0" - diff-sequences "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.6.3" -jest-docblock@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz" - integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== +jest-docblock@^29.6.3: + version "29.6.3" + resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.6.3.tgz" + integrity sha512-2+H+GOTQBEm2+qFSQ7Ma+BvyV+waiIFxmZF5LdpBsAEjWX8QYjSCa4FrkIYtbfXUJJJnFCYrOtt6TZ+IAiTjBQ== dependencies: detect-newline "^3.0.0" -jest-each@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz" - integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== +jest-each@^29.6.3: + version "29.6.3" + resolved "https://registry.npmjs.org/jest-each/-/jest-each-29.6.3.tgz" + integrity sha512-KoXfJ42k8cqbkfshW7sSHcdfnv5agDdHCPA87ZBdmHP+zJstTJc0ttQaJ/x7zK6noAL76hOuTIJ6ZkQRS5dcyg== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" chalk "^4.0.0" - jest-get-type "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - -jest-environment-jsdom@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz" - integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" - jsdom "^16.6.0" - -jest-environment-node@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz" - integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" + jest-get-type "^29.6.3" + jest-util "^29.6.3" + pretty-format "^29.6.3" + +jest-environment-node@^29.6.4: + version "29.6.4" + resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.4.tgz" + integrity sha512-i7SbpH2dEIFGNmxGCpSc2w9cA4qVD+wfvg2ZnfQ7XVrKL0NA5uDVBIiGH8SR4F0dKEv/0qI5r+aDomDf04DpEQ== + dependencies: + "@jest/environment" "^29.6.4" + "@jest/fake-timers" "^29.6.4" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" + jest-mock "^29.6.3" + jest-util "^29.6.3" -jest-expect-message@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/jest-expect-message/-/jest-expect-message-1.0.2.tgz" - integrity sha512-WFiXMgwS2lOqQZt1iJMI/hOXpUm32X+ApsuzYcQpW5m16Pv6/Gd9kgC+Q+Q1YVNU04kYcAOv9NXMnjg6kKUy6Q== +jest-expect-message@*, jest-expect-message@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/jest-expect-message/-/jest-expect-message-1.1.3.tgz" + integrity sha512-bTK77T4P+zto+XepAX3low8XVQxDgaEqh3jSTQOG8qvPpD69LsIdyJTa+RmnJh3HNSzJng62/44RPPc7OIlFxg== -jest-get-type@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz" - integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== -jest-haste-map@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz" - integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== +jest-haste-map@^29.6.4: + version "29.6.4" + resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.4.tgz" + integrity sha512-12Ad+VNTDHxKf7k+M65sviyynRoZYuL1/GTuhEVb8RYsNSNln71nANRb/faSyWvx0j+gHcivChXHIoMJrGYjog== dependencies: - "@jest/types" "^27.5.1" - "@types/graceful-fs" "^4.1.2" + "@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 "^27.5.1" - jest-serializer "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" + jest-regex-util "^29.6.3" + jest-util "^29.6.3" + jest-worker "^29.6.4" micromatch "^4.0.4" - walker "^1.0.7" + walker "^1.0.8" optionalDependencies: fsevents "^2.3.2" -jest-jasmine2@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz" - integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== +jest-leak-detector@^29.6.3: + version "29.6.3" + resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.3.tgz" + integrity sha512-0kfbESIHXYdhAdpLsW7xdwmYhLf1BRu4AA118/OxFm0Ho1b2RcTmO4oF6aAMaxpxdxnJ3zve2rgwzNBD4Zbm7Q== dependencies: - "@jest/environment" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^27.5.1" - is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - throat "^6.0.1" - -jest-leak-detector@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz" - integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== - dependencies: - jest-get-type "^27.5.1" - pretty-format "^27.5.1" - -jest-matcher-utils@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz" - integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== + jest-get-type "^29.6.3" + pretty-format "^29.6.3" + +jest-matcher-utils@^29.6.4: + version "29.6.4" + resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.4.tgz" + integrity sha512-KSzwyzGvK4HcfnserYqJHYi7sZVqdREJ9DMPAKVbS98JsIAvumihaNUbjrWw0St7p9IY7A9UskCW5MYlGmBQFQ== dependencies: chalk "^4.0.0" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" + jest-diff "^29.6.4" + jest-get-type "^29.6.3" + pretty-format "^29.6.3" -jest-message-util@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz" - integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== +jest-message-util@^29.6.3: + version "29.6.3" + resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.3.tgz" + integrity sha512-FtzaEEHzjDpQp51HX4UMkPZjy46ati4T5pEMyM6Ik48ztu4T9LQplZ6OsimHx7EuM9dfEh5HJa6D3trEftu3dA== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^27.5.1" + "@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 "^27.5.1" + pretty-format "^29.6.3" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz" - integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== +jest-mock@^29.6.3: + version "29.6.3" + resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.3.tgz" + integrity sha512-Z7Gs/mOyTSR4yPsaZ72a/MtuK6RnC3JYqWONe48oLaoEcYwEDxqvbXz85G4SJrm2Z5Ar9zp6MiHF4AlFlRM4Pg== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" "@types/node" "*" + jest-util "^29.6.3" jest-pnp-resolver@^1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz" - integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== - -jest-regex-util@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz" - integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== - -jest-resolve-dependencies@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz" - integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== - dependencies: - "@jest/types" "^27.5.1" - jest-regex-util "^27.5.1" - jest-snapshot "^27.5.1" - -jest-resolve@*, jest-resolve@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz" - integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== - dependencies: - "@jest/types" "^27.5.1" + version "1.2.3" + resolved "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== + +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== + +jest-resolve-dependencies@^29.6.4: + version "29.6.4" + resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.4.tgz" + integrity sha512-7+6eAmr1ZBF3vOAJVsfLj1QdqeXG+WYhidfLHBRZqGN24MFRIiKG20ItpLw2qRAsW/D2ZUUmCNf6irUr/v6KHA== + dependencies: + jest-regex-util "^29.6.3" + jest-snapshot "^29.6.4" + +jest-resolve@*, jest-resolve@^29.6.4: + version "29.6.4" + resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.4.tgz" + integrity sha512-fPRq+0vcxsuGlG0O3gyoqGTAxasagOxEuyoxHeyxaZbc9QNek0AmJWSkhjlMG+mTsj+8knc/mWb3fXlRNVih7Q== + dependencies: chalk "^4.0.0" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" + jest-haste-map "^29.6.4" jest-pnp-resolver "^1.2.2" - jest-util "^27.5.1" - jest-validate "^27.5.1" + jest-util "^29.6.3" + jest-validate "^29.6.3" resolve "^1.20.0" - resolve.exports "^1.1.0" + resolve.exports "^2.0.0" slash "^3.0.0" -jest-runner@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz" - integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== +jest-runner@^29.6.4: + version "29.6.4" + resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.4.tgz" + integrity sha512-SDaLrMmtVlQYDuG0iSPYLycG8P9jLI+fRm8AF/xPKhYDB2g6xDWjXBrR5M8gEWsK6KVFlebpZ4QsrxdyIX1Jaw== dependencies: - "@jest/console" "^27.5.1" - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/console" "^29.6.4" + "@jest/environment" "^29.6.4" + "@jest/test-result" "^29.6.4" + "@jest/transform" "^29.6.4" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" - emittery "^0.8.1" + emittery "^0.13.1" graceful-fs "^4.2.9" - jest-docblock "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-haste-map "^27.5.1" - jest-leak-detector "^27.5.1" - jest-message-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runtime "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" - source-map-support "^0.5.6" - throat "^6.0.1" - -jest-runtime@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz" - integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/globals" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" + jest-docblock "^29.6.3" + jest-environment-node "^29.6.4" + jest-haste-map "^29.6.4" + jest-leak-detector "^29.6.3" + jest-message-util "^29.6.3" + jest-resolve "^29.6.4" + jest-runtime "^29.6.4" + jest-util "^29.6.3" + jest-watcher "^29.6.4" + jest-worker "^29.6.4" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.6.4: + version "29.6.4" + resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.4.tgz" + integrity sha512-s/QxMBLvmwLdchKEjcLfwzP7h+jsHvNEtxGP5P+Fl1FMaJX2jMiIqe4rJw4tFprzCwuSvVUo9bn0uj4gNRXsbA== + dependencies: + "@jest/environment" "^29.6.4" + "@jest/fake-timers" "^29.6.4" + "@jest/globals" "^29.6.4" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.6.4" + "@jest/transform" "^29.6.4" + "@jest/types" "^29.6.3" + "@types/node" "*" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" - execa "^5.0.0" glob "^7.1.3" graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" + jest-haste-map "^29.6.4" + jest-message-util "^29.6.3" + jest-mock "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.6.4" + jest-snapshot "^29.6.4" + jest-util "^29.6.3" slash "^3.0.0" strip-bom "^4.0.0" -jest-serializer@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz" - integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== - dependencies: - "@types/node" "*" - graceful-fs "^4.2.9" - -jest-snapshot@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz" - integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== +jest-snapshot@^29.6.4: + version "29.6.4" + resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.4.tgz" + integrity sha512-VC1N8ED7+4uboUKGIDsbvNAZb6LakgIPgAF4RSpF13dN6YaMokfRqO+BaqK4zIh6X3JffgwbzuGqDEjHm/MrvA== dependencies: - "@babel/core" "^7.7.2" + "@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/traverse" "^7.7.2" - "@babel/types" "^7.0.0" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.1.5" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.6.4" + "@jest/transform" "^29.6.4" + "@jest/types" "^29.6.3" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^27.5.1" + expect "^29.6.4" graceful-fs "^4.2.9" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - jest-haste-map "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-util "^27.5.1" + jest-diff "^29.6.4" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.6.4" + jest-message-util "^29.6.3" + jest-util "^29.6.3" natural-compare "^1.4.0" - pretty-format "^27.5.1" - semver "^7.3.2" + pretty-format "^29.6.3" + semver "^7.5.3" -jest-util@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz" - integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== +jest-util@^29.0.0, jest-util@^29.6.3: + version "29.6.3" + resolved "https://registry.npmjs.org/jest-util/-/jest-util-29.6.3.tgz" + integrity sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA== dependencies: - "@jest/types" "^27.5.1" + "@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" -jest-validate@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz" - integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== +jest-validate@^29.6.3: + version "29.6.3" + resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.3.tgz" + integrity sha512-e7KWZcAIX+2W1o3cHfnqpGajdCs1jSM3DkXjGeLSNmCazv1EeI1ggTeK5wdZhF+7N+g44JI2Od3veojoaumlfg== dependencies: - "@jest/types" "^27.5.1" + "@jest/types" "^29.6.3" camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^27.5.1" + jest-get-type "^29.6.3" leven "^3.1.0" - pretty-format "^27.5.1" + pretty-format "^29.6.3" -jest-watcher@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz" - integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== +jest-watcher@^29.6.4: + version "29.6.4" + resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.4.tgz" + integrity sha512-oqUWvx6+On04ShsT00Ir9T4/FvBeEh2M9PTubgITPxDa739p4hoQweWPRGyYeaojgT0xTpZKF0Y/rSY1UgMxvQ== dependencies: - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" + "@jest/test-result" "^29.6.4" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^27.5.1" + emittery "^0.13.1" + jest-util "^29.6.3" string-length "^4.0.1" -jest-worker@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== +jest-worker@^29.6.4: + version "29.6.4" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.4.tgz" + integrity sha512-6dpvFV4WjcWbDVGgHTWo/aupl8/LbBx2NSKfiwqf79xC/yeJjKHT1+StcKy/2KTmW16hE68ccKVOtXf+WZGz7Q== dependencies: "@types/node" "*" + jest-util "^29.6.3" merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^27.0.6, jest@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz" - integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== +jest@^29.0.0: + version "29.6.4" + resolved "https://registry.npmjs.org/jest/-/jest-29.6.4.tgz" + integrity sha512-tEFhVQFF/bzoYV1YuGyzLPZ6vlPrdfvDmmAxudA1dLEuiztqg2Rkx20vkKY32xiDROcD2KXlgZ7Cu8RPeEHRKw== dependencies: - "@jest/core" "^27.5.1" + "@jest/core" "^29.6.4" + "@jest/types" "^29.6.3" import-local "^3.0.2" - jest-cli "^27.5.1" + jest-cli "^29.6.4" js-tokens@^4.0.0: version "4.0.0" @@ -2142,39 +2226,6 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -jsdom@^16.6.0: - version "16.7.0" - resolved "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz" - integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== - dependencies: - abab "^2.0.5" - acorn "^8.2.4" - acorn-globals "^6.0.0" - cssom "^0.4.4" - cssstyle "^2.3.0" - data-urls "^2.0.0" - decimal.js "^10.2.1" - domexception "^2.0.1" - escodegen "^2.0.0" - form-data "^3.0.0" - html-encoding-sniffer "^2.0.1" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "6.0.1" - saxes "^5.0.1" - symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.5.0" - ws "^7.4.6" - xml-name-validator "^3.0.0" - jsesc@^2.5.1: version "2.5.2" resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" @@ -2190,7 +2241,7 @@ json-parse-even-better-errors@^2.3.0: 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== -json5@^2.1.2: +json5@^2.1.2, json5@^2.2.3: version "2.2.3" resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -2221,14 +2272,6 @@ leven@^3.1.0: resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - lie@3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz" @@ -2273,12 +2316,12 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" -lodash.chunk@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz" - integrity sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw= +lodash.memoize@4.x: + version "4.1.2" + resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== -lodash@^4.17.21, lodash@^4.7.0: +lodash@^4.17.21: version "4.17.21" resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -2290,6 +2333,11 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +"lru-cache@^9.1.1 || ^10.0.0": + version "10.0.1" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz" + integrity sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g== + m3u-linter@^0.3.0: version "0.3.0" resolved "https://registry.npmjs.org/m3u-linter/-/m3u-linter-0.3.0.tgz" @@ -2299,13 +2347,25 @@ m3u-linter@^0.3.0: commander "^7.2.0" glob "^7.1.6" -make-dir@^3.0.0, make-dir@^3.0.2: +make-dir@^3.0.2: version "3.1.0" resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: semver "^6.0.0" +make-dir@^4.0.0: + 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== + dependencies: + semver "^7.5.3" + +make-error@^1.1.1, make-error@1.x: + version "1.3.6" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + makeerror@1.0.12: version "1.0.12" resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz" @@ -2326,37 +2386,37 @@ merge-stream@^2.0.0: integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== micromatch@^4.0.4: - version "4.0.4" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz" - integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== - dependencies: - braces "^3.0.1" - picomatch "^2.2.3" - -mime-db@1.51.0: - version "1.51.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz" - integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== - -mime-types@^2.1.12: - version "2.1.34" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz" - integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== + version "4.0.5" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: - mime-db "1.51.0" + braces "^3.0.2" + picomatch "^2.3.1" mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -minimatch@^3.0.4: +minimatch@^3.0.4, minimatch@^3.1.1: version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" +minimatch@^9.0.1: + version "9.0.3" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": + version "7.0.3" + resolved "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz" + integrity sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg== + ms@2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" @@ -2365,19 +2425,12 @@ ms@2.1.2: natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -natural-orderby@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/natural-orderby/-/natural-orderby-2.0.3.tgz" - integrity sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q== + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -nedb-promises@^5.0.2: - version "5.0.2" - resolved "https://registry.npmjs.org/nedb-promises/-/nedb-promises-5.0.2.tgz" - integrity sha512-087g8JdsStXRWDxC9qqE4qMLqZGJrUnYF54pvOCDDfcLoptJUCqGb7j2WvWlaleeqft9rUjiJ9egvMJlUnJTmA== - dependencies: - "@seald-io/nedb" "^2.2.0" +natural-orderby@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/natural-orderby/-/natural-orderby-3.0.2.tgz" + integrity sha512-x7ZdOwBxZCEm9MM7+eQCjkrNLrW3rkBKNHVr78zbtqnMGVNlnDi6C/eUEYgxHNrcbu0ymvjzcwIL/6H1iHri9g== node-fetch@^2.6.7: version "2.6.11" @@ -2389,7 +2442,7 @@ node-fetch@^2.6.7: node-int64@^0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" - integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== node-releases@^2.0.1: version "2.0.2" @@ -2401,10 +2454,10 @@ normalize-path@^3.0.0: resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-url@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== +normalize-url@^7.2.0: + version "7.2.0" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-7.2.0.tgz" + integrity sha512-uhXOdZry0L6M2UIo9BTt7FdpBDiAGN/7oItedQwPKh8jh31ZlvC8U9Xl/EJ3aijDHaywXTW3QbZ6LuCocur1YA== npm-run-path@^4.0.1: version "4.0.1" @@ -2413,11 +2466,6 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -nwsapi@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz" - integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== - object-assign@^4.0.1: version "4.1.1" resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" @@ -2437,18 +2485,6 @@ onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -optionator@^0.8.1: - version "0.8.3" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - p-limit@^1.1.0: version "1.3.0" resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" @@ -2463,6 +2499,13 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" +p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz" @@ -2505,11 +2548,6 @@ parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse5@6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - path-exists@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" @@ -2523,7 +2561,7 @@ path-exists@^4.0.0: path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" @@ -2535,12 +2573,20 @@ path-parse@^1.0.7: resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-scurry@^1.10.1: + version "1.10.1" + resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz" + integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== + dependencies: + lru-cache "^9.1.1 || ^10.0.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + picocolors@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.0.4, picomatch@^2.2.3: +picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -2568,9 +2614,9 @@ pinkie@^2.0.0: integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== pirates@^4.0.4: - version "4.0.5" - resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz" - integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + version "4.0.6" + resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== pkg-conf@^2.1.0: version "2.1.0" @@ -2587,24 +2633,14 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -pretty-format@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz" - integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== +pretty-format@^29.0.0, pretty-format@^29.6.3: + version "29.6.3" + resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz" + integrity sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw== dependencies: - ansi-regex "^5.0.1" + "@jest/schemas" "^29.6.3" ansi-styles "^5.0.0" - react-is "^17.0.1" - -progress@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + react-is "^18.0.0" prompts@^2.0.1: version "2.4.2" @@ -2614,41 +2650,26 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" -psl@^1.1.33: - version "1.8.0" - resolved "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== - -punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +pure-rand@^6.0.0: + version "6.0.3" + resolved "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.3.tgz" + integrity sha512-KddyFewCsO0j3+np81IQ+SweXLDnDQTs5s67BOnrYmYe/yNmUhttQyGsYzy8yUnoljGAQ9sl38YB4vH8ur7Y+w== q@^1.2.0: version "1.5.1" resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - -react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== require-directory@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" @@ -2661,50 +2682,38 @@ resolve-from@^5.0.0: resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve.exports@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz" - integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== +resolve.exports@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz" + integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== resolve@^1.20.0: - version "1.22.0" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz" - integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== + version "1.22.4" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz" + integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== dependencies: - is-core-module "^2.8.1" + is-core-module "^2.13.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -rimraf@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -saxes@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== - dependencies: - xmlchars "^2.2.0" - semver@^6.0.0, semver@^6.3.0: version "6.3.1" resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.2: +semver@^7.5.3: + version "7.5.4" + resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + +semver@^7.5.4: version "7.5.4" resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -2723,11 +2732,16 @@ shebang-regex@^3.0.0: resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -signal-exit@^3.0.2, signal-exit@^3.0.3: +signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + signale@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz" @@ -2747,10 +2761,10 @@ slash@^3.0.0: resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -source-map-support@^0.5.6: - version "0.5.21" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -2760,25 +2774,20 @@ source-map@^0.5.0: resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3: - version "0.7.3" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== stack-utils@^2.0.3: - version "2.0.5" - resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz" - integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== + version "2.0.6" + resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== dependencies: escape-string-regexp "^2.0.0" @@ -2790,21 +2799,53 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -string-width@^4.1.0, string-width@^4.2.0: - version "4.2.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" + strip-ansi "^6.0.1" -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: - ansi-regex "^5.0.0" + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" strip-bom@^3.0.0: version "3.0.0" @@ -2840,7 +2881,7 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.0.0, supports-color@^7.1.0: +supports-color@^7.1.0: version "7.2.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== @@ -2854,32 +2895,11 @@ supports-color@^8.0.0: dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz" - integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - supports-preserve-symlinks-flag@^1.0.0: 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== -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" @@ -2889,11 +2909,6 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" -throat@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz" - integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w== - tmpl@1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" @@ -2911,34 +2926,17 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -tough-cookie@^4.0.0: - version "4.1.3" - resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" - -tr46@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz" - integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== - dependencies: - punycode "^2.1.1" - tr46@~0.0.3: version "0.0.3" resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -transliteration@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/transliteration/-/transliteration-2.2.0.tgz" - integrity sha512-o29GDWtecNoK4TNfnJQesGluFPiza+U8NoiKrErU8eTNlVgma6w1LV/tTiGo+waFLkhtL9WxrW0lXhZKmm7msQ== +transliteration@^2.3.5: + version "2.3.5" + resolved "https://registry.npmjs.org/transliteration/-/transliteration-2.3.5.tgz" + integrity sha512-HAGI4Lq4Q9dZ3Utu2phaWgtm3vB6PkLUFqWAScg/UW+1eZ/Tg6Exo4oC0/3VUol/w4BlefLhUUSVBr/9/ZGQOw== dependencies: - yargs "^16.1.0" + yargs "^17.5.1" trim-repeated@^1.0.0: version "1.0.0" @@ -2947,12 +2945,38 @@ trim-repeated@^1.0.0: dependencies: escape-string-regexp "^1.0.2" -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" +ts-jest@^29.1.1: + version "29.1.1" + resolved "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz" + integrity sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA== + dependencies: + bs-logger "0.x" + fast-json-stable-stringify "2.x" + jest-util "^29.0.0" + json5 "^2.2.3" + lodash.memoize "4.x" + make-error "1.x" + semver "^7.5.3" + yargs-parser "^21.0.1" + +ts-node@>=9.0.0: + version "10.9.1" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + 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" type-detect@4.0.8: version "4.0.8" @@ -2964,12 +2988,10 @@ type-fest@^0.21.3: resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" +typescript@^5.2.2, typescript@>=2.7, "typescript@>=4.3 <6": + version "5.2.2" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz" + integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== universal-user-agent@^6.0.0: version "6.0.0" @@ -2981,58 +3003,42 @@ universalify@^0.1.0: resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== -universalify@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== - universalify@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -url-parse@^1.5.3: - version "1.5.10" - resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== +util@^0.12.4: + version "0.12.5" + resolved "https://registry.npmjs.org/util/-/util-0.12.5.tgz" + integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + which-typed-array "^1.1.2" -v8-to-istanbul@^8.1.0: - version "8.1.1" - resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz" - integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== +v8-compile-cache-lib@^3.0.1: + 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== + +v8-to-istanbul@^9.0.1: + version "9.1.0" + resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz" + integrity sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA== dependencies: + "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" - source-map "^0.7.3" - -valid-url@^1.0.9: - version "1.0.9" - resolved "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz" - integrity sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA== validator@^13.7.0: version "13.7.0" resolved "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz" integrity sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw== -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - -w3c-xmlserializer@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== - dependencies: - xml-name-validator "^3.0.0" - -walker@^1.0.7: +walker@^1.0.8: version "1.0.8" resolved "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== @@ -3044,28 +3050,6 @@ webidl-conversions@^3.0.0: resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz" - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== - -whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" @@ -3074,14 +3058,16 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -whatwg-url@^8.0.0, whatwg-url@^8.5.0: - version "8.7.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz" - integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== +which-typed-array@^1.1.11, which-typed-array@^1.1.2: + version "1.1.11" + resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz" + integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== dependencies: - lodash "^4.7.0" - tr46 "^2.1.0" - webidl-conversions "^6.1.0" + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" which@^2.0.1: version "2.0.2" @@ -3090,10 +3076,14 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -word-wrap@~1.2.3: - version "1.2.5" - resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz" - integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" wrap-ansi@^7.0.0: version "7.0.0" @@ -3104,35 +3094,27 @@ wrap-ansi@^7.0.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + wrappy@1: version "1.0.2" resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== +write-file-atomic@^4.0.2: + 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== dependencies: imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -ws@^7.4.6: - version "7.5.7" - resolved "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz" - integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A== - -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + signal-exit "^3.0.7" y18n@^5.0.5: version "5.0.5" @@ -3144,20 +3126,48 @@ yallist@^4.0.0: resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yargs-parser@^20.2.2: - version "20.2.6" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.6.tgz" - integrity sha512-AP1+fQIWSM/sMiET8fyayjx/J+JmTPt2Mr0FkrgqB4todtfa53sOsrSAcIrJRD5XS20bKUwaDIuMkWKCEiQLKA== +yargs-parser@^21.0.1: + version "21.1.1" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^16.1.0, yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^17.3.1: + version "17.7.2" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: - cliui "^7.0.2" + cliui "^8.0.1" escalade "^3.1.1" get-caller-file "^2.0.5" require-directory "^2.1.1" - string-width "^4.2.0" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yargs@^17.5.1: + version "17.7.2" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + 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 "^20.2.2" + yargs-parser "^21.1.1" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==