diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..5b4ba14 --- /dev/null +++ b/.env.example @@ -0,0 +1,6 @@ +# set google login +GCP_PROJECT_ID="my-project" +GOOGLE_APPLICATION_CREDENTIALS=./keys/gcp.json + +ARD_DELIVER_API="https://deliver-test.ard.de/organization-service/" +ARD_AUTH="user:pass" diff --git a/.eslintrc.json b/.eslintrc.json index 4e17480..2c5b253 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,18 +1,16 @@ { - "env": { - "node": true, - "browser": true, - "commonjs": true, - "es6": true - }, - "extends": "eslint:recommended", - "globals": { - "Atomics": "readonly", - "SharedArrayBuffer": "readonly" - }, "parserOptions": { - "ecmaVersion": 2018 + "ecmaVersion": 2020 }, + "root": true, + "plugins": ["@swrlab/eslint-plugin-swr"], + "extends": ["plugin:@swrlab/eslint-plugin-swr/recommended"], "rules": { + "radix": 0, + "no-unused-vars": ["error", { "argsIgnorePattern": "next" }], + "no-param-reassign": [2, { "props": false }], + "no-restricted-syntax": 0, + "no-underscore-dangle": 0, + "no-return-assign": ["error", "except-parens"] } } diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index 708e86b..43b0cb1 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -9,7 +9,7 @@ jobs: steps: - name: Checkout Code - uses: actions/checkout@v2.3.4 + uses: actions/checkout@v2.4.0 - name: Lint Code Base uses: docker://github/super-linter:v2.2.0 diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml deleted file mode 100644 index e99127d..0000000 --- a/.github/workflows/publish.yml +++ /dev/null @@ -1,42 +0,0 @@ -name: Publish packages - -on: - release: - types: [created] - -jobs: - github: - runs-on: ubuntu-latest - steps: - - name: 👀 Checkout repo - uses: actions/checkout@v2.3.4 - - name: 🛠 Setup Node - uses: actions/setup-node@v2.4.0 - with: - node-version: '12.x' - registry-url: 'https://npm.pkg.github.com' - scope: '@swrlab' - - name: 📦 Install Dependencies - run: yarn - - name: 🚀 npm publish - run: yarn publish - env: - NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - npm: - runs-on: ubuntu-latest - steps: - - name: 👀 Checkout repo - uses: actions/checkout@v2.3.4 - - name: 🛠 Setup Node - uses: actions/setup-node@v2.4.0 - with: - node-version: '12.x' - registry-url: 'https://registry.npmjs.org' - scope: '@swrlab' - - name: 📦 Install Dependencies - run: yarn - - name: 🚀 Github publish - run: yarn publish - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.gitignore b/.gitignore index 7a0afe0..281d87e 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,8 @@ logs npm-debug.log* yarn-debug.log* yarn-error.log* +.DS_Store +.env # config config.js @@ -60,3 +62,6 @@ typings/ # next.js build output .next + +tmp/* +!tmp/.gitkeep \ No newline at end of file diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 46ad3ec..0000000 --- a/.prettierignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules/ -package-lock.json -package.json -yarn.lock \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b776ba..d3b1bf4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,15 +1,22 @@ -# Storage Wrapper for NodeJS +# SWR Audio Lab / Node Utils Changelog -by [**SWR audio lab**](https://lab.swr.de/) +by [**SWR Audio Lab**](https://lab.swr.de/) ## Changelog +- 2022-01-26 - v1.0.0-beta + - chore!: folder migration + - refactor: swap node-fetch for undici + - feat: add ard publisher script + - feat: add ard category parser + - feat: add string helpers + - 2021-08-11 - v0.2.3 - updated dependencies - updated github actions - add optional 'resumable' flag -- 2021-06-22 - v0.2.2 +- 2021-06-21 - v0.2.2 - updated dependencies - updated github actions - changed dependabot interval diff --git a/README.md b/README.md index 8944574..42c4271 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,96 @@ -# Storage Wrapper for NodeJS +# SWR Audio Lab / Node Utils -This module allows easy unified access to the most common storage operations in the local file storage, AWS S3 and Google Cloud Storage. +This repository contains several frequently used packages and scripts for easier access and maintenance. *Please note: This project is still under development!* -## Installation +- [SWR Audio Lab / Node Utils](#swr-audio-lab--node-utils) + - [Install](#install) + - [Packages](#packages) + - [Scripts](#scripts) + - [ARD Category Remapper](#ard-category-remapper) + - [ARD Core ID generator](#ard-core-id-generator) + - [ARD Core Publisher Remapper](#ard-core-publisher-remapper) + - [Publish to NPM](#publish-to-npm) + - [Changelog](#changelog) + - [License](#license) -Install dependencies with `yarn`. +## Install + +Packages are meant to be imported into other projects: + +```js +const undici = require('@swrlab/utils/packages/undici') +``` + +Scripts are meant to be run locally, therefore clone the repository and first install dependencies. We prefer `yarn` for this: + +```sh +yarn install +``` + +Then run the desired script. + +## Packages + +- [ARD](./packages/ard) - Common internal ARD tools like ID creation +- [Storage Wrapper](./packages/storage-wrapper) - A utility to wrap file access to local, Google Cloud Storage and AWS S3 file storage +- [Strings](./packages/strings) - Common string, array, object encoding and getter helpers +- [Undici](./packages/undici) - Provides the latest install of [`undici-wrapper`](https://github.com/frytg/undici-wrapper), a wrapper around the [`undici`](https://undici.nodejs.org/) HTTP library + +## Scripts + +### ARD Category Remapper + +Use the publicly available ARD categories and reformat them into our structure: + +```sh +yarn ard:categories +``` + +The output is written to a file: [`data/ard/categories.json`](./data/ard/categories.json) (also kept in state in this repository). + +### ARD Core ID generator + +A CLI to encode strings into the ARD Core ID standard: + +```sh +yarn ard:coreId "my-string-to-encode" +``` + +This will print: + +```txt +INPUT: +my-string-to-encode + +OUTPUT (CRC64-ECMA182): +6a80b80f748c9b50 +``` + +### ARD Core Publisher Remapper + +Download all publishers and remap them into our format: + +```sh +yarn ard:publishers +``` + +The output is written to a file: `tmp/ard-publishers.json` (the state is not in this repository, but likely still in [`ard-eventhub/.../coreApi.json`](https://github.com/swrlab/ard-eventhub/blob/main/src/data/coreApi.json)). + +## Publish to NPM + +Sign in to NPM and provide username, password, and email-address: + +```sh +npm login +``` + +Publish updates of this package with: + +```sh +npm publish +``` ## Changelog diff --git a/data/.gitkeep b/data/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/data/ard/.gitkeep b/data/ard/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/data/ard/categories.json b/data/ard/categories.json new file mode 100644 index 0000000..554a29c --- /dev/null +++ b/data/ard/categories.json @@ -0,0 +1,6649 @@ +{ + "tree": [ + { + "id": "urn:ard:category-genre:877523a636bebe4a", + "externalId": "vokabel-251973", + "title": "Genre", + "isAudio": true, + "isVideo": true, + "children": [ + { + "id": "urn:ard:category-genre:dbb7bf3926b2277a", + "externalId": "vokabel-242033", + "title": "Dokumentation/Reportage", + "isAudio": true, + "isVideo": true, + "children": [ + { + "id": "urn:ard:category-subgenre:39ac8d318f50317b", + "externalId": "vokabel-272072", + "title": "Docutainmentserie", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:98f913ef413cd576", + "externalId": "vokabel-272249", + "title": "Erklärfilm", + "isAudio": false, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:1dc4559b3ab4ff50", + "externalId": "vokabel-250945", + "title": "Essay", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:e06dc83c6b9de023", + "externalId": "vokabel-280992", + "title": "Filminterview", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:e816bdfbdecb1a39", + "externalId": "vokabel-271929", + "title": "Geschichtliche und zeitgeschichtliche Doku", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:9785baf1382a2a1d", + "externalId": "vokabel-271930", + "title": "Geschichtliche und zeitgeschichtliche Dokuserie", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:cd1962bccdd383ba", + "externalId": "vokabel-271949", + "title": "Gesellschafts-, Sozial- und Kulturdoku", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:759b478ad10ce82b", + "externalId": "vokabel-271953", + "title": "Inside-Access- und gesellschaftliche Dokuserie", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:fcca0b4e0e45fc3f", + "externalId": "vokabel-272149", + "title": "Interview-Serie", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:ae70d08b25c53b1f", + "externalId": "vokabel-271970", + "title": "Kulinarische Doku", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:ec8031608c2f0d8c", + "externalId": "vokabel-271971", + "title": "Kulinarische Dokuserie", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:a29d29d7c277d6b0", + "externalId": "vokabel-280993", + "title": "Lyrik-Show", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:8706dc32ebe2b0bc", + "externalId": "vokabel-271989", + "title": "Mockumentary", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:658c0beb38498d05", + "externalId": "vokabel-280990", + "title": "Musikdoku", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:0059e74b92bf2079", + "externalId": "vokabel-272032", + "title": "Natur - und Tierdoku", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:ba653ad3a4e9b60b", + "externalId": "vokabel-271991", + "title": "Natur- und Tierdokuserie", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:277cea0091a3bb96", + "externalId": "vokabel-280991", + "title": "Radiofeature", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:a10c79955cd3c474", + "externalId": "vokabel-272209", + "title": "Reisedoku", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:83590c44e8a4cc1b", + "externalId": "vokabel-272150", + "title": "Reportage", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:bdf6cca852244cf5", + "externalId": "vokabel-272229", + "title": "Sportdoku", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:e030be7300b274be", + "externalId": "vokabel-272169", + "title": "True-Crime-Doku", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:9fa3b979e653449a", + "externalId": "vokabel-272170", + "title": "True-Crime-Serie", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:df24fcd13492e4f8", + "externalId": "vokabel-272049", + "title": "Wissenschafts- und Technikdoku", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:c3de49ec3a656c79", + "externalId": "vokabel-272069", + "title": "Wissenschafts- und Technikdokuserie", + "isAudio": true, + "isVideo": true, + "children": null + } + ] + }, + { + "id": "urn:ard:category-genre:9284d97c28f0cba5", + "externalId": "vokabel-242037", + "title": "Film", + "isAudio": false, + "isVideo": true, + "children": [ + { + "id": "urn:ard:category-subgenre:63359a0f3a6d4ceb", + "externalId": "vokabel-242029", + "title": "Action- und Abenteuerfilm", + "isAudio": false, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:696a48d7c22196e6", + "externalId": "vokabel-272409", + "title": "Animationsfilm", + "isAudio": false, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:17651aab7b24a683", + "externalId": "vokabel-242035", + "title": "Beziehungsdrama", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:db7b2ca737d4985f", + "externalId": "vokabel-271890", + "title": "Biopic", + "isAudio": false, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:1c6a0e9bcdeac3ea", + "externalId": "vokabel-271893", + "title": "Coming-of-Age-Film", + "isAudio": false, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:f4ec08c6d03c92b8", + "externalId": "vokabel-271909", + "title": "Europäischer Filmklassiker", + "isAudio": false, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:b28a65b62b32b39e", + "externalId": "vokabel-271950", + "title": "Heimatfilm", + "isAudio": false, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:f07a845d82d8850d", + "externalId": "vokabel-271951", + "title": "High-Concept-Komödie", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:5409ae368d2a9051", + "externalId": "vokabel-272411", + "title": "Horrorfilm", + "isAudio": false, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:376ba66178e6deb8", + "externalId": "vokabel-271952", + "title": "Indie-Komödie", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:51bd4a15662461f0", + "externalId": "vokabel-242043", + "title": "Krimi", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:df9f0e6c9258d69a", + "externalId": "vokabel-242044", + "title": "Kultfilm", + "isAudio": false, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:9d6fef873bb2e009", + "externalId": "vokabel-242045", + "title": "Kurzfilm/Videokunst", + "isAudio": false, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:8706dc32ebe2b0bc", + "externalId": "vokabel-271989", + "title": "Mockumentary", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:04caa4a3809fe3fb", + "externalId": "vokabel-242048", + "title": "Märchen", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:7d7418ef5ed7edbe", + "externalId": "vokabel-271992", + "title": "Politthriller", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:3f84f904f73ddb2d", + "externalId": "vokabel-271993", + "title": "Programmkino-Film", + "isAudio": false, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:b1a6bd7d03416c47", + "externalId": "vokabel-271994", + "title": "Psychothriller", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:39a94242cf94e54c", + "externalId": "vokabel-242050", + "title": "Roadmovie", + "isAudio": false, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:e6d196ab297df5fa", + "externalId": "vokabel-272009", + "title": "Romantische Komödie", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:0b7a9e23e8efa3b5", + "externalId": "vokabel-272392", + "title": "Sci-Fi- & Fantasy-Film", + "isAudio": false, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:f1085afe5ddafeb7", + "externalId": "vokabel-272389", + "title": "Sportfilm", + "isAudio": false, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:42a906a03b5516ea", + "externalId": "vokabel-272033", + "title": "TV-Komödie", + "isAudio": false, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:fa2b2396278a7d7b", + "externalId": "vokabel-272029", + "title": "Tatort", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:8e9b5df4bb3bce93", + "externalId": "vokabel-272390", + "title": "Westernfilm", + "isAudio": false, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:ad75aa6b81ecd654", + "externalId": "vokabel-272290", + "title": "Zeichentrickfilm", + "isAudio": false, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:bc4d4ee6dc845c5d", + "externalId": "vokabel-272070", + "title": "Zeitgeschichtliches und historisches Drama", + "isAudio": true, + "isVideo": true, + "children": null + } + ] + }, + { + "id": "urn:ard:category-genre:93e611e2cec8483a", + "externalId": "vokabel-250942", + "title": "Hörspiel", + "isAudio": true, + "isVideo": false, + "children": [ + { + "id": "urn:ard:category-subgenre:a95eae7965df0cfc", + "externalId": "vokabel-280996", + "title": "Action- und Abenteuer-Hörspiel", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:b51a268a8d266228", + "externalId": "vokabel-280999", + "title": "Audio Roadmovie", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:ee44b69244ef8ef6", + "externalId": "vokabel-281006", + "title": "Audio-Soap", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:17651aab7b24a683", + "externalId": "vokabel-242035", + "title": "Beziehungsdrama", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:b0f0df8a05fcd6b1", + "externalId": "vokabel-281008", + "title": "Bioaud", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:2296130019790f0f", + "externalId": "vokabel-281000", + "title": "Coming-of-Age-Hörspiel", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:f2003e61ac16e022", + "externalId": "vokabel-281009", + "title": "Doku-Hörspiel", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:ebae4f92cc353a6f", + "externalId": "vokabel-280997", + "title": "Heimat-Hörspiel", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:f07a845d82d8850d", + "externalId": "vokabel-271951", + "title": "High-Concept-Komödie", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:e587313ce34754ba", + "externalId": "vokabel-281003", + "title": "Horror-Hörspiel", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:376ba66178e6deb8", + "externalId": "vokabel-271952", + "title": "Indie-Komödie", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:134dabfecfce5763", + "externalId": "vokabel-242042", + "title": "Komödie", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:51bd4a15662461f0", + "externalId": "vokabel-242043", + "title": "Krimi", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:f7eac76124cc54bb", + "externalId": "vokabel-280998", + "title": "Kult-Hörspiel", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:295594aebed1d543", + "externalId": "vokabel-281005", + "title": "Kurzgeschichte", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:8706dc32ebe2b0bc", + "externalId": "vokabel-271989", + "title": "Mockumentary", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:acb45779ed05b865", + "externalId": "vokabel-281007", + "title": "Mystery-Hörspiel", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:04caa4a3809fe3fb", + "externalId": "vokabel-242048", + "title": "Märchen", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:7d7418ef5ed7edbe", + "externalId": "vokabel-271992", + "title": "Politthriller", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:b1a6bd7d03416c47", + "externalId": "vokabel-271994", + "title": "Psychothriller", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:e6d196ab297df5fa", + "externalId": "vokabel-272009", + "title": "Romantische Komödie", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:6066f2ebb093399c", + "externalId": "vokabel-281001", + "title": "Sci-Fi- & Fantasy-Hörspiel", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:a777d0d74aad6229", + "externalId": "vokabel-281002", + "title": "Sport-Hörspiel", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:fa2b2396278a7d7b", + "externalId": "vokabel-272029", + "title": "Tatort", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:6ba57545173be3d0", + "externalId": "vokabel-281004", + "title": "Western-Hörspiel", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:bc4d4ee6dc845c5d", + "externalId": "vokabel-272070", + "title": "Zeitgeschichtliches und historisches Drama", + "isAudio": true, + "isVideo": true, + "children": null + } + ] + }, + { + "id": "urn:ard:category-genre:d116f00967227ea9", + "externalId": "vokabel-250943", + "title": "Lesung", + "isAudio": true, + "isVideo": false, + "children": [ + { + "id": "urn:ard:category-subgenre:8d93396b4af7d006", + "externalId": "vokabel-281010", + "title": "Action- und Abenteuer-Lesung", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:b51a268a8d266228", + "externalId": "vokabel-280999", + "title": "Audio Roadmovie", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:ee44b69244ef8ef6", + "externalId": "vokabel-281006", + "title": "Audio-Soap", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:17651aab7b24a683", + "externalId": "vokabel-242035", + "title": "Beziehungsdrama", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:b0f0df8a05fcd6b1", + "externalId": "vokabel-281008", + "title": "Bioaud", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:4a821b57b0c98bb3", + "externalId": "vokabel-281013", + "title": "Coming-of-Age-Lesung", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:5d05140aff983f2b", + "externalId": "vokabel-281019", + "title": "Gedicht", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:cf63d880e31de695", + "externalId": "vokabel-281011", + "title": "Heimat-Lesung", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:f07a845d82d8850d", + "externalId": "vokabel-271951", + "title": "High-Concept-Komödie", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:41419cf9176151ff", + "externalId": "vokabel-281016", + "title": "Horror-Lesung", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:376ba66178e6deb8", + "externalId": "vokabel-271952", + "title": "Indie-Komödie", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:134dabfecfce5763", + "externalId": "vokabel-242042", + "title": "Komödie", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:51bd4a15662461f0", + "externalId": "vokabel-242043", + "title": "Krimi", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:0872fabc1923bd20", + "externalId": "vokabel-281012", + "title": "Kult-Lesung", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:295594aebed1d543", + "externalId": "vokabel-281005", + "title": "Kurzgeschichte", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:8706dc32ebe2b0bc", + "externalId": "vokabel-271989", + "title": "Mockumentary", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:1ff5f5e1567209b8", + "externalId": "vokabel-281018", + "title": "Mystery-Lesung", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:04caa4a3809fe3fb", + "externalId": "vokabel-242048", + "title": "Märchen", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:7d7418ef5ed7edbe", + "externalId": "vokabel-271992", + "title": "Politthriller", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:b1a6bd7d03416c47", + "externalId": "vokabel-271994", + "title": "Psychothriller", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:e6d196ab297df5fa", + "externalId": "vokabel-272009", + "title": "Romantische Komödie", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:3e6ca63d178e878e", + "externalId": "vokabel-281020", + "title": "Sachbuch-Lesung", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:c4a05f2e44b53cd9", + "externalId": "vokabel-281014", + "title": "Sci-Fi- & Fantasy-Lesung", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:8650bec5ed5f0a4a", + "externalId": "vokabel-281015", + "title": "Sport-Lesung", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:fa2b2396278a7d7b", + "externalId": "vokabel-272029", + "title": "Tatort", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:03b17d12be8b676c", + "externalId": "vokabel-281017", + "title": "Western-Lesung", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:bc4d4ee6dc845c5d", + "externalId": "vokabel-272070", + "title": "Zeitgeschichtliches und historisches Drama", + "isAudio": true, + "isVideo": true, + "children": null + } + ] + }, + { + "id": "urn:ard:category-subgenre:a2041d0aad1fdae1", + "externalId": "vokabel-281189", + "title": "Live-Ereignis", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-genre:0fb71ec3c139dfe2", + "externalId": "vokabel-242062", + "title": "Nachrichten/Information", + "isAudio": true, + "isVideo": true, + "children": [ + { + "id": "urn:ard:category-subgenre:d4d8354408c34b46", + "externalId": "vokabel-276030", + "title": "Bericht-Format", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:ab4b324eee227b62", + "externalId": "vokabel-276029", + "title": "Interview-Format", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:5139f6935b172660", + "externalId": "vokabel-276032", + "title": "Nachrichten", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:9628d4afa1297dd5", + "externalId": "vokabel-276031", + "title": "Nachrichten-Magazin", + "isAudio": true, + "isVideo": true, + "children": null + } + ] + }, + { + "id": "urn:ard:category-genre:feb8607e35aabef9", + "externalId": "vokabel-242053", + "title": "Serie", + "isAudio": false, + "isVideo": true, + "children": [ + { + "id": "urn:ard:category-subgenre:1ca69d05dc8c7ccf", + "externalId": "vokabel-242030", + "title": "Action- und Abenteuerserie", + "isAudio": false, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:16f94fdd24c0a6c2", + "externalId": "vokabel-272410", + "title": "Animationsserie", + "isAudio": false, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:a4e82badd135a87b", + "externalId": "vokabel-271889", + "title": "Beziehungsdramaserie", + "isAudio": false, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:998bcd4c9e3eaecc", + "externalId": "vokabel-271891", + "title": "Comedyserie & Dramedy", + "isAudio": false, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:8b7f0fcc36dda29c", + "externalId": "vokabel-271910", + "title": "Familienserie", + "isAudio": false, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:93188c0a7714cbe4", + "externalId": "vokabel-272412", + "title": "Horrorserie", + "isAudio": false, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:d1e3d781c3240b3b", + "externalId": "vokabel-271969", + "title": "Krimiserie", + "isAudio": false, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:f895db380d038098", + "externalId": "vokabel-271990", + "title": "Mystery-Serie", + "isAudio": false, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:04caa4a3809fe3fb", + "externalId": "vokabel-242048", + "title": "Märchen", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:498a7fc841059526", + "externalId": "vokabel-272393", + "title": "Sci-Fi- & Fantasy-Serie", + "isAudio": false, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:709a2407c1d60993", + "externalId": "vokabel-242054", + "title": "Soap/Telenovela", + "isAudio": false, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:85b8249cc16b4d5f", + "externalId": "vokabel-272030", + "title": "Teenserie", + "isAudio": false, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:c748c57768817bcc", + "externalId": "vokabel-272031", + "title": "Thriller-Serie", + "isAudio": false, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:cc6bbc1f12d1f800", + "externalId": "vokabel-272391", + "title": "Westernserie", + "isAudio": false, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:d2e6ad61670de670", + "externalId": "vokabel-272289", + "title": "Zeichentrickserie", + "isAudio": false, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:febdaf0d756e6ace", + "externalId": "vokabel-272071", + "title": "Zeitgeschichtliche & historische Dramaserie", + "isAudio": false, + "isVideo": true, + "children": null + } + ] + }, + { + "id": "urn:ard:category-genre:efde47fb53348b25", + "externalId": "vokabel-242139", + "title": "Show/Magazin", + "isAudio": true, + "isVideo": true, + "children": [ + { + "id": "urn:ard:category-subgenre:5e9aef706400f579", + "externalId": "vokabel-271892", + "title": "Comedy-Show", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:c3e107d7a19c198b", + "externalId": "vokabel-276015", + "title": "Gottesdienst", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:c82280790634c3c7", + "externalId": "vokabel-276010", + "title": "Kochshow", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:6e4f8c459fe15749", + "externalId": "vokabel-280995", + "title": "Kommentar", + "isAudio": true, + "isVideo": false, + "children": null + }, + { + "id": "urn:ard:category-subgenre:9580b0e2b469e59c", + "externalId": "vokabel-242084", + "title": "Konzert", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:8111e63c08762f18", + "externalId": "vokabel-276014", + "title": "Kultur-Magazin", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:2b91135c76115639", + "externalId": "vokabel-271972", + "title": "Late-Night-Show", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:04f025eb5ba2423e", + "externalId": "vokabel-276016", + "title": "Literaturshow", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:a7ed514d751c4530", + "externalId": "vokabel-272369", + "title": "Musik-Show", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:8ad26192afdef554", + "externalId": "vokabel-276011", + "title": "Polit-Magazin", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:646affeaddc60930", + "externalId": "vokabel-272332", + "title": "Polit-Talkshow", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:2cbf6dae360b61da", + "externalId": "vokabel-280994", + "title": "Reality-Show", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:d87e564793fd7514", + "externalId": "vokabel-272370", + "title": "Samstagabend-Show", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:7b5c6cda26ba07e8", + "externalId": "vokabel-272073", + "title": "Satire-Show", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:994291a1cf9cc5de", + "externalId": "vokabel-272010", + "title": "Sketch-Show", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:82e28e0a6604dcb3", + "externalId": "vokabel-272309", + "title": "Stand-up-Show", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:abcf8ec8d3113cf2", + "externalId": "vokabel-242058", + "title": "Talkshow", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:4dc343ae55e0aee1", + "externalId": "vokabel-276012", + "title": "Verbraucher-Magazin", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:9825964c69609276", + "externalId": "vokabel-250947", + "title": "Vortrag", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:a37bddd627f85285", + "externalId": "vokabel-272331", + "title": "Wissens-Show", + "isAudio": true, + "isVideo": true, + "children": null + } + ] + } + ] + }, + { + "id": "urn:ard:category-genre:095767dfc2c20920", + "externalId": "vokabel-251974", + "title": "Inhaltskategorien", + "isAudio": true, + "isVideo": true, + "children": [ + { + "id": "urn:ard:category-genre:e93f6f237afb0a61", + "externalId": "vokabel-242059", + "title": "Aktuelles", + "isAudio": true, + "isVideo": true, + "children": [ + { + "id": "urn:ard:category-subgenre:8a56dd1492edb2c4", + "externalId": "vokabel-242060", + "title": "Katastrophen", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:c8a63cff3b078457", + "externalId": "vokabel-242061", + "title": "Krisengebiete", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:7c9c47d6be64b11d", + "externalId": "vokabel-281021", + "title": "Regionales", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:4d47ff2868d3e971", + "externalId": "vokabel-242063", + "title": "Terrorismus", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:f4192f4e743ae72a", + "externalId": "vokabel-250923", + "title": "Verkehrsservice", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:c365bb519caf5e1b", + "externalId": "vokabel-242064", + "title": "Wahl", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:81955aba35456888", + "externalId": "vokabel-242065", + "title": "Wetter", + "isAudio": true, + "isVideo": true, + "children": null + } + ] + }, + { + "id": "urn:ard:category-genre:2724533cba48fb3c", + "externalId": "vokabel-242148", + "title": "Geschichte", + "isAudio": true, + "isVideo": true, + "children": [ + { + "id": "urn:ard:category-subgenre:fbf219b56778cc86", + "externalId": "vokabel-250951", + "title": "ARD Retro", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:65d4b2d713a2cdaf", + "externalId": "vokabel-242149", + "title": "DDR", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:1a47b5ddf543fd8b", + "externalId": "vokabel-242150", + "title": "Nationalsozialismus", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:58b754365ca9cb18", + "externalId": "vokabel-242151", + "title": "Weltkrieg I", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:9fa6760aa69790ad", + "externalId": "vokabel-242152", + "title": "Weltkrieg II", + "isAudio": true, + "isVideo": true, + "children": null + } + ] + }, + { + "id": "urn:ard:category-genre:4ba6d7f0411c6835", + "externalId": "vokabel-242103", + "title": "Gesellschaft", + "isAudio": true, + "isVideo": true, + "children": [ + { + "id": "urn:ard:category-subgenre:bf64595eb43357b3", + "externalId": "vokabel-242096", + "title": "Arbeit", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:fd94b8b51dd96120", + "externalId": "vokabel-242097", + "title": "Ausbildung", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:e1d03046f5200ff4", + "externalId": "vokabel-242098", + "title": "Bildung", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:1830119e8e686b7a", + "externalId": "vokabel-242068", + "title": "Digitale Welt/Internet", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:e39e20133b6b53b2", + "externalId": "vokabel-250929", + "title": "Divers/Inter", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:a320d1ad5cca3967", + "externalId": "vokabel-242099", + "title": "Erziehung", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:8cb7f5ccbb223380", + "externalId": "vokabel-242100", + "title": "Familie", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:ce47142712c80513", + "externalId": "vokabel-242101", + "title": "Frauen", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:0956361be8f65ea6", + "externalId": "vokabel-242102", + "title": "Freizeit", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:52501f3f0ad4f2d2", + "externalId": "vokabel-281044", + "title": "Gemeinnützigkeit", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:a16ec1f892816521", + "externalId": "vokabel-250928", + "title": "Hobby", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:d2bda11a1c3f8d92", + "externalId": "vokabel-242121", + "title": "Inklusion", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:c5849389b560df5f", + "externalId": "vokabel-242104", + "title": "Integration", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:877472621c8ae9cc", + "externalId": "vokabel-242105", + "title": "Islam", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:4065505ee6b4b279", + "externalId": "vokabel-242106", + "title": "Jugend", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:0295b1b54f5e84ea", + "externalId": "vokabel-242107", + "title": "Kinder", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:d45c89c235f00cd6", + "externalId": "vokabel-242041", + "title": "Kinderprogramm", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:1ed13946a7a7ea3e", + "externalId": "vokabel-242108", + "title": "Kriminalität", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:5c21d8ad0e4ddcad", + "externalId": "vokabel-242109", + "title": "Liebe", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:23b2dfa7e8acec89", + "externalId": "vokabel-242110", + "title": "Lifestyle", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:a6531c70bb7881af", + "externalId": "vokabel-242112", + "title": "Medien", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:e4a3fd9b1292b73c", + "externalId": "vokabel-242113", + "title": "Migration", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:6a81b9e2e6ee0056", + "externalId": "vokabel-242114", + "title": "Mode", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:61423e4c4146da1a", + "externalId": "vokabel-242111", + "title": "Männer", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:bd2a490b7a780bf5", + "externalId": "vokabel-250927", + "title": "Prominente", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:287158094f0436c5", + "externalId": "vokabel-242115", + "title": "Religion", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:ef607a35b53a6d70", + "externalId": "vokabel-242116", + "title": "Religionen der Welt", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:ad909bde1cd05be3", + "externalId": "vokabel-242117", + "title": "Schicksale", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:b1d4132df4293537", + "externalId": "vokabel-242118", + "title": "Senioren", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:f324f2c65dc303a4", + "externalId": "vokabel-242119", + "title": "Sexualität", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:904d40f1b5d5bb01", + "externalId": "vokabel-242120", + "title": "Weihnachten", + "isAudio": true, + "isVideo": true, + "children": null + } + ] + }, + { + "id": "urn:ard:category-genre:f5c5da1e740c82e0", + "externalId": "vokabel-242079", + "title": "Kultur", + "isAudio": true, + "isVideo": true, + "children": [ + { + "id": "urn:ard:category-subgenre:f97d8401edb0dc3b", + "externalId": "vokabel-281023", + "title": "Alte Musik", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:dcb3d6a7ba2b0943", + "externalId": "vokabel-242080", + "title": "Architektur", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:1b63797a04961e0d", + "externalId": "vokabel-281040", + "title": "Bildende Kunst", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:78757b624e0d0c06", + "externalId": "vokabel-242095", + "title": "Brauchtum", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:775fc07819cc6b51", + "externalId": "vokabel-281024", + "title": "Country", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:35af2193b0265dc2", + "externalId": "vokabel-281025", + "title": "CrossOver", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:f2be03af4a180677", + "externalId": "vokabel-281026", + "title": "Dance", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:41ffa137f16fb7aa", + "externalId": "vokabel-281039", + "title": "Darstellende Kunst", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:030f40dc58858139", + "externalId": "vokabel-281038", + "title": "Design", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:1f4bc82fb07cefed", + "externalId": "vokabel-281037", + "title": "Elektronische Musik", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:b04ee244e3f230e4", + "externalId": "vokabel-281027", + "title": "Ernste Musik", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:ac0a6ab70b0b5e30", + "externalId": "vokabel-281028", + "title": "Ethno/Weltmusik", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:59939891ad7c289e", + "externalId": "vokabel-281041", + "title": "Film & Serien", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:38cb8adc29ac66d3", + "externalId": "vokabel-250925", + "title": "Fotografie", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:eefa8b5ca2e168a3", + "externalId": "vokabel-281029", + "title": "Geistliche Musik", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:91698c5644005887", + "externalId": "vokabel-281030", + "title": "Hip-Hop", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:d3996dbdedea6e14", + "externalId": "vokabel-281031", + "title": "Hitparade", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:9e43374c13c13fd0", + "externalId": "vokabel-242081", + "title": "Jazz", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:14884f8117d435a1", + "externalId": "vokabel-281032", + "title": "Kammermusik", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:59521570e9ff6465", + "externalId": "vokabel-242082", + "title": "Kino", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:1ba2f49b401552f6", + "externalId": "vokabel-242083", + "title": "Klassik", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:d77051091d83d30f", + "externalId": "vokabel-242085", + "title": "Kunst", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:ffdaa8e0d3923d66", + "externalId": "vokabel-250926", + "title": "Künstler", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:10617335e7bd88ba", + "externalId": "vokabel-242086", + "title": "Literatur", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:b902f85ece92fa15", + "externalId": "vokabel-250950", + "title": "Mundart", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:529192de4e57be29", + "externalId": "vokabel-242087", + "title": "Musical", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:4ed51a2da6aed0fd", + "externalId": "vokabel-242088", + "title": "Musik", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:0c25fbc60f44e66e", + "externalId": "vokabel-242089", + "title": "Musik-Festival", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:5678ae6abe3e0332", + "externalId": "vokabel-281033", + "title": "Neue Musik", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:d85aea134a42b458", + "externalId": "vokabel-281034", + "title": "Oldies", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:73b6fccce9a5d64a", + "externalId": "vokabel-242090", + "title": "Oper", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:463a45482975d568", + "externalId": "vokabel-242049", + "title": "Porträt/Biografie", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:9aaa0bf8e3a882cb", + "externalId": "vokabel-281035", + "title": "R&B", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:31461d27404fe0d9", + "externalId": "vokabel-242091", + "title": "Rock/Pop", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:7a3b6b3780465040", + "externalId": "vokabel-250924", + "title": "Schlager", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:88a5c5d1d4f563a5", + "externalId": "vokabel-276129", + "title": "Show", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:5dbb29c41996d97e", + "externalId": "vokabel-281036", + "title": "Sinfonische Musik", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:84611ebf8199fca2", + "externalId": "vokabel-250948", + "title": "Soundart", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:9e82baad5742732b", + "externalId": "vokabel-281042", + "title": "Spiele", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:5f34b470935ec9c3", + "externalId": "vokabel-250944", + "title": "Sport", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:f6573f1bba71bb6c", + "externalId": "vokabel-242092", + "title": "Theater", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:dc725b46fea845b8", + "externalId": "vokabel-281043", + "title": "Videogames/Games", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:b4a7def0139b8dff", + "externalId": "vokabel-242093", + "title": "Volksmusik", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:3a859a89e7e73a95", + "externalId": "vokabel-242094", + "title": "Weltmusik", + "isAudio": true, + "isVideo": true, + "children": null + } + ] + }, + { + "id": "urn:ard:category-genre:dd5697e10f7da63e", + "externalId": "vokabel-242153", + "title": "Politik", + "isAudio": true, + "isVideo": true, + "children": [ + { + "id": "urn:ard:category-subgenre:5374d398fb011154", + "externalId": "vokabel-242154", + "title": "EU", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:1184327352eb27c7", + "externalId": "vokabel-242155", + "title": "Extremismus", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:d695104fa8d57c72", + "externalId": "vokabel-242156", + "title": "Krieg", + "isAudio": true, + "isVideo": true, + "children": null + } + ] + }, + { + "id": "urn:ard:category-genre:15ac8326e601d627", + "externalId": "vokabel-242122", + "title": "Ratgeber", + "isAudio": true, + "isVideo": true, + "children": [ + { + "id": "urn:ard:category-subgenre:0474996d669105ae", + "externalId": "vokabel-242067", + "title": "Auto/Verkehr", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:575c62cd4febe0b4", + "externalId": "vokabel-242123", + "title": "Ernährung", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:9c0d2719dd8a6396", + "externalId": "vokabel-250930", + "title": "Fitness", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:10a0fed4a33ec441", + "externalId": "vokabel-281045", + "title": "Fremdsprachen", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:d97e26b4bb9757de", + "externalId": "vokabel-242124", + "title": "Geld", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:9b8ec75f127d614d", + "externalId": "vokabel-242125", + "title": "Gesundheit", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:d7b1dce859009ff4", + "externalId": "vokabel-281046", + "title": "Handarbeit", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:5c9fe563e8433af8", + "externalId": "vokabel-242126", + "title": "Haus/Garten", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:defdc6f274605505", + "externalId": "vokabel-250931", + "title": "Haushalt", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:1e6f048841a90c6b", + "externalId": "vokabel-242127", + "title": "Kochen", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:022b8c7ba95062bf", + "externalId": "vokabel-242128", + "title": "Recht", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:6c60913acf218112", + "externalId": "vokabel-242074", + "title": "Reise", + "isAudio": true, + "isVideo": true, + "children": null + } + ] + }, + { + "id": "urn:ard:category-genre:b5429fb6a6cd2282", + "externalId": "vokabel-242140", + "title": "Umwelt", + "isAudio": true, + "isVideo": true, + "children": [ + { + "id": "urn:ard:category-subgenre:f7b27e5d0f271411", + "externalId": "vokabel-242141", + "title": "Berge", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:19ece4ce8e5e0eb0", + "externalId": "vokabel-250932", + "title": "Klima", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:30a35c61f5194fa4", + "externalId": "vokabel-242142", + "title": "Meer", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:7253bd8a5cf37937", + "externalId": "vokabel-242143", + "title": "Natur", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:fc71f9f3a88fce5d", + "externalId": "vokabel-242144", + "title": "Tiere", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:be8118180165f8ce", + "externalId": "vokabel-242145", + "title": "Zoogeschichten", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:5b1c052527b43823", + "externalId": "vokabel-250933", + "title": "Ökologie", + "isAudio": true, + "isVideo": true, + "children": null + } + ] + }, + { + "id": "urn:ard:category-genre:baa9a94db58f092e", + "externalId": "vokabel-242132", + "title": "Unterhaltung", + "isAudio": true, + "isVideo": true, + "children": [ + { + "id": "urn:ard:category-subgenre:f85948a61c653fbd", + "externalId": "vokabel-242133", + "title": "Boulevard", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:767b0cdfe81988d7", + "externalId": "vokabel-242134", + "title": "Comedy/Satire", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:348bed3441f3be44", + "externalId": "vokabel-242135", + "title": "Fasching/Karneval", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:f39acf08bbcde5f1", + "externalId": "vokabel-242136", + "title": "Quiz", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:b16a2ee31227d362", + "externalId": "vokabel-242137", + "title": "Royalty", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:ad2ea610fadebdb6", + "externalId": "vokabel-242138", + "title": "Rückblicke", + "isAudio": true, + "isVideo": true, + "children": null + } + ] + }, + { + "id": "urn:ard:category-genre:79903a24fb5ba37b", + "externalId": "vokabel-242146", + "title": "Wirtschaft", + "isAudio": true, + "isVideo": true, + "children": [ + { + "id": "urn:ard:category-subgenre:3b60dbcf52b195e8", + "externalId": "vokabel-242147", + "title": "Börse", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:97cea0b77a22b9da", + "externalId": "vokabel-250935", + "title": "Dienstleistungen", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:122f636029f6d4fc", + "externalId": "vokabel-250937", + "title": "Globalisierung", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:50df828b801ce26f", + "externalId": "vokabel-250936", + "title": "Handel", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:d53e415cd3c88f49", + "externalId": "vokabel-250934", + "title": "Industrie", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:5ac0f07527825de9", + "externalId": "vokabel-242069", + "title": "Landwirtschaft", + "isAudio": true, + "isVideo": true, + "children": null + } + ] + }, + { + "id": "urn:ard:category-genre:46847886cf7b333d", + "externalId": "vokabel-242066", + "title": "Wissen", + "isAudio": true, + "isVideo": true, + "children": [ + { + "id": "urn:ard:category-subgenre:bb8d65ea445aeaa8", + "externalId": "vokabel-281022", + "title": "Beziehung", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:78766394ef9ea4e9", + "externalId": "vokabel-258458", + "title": "Luftfahrt/Raumfahrt", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:2553f77fc1636dcd", + "externalId": "vokabel-242070", + "title": "Medizin", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:67a3169468895b5e", + "externalId": "vokabel-242071", + "title": "Naturwissenschaft", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:a0b234a892b700eb", + "externalId": "vokabel-242072", + "title": "Philosophie", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:e242d5433b5d3678", + "externalId": "vokabel-242073", + "title": "Psychologie", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:2e9070d166cbb781", + "externalId": "vokabel-242075", + "title": "Technik", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:e98152ed9cf5ec34", + "externalId": "vokabel-242076", + "title": "Weltraum", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:ab71b306351fdaa7", + "externalId": "vokabel-242077", + "title": "Wissenschaft", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:b7353bf5dde6b473", + "externalId": "vokabel-242078", + "title": "Zukunft", + "isAudio": true, + "isVideo": true, + "children": null + } + ] + } + ] + }, + { + "id": "urn:ard:category-genre:4ba786346b283fb3", + "externalId": "vokabel-251975", + "title": "Ortsangaben", + "isAudio": true, + "isVideo": true, + "children": [ + { + "id": "urn:ard:category-subgenre:9465f1a4013f4ae1", + "externalId": "vokabel-242157", + "title": "Afghanistan", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:0eb2a143a997291f", + "externalId": "vokabel-242214", + "title": "Afrika", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:057126ed0e3ff353", + "externalId": "vokabel-242211", + "title": "Alpen und Berge", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:4c4240a8007d1f8c", + "externalId": "vokabel-242215", + "title": "Asien", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:8b536294fa434439", + "externalId": "vokabel-242216", + "title": "Australien", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:50580b53d372ce8d", + "externalId": "vokabel-242190", + "title": "Baden-Württemberg", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:4c9b0a7868e58cbb", + "externalId": "vokabel-250939", + "title": "Balkan", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:2be2ecc8ab4d58cf", + "externalId": "vokabel-251988", + "title": "Baltikum", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:12a8eab87a98f81e", + "externalId": "vokabel-242191", + "title": "Bayern", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:cad198bc402c12a6", + "externalId": "vokabel-242159", + "title": "Belgien", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:69120d2302a76e5c", + "externalId": "vokabel-251989", + "title": "Benelux", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:d5b9c88480a6a3ab", + "externalId": "vokabel-242192", + "title": "Berlin", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:9749296f294c9538", + "externalId": "vokabel-242193", + "title": "Brandenburg", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:196b6d16dd302252", + "externalId": "vokabel-242194", + "title": "Bremen", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:a9b82a8ba83aaa03", + "externalId": "vokabel-242160", + "title": "Deutschland", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:c9a3837f53a972aa", + "externalId": "vokabel-242217", + "title": "Europa", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:7e95027e4df6dac4", + "externalId": "vokabel-251983", + "title": "Frankfurt am Main", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:eb48cb6001d09c90", + "externalId": "vokabel-242161", + "title": "Frankreich", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:2c59e95cfbeec725", + "externalId": "vokabel-242162", + "title": "Griechenland", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:6ea908b75204f1b6", + "externalId": "vokabel-242163", + "title": "Großbritannien", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:5b9b8cfd74da14c1", + "externalId": "vokabel-242195", + "title": "Hamburg", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:3f486a9ae65b6408", + "externalId": "vokabel-242130", + "title": "Heimat", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:9c8aaec18ee44f74", + "externalId": "vokabel-242196", + "title": "Hessen", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:e08b4ccea67846dc", + "externalId": "vokabel-242164", + "title": "Indien", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:a27bad250f92704f", + "externalId": "vokabel-242165", + "title": "Irak", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:656a8f19f5ac2bfa", + "externalId": "vokabel-242166", + "title": "Iran", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:279a6ef25c461d69", + "externalId": "vokabel-242167", + "title": "Israel", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:3bdee601b4bf73bd", + "externalId": "vokabel-242168", + "title": "Italien", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:792e07ea1d55452e", + "externalId": "vokabel-242169", + "title": "Japan", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:06bd00e0fbb4750a", + "externalId": "vokabel-242170", + "title": "Jemen", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:444de10b525e4399", + "externalId": "vokabel-242171", + "title": "Kuba", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:7db88b714fb1529b", + "externalId": "vokabel-242131", + "title": "Land/Leute", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:f0b74607b98a6dae", + "externalId": "vokabel-251984", + "title": "Leipzig", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:835cc337a860182c", + "externalId": "vokabel-242172", + "title": "Libyen", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:b247a7ec10605b3d", + "externalId": "vokabel-251985", + "title": "Mainz", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:de7a4f2a270e79e7", + "externalId": "vokabel-242197", + "title": "Mecklenburg-Vorpommern", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:c1ac22dc018a2ebf", + "externalId": "vokabel-242173", + "title": "Mexiko", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:1607d2359d1c251c", + "externalId": "vokabel-250940", + "title": "Mittelmeer", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:755685d0ea5e0088", + "externalId": "vokabel-251986", + "title": "München", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:1a809c23f9ffb4e2", + "externalId": "vokabel-272489", + "title": "Nahost", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:4f8e66a5f5f699d5", + "externalId": "vokabel-242174", + "title": "Niederlande", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:c23ec7d9cff71733", + "externalId": "vokabel-242198", + "title": "Niedersachsen", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:0d7e874e5c1caf46", + "externalId": "vokabel-242175", + "title": "Nigeria", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:d5e70b8cbb501c7e", + "externalId": "vokabel-242218", + "title": "Nordamerika", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:66a6a9140027ada3", + "externalId": "vokabel-242207", + "title": "Norddeutschland", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:ca6fa572a622f4f3", + "externalId": "vokabel-242176", + "title": "Nordkorea", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:80ce2632661d21a0", + "externalId": "vokabel-242199", + "title": "Nordrhein-Westfalen", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:c26004d1f401a8e6", + "externalId": "vokabel-242212", + "title": "Nordsee", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:16810a29e4465e78", + "externalId": "vokabel-251990", + "title": "Orient", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:5471ebc24dac68eb", + "externalId": "vokabel-251991", + "title": "Ostasien", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:7ae221e7e8dec377", + "externalId": "vokabel-242208", + "title": "Ostdeutschland", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:8090e53a5deb9e75", + "externalId": "vokabel-242213", + "title": "Ostsee", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:94dbcc6ae731acb4", + "externalId": "vokabel-242178", + "title": "Pakistan", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:9360c9feb792335e", + "externalId": "vokabel-251992", + "title": "Polarkreis", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:d62b2d814edb9a27", + "externalId": "vokabel-242179", + "title": "Polen", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:ff5d213880fc1184", + "externalId": "vokabel-242180", + "title": "Portugal", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:e884ed6df45b1ac9", + "externalId": "vokabel-242200", + "title": "Rheinland-Pfalz", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:bdadc0d329162717", + "externalId": "vokabel-242181", + "title": "Russland", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:aa740c865db12c5a", + "externalId": "vokabel-242201", + "title": "Saarland", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:6d652ebaa78f77ef", + "externalId": "vokabel-242202", + "title": "Sachsen", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:2f95cf510e65417c", + "externalId": "vokabel-242203", + "title": "Sachsen-Anhalt", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:a1b78b28fa19f616", + "externalId": "vokabel-242204", + "title": "Schleswig-Holstein", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:7abce2efd3287ca2", + "externalId": "vokabel-242182", + "title": "Schweden", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:384c03047ac24a31", + "externalId": "vokabel-242183", + "title": "Schweiz", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:0e6beb93c10fba28", + "externalId": "vokabel-250938", + "title": "Skandinavien", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:b66e477d8ebefd5b", + "externalId": "vokabel-242184", + "title": "Somalia", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:f49ea6962754cbc8", + "externalId": "vokabel-242185", + "title": "Spanien", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:37a6643b43b4361b", + "externalId": "vokabel-251987", + "title": "Stuttgart", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:338f84aadd6a907d", + "externalId": "vokabel-242186", + "title": "Syrien", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:9717ea6712ba2aed", + "externalId": "vokabel-242219", + "title": "Südamerika", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:3812c00c4134f5e4", + "externalId": "vokabel-242209", + "title": "Süddeutschland", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:e3476ac353f3c085", + "externalId": "vokabel-242205", + "title": "Thüringen", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:717f65417480a6ee", + "externalId": "vokabel-242187", + "title": "Türkei", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:2fcb0c593593fea9", + "externalId": "vokabel-242189", + "title": "USA", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:6d3bedb29c79c83a", + "externalId": "vokabel-242188", + "title": "Ukraine", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:4781c706a7d5c5c0", + "externalId": "vokabel-242210", + "title": "Westdeutschland", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:88217957e9c62435", + "externalId": "vokabel-242158", + "title": "Ägypten", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:889f44990fc8c260", + "externalId": "vokabel-242177", + "title": "Österreich", + "isAudio": true, + "isVideo": true, + "children": null + } + ] + }, + { + "id": "urn:ard:category-genre:8cb6a40891166406", + "externalId": "vokabel-251976", + "title": "Sportarten", + "isAudio": true, + "isVideo": true, + "children": [ + { + "id": "urn:ard:category-subgenre:f47e5850faac9248", + "externalId": "vokabel-242220", + "title": "American Football", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:b68eb9bb5346a4db", + "externalId": "vokabel-242221", + "title": "Badminton", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:719f9b87a978ff6e", + "externalId": "vokabel-242222", + "title": "Baseball", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:336f7a6c0092c9fd", + "externalId": "vokabel-242223", + "title": "Basketball", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:bd4d3e15f4ee7e97", + "externalId": "vokabel-242224", + "title": "Beach Volleyball", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:ffbddffe5d044804", + "externalId": "vokabel-242225", + "title": "Biathlon", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:38acfdc2a73a13b1", + "externalId": "vokabel-242226", + "title": "Bob", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:7a5c1c290ed02522", + "externalId": "vokabel-242227", + "title": "Bogenschießen", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:661894dae6294bf6", + "externalId": "vokabel-242228", + "title": "Boxen", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:95413d03f0eaa967", + "externalId": "vokabel-281047", + "title": "Cricket", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:24e875314fc37d65", + "externalId": "vokabel-242229", + "title": "Curling", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:6ff16cc9a0cf1071", + "externalId": "vokabel-258452", + "title": "Darts", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:5b7b723ba9224d41", + "externalId": "vokabel-242230", + "title": "Doping allgemein", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:198b93d000c87bd2", + "externalId": "vokabel-242231", + "title": "Eishockey", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:de9ab1ecfaf62067", + "externalId": "vokabel-242232", + "title": "Eiskunstlauf", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:9c6a5007531c16f4", + "externalId": "vokabel-242233", + "title": "Eisschnellauf", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:1248147ea760a19e", + "externalId": "vokabel-242234", + "title": "Fechten", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:50b8f5950e8a970d", + "externalId": "vokabel-242235", + "title": "Flugsport", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:97a9d7a9f4b4ccb8", + "externalId": "vokabel-242236", + "title": "Fußball Bundesliga", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:d55936425d5efa2b", + "externalId": "vokabel-242237", + "title": "Fußball Damen", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:c91dbeb1b5a794ff", + "externalId": "vokabel-242238", + "title": "Fußball Herren", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:8bed5f5a1c4da26c", + "externalId": "vokabel-242239", + "title": "Gewichtheben", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:d1718717e9b40bcb", + "externalId": "vokabel-242240", + "title": "Golf", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:938166fc405e3d58", + "externalId": "vokabel-242241", + "title": "Gymnastik", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:549044c0ba6066ed", + "externalId": "vokabel-242242", + "title": "Handball", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:1660a52b138a507e", + "externalId": "vokabel-242243", + "title": "Hockey", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:ea10af1ef31b7d57", + "externalId": "vokabel-258450", + "title": "Icecross", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:3747cb39b478381d", + "externalId": "vokabel-242254", + "title": "Inklusionssport", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:9842e152e7f6e714", + "externalId": "vokabel-242244", + "title": "Judo", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:75b72ad21d920e8e", + "externalId": "vokabel-242255", + "title": "Jugend Olympische Winterspiele", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:dab200b94e1cd187", + "externalId": "vokabel-242245", + "title": "Kanu/Kajak", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:26c20a8cae8dfcae", + "externalId": "vokabel-258456", + "title": "Karate", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:b617534d640c5267", + "externalId": "vokabel-272472", + "title": "Kitesurfing", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:a323c95bfd599188", + "externalId": "vokabel-258454", + "title": "Klettern", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:1da32285b4228a32", + "externalId": "vokabel-242246", + "title": "Leichtathletik", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:5f53c36e1dc8bca1", + "externalId": "vokabel-242247", + "title": "Moderner Fünfkampf", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:43174b9df531d275", + "externalId": "vokabel-242248", + "title": "Motorrad", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:01e7aa765cdbe4e6", + "externalId": "vokabel-242249", + "title": "Motorsport", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:7e74ad7cba3ad4c2", + "externalId": "vokabel-242250", + "title": "Olympische Sommerspiele", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:3c844c9713d0e251", + "externalId": "vokabel-242251", + "title": "Olympische Winterspiele", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:d7d0d1c2c78b15e9", + "externalId": "vokabel-251016", + "title": "Paralympics Special", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:8964b8da86984dae", + "externalId": "vokabel-251018", + "title": "Paralympische Sportarten", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:b2a608eee7ac553b", + "externalId": "vokabel-242256", + "title": "Radsport", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:f056e9054e4663a8", + "externalId": "vokabel-242257", + "title": "Reiten", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:ec1261f6a6bf0d7c", + "externalId": "vokabel-242258", + "title": "Ringen", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:aee2801d0f553bef", + "externalId": "vokabel-242259", + "title": "Rodeln", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:cd8b322ae743834a", + "externalId": "vokabel-242260", + "title": "Rudern", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:8f7bd3c14ea9b5d9", + "externalId": "vokabel-242261", + "title": "Rugby", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:a8e04ef55af14bc4", + "externalId": "vokabel-258451", + "title": "Schach", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:bfd97c66f3ae1909", + "externalId": "vokabel-258474", + "title": "Schießsport", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:486af1fdb497ee6c", + "externalId": "vokabel-242262", + "title": "Schwimmen", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:0a9a10161d7dd8ff", + "externalId": "vokabel-242263", + "title": "Segeln", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:84b8546fe9016f95", + "externalId": "vokabel-242264", + "title": "Short Track", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:2d018d22092526e2", + "externalId": "vokabel-258453", + "title": "Skateboard", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:c648b58440eb5906", + "externalId": "vokabel-242265", + "title": "Skeleton", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:015997b8bad502b3", + "externalId": "vokabel-242266", + "title": "Ski Alpin", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:e76fdb96e7193165", + "externalId": "vokabel-242272", + "title": "Ski Cross", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:43a97653133f3420", + "externalId": "vokabel-242267", + "title": "Ski Freestyle", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:5fedfea0fbc65af4", + "externalId": "vokabel-242268", + "title": "Ski Langlauf", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:628e1841b4cd5c43", + "externalId": "vokabel-242270", + "title": "Ski Mounteneering", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:1d1d1f4b522c6c67", + "externalId": "vokabel-242269", + "title": "Ski Nordisch/NoKo", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:207ef9aa1d276ad0", + "externalId": "vokabel-242271", + "title": "Skisprung/Skiflug", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:a59f3a7d4ef307f6", + "externalId": "vokabel-242273", + "title": "Snowboard", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:fb956eabe9eeb9e4", + "externalId": "vokabel-242252", + "title": "Sommer/Winter Paralympics", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:b9658f4040048f77", + "externalId": "vokabel-242253", + "title": "Special Olympics", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:e1d328b054b3a71b", + "externalId": "vokabel-258455", + "title": "Surfen", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:6432eb670767ca3d", + "externalId": "vokabel-258457", + "title": "Taekwondo", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:2bbd7e04ba8fb09c", + "externalId": "vokabel-242274", + "title": "Tanzen", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:694d9fef1365860f", + "externalId": "vokabel-242275", + "title": "Tennis", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:ae5cbdd3e95bddba", + "externalId": "vokabel-242276", + "title": "Tischtennis", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:ecac5c3840b1eb29", + "externalId": "vokabel-242277", + "title": "Trampolin", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:f0e8d4cba84885fd", + "externalId": "vokabel-242278", + "title": "Triathlon", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:b218352001a2b36e", + "externalId": "vokabel-242279", + "title": "Turnen", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:9b6e3999cf8538cd", + "externalId": "vokabel-242280", + "title": "Volleyball", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:4c659790d1390f65", + "externalId": "vokabel-272469", + "title": "Wakeboard", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:d99ed872666f0e5e", + "externalId": "vokabel-242281", + "title": "Wasserball", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:33f6909a37d83f41", + "externalId": "vokabel-272470", + "title": "Wasserski", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:710671719e3209d2", + "externalId": "vokabel-272471", + "title": "Wassersport", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:1e8ffa4e9c5155eb", + "externalId": "vokabel-242282", + "title": "Wintersport", + "isAudio": true, + "isVideo": true, + "children": null + }, + { + "id": "urn:ard:category-subgenre:9583a81415fa4d73", + "externalId": "vokabel-258449", + "title": "eSport", + "isAudio": true, + "isVideo": true, + "children": null + } + ] + } + ], + "list": [ + { + "id": "urn:ard:category-subgenre:39ac8d318f50317b", + "externalId": "vokabel-272072", + "title": "Docutainmentserie", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:98f913ef413cd576", + "externalId": "vokabel-272249", + "title": "Erklärfilm", + "isAudio": false, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:1dc4559b3ab4ff50", + "externalId": "vokabel-250945", + "title": "Essay", + "isAudio": true, + "isVideo": false + }, + { + "id": "urn:ard:category-subgenre:e06dc83c6b9de023", + "externalId": "vokabel-280992", + "title": "Filminterview", + "isAudio": true, + "isVideo": false + }, + { + "id": "urn:ard:category-subgenre:e816bdfbdecb1a39", + "externalId": "vokabel-271929", + "title": "Geschichtliche und zeitgeschichtliche Doku", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:9785baf1382a2a1d", + "externalId": "vokabel-271930", + "title": "Geschichtliche und zeitgeschichtliche Dokuserie", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:cd1962bccdd383ba", + "externalId": "vokabel-271949", + "title": "Gesellschafts-, Sozial- und Kulturdoku", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:759b478ad10ce82b", + "externalId": "vokabel-271953", + "title": "Inside-Access- und gesellschaftliche Dokuserie", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:fcca0b4e0e45fc3f", + "externalId": "vokabel-272149", + "title": "Interview-Serie", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:ae70d08b25c53b1f", + "externalId": "vokabel-271970", + "title": "Kulinarische Doku", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:ec8031608c2f0d8c", + "externalId": "vokabel-271971", + "title": "Kulinarische Dokuserie", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:a29d29d7c277d6b0", + "externalId": "vokabel-280993", + "title": "Lyrik-Show", + "isAudio": true, + "isVideo": false + }, + { + "id": "urn:ard:category-subgenre:8706dc32ebe2b0bc", + "externalId": "vokabel-271989", + "title": "Mockumentary", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:658c0beb38498d05", + "externalId": "vokabel-280990", + "title": "Musikdoku", + "isAudio": true, + "isVideo": false + }, + { + "id": "urn:ard:category-subgenre:0059e74b92bf2079", + "externalId": "vokabel-272032", + "title": "Natur - und Tierdoku", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:ba653ad3a4e9b60b", + "externalId": "vokabel-271991", + "title": "Natur- und Tierdokuserie", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:277cea0091a3bb96", + "externalId": "vokabel-280991", + "title": "Radiofeature", + "isAudio": true, + "isVideo": false + }, + { + "id": "urn:ard:category-subgenre:a10c79955cd3c474", + "externalId": "vokabel-272209", + "title": "Reisedoku", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:83590c44e8a4cc1b", + "externalId": "vokabel-272150", + "title": "Reportage", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:bdf6cca852244cf5", + "externalId": "vokabel-272229", + "title": "Sportdoku", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:e030be7300b274be", + "externalId": "vokabel-272169", + "title": "True-Crime-Doku", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:9fa3b979e653449a", + "externalId": "vokabel-272170", + "title": "True-Crime-Serie", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:df24fcd13492e4f8", + "externalId": "vokabel-272049", + "title": "Wissenschafts- und Technikdoku", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:c3de49ec3a656c79", + "externalId": "vokabel-272069", + "title": "Wissenschafts- und Technikdokuserie", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-genre:dbb7bf3926b2277a", + "externalId": "vokabel-242033", + "title": "Dokumentation/Reportage", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:63359a0f3a6d4ceb", + "externalId": "vokabel-242029", + "title": "Action- und Abenteuerfilm", + "isAudio": false, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:696a48d7c22196e6", + "externalId": "vokabel-272409", + "title": "Animationsfilm", + "isAudio": false, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:17651aab7b24a683", + "externalId": "vokabel-242035", + "title": "Beziehungsdrama", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:db7b2ca737d4985f", + "externalId": "vokabel-271890", + "title": "Biopic", + "isAudio": false, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:1c6a0e9bcdeac3ea", + "externalId": "vokabel-271893", + "title": "Coming-of-Age-Film", + "isAudio": false, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:f4ec08c6d03c92b8", + "externalId": "vokabel-271909", + "title": "Europäischer Filmklassiker", + "isAudio": false, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:b28a65b62b32b39e", + "externalId": "vokabel-271950", + "title": "Heimatfilm", + "isAudio": false, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:f07a845d82d8850d", + "externalId": "vokabel-271951", + "title": "High-Concept-Komödie", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:5409ae368d2a9051", + "externalId": "vokabel-272411", + "title": "Horrorfilm", + "isAudio": false, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:376ba66178e6deb8", + "externalId": "vokabel-271952", + "title": "Indie-Komödie", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:51bd4a15662461f0", + "externalId": "vokabel-242043", + "title": "Krimi", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:df9f0e6c9258d69a", + "externalId": "vokabel-242044", + "title": "Kultfilm", + "isAudio": false, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:9d6fef873bb2e009", + "externalId": "vokabel-242045", + "title": "Kurzfilm/Videokunst", + "isAudio": false, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:04caa4a3809fe3fb", + "externalId": "vokabel-242048", + "title": "Märchen", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:7d7418ef5ed7edbe", + "externalId": "vokabel-271992", + "title": "Politthriller", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:3f84f904f73ddb2d", + "externalId": "vokabel-271993", + "title": "Programmkino-Film", + "isAudio": false, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:b1a6bd7d03416c47", + "externalId": "vokabel-271994", + "title": "Psychothriller", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:39a94242cf94e54c", + "externalId": "vokabel-242050", + "title": "Roadmovie", + "isAudio": false, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:e6d196ab297df5fa", + "externalId": "vokabel-272009", + "title": "Romantische Komödie", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:0b7a9e23e8efa3b5", + "externalId": "vokabel-272392", + "title": "Sci-Fi- & Fantasy-Film", + "isAudio": false, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:f1085afe5ddafeb7", + "externalId": "vokabel-272389", + "title": "Sportfilm", + "isAudio": false, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:42a906a03b5516ea", + "externalId": "vokabel-272033", + "title": "TV-Komödie", + "isAudio": false, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:fa2b2396278a7d7b", + "externalId": "vokabel-272029", + "title": "Tatort", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:8e9b5df4bb3bce93", + "externalId": "vokabel-272390", + "title": "Westernfilm", + "isAudio": false, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:ad75aa6b81ecd654", + "externalId": "vokabel-272290", + "title": "Zeichentrickfilm", + "isAudio": false, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:bc4d4ee6dc845c5d", + "externalId": "vokabel-272070", + "title": "Zeitgeschichtliches und historisches Drama", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-genre:9284d97c28f0cba5", + "externalId": "vokabel-242037", + "title": "Film", + "isAudio": false, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:a95eae7965df0cfc", + "externalId": "vokabel-280996", + "title": "Action- und Abenteuer-Hörspiel", + "isAudio": true, + "isVideo": false + }, + { + "id": "urn:ard:category-subgenre:b51a268a8d266228", + "externalId": "vokabel-280999", + "title": "Audio Roadmovie", + "isAudio": true, + "isVideo": false + }, + { + "id": "urn:ard:category-subgenre:ee44b69244ef8ef6", + "externalId": "vokabel-281006", + "title": "Audio-Soap", + "isAudio": true, + "isVideo": false + }, + { + "id": "urn:ard:category-subgenre:b0f0df8a05fcd6b1", + "externalId": "vokabel-281008", + "title": "Bioaud", + "isAudio": true, + "isVideo": false + }, + { + "id": "urn:ard:category-subgenre:2296130019790f0f", + "externalId": "vokabel-281000", + "title": "Coming-of-Age-Hörspiel", + "isAudio": true, + "isVideo": false + }, + { + "id": "urn:ard:category-subgenre:f2003e61ac16e022", + "externalId": "vokabel-281009", + "title": "Doku-Hörspiel", + "isAudio": true, + "isVideo": false + }, + { + "id": "urn:ard:category-subgenre:ebae4f92cc353a6f", + "externalId": "vokabel-280997", + "title": "Heimat-Hörspiel", + "isAudio": true, + "isVideo": false + }, + { + "id": "urn:ard:category-subgenre:e587313ce34754ba", + "externalId": "vokabel-281003", + "title": "Horror-Hörspiel", + "isAudio": true, + "isVideo": false + }, + { + "id": "urn:ard:category-subgenre:134dabfecfce5763", + "externalId": "vokabel-242042", + "title": "Komödie", + "isAudio": true, + "isVideo": false + }, + { + "id": "urn:ard:category-subgenre:f7eac76124cc54bb", + "externalId": "vokabel-280998", + "title": "Kult-Hörspiel", + "isAudio": true, + "isVideo": false + }, + { + "id": "urn:ard:category-subgenre:295594aebed1d543", + "externalId": "vokabel-281005", + "title": "Kurzgeschichte", + "isAudio": true, + "isVideo": false + }, + { + "id": "urn:ard:category-subgenre:acb45779ed05b865", + "externalId": "vokabel-281007", + "title": "Mystery-Hörspiel", + "isAudio": true, + "isVideo": false + }, + { + "id": "urn:ard:category-subgenre:6066f2ebb093399c", + "externalId": "vokabel-281001", + "title": "Sci-Fi- & Fantasy-Hörspiel", + "isAudio": true, + "isVideo": false + }, + { + "id": "urn:ard:category-subgenre:a777d0d74aad6229", + "externalId": "vokabel-281002", + "title": "Sport-Hörspiel", + "isAudio": true, + "isVideo": false + }, + { + "id": "urn:ard:category-subgenre:6ba57545173be3d0", + "externalId": "vokabel-281004", + "title": "Western-Hörspiel", + "isAudio": true, + "isVideo": false + }, + { + "id": "urn:ard:category-genre:93e611e2cec8483a", + "externalId": "vokabel-250942", + "title": "Hörspiel", + "isAudio": true, + "isVideo": false + }, + { + "id": "urn:ard:category-subgenre:8d93396b4af7d006", + "externalId": "vokabel-281010", + "title": "Action- und Abenteuer-Lesung", + "isAudio": true, + "isVideo": false + }, + { + "id": "urn:ard:category-subgenre:4a821b57b0c98bb3", + "externalId": "vokabel-281013", + "title": "Coming-of-Age-Lesung", + "isAudio": true, + "isVideo": false + }, + { + "id": "urn:ard:category-subgenre:5d05140aff983f2b", + "externalId": "vokabel-281019", + "title": "Gedicht", + "isAudio": true, + "isVideo": false + }, + { + "id": "urn:ard:category-subgenre:cf63d880e31de695", + "externalId": "vokabel-281011", + "title": "Heimat-Lesung", + "isAudio": true, + "isVideo": false + }, + { + "id": "urn:ard:category-subgenre:41419cf9176151ff", + "externalId": "vokabel-281016", + "title": "Horror-Lesung", + "isAudio": true, + "isVideo": false + }, + { + "id": "urn:ard:category-subgenre:0872fabc1923bd20", + "externalId": "vokabel-281012", + "title": "Kult-Lesung", + "isAudio": true, + "isVideo": false + }, + { + "id": "urn:ard:category-subgenre:1ff5f5e1567209b8", + "externalId": "vokabel-281018", + "title": "Mystery-Lesung", + "isAudio": true, + "isVideo": false + }, + { + "id": "urn:ard:category-subgenre:3e6ca63d178e878e", + "externalId": "vokabel-281020", + "title": "Sachbuch-Lesung", + "isAudio": true, + "isVideo": false + }, + { + "id": "urn:ard:category-subgenre:c4a05f2e44b53cd9", + "externalId": "vokabel-281014", + "title": "Sci-Fi- & Fantasy-Lesung", + "isAudio": true, + "isVideo": false + }, + { + "id": "urn:ard:category-subgenre:8650bec5ed5f0a4a", + "externalId": "vokabel-281015", + "title": "Sport-Lesung", + "isAudio": true, + "isVideo": false + }, + { + "id": "urn:ard:category-subgenre:03b17d12be8b676c", + "externalId": "vokabel-281017", + "title": "Western-Lesung", + "isAudio": true, + "isVideo": false + }, + { + "id": "urn:ard:category-genre:d116f00967227ea9", + "externalId": "vokabel-250943", + "title": "Lesung", + "isAudio": true, + "isVideo": false + }, + { + "id": "urn:ard:category-subgenre:a2041d0aad1fdae1", + "externalId": "vokabel-281189", + "title": "Live-Ereignis", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:d4d8354408c34b46", + "externalId": "vokabel-276030", + "title": "Bericht-Format", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:ab4b324eee227b62", + "externalId": "vokabel-276029", + "title": "Interview-Format", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:5139f6935b172660", + "externalId": "vokabel-276032", + "title": "Nachrichten", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:9628d4afa1297dd5", + "externalId": "vokabel-276031", + "title": "Nachrichten-Magazin", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-genre:0fb71ec3c139dfe2", + "externalId": "vokabel-242062", + "title": "Nachrichten/Information", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:1ca69d05dc8c7ccf", + "externalId": "vokabel-242030", + "title": "Action- und Abenteuerserie", + "isAudio": false, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:16f94fdd24c0a6c2", + "externalId": "vokabel-272410", + "title": "Animationsserie", + "isAudio": false, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:a4e82badd135a87b", + "externalId": "vokabel-271889", + "title": "Beziehungsdramaserie", + "isAudio": false, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:998bcd4c9e3eaecc", + "externalId": "vokabel-271891", + "title": "Comedyserie & Dramedy", + "isAudio": false, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:8b7f0fcc36dda29c", + "externalId": "vokabel-271910", + "title": "Familienserie", + "isAudio": false, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:93188c0a7714cbe4", + "externalId": "vokabel-272412", + "title": "Horrorserie", + "isAudio": false, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:d1e3d781c3240b3b", + "externalId": "vokabel-271969", + "title": "Krimiserie", + "isAudio": false, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:f895db380d038098", + "externalId": "vokabel-271990", + "title": "Mystery-Serie", + "isAudio": false, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:498a7fc841059526", + "externalId": "vokabel-272393", + "title": "Sci-Fi- & Fantasy-Serie", + "isAudio": false, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:709a2407c1d60993", + "externalId": "vokabel-242054", + "title": "Soap/Telenovela", + "isAudio": false, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:85b8249cc16b4d5f", + "externalId": "vokabel-272030", + "title": "Teenserie", + "isAudio": false, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:c748c57768817bcc", + "externalId": "vokabel-272031", + "title": "Thriller-Serie", + "isAudio": false, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:cc6bbc1f12d1f800", + "externalId": "vokabel-272391", + "title": "Westernserie", + "isAudio": false, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:d2e6ad61670de670", + "externalId": "vokabel-272289", + "title": "Zeichentrickserie", + "isAudio": false, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:febdaf0d756e6ace", + "externalId": "vokabel-272071", + "title": "Zeitgeschichtliche & historische Dramaserie", + "isAudio": false, + "isVideo": true + }, + { + "id": "urn:ard:category-genre:feb8607e35aabef9", + "externalId": "vokabel-242053", + "title": "Serie", + "isAudio": false, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:5e9aef706400f579", + "externalId": "vokabel-271892", + "title": "Comedy-Show", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:c3e107d7a19c198b", + "externalId": "vokabel-276015", + "title": "Gottesdienst", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:c82280790634c3c7", + "externalId": "vokabel-276010", + "title": "Kochshow", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:6e4f8c459fe15749", + "externalId": "vokabel-280995", + "title": "Kommentar", + "isAudio": true, + "isVideo": false + }, + { + "id": "urn:ard:category-subgenre:9580b0e2b469e59c", + "externalId": "vokabel-242084", + "title": "Konzert", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:8111e63c08762f18", + "externalId": "vokabel-276014", + "title": "Kultur-Magazin", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:2b91135c76115639", + "externalId": "vokabel-271972", + "title": "Late-Night-Show", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:04f025eb5ba2423e", + "externalId": "vokabel-276016", + "title": "Literaturshow", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:a7ed514d751c4530", + "externalId": "vokabel-272369", + "title": "Musik-Show", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:8ad26192afdef554", + "externalId": "vokabel-276011", + "title": "Polit-Magazin", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:646affeaddc60930", + "externalId": "vokabel-272332", + "title": "Polit-Talkshow", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:2cbf6dae360b61da", + "externalId": "vokabel-280994", + "title": "Reality-Show", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:d87e564793fd7514", + "externalId": "vokabel-272370", + "title": "Samstagabend-Show", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:7b5c6cda26ba07e8", + "externalId": "vokabel-272073", + "title": "Satire-Show", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:994291a1cf9cc5de", + "externalId": "vokabel-272010", + "title": "Sketch-Show", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:82e28e0a6604dcb3", + "externalId": "vokabel-272309", + "title": "Stand-up-Show", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:abcf8ec8d3113cf2", + "externalId": "vokabel-242058", + "title": "Talkshow", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:4dc343ae55e0aee1", + "externalId": "vokabel-276012", + "title": "Verbraucher-Magazin", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:9825964c69609276", + "externalId": "vokabel-250947", + "title": "Vortrag", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:a37bddd627f85285", + "externalId": "vokabel-272331", + "title": "Wissens-Show", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-genre:efde47fb53348b25", + "externalId": "vokabel-242139", + "title": "Show/Magazin", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-genre:877523a636bebe4a", + "externalId": "vokabel-251973", + "title": "Genre", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:8a56dd1492edb2c4", + "externalId": "vokabel-242060", + "title": "Katastrophen", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:c8a63cff3b078457", + "externalId": "vokabel-242061", + "title": "Krisengebiete", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:7c9c47d6be64b11d", + "externalId": "vokabel-281021", + "title": "Regionales", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:4d47ff2868d3e971", + "externalId": "vokabel-242063", + "title": "Terrorismus", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:f4192f4e743ae72a", + "externalId": "vokabel-250923", + "title": "Verkehrsservice", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:c365bb519caf5e1b", + "externalId": "vokabel-242064", + "title": "Wahl", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:81955aba35456888", + "externalId": "vokabel-242065", + "title": "Wetter", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-genre:e93f6f237afb0a61", + "externalId": "vokabel-242059", + "title": "Aktuelles", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:fbf219b56778cc86", + "externalId": "vokabel-250951", + "title": "ARD Retro", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:65d4b2d713a2cdaf", + "externalId": "vokabel-242149", + "title": "DDR", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:1a47b5ddf543fd8b", + "externalId": "vokabel-242150", + "title": "Nationalsozialismus", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:58b754365ca9cb18", + "externalId": "vokabel-242151", + "title": "Weltkrieg I", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:9fa6760aa69790ad", + "externalId": "vokabel-242152", + "title": "Weltkrieg II", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-genre:2724533cba48fb3c", + "externalId": "vokabel-242148", + "title": "Geschichte", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:bf64595eb43357b3", + "externalId": "vokabel-242096", + "title": "Arbeit", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:fd94b8b51dd96120", + "externalId": "vokabel-242097", + "title": "Ausbildung", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:e1d03046f5200ff4", + "externalId": "vokabel-242098", + "title": "Bildung", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:1830119e8e686b7a", + "externalId": "vokabel-242068", + "title": "Digitale Welt/Internet", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:e39e20133b6b53b2", + "externalId": "vokabel-250929", + "title": "Divers/Inter", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:a320d1ad5cca3967", + "externalId": "vokabel-242099", + "title": "Erziehung", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:8cb7f5ccbb223380", + "externalId": "vokabel-242100", + "title": "Familie", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:ce47142712c80513", + "externalId": "vokabel-242101", + "title": "Frauen", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:0956361be8f65ea6", + "externalId": "vokabel-242102", + "title": "Freizeit", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:52501f3f0ad4f2d2", + "externalId": "vokabel-281044", + "title": "Gemeinnützigkeit", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:a16ec1f892816521", + "externalId": "vokabel-250928", + "title": "Hobby", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:d2bda11a1c3f8d92", + "externalId": "vokabel-242121", + "title": "Inklusion", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:c5849389b560df5f", + "externalId": "vokabel-242104", + "title": "Integration", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:877472621c8ae9cc", + "externalId": "vokabel-242105", + "title": "Islam", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:4065505ee6b4b279", + "externalId": "vokabel-242106", + "title": "Jugend", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:0295b1b54f5e84ea", + "externalId": "vokabel-242107", + "title": "Kinder", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:d45c89c235f00cd6", + "externalId": "vokabel-242041", + "title": "Kinderprogramm", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:1ed13946a7a7ea3e", + "externalId": "vokabel-242108", + "title": "Kriminalität", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:5c21d8ad0e4ddcad", + "externalId": "vokabel-242109", + "title": "Liebe", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:23b2dfa7e8acec89", + "externalId": "vokabel-242110", + "title": "Lifestyle", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:a6531c70bb7881af", + "externalId": "vokabel-242112", + "title": "Medien", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:e4a3fd9b1292b73c", + "externalId": "vokabel-242113", + "title": "Migration", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:6a81b9e2e6ee0056", + "externalId": "vokabel-242114", + "title": "Mode", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:61423e4c4146da1a", + "externalId": "vokabel-242111", + "title": "Männer", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:bd2a490b7a780bf5", + "externalId": "vokabel-250927", + "title": "Prominente", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:287158094f0436c5", + "externalId": "vokabel-242115", + "title": "Religion", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:ef607a35b53a6d70", + "externalId": "vokabel-242116", + "title": "Religionen der Welt", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:ad909bde1cd05be3", + "externalId": "vokabel-242117", + "title": "Schicksale", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:b1d4132df4293537", + "externalId": "vokabel-242118", + "title": "Senioren", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:f324f2c65dc303a4", + "externalId": "vokabel-242119", + "title": "Sexualität", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:904d40f1b5d5bb01", + "externalId": "vokabel-242120", + "title": "Weihnachten", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-genre:4ba6d7f0411c6835", + "externalId": "vokabel-242103", + "title": "Gesellschaft", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:f97d8401edb0dc3b", + "externalId": "vokabel-281023", + "title": "Alte Musik", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:dcb3d6a7ba2b0943", + "externalId": "vokabel-242080", + "title": "Architektur", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:1b63797a04961e0d", + "externalId": "vokabel-281040", + "title": "Bildende Kunst", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:78757b624e0d0c06", + "externalId": "vokabel-242095", + "title": "Brauchtum", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:775fc07819cc6b51", + "externalId": "vokabel-281024", + "title": "Country", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:35af2193b0265dc2", + "externalId": "vokabel-281025", + "title": "CrossOver", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:f2be03af4a180677", + "externalId": "vokabel-281026", + "title": "Dance", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:41ffa137f16fb7aa", + "externalId": "vokabel-281039", + "title": "Darstellende Kunst", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:030f40dc58858139", + "externalId": "vokabel-281038", + "title": "Design", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:1f4bc82fb07cefed", + "externalId": "vokabel-281037", + "title": "Elektronische Musik", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:b04ee244e3f230e4", + "externalId": "vokabel-281027", + "title": "Ernste Musik", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:ac0a6ab70b0b5e30", + "externalId": "vokabel-281028", + "title": "Ethno/Weltmusik", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:59939891ad7c289e", + "externalId": "vokabel-281041", + "title": "Film & Serien", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:38cb8adc29ac66d3", + "externalId": "vokabel-250925", + "title": "Fotografie", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:eefa8b5ca2e168a3", + "externalId": "vokabel-281029", + "title": "Geistliche Musik", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:91698c5644005887", + "externalId": "vokabel-281030", + "title": "Hip-Hop", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:d3996dbdedea6e14", + "externalId": "vokabel-281031", + "title": "Hitparade", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:9e43374c13c13fd0", + "externalId": "vokabel-242081", + "title": "Jazz", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:14884f8117d435a1", + "externalId": "vokabel-281032", + "title": "Kammermusik", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:59521570e9ff6465", + "externalId": "vokabel-242082", + "title": "Kino", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:1ba2f49b401552f6", + "externalId": "vokabel-242083", + "title": "Klassik", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:d77051091d83d30f", + "externalId": "vokabel-242085", + "title": "Kunst", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:ffdaa8e0d3923d66", + "externalId": "vokabel-250926", + "title": "Künstler", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:10617335e7bd88ba", + "externalId": "vokabel-242086", + "title": "Literatur", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:b902f85ece92fa15", + "externalId": "vokabel-250950", + "title": "Mundart", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:529192de4e57be29", + "externalId": "vokabel-242087", + "title": "Musical", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:4ed51a2da6aed0fd", + "externalId": "vokabel-242088", + "title": "Musik", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:0c25fbc60f44e66e", + "externalId": "vokabel-242089", + "title": "Musik-Festival", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:5678ae6abe3e0332", + "externalId": "vokabel-281033", + "title": "Neue Musik", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:d85aea134a42b458", + "externalId": "vokabel-281034", + "title": "Oldies", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:73b6fccce9a5d64a", + "externalId": "vokabel-242090", + "title": "Oper", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:463a45482975d568", + "externalId": "vokabel-242049", + "title": "Porträt/Biografie", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:9aaa0bf8e3a882cb", + "externalId": "vokabel-281035", + "title": "R&B", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:31461d27404fe0d9", + "externalId": "vokabel-242091", + "title": "Rock/Pop", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:7a3b6b3780465040", + "externalId": "vokabel-250924", + "title": "Schlager", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:88a5c5d1d4f563a5", + "externalId": "vokabel-276129", + "title": "Show", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:5dbb29c41996d97e", + "externalId": "vokabel-281036", + "title": "Sinfonische Musik", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:84611ebf8199fca2", + "externalId": "vokabel-250948", + "title": "Soundart", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:9e82baad5742732b", + "externalId": "vokabel-281042", + "title": "Spiele", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:5f34b470935ec9c3", + "externalId": "vokabel-250944", + "title": "Sport", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:f6573f1bba71bb6c", + "externalId": "vokabel-242092", + "title": "Theater", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:dc725b46fea845b8", + "externalId": "vokabel-281043", + "title": "Videogames/Games", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:b4a7def0139b8dff", + "externalId": "vokabel-242093", + "title": "Volksmusik", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:3a859a89e7e73a95", + "externalId": "vokabel-242094", + "title": "Weltmusik", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-genre:f5c5da1e740c82e0", + "externalId": "vokabel-242079", + "title": "Kultur", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:5374d398fb011154", + "externalId": "vokabel-242154", + "title": "EU", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:1184327352eb27c7", + "externalId": "vokabel-242155", + "title": "Extremismus", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:d695104fa8d57c72", + "externalId": "vokabel-242156", + "title": "Krieg", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-genre:dd5697e10f7da63e", + "externalId": "vokabel-242153", + "title": "Politik", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:0474996d669105ae", + "externalId": "vokabel-242067", + "title": "Auto/Verkehr", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:575c62cd4febe0b4", + "externalId": "vokabel-242123", + "title": "Ernährung", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:9c0d2719dd8a6396", + "externalId": "vokabel-250930", + "title": "Fitness", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:10a0fed4a33ec441", + "externalId": "vokabel-281045", + "title": "Fremdsprachen", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:d97e26b4bb9757de", + "externalId": "vokabel-242124", + "title": "Geld", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:9b8ec75f127d614d", + "externalId": "vokabel-242125", + "title": "Gesundheit", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:d7b1dce859009ff4", + "externalId": "vokabel-281046", + "title": "Handarbeit", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:5c9fe563e8433af8", + "externalId": "vokabel-242126", + "title": "Haus/Garten", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:defdc6f274605505", + "externalId": "vokabel-250931", + "title": "Haushalt", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:1e6f048841a90c6b", + "externalId": "vokabel-242127", + "title": "Kochen", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:022b8c7ba95062bf", + "externalId": "vokabel-242128", + "title": "Recht", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:6c60913acf218112", + "externalId": "vokabel-242074", + "title": "Reise", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-genre:15ac8326e601d627", + "externalId": "vokabel-242122", + "title": "Ratgeber", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:f7b27e5d0f271411", + "externalId": "vokabel-242141", + "title": "Berge", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:19ece4ce8e5e0eb0", + "externalId": "vokabel-250932", + "title": "Klima", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:30a35c61f5194fa4", + "externalId": "vokabel-242142", + "title": "Meer", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:7253bd8a5cf37937", + "externalId": "vokabel-242143", + "title": "Natur", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:fc71f9f3a88fce5d", + "externalId": "vokabel-242144", + "title": "Tiere", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:be8118180165f8ce", + "externalId": "vokabel-242145", + "title": "Zoogeschichten", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:5b1c052527b43823", + "externalId": "vokabel-250933", + "title": "Ökologie", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-genre:b5429fb6a6cd2282", + "externalId": "vokabel-242140", + "title": "Umwelt", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:f85948a61c653fbd", + "externalId": "vokabel-242133", + "title": "Boulevard", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:767b0cdfe81988d7", + "externalId": "vokabel-242134", + "title": "Comedy/Satire", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:348bed3441f3be44", + "externalId": "vokabel-242135", + "title": "Fasching/Karneval", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:f39acf08bbcde5f1", + "externalId": "vokabel-242136", + "title": "Quiz", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:b16a2ee31227d362", + "externalId": "vokabel-242137", + "title": "Royalty", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:ad2ea610fadebdb6", + "externalId": "vokabel-242138", + "title": "Rückblicke", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-genre:baa9a94db58f092e", + "externalId": "vokabel-242132", + "title": "Unterhaltung", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:3b60dbcf52b195e8", + "externalId": "vokabel-242147", + "title": "Börse", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:97cea0b77a22b9da", + "externalId": "vokabel-250935", + "title": "Dienstleistungen", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:122f636029f6d4fc", + "externalId": "vokabel-250937", + "title": "Globalisierung", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:50df828b801ce26f", + "externalId": "vokabel-250936", + "title": "Handel", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:d53e415cd3c88f49", + "externalId": "vokabel-250934", + "title": "Industrie", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:5ac0f07527825de9", + "externalId": "vokabel-242069", + "title": "Landwirtschaft", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-genre:79903a24fb5ba37b", + "externalId": "vokabel-242146", + "title": "Wirtschaft", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:bb8d65ea445aeaa8", + "externalId": "vokabel-281022", + "title": "Beziehung", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:78766394ef9ea4e9", + "externalId": "vokabel-258458", + "title": "Luftfahrt/Raumfahrt", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:2553f77fc1636dcd", + "externalId": "vokabel-242070", + "title": "Medizin", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:67a3169468895b5e", + "externalId": "vokabel-242071", + "title": "Naturwissenschaft", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:a0b234a892b700eb", + "externalId": "vokabel-242072", + "title": "Philosophie", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:e242d5433b5d3678", + "externalId": "vokabel-242073", + "title": "Psychologie", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:2e9070d166cbb781", + "externalId": "vokabel-242075", + "title": "Technik", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:e98152ed9cf5ec34", + "externalId": "vokabel-242076", + "title": "Weltraum", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:ab71b306351fdaa7", + "externalId": "vokabel-242077", + "title": "Wissenschaft", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:b7353bf5dde6b473", + "externalId": "vokabel-242078", + "title": "Zukunft", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-genre:46847886cf7b333d", + "externalId": "vokabel-242066", + "title": "Wissen", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-genre:095767dfc2c20920", + "externalId": "vokabel-251974", + "title": "Inhaltskategorien", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:9465f1a4013f4ae1", + "externalId": "vokabel-242157", + "title": "Afghanistan", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:0eb2a143a997291f", + "externalId": "vokabel-242214", + "title": "Afrika", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:057126ed0e3ff353", + "externalId": "vokabel-242211", + "title": "Alpen und Berge", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:4c4240a8007d1f8c", + "externalId": "vokabel-242215", + "title": "Asien", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:8b536294fa434439", + "externalId": "vokabel-242216", + "title": "Australien", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:50580b53d372ce8d", + "externalId": "vokabel-242190", + "title": "Baden-Württemberg", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:4c9b0a7868e58cbb", + "externalId": "vokabel-250939", + "title": "Balkan", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:2be2ecc8ab4d58cf", + "externalId": "vokabel-251988", + "title": "Baltikum", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:12a8eab87a98f81e", + "externalId": "vokabel-242191", + "title": "Bayern", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:cad198bc402c12a6", + "externalId": "vokabel-242159", + "title": "Belgien", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:69120d2302a76e5c", + "externalId": "vokabel-251989", + "title": "Benelux", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:d5b9c88480a6a3ab", + "externalId": "vokabel-242192", + "title": "Berlin", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:9749296f294c9538", + "externalId": "vokabel-242193", + "title": "Brandenburg", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:196b6d16dd302252", + "externalId": "vokabel-242194", + "title": "Bremen", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:a9b82a8ba83aaa03", + "externalId": "vokabel-242160", + "title": "Deutschland", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:c9a3837f53a972aa", + "externalId": "vokabel-242217", + "title": "Europa", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:7e95027e4df6dac4", + "externalId": "vokabel-251983", + "title": "Frankfurt am Main", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:eb48cb6001d09c90", + "externalId": "vokabel-242161", + "title": "Frankreich", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:2c59e95cfbeec725", + "externalId": "vokabel-242162", + "title": "Griechenland", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:6ea908b75204f1b6", + "externalId": "vokabel-242163", + "title": "Großbritannien", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:5b9b8cfd74da14c1", + "externalId": "vokabel-242195", + "title": "Hamburg", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:3f486a9ae65b6408", + "externalId": "vokabel-242130", + "title": "Heimat", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:9c8aaec18ee44f74", + "externalId": "vokabel-242196", + "title": "Hessen", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:e08b4ccea67846dc", + "externalId": "vokabel-242164", + "title": "Indien", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:a27bad250f92704f", + "externalId": "vokabel-242165", + "title": "Irak", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:656a8f19f5ac2bfa", + "externalId": "vokabel-242166", + "title": "Iran", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:279a6ef25c461d69", + "externalId": "vokabel-242167", + "title": "Israel", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:3bdee601b4bf73bd", + "externalId": "vokabel-242168", + "title": "Italien", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:792e07ea1d55452e", + "externalId": "vokabel-242169", + "title": "Japan", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:06bd00e0fbb4750a", + "externalId": "vokabel-242170", + "title": "Jemen", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:444de10b525e4399", + "externalId": "vokabel-242171", + "title": "Kuba", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:7db88b714fb1529b", + "externalId": "vokabel-242131", + "title": "Land/Leute", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:f0b74607b98a6dae", + "externalId": "vokabel-251984", + "title": "Leipzig", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:835cc337a860182c", + "externalId": "vokabel-242172", + "title": "Libyen", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:b247a7ec10605b3d", + "externalId": "vokabel-251985", + "title": "Mainz", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:de7a4f2a270e79e7", + "externalId": "vokabel-242197", + "title": "Mecklenburg-Vorpommern", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:c1ac22dc018a2ebf", + "externalId": "vokabel-242173", + "title": "Mexiko", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:1607d2359d1c251c", + "externalId": "vokabel-250940", + "title": "Mittelmeer", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:755685d0ea5e0088", + "externalId": "vokabel-251986", + "title": "München", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:1a809c23f9ffb4e2", + "externalId": "vokabel-272489", + "title": "Nahost", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:4f8e66a5f5f699d5", + "externalId": "vokabel-242174", + "title": "Niederlande", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:c23ec7d9cff71733", + "externalId": "vokabel-242198", + "title": "Niedersachsen", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:0d7e874e5c1caf46", + "externalId": "vokabel-242175", + "title": "Nigeria", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:d5e70b8cbb501c7e", + "externalId": "vokabel-242218", + "title": "Nordamerika", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:66a6a9140027ada3", + "externalId": "vokabel-242207", + "title": "Norddeutschland", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:ca6fa572a622f4f3", + "externalId": "vokabel-242176", + "title": "Nordkorea", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:80ce2632661d21a0", + "externalId": "vokabel-242199", + "title": "Nordrhein-Westfalen", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:c26004d1f401a8e6", + "externalId": "vokabel-242212", + "title": "Nordsee", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:16810a29e4465e78", + "externalId": "vokabel-251990", + "title": "Orient", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:5471ebc24dac68eb", + "externalId": "vokabel-251991", + "title": "Ostasien", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:7ae221e7e8dec377", + "externalId": "vokabel-242208", + "title": "Ostdeutschland", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:8090e53a5deb9e75", + "externalId": "vokabel-242213", + "title": "Ostsee", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:94dbcc6ae731acb4", + "externalId": "vokabel-242178", + "title": "Pakistan", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:9360c9feb792335e", + "externalId": "vokabel-251992", + "title": "Polarkreis", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:d62b2d814edb9a27", + "externalId": "vokabel-242179", + "title": "Polen", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:ff5d213880fc1184", + "externalId": "vokabel-242180", + "title": "Portugal", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:e884ed6df45b1ac9", + "externalId": "vokabel-242200", + "title": "Rheinland-Pfalz", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:bdadc0d329162717", + "externalId": "vokabel-242181", + "title": "Russland", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:aa740c865db12c5a", + "externalId": "vokabel-242201", + "title": "Saarland", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:6d652ebaa78f77ef", + "externalId": "vokabel-242202", + "title": "Sachsen", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:2f95cf510e65417c", + "externalId": "vokabel-242203", + "title": "Sachsen-Anhalt", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:a1b78b28fa19f616", + "externalId": "vokabel-242204", + "title": "Schleswig-Holstein", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:7abce2efd3287ca2", + "externalId": "vokabel-242182", + "title": "Schweden", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:384c03047ac24a31", + "externalId": "vokabel-242183", + "title": "Schweiz", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:0e6beb93c10fba28", + "externalId": "vokabel-250938", + "title": "Skandinavien", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:b66e477d8ebefd5b", + "externalId": "vokabel-242184", + "title": "Somalia", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:f49ea6962754cbc8", + "externalId": "vokabel-242185", + "title": "Spanien", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:37a6643b43b4361b", + "externalId": "vokabel-251987", + "title": "Stuttgart", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:338f84aadd6a907d", + "externalId": "vokabel-242186", + "title": "Syrien", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:9717ea6712ba2aed", + "externalId": "vokabel-242219", + "title": "Südamerika", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:3812c00c4134f5e4", + "externalId": "vokabel-242209", + "title": "Süddeutschland", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:e3476ac353f3c085", + "externalId": "vokabel-242205", + "title": "Thüringen", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:717f65417480a6ee", + "externalId": "vokabel-242187", + "title": "Türkei", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:2fcb0c593593fea9", + "externalId": "vokabel-242189", + "title": "USA", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:6d3bedb29c79c83a", + "externalId": "vokabel-242188", + "title": "Ukraine", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:4781c706a7d5c5c0", + "externalId": "vokabel-242210", + "title": "Westdeutschland", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:88217957e9c62435", + "externalId": "vokabel-242158", + "title": "Ägypten", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:889f44990fc8c260", + "externalId": "vokabel-242177", + "title": "Österreich", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-genre:4ba786346b283fb3", + "externalId": "vokabel-251975", + "title": "Ortsangaben", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:f47e5850faac9248", + "externalId": "vokabel-242220", + "title": "American Football", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:b68eb9bb5346a4db", + "externalId": "vokabel-242221", + "title": "Badminton", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:719f9b87a978ff6e", + "externalId": "vokabel-242222", + "title": "Baseball", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:336f7a6c0092c9fd", + "externalId": "vokabel-242223", + "title": "Basketball", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:bd4d3e15f4ee7e97", + "externalId": "vokabel-242224", + "title": "Beach Volleyball", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:ffbddffe5d044804", + "externalId": "vokabel-242225", + "title": "Biathlon", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:38acfdc2a73a13b1", + "externalId": "vokabel-242226", + "title": "Bob", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:7a5c1c290ed02522", + "externalId": "vokabel-242227", + "title": "Bogenschießen", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:661894dae6294bf6", + "externalId": "vokabel-242228", + "title": "Boxen", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:95413d03f0eaa967", + "externalId": "vokabel-281047", + "title": "Cricket", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:24e875314fc37d65", + "externalId": "vokabel-242229", + "title": "Curling", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:6ff16cc9a0cf1071", + "externalId": "vokabel-258452", + "title": "Darts", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:5b7b723ba9224d41", + "externalId": "vokabel-242230", + "title": "Doping allgemein", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:198b93d000c87bd2", + "externalId": "vokabel-242231", + "title": "Eishockey", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:de9ab1ecfaf62067", + "externalId": "vokabel-242232", + "title": "Eiskunstlauf", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:9c6a5007531c16f4", + "externalId": "vokabel-242233", + "title": "Eisschnellauf", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:1248147ea760a19e", + "externalId": "vokabel-242234", + "title": "Fechten", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:50b8f5950e8a970d", + "externalId": "vokabel-242235", + "title": "Flugsport", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:97a9d7a9f4b4ccb8", + "externalId": "vokabel-242236", + "title": "Fußball Bundesliga", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:d55936425d5efa2b", + "externalId": "vokabel-242237", + "title": "Fußball Damen", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:c91dbeb1b5a794ff", + "externalId": "vokabel-242238", + "title": "Fußball Herren", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:8bed5f5a1c4da26c", + "externalId": "vokabel-242239", + "title": "Gewichtheben", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:d1718717e9b40bcb", + "externalId": "vokabel-242240", + "title": "Golf", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:938166fc405e3d58", + "externalId": "vokabel-242241", + "title": "Gymnastik", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:549044c0ba6066ed", + "externalId": "vokabel-242242", + "title": "Handball", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:1660a52b138a507e", + "externalId": "vokabel-242243", + "title": "Hockey", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:ea10af1ef31b7d57", + "externalId": "vokabel-258450", + "title": "Icecross", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:3747cb39b478381d", + "externalId": "vokabel-242254", + "title": "Inklusionssport", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:9842e152e7f6e714", + "externalId": "vokabel-242244", + "title": "Judo", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:75b72ad21d920e8e", + "externalId": "vokabel-242255", + "title": "Jugend Olympische Winterspiele", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:dab200b94e1cd187", + "externalId": "vokabel-242245", + "title": "Kanu/Kajak", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:26c20a8cae8dfcae", + "externalId": "vokabel-258456", + "title": "Karate", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:b617534d640c5267", + "externalId": "vokabel-272472", + "title": "Kitesurfing", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:a323c95bfd599188", + "externalId": "vokabel-258454", + "title": "Klettern", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:1da32285b4228a32", + "externalId": "vokabel-242246", + "title": "Leichtathletik", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:5f53c36e1dc8bca1", + "externalId": "vokabel-242247", + "title": "Moderner Fünfkampf", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:43174b9df531d275", + "externalId": "vokabel-242248", + "title": "Motorrad", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:01e7aa765cdbe4e6", + "externalId": "vokabel-242249", + "title": "Motorsport", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:7e74ad7cba3ad4c2", + "externalId": "vokabel-242250", + "title": "Olympische Sommerspiele", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:3c844c9713d0e251", + "externalId": "vokabel-242251", + "title": "Olympische Winterspiele", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:d7d0d1c2c78b15e9", + "externalId": "vokabel-251016", + "title": "Paralympics Special", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:8964b8da86984dae", + "externalId": "vokabel-251018", + "title": "Paralympische Sportarten", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:b2a608eee7ac553b", + "externalId": "vokabel-242256", + "title": "Radsport", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:f056e9054e4663a8", + "externalId": "vokabel-242257", + "title": "Reiten", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:ec1261f6a6bf0d7c", + "externalId": "vokabel-242258", + "title": "Ringen", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:aee2801d0f553bef", + "externalId": "vokabel-242259", + "title": "Rodeln", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:cd8b322ae743834a", + "externalId": "vokabel-242260", + "title": "Rudern", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:8f7bd3c14ea9b5d9", + "externalId": "vokabel-242261", + "title": "Rugby", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:a8e04ef55af14bc4", + "externalId": "vokabel-258451", + "title": "Schach", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:bfd97c66f3ae1909", + "externalId": "vokabel-258474", + "title": "Schießsport", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:486af1fdb497ee6c", + "externalId": "vokabel-242262", + "title": "Schwimmen", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:0a9a10161d7dd8ff", + "externalId": "vokabel-242263", + "title": "Segeln", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:84b8546fe9016f95", + "externalId": "vokabel-242264", + "title": "Short Track", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:2d018d22092526e2", + "externalId": "vokabel-258453", + "title": "Skateboard", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:c648b58440eb5906", + "externalId": "vokabel-242265", + "title": "Skeleton", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:015997b8bad502b3", + "externalId": "vokabel-242266", + "title": "Ski Alpin", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:e76fdb96e7193165", + "externalId": "vokabel-242272", + "title": "Ski Cross", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:43a97653133f3420", + "externalId": "vokabel-242267", + "title": "Ski Freestyle", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:5fedfea0fbc65af4", + "externalId": "vokabel-242268", + "title": "Ski Langlauf", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:628e1841b4cd5c43", + "externalId": "vokabel-242270", + "title": "Ski Mounteneering", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:1d1d1f4b522c6c67", + "externalId": "vokabel-242269", + "title": "Ski Nordisch/NoKo", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:207ef9aa1d276ad0", + "externalId": "vokabel-242271", + "title": "Skisprung/Skiflug", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:a59f3a7d4ef307f6", + "externalId": "vokabel-242273", + "title": "Snowboard", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:fb956eabe9eeb9e4", + "externalId": "vokabel-242252", + "title": "Sommer/Winter Paralympics", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:b9658f4040048f77", + "externalId": "vokabel-242253", + "title": "Special Olympics", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:e1d328b054b3a71b", + "externalId": "vokabel-258455", + "title": "Surfen", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:6432eb670767ca3d", + "externalId": "vokabel-258457", + "title": "Taekwondo", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:2bbd7e04ba8fb09c", + "externalId": "vokabel-242274", + "title": "Tanzen", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:694d9fef1365860f", + "externalId": "vokabel-242275", + "title": "Tennis", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:ae5cbdd3e95bddba", + "externalId": "vokabel-242276", + "title": "Tischtennis", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:ecac5c3840b1eb29", + "externalId": "vokabel-242277", + "title": "Trampolin", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:f0e8d4cba84885fd", + "externalId": "vokabel-242278", + "title": "Triathlon", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:b218352001a2b36e", + "externalId": "vokabel-242279", + "title": "Turnen", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:9b6e3999cf8538cd", + "externalId": "vokabel-242280", + "title": "Volleyball", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:4c659790d1390f65", + "externalId": "vokabel-272469", + "title": "Wakeboard", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:d99ed872666f0e5e", + "externalId": "vokabel-242281", + "title": "Wasserball", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:33f6909a37d83f41", + "externalId": "vokabel-272470", + "title": "Wasserski", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:710671719e3209d2", + "externalId": "vokabel-272471", + "title": "Wassersport", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:1e8ffa4e9c5155eb", + "externalId": "vokabel-242282", + "title": "Wintersport", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-subgenre:9583a81415fa4d73", + "externalId": "vokabel-258449", + "title": "eSport", + "isAudio": true, + "isVideo": true + }, + { + "id": "urn:ard:category-genre:8cb6a40891166406", + "externalId": "vokabel-251976", + "title": "Sportarten", + "isAudio": true, + "isVideo": true + } + ] +} \ No newline at end of file diff --git a/package.json b/package.json index a0f1ac5..47bfd84 100644 --- a/package.json +++ b/package.json @@ -1,29 +1,37 @@ { - "name": "@swrlab/node-storage-wrapper", - "version": "0.2.3", - "description": "Wrapping AWS S3, GCP GCS, file storage", + "name": "@swrlab/utils", + "version": "1.0.0-beta", + "description": "Wrapping common SWR Audio Lab utils", "main": "./src/index.js", "engines": { "node": ">=12" }, "repository": { "type": "git", - "url": "https://github.com/swrlab/node-storage-wrapper" + "url": "https://github.com/swrlab/node-utils" }, - "author": "SWR audio lab ", + "scripts": { + "ard:coreId": "node ./scripts/ard/coreId.js", + "ard:categories": "node -r dotenv/config scripts/ard/categories.js", + "ard:publishers": "node -r dotenv/config scripts/ard/publishers.js", + "reinstall": "rm -rf node_modules && rm yarn.lock && yarn" + }, + "author": "SWR Audio Lab ", "license": "Hippocratic-2.0", "private": false, - "scripts": {}, "dependencies": { - "@google-cloud/storage": "5.13.0", - "aws-sdk": "2.965.0", - "node-fetch": "2.6.1", + "@google-cloud/storage": "5.18.0", + "aws-sdk": "2.1062.0", + "node-crc": "^1.3.2", + "undici-wrapper": "frytg/undici-wrapper#v0.0.3", "uuid": "8.3.2" }, "devDependencies": { + "@swrlab/eslint-plugin-swr": "0.1.2", "@swrlab/swr-prettier-config": "0.1.2", - "eslint": "7.32.0", - "eslint-plugin-swr": "0.0.5" + "dotenv": "^14.2.0", + "eslint": "8.7.0", + "prettier": "^2.5.1" }, "prettier": "@swrlab/swr-prettier-config" } diff --git a/packages/ard/README.md b/packages/ard/README.md new file mode 100644 index 0000000..1cd05ab --- /dev/null +++ b/packages/ard/README.md @@ -0,0 +1,33 @@ +# SWR Audio Lab / ARD helpers + +Common internal ARD tools like ID creation. + +- [SWR Audio Lab / ARD helpers](#swr-audio-lab--ard-helpers) + - [Install](#install) + - [`createHashedId` - Convert a string to ARD's hash style](#createhashedid---convert-a-string-to-ards-hash-style) + +## Install + +Add the parent package to your dependencies: + +```sh +yarn add @swrlab/utils +``` + +## `createHashedId` - Convert a string to ARD's hash style + +- `string` (required) - value to encode + +Import the library: + +```js +const ardTools = require('@swrlab/utils/packages/ard') +``` + +Then use the toolkit to convert a string: + +```js +const myString = 'my-string-to-encode' +const hashedString = ard.createHashedId(myString) +// 6a80b80f748c9b50 +``` diff --git a/packages/ard/index.js b/packages/ard/index.js new file mode 100644 index 0000000..d41ff46 --- /dev/null +++ b/packages/ard/index.js @@ -0,0 +1,7 @@ +// import packages +const createHashedId = require('../../utils/ard/createHashedId') + +// export packages +module.exports = { + createHashedId, +} diff --git a/packages/storage-wrapper/README.md b/packages/storage-wrapper/README.md new file mode 100644 index 0000000..083b320 --- /dev/null +++ b/packages/storage-wrapper/README.md @@ -0,0 +1,172 @@ +# SWR Audio Lab / Storage Wrapper + +A utility to wrap file access to local, Google Cloud Storage and AWS S3 file storage. + +- [SWR Audio Lab / Storage Wrapper](#swr-audio-lab--storage-wrapper) + - [Install](#install) + - [Initialization](#initialization) + - [`createUri` - Convert to URI](#createuri---convert-to-uri) + - [`createUrl` - Sign a URI for public URL](#createurl---sign-a-uri-for-public-url) + - [`delete` - Delete a file](#delete---delete-a-file) + - [`list` - List files by prefix](#list---list-files-by-prefix) + - [`load` - Download a file](#load---download-a-file) + - [`move` - Copy or Move a file](#move---copy-or-move-a-file) + - [`save` - Save a file](#save---save-a-file) + +## Install + +Add the parent package to your dependencies: + +```sh +yarn add @swrlab/utils +``` + +## Initialization + +We like to create one local file in a project that provides this initialized utility: + +```js +// load node util +const Storage = require('@swrlab/utils/packages/storage-wrapper') + +// load custom keys and storage +const storage = new Storage({ + gs: { + projectId: 'my-project-id', + }, + s3: { region: 'eu-west-1' }, + logging: true, +}) + +// export everything +module.exports = storage +``` + +The `gs` object is the same, as one can provide to the [Google Cloud Storage utility](https://googleapis.dev/nodejs/storage/latest/index.html). We usually only set the `projectId` explicitly. If needed you can provide more details like `keyFilename` or [set credentials using `GOOGLE_APPLICATION_CREDENTIALS`](https://cloud.google.com/docs/authentication/production#auth-cloud-implicit-nodejs) env. + +For AWS the `s3` also provides access to configure the `aws-sdk` library. It has multiple options to load credentials, all documented in [AWS: Configuring the SDK for JavaScript](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/configuring-the-jssdk.html). We sometimes also set the credentials asynchronously using Google Cloud Secret Manager: + +```js +const storage = new Storage({ + gs: { + projectId: 'my-project-id', + }, + s3: { region: 'eu-west-1' }, + logging: true, +}) + +secrets.get('radiohub-ingest-aws').then(({ json }) => { + storage.sdk.s3.config.update(json) +}) +``` + +The `logging` flag controls whether all file actions by this utility should be logged. + +## `createUri` - Convert to URI + +- `bucket` (required) +- `path` (required) + +Create a URI (e.g. `gs://my-bucket/my-file.txt`) from bucket and path names. + +Works with Google Cloud Storage (`gs`): + +```js +const fileUri = storage.createUri.gs(bucket, name) +// gs://bucket/name +``` + +And `s3`: + +```js +const fileUri = storage.createUri.s3(bucket, name) +// s3://bucket/name +``` + +## `createUrl` - Sign a URI for public URL + +- `uri` (required) - Source URI to use for signing +- `ttl` (required) - Time to live in milliseconds for public link, provide as integer or shortform (e.g. `60e3` for `60000`) +- `logPrefix` (optional) - Prefix for log lines + +Use this to sign a URI into a (publicly) accessible URL. Currently only implemented for Google Cloud Storage: + +```js +const sourceUrl = await storage.createUrl(fileUri, 60e3) +``` + +## `delete` - Delete a file + +- `uri` (required) - Source URI to delete +- `logPrefix` (optional) - Prefix for log lines + +Delete an existing file: + +```js +await storage.delete(fileUri) +``` + +The proper connector is detected using the prefixes (`s3://`, `gs://`, `http[s]://` or local file). Actions against `http[s]://` are rejected. + +## `list` - List files by prefix + +- `uri` (required) - Source URI prefix to list +- `max` (required) - Rough maximum of elements expected +- `next` (optional) - Next token if available (AWS only) +- `logPrefix` (optional) - Prefix for log lines + +List all elements matching a prefix, which can be a folder name or folder + fileprefix. +Google Cloud provides a full list of elements: + +```js +const list = await storage.list(fileUriPrefix, 300) +``` + +AWS also returns a next token if available + +```js +const { list, next } = await storage.list(fileUriPrefix, 300) +``` + +The utility keeps listing more elements until either max is reached or no more items are available. Please note that AWS and GCP provide lists in batches, the maximum of elements might be exceeded. + +## `load` - Download a file + +- `uri` (required) - Source URI to load +- `logPrefix` (optional) - Prefix for log lines +- `options` (optional) - Prefix for log lines + - `timeout` (optional) - Timeout for http[s] requests + +Download a single file and returns the contents buffer. + +```js +const fileBuffer = await storage.list(fileUri) +``` + +## `move` - Copy or Move a file + +- `sourceUri` (required) - Source file URI to copy +- `destinationUri` (required) - Destination URI where to copy the file to +- `keepOriginal` (required) - Boolean whether to keep the source +- `logPrefix` (optional) - Prefix for log lines + +Moving provides easy access to copy and move actions between multiple storage types and providers. Switching between copying (non-destructive) and moving (deletes the source) is handled via the `keepOriginal` flag. + +There are essentially three ways to move files: + +1. `gs` to `gs` - Use the Google Cloud's native Storage option to move or copy a file +2. `s3` to `s3` - Use the AWS method for copying and deleting an object +3. `any` to `any` - This uses the internal methods to `load`, `save` and `delete` the files. Please note that this actually downloads the file (incurring bandwidth), rather than using the cloud provider's native methods for moving data. + +## `save` - Save a file + +- `uri` (required) - Destination URI to use for saving +- `buffer` (required) - File buffer to save +- `logPrefix` (optional) - Prefix for log lines +- `resumable` (optional) - Set Google Cloud transfer as `resumable` + +Provide a URI and file buffer to save a file. + +```js +await storage.save(fileUri, myBuffer) +``` diff --git a/src/createUri.js b/packages/storage-wrapper/createUri.js similarity index 71% rename from src/createUri.js rename to packages/storage-wrapper/createUri.js index 316201a..9d0340b 100644 --- a/src/createUri.js +++ b/packages/storage-wrapper/createUri.js @@ -9,10 +9,10 @@ module.exports = { s3: (bucket, path) => { // return data - return ['s3:/', bucket, path].join('/'); + return ['s3:/', bucket, path].join('/') }, gs: (bucket, path) => { // return data - return ['gs:/', bucket, path].join('/'); + return ['gs:/', bucket, path].join('/') }, } diff --git a/packages/storage-wrapper/createUrl.js b/packages/storage-wrapper/createUrl.js new file mode 100644 index 0000000..966ba78 --- /dev/null +++ b/packages/storage-wrapper/createUrl.js @@ -0,0 +1,53 @@ +/* + + node-storage-wrapper + + This module provides easy access to combine bucket + path to unique URIs + +*/ + +module.exports = async function (uri, ttl, logPrefix) { + const thisLogPrefix = logPrefix ? [logPrefix, '>'] : [] + + if (uri.substr(0, 5).toLowerCase() === 's3://') { + // log progress + this.sdk.log(this, 'log', thisLogPrefix.concat(['storage.createUrl.aws >', uri])) + + return Promise.reject(new Error('not implemented')) + } + + if (uri.substr(0, 5).toLowerCase() === 'gs://') { + // google cloud storage + const structure = uri.substr(5).split('/') + const bucket = structure.shift() + const path = structure.join('/') + + // log progress + this.sdk.log(this, 'log', thisLogPrefix.concat(['storage.createUrl.gcp >', uri])) + + // set config + const config = { + action: 'read', + expires: Date.now() + ttl, + } + + // create link + const [url] = await this.sdk.gs.bucket(bucket).file(path).getSignedUrl(config) + + // return link + return Promise.resolve(url) + } + + if (uri.substr(0, 7).toLowerCase() === 'http://' || uri.substr(0, 8).toLowerCase() === 'https://') { + // log progress + this.sdk.log(this, 'log', thisLogPrefix.concat(['storage.createUrl.https >', uri])) + + // return link + return Promise.resolve(uri) + } + + // log progress + this.sdk.log(this, 'log', thisLogPrefix.concat(['storage.createUrl.local >', uri])) + + return Promise.reject(new Error('not implemented')) +} diff --git a/packages/storage-wrapper/delete.js b/packages/storage-wrapper/delete.js new file mode 100644 index 0000000..cfdc7e2 --- /dev/null +++ b/packages/storage-wrapper/delete.js @@ -0,0 +1,72 @@ +/* + + node-storage-wrapper + +*/ + +const deleteLocalFile = (that, filePath) => + new Promise((resolve, reject) => { + that.sdk.fs.unlink(filePath, (err) => { + if (err) reject(err) + else resolve() + }) + }) + +module.exports = async function (uri, logPrefix) { + const thisLogPrefix = logPrefix ? [logPrefix, '>'] : [] + let structure, bucket, path + + if (uri.substr(0, 5).toLowerCase() === 's3://') { + // aws s3 file + structure = uri.substr(5).split('/') + bucket = structure.shift() + path = structure.join('/') + + // log progress + this.sdk.log(this, 'log', thisLogPrefix.concat(['storage.delete.s3 >', uri])) + + // delete from aws + await this.sdk.s3 + .deleteObject({ + Bucket: bucket, + Key: path, + }) + .promise() + + // return ok + return Promise.resolve() + } + + if (uri.substr(0, 5).toLowerCase() === 'gs://') { + // google cloud storage + structure = uri.substr(5).split('/') + bucket = structure.shift() + path = structure.join('/') + + // log progress + this.sdk.log(this, 'log', thisLogPrefix.concat(['storage.delete.gs >', uri])) + + // delete from gcp + await this.sdk.gs.bucket(bucket).file(path).delete(path) + + // return ok + return Promise.resolve() + } + + if (uri.substr(0, 7).toLowerCase() === 'http://' || uri.substr(0, 8).toLowerCase() === 'https://') { + // log progress + this.sdk.log(this, 'log', thisLogPrefix.concat(['storage.delete.https (not possible) >', uri])) + + // return ok + return Promise.resolve() + } + + // log progress + this.sdk.log(this, 'log', thisLogPrefix.concat(['storage.delete.local >', uri])) + + // delete file + await deleteLocalFile(this, uri) + + // return ok + return Promise.resolve() +} diff --git a/src/index.js b/packages/storage-wrapper/index.js similarity index 51% rename from src/index.js rename to packages/storage-wrapper/index.js index 4ae61e2..66bc5e0 100644 --- a/src/index.js +++ b/packages/storage-wrapper/index.js @@ -5,59 +5,59 @@ */ // load node utils -var AWS = require('aws-sdk'); -const fs = require('fs'); -const { Storage } = require('@google-cloud/storage'); +var AWS = require('aws-sdk') +const fs = require('fs') +const { Storage } = require('@google-cloud/storage') // create wrapper function StorageWrapper(config) { // check config if (!config || !config.gs) { - return Promise.reject('storage config invalid'); + return Promise.reject('storage config invalid') } // enable SDKs - this.sdk = {}; + this.sdk = {} // load node utils - this.sdk.fs = fs; + this.sdk.fs = fs // load google cloud storage sdk - this.sdk.gs = new Storage(config.gs); + this.sdk.gs = new Storage(config.gs) // load aws sdk if (config.s3) { - this.sdk.s3 = new AWS.S3(config.s3); + this.sdk.s3 = new AWS.S3(config.s3) } // configure logging this.config = { logging: config.logging, - }; + } // set logging this.sdk.log = function (that, level, message) { if (message instanceof Array) { - message = message.join(' '); + message = message.join(' ') } if (level == 'log') { - that.config.logging ? console.log(message) : null; + that.config.logging ? console.log(message) : null } else if (level == 'warn') { - that.config.logging ? console.warn(message) : null; + that.config.logging ? console.warn(message) : null } else if (level == 'error') { - that.config.logging ? console.error(message) : null; + that.config.logging ? console.error(message) : null } - }; + } // import functions - this.createUri = require('./createUri'); - this.createUrl = require('./createUrl'); - this.delete = require('./delete'); - this.list = require('./list'); - this.load = require('./load'); - this.move = require('./move'); - this.save = require('./save'); + this.createUri = require('./createUri') + this.createUrl = require('./createUrl') + this.delete = require('./delete') + this.list = require('./list') + this.load = require('./load') + this.move = require('./move') + this.save = require('./save') // log progress this.sdk.log(this, 'log', [ @@ -67,8 +67,8 @@ function StorageWrapper(config) { gs: config.gs ? config.gs.projectId : null, s3: config.s3 ? { accessKeyId: config.s3.accessKeyId, region: config.s3.region } : null, }), - ]); + ]) } // export -module.exports = StorageWrapper; +module.exports = StorageWrapper diff --git a/packages/storage-wrapper/list.js b/packages/storage-wrapper/list.js new file mode 100644 index 0000000..a4370be --- /dev/null +++ b/packages/storage-wrapper/list.js @@ -0,0 +1,105 @@ +/* + + node-storage-wrapper + +*/ + +const awsListObjects = async (that, bucket, path, next, logPrefix) => { + try { + // load list from aws, pass next token (nullable) + const files = await that.sdk.s3 + .listObjectsV2({ + Bucket: bucket, + Prefix: path, + MaxKeys: 500, + ContinuationToken: next, + }) + .promise() + + // return only list and next token + return Promise.resolve({ + list: files.Contents, + next: files.IsTruncated ? files.NextContinuationToken : null, + }) + } catch (err) { + that.sdk.log( + 'error', + logPrefix.concat([ + 'storage.list.awsListObjects', + JSON.stringify({ bucket, path, next, message: err.message, stack: err.stack }), + ]) + ) + return Promise.reject(err) + } +} + +const listLocalFiles = (that, uri) => + new Promise((resolve, reject) => { + that.sdk.fs.readdir(uri, 'utf8', (err, data) => { + if (err) reject(err) + else resolve(data) + }) + }) + +module.exports = async function (uri, max, next, logPrefix) { + const thisLogPrefix = logPrefix ? [logPrefix, '>'] : [] + let structure, bucket, path, file + + if (uri.substr(0, 5).toLowerCase() === 's3://') { + // aws s3 file + structure = uri.substr(5).split('/') + bucket = structure.shift() + path = structure.join('/') + + // log progress + this.sdk.log(this, 'log', thisLogPrefix.concat(['storage.list.aws >', uri, max])) + + // load file + let maxNotReached = true + const fileList = [] + + do { + // load data + let awsReturn = await awsListObjects(this, bucket, path, next ? next : null, thisLogPrefix) + + // add to return list + fileList = fileList.concat(awsReturn.list) + + // set next token + next = awsReturn.next + + // calculate max reached + maxNotReached = max && fileList.length < max ? true : false + } while (next && maxNotReached) + + // return list + return Promise.resolve({ list: fileList, next }) + } + + if (uri.substr(0, 5).toLowerCase() === 'gs://') { + // google cloud storage + structure = uri.substr(5).split('/') + bucket = structure.shift() + path = structure.join('/') + + // log request + this.sdk.log(this, 'log', thisLogPrefix.concat(['storage.list.gcp >', uri])) + + // load file + file = await this.sdk.gs.bucket(bucket).getFiles({ + prefix: path, + }) + + // return list + return Promise.resolve(file[0]) + } + + // log request + this.sdk.log(this, 'log', thisLogPrefix.concat(['storage.list.local >', uri])) + + // local file + file = await listLocalFiles(this, uri) + + // return list + return Promise.resolve(file) +} diff --git a/packages/storage-wrapper/load.js b/packages/storage-wrapper/load.js new file mode 100644 index 0000000..74f4028 --- /dev/null +++ b/packages/storage-wrapper/load.js @@ -0,0 +1,84 @@ +/* + + node-storage-wrapper + +*/ + +// load node utils +const undici = require('../../utils/undici') + +const loadLocalFile = (that, uri) => + new Promise((resolve, reject) => { + that.sdk.fs.readFile(uri, (err, data) => { + if (err) reject(err) + else resolve(data) + }) + }) + +module.exports = async function (uri, logPrefix, options) { + const thisLogPrefix = logPrefix ? [logPrefix, '>'] : [] + let structure, bucket, path, file + + if (uri.substr(0, 5).toLowerCase() === 's3://') { + // aws s3 file + structure = uri.substr(5).split('/') + bucket = structure.shift() + path = structure.join('/') + + // log progress + this.sdk.log(this, 'log', thisLogPrefix.concat(['storage.load.aws >', uri])) + + // load file + file = await this.sdk.s3 + .getObject({ + Bucket: bucket, + Key: path, + }) + .promise() + + // return file + return Promise.resolve(file.Body) + } + + if (uri.substr(0, 5).toLowerCase() === 'gs://') { + // google cloud storage + structure = uri.substr(5).split('/') + bucket = structure.shift() + path = structure.join('/') + + this.sdk.log(this, 'log', thisLogPrefix.concat(['storage.load gcp >', uri])) + + // load file + file = await this.sdk.gs.bucket(bucket).file(path).download() + + // return file + return Promise.resolve(file[0]) + } + + if (uri.substr(0, 7).toLowerCase() === 'http://' || uri.substr(0, 8).toLowerCase() === 'https://') { + // log progress + this.sdk.log(this, 'log', thisLogPrefix.concat(['storage.load.https >', uri])) + + // public http(s) endpoint + file = await undici(uri, { + timeout: options?.timeout, + method: 'GET', + headers: { 'User-Agent': 'node-storage-wrapper' }, + }) + + if (file.ok) { + return Promise.resolve(file.buffer) + } + + return Promise.reject(new Error(`fetching url failed with status > ${file.statusCode}`)) + } + + // log progress + this.sdk.log(this, 'log', thisLogPrefix.concat(['storage.load.local >', uri])) + + // local file + file = await loadLocalFile(this, uri) + + // return file + return Promise.resolve(file) +} diff --git a/packages/storage-wrapper/move.js b/packages/storage-wrapper/move.js new file mode 100644 index 0000000..74f037f --- /dev/null +++ b/packages/storage-wrapper/move.js @@ -0,0 +1,127 @@ +/* + + node-storage-wrapper + +*/ + +module.exports = async function (sourceUri, destinationUri, keepOriginal, logPrefix) { + const thisLogPrefix = logPrefix ? [logPrefix, '>'] : [] + let structure, bucket, path + + if (sourceUri.substr(0, 5).toLowerCase() === 'gs://' && destinationUri.substr(0, 5).toLowerCase() === 'gs://') { + // google to google transfer + + // parse source + structure = sourceUri.substr(5).split('/') + bucket = structure.shift() + path = structure.join('/') + + // move file within gcs + if (keepOriginal !== true) { + // move is productive/ destructive + this.sdk.log( + this, + 'log', + thisLogPrefix.concat(['storage.move.gcp2gcp >', sourceUri, destinationUri]) + ) + + // move file + await this.sdk.gs.bucket(bucket).file(path).move(destinationUri) + } else { + // mode is dev, only copy file + this.sdk.log( + this, + 'log', + thisLogPrefix.concat([ + 'storage.move.gcp2gcp (only copying) >', + sourceUri, + destinationUri, + ]) + ) + + // copy file + await this.sdk.gs.bucket(bucket).file(path).copy(destinationUri) + } + + // return ok + return Promise.resolve() + } + + if (sourceUri.substr(0, 5).toLowerCase() === 's3://' && destinationUri.substr(0, 5).toLowerCase() === 's3://') { + // google to google transfer + + // parse source + structure = destinationUri.substr(5).split('/') + bucket = structure.shift() + path = structure.join('/') + + // always copying + this.sdk.log( + this, + 'log', + thisLogPrefix.concat(['storage.move.aws2aws copying >', sourceUri, destinationUri]) + ) + + // copy file + await this.sdk.s3 + .copyObject({ + Bucket: bucket, + Key: path, + CopySource: sourceUri.replace('s3://', '/'), + }) + .promise() + + // move file within gcs + if (keepOriginal !== true) { + // move is productive/ destructive + this.sdk.log( + this, + 'log', + thisLogPrefix.concat(['storage.move.aws2aws deleting source >', sourceUri]) + ) + + // parse source + structure = sourceUri.substr(5).split('/') + bucket = structure.shift() + path = structure.join('/') + + // move file + await this.sdk.s3 + .deleteObject({ + Bucket: bucket, + Key: path, + }) + .promise() + } + + // return ok + return Promise.resolve() + } + + // any to any transfer + this.sdk.log( + this, + 'log', + thisLogPrefix.concat(['storage.move.any2any >', keepOriginal, sourceUri, destinationUri]) + ) + + // download file + const blob = await this.load(sourceUri) + + // save file to destination + await this.save(destinationUri, blob) + + // delete file if in production + if (keepOriginal !== true) { + await this.delete(sourceUri) + } else { + this.sdk.log( + this, + 'log', + thisLogPrefix.concat(['storage.move.any2any not deleting sourceUri >', keepOriginal, sourceUri]) + ) + } + + // return ok + return Promise.resolve() +} diff --git a/packages/storage-wrapper/save.js b/packages/storage-wrapper/save.js new file mode 100644 index 0000000..e4af639 --- /dev/null +++ b/packages/storage-wrapper/save.js @@ -0,0 +1,99 @@ +/* + + node-storage-wrapper + +*/ + +// load node utils +const os = require('os') +const pathUtil = require('path') +const { v4: uuidv4 } = require('uuid') + +const saveLocalFile = (that, uri, buffer) => + new Promise((resolve, reject) => { + that.sdk.fs.writeFile(uri, buffer, (err) => { + if (err) reject(err) + else resolve() + }) + }) + +const deleteLocalFile = (that, filePath) => + new Promise((resolve, reject) => { + that.sdk.fs.unlink(filePath, (err) => { + if (err) reject(err) + else resolve() + }) + }) + +module.exports = async function (uri, buffer, logPrefix, resumable) { + const thisLogPrefix = logPrefix ? [logPrefix, '>'] : [] + let structure, bucket, path + + if (uri.substr(0, 5).toLowerCase() === 's3://') { + // aws s3 file + structure = uri.substr(5).split('/') + bucket = structure.shift() + path = structure.join('/') + + // log progress + this.sdk.log(this, 'log', thisLogPrefix.concat(['storage.save.s3 >', uri])) + + // upload to aws + await this.sdk.s3 + .upload({ + Bucket: bucket, + Body: buffer, + Key: path, + }) + .promise() + + // return ok + return Promise.resolve() + } + + if (uri.substr(0, 5).toLowerCase() === 'gs://') { + // google cloud storage + structure = uri.substr(5).split('/') + bucket = structure.shift() + path = structure.join('/') + + // save to local file + const tempFilePath = pathUtil.resolve(os.tmpdir(), uuidv4()) + await saveLocalFile(this, tempFilePath, buffer) + + // log progress + this.sdk.log(this, 'log', thisLogPrefix.concat(['storage.save.gs >', uri])) + + // create default bucket config + const bucketConfig = { + gzip: false, + destination: path, + metadata: {}, + } + + // update bucket config with resumable flag if set + if (resumable !== undefined && resumable !== null) { + bucketConfig.resumable = resumable + } + + // upload file to gcs + await this.sdk.gs.bucket(bucket).upload(tempFilePath, bucketConfig) + + // delete local temp file + await deleteLocalFile(this, tempFilePath) + + // return ok + return Promise.resolve() + } + + // local file + + // log progress + this.sdk.log(this, 'log', thisLogPrefix.concat(['storage.save.local >', uri])) + + // save file + const file = await saveLocalFile(this, uri, buffer) + + // return ok + return Promise.resolve(file) +} diff --git a/packages/strings/README.md b/packages/strings/README.md new file mode 100644 index 0000000..fac61d5 --- /dev/null +++ b/packages/strings/README.md @@ -0,0 +1,117 @@ +# SWR Audio Lab / Strings, Arrays, Objects + +Common string, array, object encoding and getter helpers. + +- [SWR Audio Lab / Strings, Arrays, Objects](#swr-audio-lab--strings-arrays-objects) + - [Install](#install) + - [`isArray` - Check if a value is a proper array](#isarray---check-if-a-value-is-a-proper-array) + - [`isIncluded` - Check if a value (haystack) includes another value (needle)](#isincluded---check-if-a-value-haystack-includes-another-value-needle) + - [`isObject` - check if a value is a proper object](#isobject---check-if-a-value-is-a-proper-object) + - [`removeDoubleSpaces` - take a string and remove its duplicate spaces](#removedoublespaces---take-a-string-and-remove-its-duplicate-spaces) + - [`toHex` - take a string convert it to a hex string](#tohex---take-a-string-convert-it-to-a-hex-string) + +## Install + +Add the parent package to your dependencies: + +```sh +yarn add @swrlab/utils +``` + +## `isArray` - Check if a value is a proper array + +- `value` (required) - Value to check + +Import the library: + +```js +const { isArray } = require('@swrlab/utils/packages/strings') +``` + +Then use the toolkit: + +```js +isArray(['hello world']) +// true + +isArray('hello world') +// false +``` + +## `isIncluded` - Check if a value (haystack) includes another value (needle) + +- `haystack` (required) - Array or value to check +- `needle` (required) - Array or value to check + +Import the library: + +```js +const { isIncluded } = require('@swrlab/utils/packages/strings') +``` + +Then use the toolkit: + +```js +isIncluded('hello world', 'hello') +// true + +isIncluded('hello world', 'earth') +// false +``` + +## `isObject` - check if a value is a proper object + +- `value` (required) - Value to check + +Import the library: + +```js +const { isObject } = require('@swrlab/utils/packages/strings') +``` + +Then use the toolkit: + +```js +isObject({ hello: 'world' }) +// true + +isObject('hello world') +// false +``` + +## `removeDoubleSpaces` - take a string and remove its duplicate spaces + +- `value` (required) - Value to convert + +Import the library: + +```js +const { removeDoubleSpaces } = require('@swrlab/utils/packages/strings') +``` + +Then use the toolkit: + +```js +removeDoubleSpaces('hello world') +// hello world + +removeDoubleSpaces('hello world once again') +// hello world once again +``` + +## `toHex` - take a string convert it to a hex string + +- `value` (required) - Value to convert + +Import the library: + +```js +const { toHex } = require('@swrlab/utils/packages/strings') +``` + +Then use the toolkit: + +```js +toHex('hello world') +// 68656c6c6f20776f726c64 +``` diff --git a/packages/strings/index.js b/packages/strings/index.js new file mode 100644 index 0000000..7e214e9 --- /dev/null +++ b/packages/strings/index.js @@ -0,0 +1,15 @@ +// import packages +const isArray = require('../../utils/strings/isArray') +const isIncluded = require('../../utils/strings/isIncluded') +const isObject = require('../../utils/strings/isObject') +const removeDoubleSpaces = require('../../utils/strings/removeDoubleSpaces') +const toHex = require('../../utils/strings/toHex') + +// export packages +module.exports = { + isArray, + isIncluded, + isObject, + removeDoubleSpaces, + toHex, +} diff --git a/packages/undici/README.md b/packages/undici/README.md new file mode 100644 index 0000000..28c47f9 --- /dev/null +++ b/packages/undici/README.md @@ -0,0 +1,16 @@ +# SWR Audio Lab / Undici + +Please see [github/undici-wrapper](https://github.com/frytg/undici-wrapper) for the full configuration options. + +- [SWR Audio Lab / Undici](#swr-audio-lab--undici) + - [Import](#import) + +## Import + +```js +// load request handler +const undici = require('@swrlab/utils/packages/undici') + +// export handler +module.exports = undici() +``` diff --git a/packages/undici/index.js b/packages/undici/index.js new file mode 100644 index 0000000..87debee --- /dev/null +++ b/packages/undici/index.js @@ -0,0 +1,5 @@ +// load request handler +const undici = require('undici-wrapper') + +// export handler +module.exports = undici diff --git a/scripts/ard/categories.js b/scripts/ard/categories.js new file mode 100644 index 0000000..9dd23f6 --- /dev/null +++ b/scripts/ard/categories.js @@ -0,0 +1,51 @@ +// load utils +const undici = require('../../packages/undici')() +const createHashedId = require('../../utils/ard/createHashedId') + +// init storage +const Storage = require('../../packages/storage-wrapper') + +const storage = new Storage({ + gs: { projectId: process.env.GCP_PROJECT_ID }, + logging: true, +}) + +const ARD_API_URL = 'https://ard-kk-ii.team-wdrmediathek.de/files/mdt_tree.json' +const CORE_PREFIX_GENRE = 'urn:ard:category-genre:' +const CORE_PREFIX_SUBGENRE = 'urn:ard:category-subgenre:' + +const crawl = async () => { + const list = [] + + const { json: categories } = await undici(ARD_API_URL) + + const remapItem = (item) => { + // remap children if available + const children = item.children ? item.children.map(remapItem) : null + + // set main or sub prefix + const prefix = item.children ? CORE_PREFIX_GENRE : CORE_PREFIX_SUBGENRE + + // build item + const category = { + id: `${prefix}${createHashedId(item.normId)}`, + externalId: item.normId, + title: item.vokabelName, + isAudio: item.audio === 'TRUE', + isVideo: item.video === 'TRUE', + children, + } + + // add to list and tree + if (!list.find((listItem) => listItem.id === category.id)) { + list.push({ ...category, children: undefined }) + } + return category + } + + const tree = categories.map(remapItem) + + await storage.save('data/ard/categories.json', JSON.stringify({ tree, list }, null, '\t')) +} + +crawl() diff --git a/scripts/ard/coreId.js b/scripts/ard/coreId.js new file mode 100644 index 0000000..6833711 --- /dev/null +++ b/scripts/ard/coreId.js @@ -0,0 +1,20 @@ +/* + + by SWR audio lab + + this file creates a CLI for hashing ids + +*/ + +// load utils +const createHashedId = require('../../utils/ard/createHashedId') + +// parse input +const input = process.argv[2] + +// log output +console.log('INPUT:') +console.log(input) +console.log(' ') +console.log('OUTPUT (CRC64-ECMA182):') +console.log(createHashedId(input)) diff --git a/scripts/ard/publishers.js b/scripts/ard/publishers.js new file mode 100644 index 0000000..e0939f2 --- /dev/null +++ b/scripts/ard/publishers.js @@ -0,0 +1,50 @@ +// load utils +const undici = require('../../packages/undici')() + +// init storage +const Storage = require('../../packages/storage-wrapper') + +const storage = new Storage({ + gs: { projectId: process.env.GCP_PROJECT_ID }, + logging: true, +}) + +const ARD_API_URL = process.env.ARD_DELIVER_API || 'https://deliver-test.ard.de/organization-service/' +const ARD_API_HEADERS = { Authorization: `Basic ${Buffer.from(process.env.ARD_AUTH).toString('base64')}` } + +const crawl = async () => { + const output = [] + + const { json: publishers } = await undici(`${ARD_API_URL}publishers?page=0&size=500`, { + headers: ARD_API_HEADERS, + }) + + for await (const publisher of publishers.elements) { + const { json: publisherInfo } = await undici(publisher.href, { headers: ARD_API_HEADERS }) + + const { json: institutionInfo } = await undici(publisherInfo.institution.href, { + headers: ARD_API_HEADERS, + }) + + const details = { + _type: publisherInfo._type, + id: publisherInfo.id, + externalId: publisherInfo.externalId, + title: publisherInfo.title, + institution: { + _type: institutionInfo._type, + id: institutionInfo.id, + externalId: institutionInfo.externalId, + title: institutionInfo.title, + acronym: institutionInfo.acronym, + }, + } + + output.push(details) + console.log(details) + } + + await storage.save('tmp/ard-publishers.json', JSON.stringify(output)) +} + +crawl() diff --git a/src/createUrl.js b/src/createUrl.js deleted file mode 100644 index 1e5c955..0000000 --- a/src/createUrl.js +++ /dev/null @@ -1,56 +0,0 @@ -/* - - node-storage-wrapper - - This module provides easy access to combine bucket + path to unique URIs - -*/ - -module.exports = async function (uri, ttl, logPrefix) { - try { - logPrefix = logPrefix ? [logPrefix, '>'] : []; - - if (uri.substr(0, 5).toLowerCase() == 's3://') { - // log progress - this.sdk.log(this, 'log', logPrefix.concat(['storage.createUrl.aws >', uri])); - - return Promise.reject('not implemented'); - } else if (uri.substr(0, 5).toLowerCase() == 'gs://') { - // google cloud storage - let structure = uri.substr(5).split('/'); - let bucket = structure.shift(); - let path = structure.join('/'); - - // log progress - this.sdk.log(this, 'log', logPrefix.concat(['storage.createUrl.gcp >', uri])); - - // set config - const config = { - action: 'read', - expires: Date.now() + ttl, - }; - - // create link - var [url] = await this.sdk.gs.bucket(bucket).file(path).getSignedUrl(config); - - // return link - return Promise.resolve(url); - } else if ( - uri.substr(0, 7).toLowerCase() == 'http://' || - uri.substr(0, 8).toLowerCase() == 'https://' - ) { - // log progress - this.sdk.log(this, 'log', logPrefix.concat(['storage.createUrl.https >', uri])); - - // return link - return Promise.resolve(uri); - } else { - // log progress - this.sdk.log(this, 'log', logPrefix.concat(['storage.createUrl.local >', uri])); - - return Promise.reject('not implemented'); - } - } catch (err) { - return Promise.reject(err); - } -}; diff --git a/src/delete.js b/src/delete.js deleted file mode 100644 index e2ffff8..0000000 --- a/src/delete.js +++ /dev/null @@ -1,75 +0,0 @@ -/* - - node-storage-wrapper - -*/ - -const deleteLocalFile = (that, filePath) => - new Promise((resolve, reject) => { - that.sdk.fs.unlink(filePath, (err) => { - if (err) reject(err); - else resolve(); - }); - }); - -module.exports = async function (uri, logPrefix) { - try { - logPrefix = logPrefix ? [logPrefix, '>'] : []; - let structure, bucket, path; - - if (uri.substr(0, 5).toLowerCase() == 's3://') { - // aws s3 file - structure = uri.substr(5).split('/'); - bucket = structure.shift(); - path = structure.join('/'); - - // log progress - this.sdk.log(this, 'log', logPrefix.concat(['storage.delete.s3 >', uri])); - - // delete from aws - await this.sdk.s3 - .deleteObject({ - Bucket: bucket, - Key: path, - }) - .promise(); - - // return ok - return Promise.resolve(); - } else if (uri.substr(0, 5).toLowerCase() == 'gs://') { - // google cloud storage - structure = uri.substr(5).split('/'); - bucket = structure.shift(); - path = structure.join('/'); - - // log progress - this.sdk.log(this, 'log', logPrefix.concat(['storage.delete.gs >', uri])); - - // delete from gcp - await this.sdk.gs.bucket(bucket).file(path).delete(path); - - // return ok - return Promise.resolve(); - } else if ( - uri.substr(0, 7).toLowerCase() == 'http://' || - uri.substr(0, 8).toLowerCase() == 'https://' - ) { - // log progress - this.sdk.log(this, 'log', logPrefix.concat(['storage.delete.https (not possible) >', uri])); - - // return ok - return Promise.resolve(); - } else { - // log progress - this.sdk.log(this, 'log', logPrefix.concat(['storage.delete.local >', uri])); - - // delete file - await deleteLocalFile(this, uri); - - // return ok - return Promise.resolve(); - } - } catch (err) { - return Promise.reject(err); - } -}; diff --git a/src/list.js b/src/list.js deleted file mode 100644 index 8212653..0000000 --- a/src/list.js +++ /dev/null @@ -1,107 +0,0 @@ -/* - - node-storage-wrapper - -*/ - -const awsListObjects = async (that, bucket, path, next, logPrefix) => { - try { - // load list from aws, pass next token (nullable) - let files = await that.sdk.s3 - .listObjectsV2({ - Bucket: bucket, - Prefix: path, - MaxKeys: 500, - ContinuationToken: next, - }) - .promise(); - - // return only list and next token - return Promise.resolve({ - list: files.Contents, - next: files.IsTruncated ? files.NextContinuationToken : null, - }); - } catch (err) { - that.sdk.log( - 'error', - logPrefix.concat([ - 'storage.list.awsListObjects', - JSON.stringify({ bucket, path, next, message: err.message, stack: err.stack }), - ]) - ); - return Promise.reject(err); - } -}; - -const listLocalFiles = (that, uri) => - new Promise((resolve, reject) => { - that.sdk.fs.readdir(uri, 'utf8', (err, data) => { - if (err) reject(err); - else resolve(data); - }); - }); - -module.exports = async function (uri, max, next, logPrefix) { - try { - logPrefix = logPrefix ? [logPrefix, '>'] : []; - let structure, bucket, path, file; - - if (uri.substr(0, 5).toLowerCase() == 's3://') { - // aws s3 file - structure = uri.substr(5).split('/'); - bucket = structure.shift(); - path = structure.join('/'); - - // log progress - this.sdk.log(this, 'log', logPrefix.concat(['storage.list.aws >', uri, max])); - - // load file - let maxNotReached = true; - let fileList = []; - - do { - // load data - let awsReturn = await awsListObjects(this, bucket, path, next ? next : null, logPrefix); - - // add to return list - fileList = fileList.concat(awsReturn.list); - - // set next token - next = awsReturn.next; - - // calculate max reached - maxNotReached = max && fileList.length < max ? true : false; - } while (next && maxNotReached); - - // return list - return Promise.resolve({ list: fileList, next }); - } else if (uri.substr(0, 5).toLowerCase() == 'gs://') { - // google cloud storage - structure = uri.substr(5).split('/'); - bucket = structure.shift(); - path = structure.join('/'); - - // log request - this.sdk.log(this, 'log', logPrefix.concat(['storage.list.gcp >', uri])); - - // load file - file = await this.sdk.gs.bucket(bucket).getFiles({ - prefix: path, - }); - - // return list - return Promise.resolve(file[0]); - } else { - // log request - this.sdk.log(this, 'log', logPrefix.concat(['storage.list.local >', uri])); - - // local file - let file = await listLocalFiles(this, uri); - - // return list - return Promise.resolve(file); - } - } catch (err) { - return Promise.reject(err); - } -}; diff --git a/src/load.js b/src/load.js deleted file mode 100644 index e58f892..0000000 --- a/src/load.js +++ /dev/null @@ -1,109 +0,0 @@ -/* - - node-storage-wrapper - -*/ - -// load node utils -const fetch = require('node-fetch'); -const http = require('http'); -const https = require('https'); - -// enable keepalive -const httpAgent = new http.Agent({ - keepAlive: true, -}); -const httpsAgent = new https.Agent({ - keepAlive: true, -}); - -const loadLocalFile = (that, uri) => - new Promise((resolve, reject) => { - that.sdk.fs.readFile(uri, (err, data) => { - if (err) reject(err); - else resolve(data); - }); - }); - -module.exports = async function (uri, logPrefix) { - try { - logPrefix = logPrefix ? [logPrefix, '>'] : []; - let structure, bucket, path, file; - - if (uri.substr(0, 5).toLowerCase() == 's3://') { - // aws s3 file - structure = uri.substr(5).split('/'); - bucket = structure.shift(); - path = structure.join('/'); - - // log progress - this.sdk.log(this, 'log', logPrefix.concat(['storage.load.aws >', uri])); - - // load file - let file = await this.sdk.s3 - .getObject({ - Bucket: bucket, - Key: path, - }) - .promise(); - - // return file - return Promise.resolve(file.Body); - } else if (uri.substr(0, 5).toLowerCase() == 'gs://') { - // google cloud storage - structure = uri.substr(5).split('/'); - bucket = structure.shift(); - path = structure.join('/'); - - this.sdk.log(this, 'log', logPrefix.concat(['storage.load gcp >', uri])); - - // load file - file = await this.sdk.gs.bucket(bucket).file(path).download(); - - // return file - return Promise.resolve(file[0]); - } else if ( - uri.substr(0, 7).toLowerCase() == 'http://' || - uri.substr(0, 8).toLowerCase() == 'https://' - ) { - // log progress - this.sdk.log(this, 'log', logPrefix.concat(['storage.load.https >', uri])); - - // public http(s) endpoint - let file = await fetch(uri, { - method: 'get', - - headers: { - 'User-Agent': 'node-storage-wrapper', - Connection: 'keep-alive', - }, - - agent: function (_parsedURL) { - if (_parsedURL.protocol == 'http:') { - return httpAgent; - } else { - return httpsAgent; - } - }, - }); - - if (file.ok) { - file = await file.buffer(); - return Promise.resolve(file); - } else { - return Promise.reject('fetching url failed with status > ' + file.status); - } - } else { - // log progress - this.sdk.log(this, 'log', logPrefix.concat(['storage.load.local >', uri])); - - // local file - let file = await loadLocalFile(this, uri); - - // return file - return Promise.resolve(file); - } - } catch (err) { - return Promise.reject(err); - } -}; diff --git a/src/move.js b/src/move.js deleted file mode 100644 index 053769d..0000000 --- a/src/move.js +++ /dev/null @@ -1,139 +0,0 @@ -/* - - node-storage-wrapper - -*/ - -module.exports = async function (sourceUri, destinationUri, keepOriginal, logPrefix) { - try { - logPrefix = logPrefix ? [logPrefix, '>'] : []; - let structure, bucket, path, blob; - - if ( - sourceUri.substr(0, 5).toLowerCase() == 'gs://' && - destinationUri.substr(0, 5).toLowerCase() == 'gs://' - ) { - // google to google transfer - - // parse source - structure = sourceUri.substr(5).split('/'); - bucket = structure.shift(); - path = structure.join('/'); - - // move file within gcs - if (keepOriginal != true) { - // move is productive/ destructive - this.sdk.log( - this, - 'log', - logPrefix.concat(['storage.move.gcp2gcp >', sourceUri, destinationUri]) - ); - - // move file - await this.sdk.gs.bucket(bucket).file(path).move(destinationUri); - } else { - // mode is dev, only copy file - this.sdk.log( - this, - 'log', - logPrefix.concat([ - 'storage.move.gcp2gcp (only copying) >', - sourceUri, - destinationUri, - ]) - ); - - // copy file - await this.sdk.gs.bucket(bucket).file(path).copy(destinationUri); - } - - // return ok - return Promise.resolve(); - } else if ( - sourceUri.substr(0, 5).toLowerCase() == 's3://' && - destinationUri.substr(0, 5).toLowerCase() == 's3://' - ) { - // google to google transfer - - // parse source - structure = destinationUri.substr(5).split('/'); - bucket = structure.shift(); - path = structure.join('/'); - - // always copying - this.sdk.log( - this, - 'log', - logPrefix.concat(['storage.move.aws2aws copying >', sourceUri, destinationUri]) - ); - - // copy file - await this.sdk.s3 - .copyObject({ - Bucket: bucket, - Key: path, - CopySource: sourceUri.replace('s3://', '/'), - }) - .promise(); - - // move file within gcs - if (keepOriginal != true) { - // move is productive/ destructive - this.sdk.log( - this, - 'log', - logPrefix.concat(['storage.move.aws2aws deleting source >', sourceUri]) - ); - - // parse source - structure = sourceUri.substr(5).split('/'); - bucket = structure.shift(); - path = structure.join('/'); - - // move file - await this.sdk.s3 - .deleteObject({ - Bucket: bucket, - Key: path, - }) - .promise(); - } - - // return ok - return Promise.resolve(); - } else { - // any to any transfer - this.sdk.log( - this, - 'log', - logPrefix.concat(['storage.move.any2any >', keepOriginal, sourceUri, destinationUri]) - ); - - // download file - blob = await this.load(sourceUri); - - // save file to destination - await this.save(destinationUri, blob); - - // delete file if in production - if (keepOriginal != true) { - await this.delete(sourceUri); - } else { - this.sdk.log( - this, - 'log', - logPrefix.concat([ - 'storage.move.any2any not deleting sourceUri >', - keepOriginal, - sourceUri, - ]) - ); - } - - // return ok - return Promise.resolve(); - } - } catch (err) { - return Promise.reject(err); - } -}; diff --git a/src/save.js b/src/save.js deleted file mode 100644 index 80f7eb0..0000000 --- a/src/save.js +++ /dev/null @@ -1,101 +0,0 @@ -/* - - node-storage-wrapper - -*/ - -// load node utils -const os = require('os'); -const pathUtil = require('path'); -const { v4: uuidv4 } = require('uuid'); - -const saveLocalFile = (that, uri, buffer) => - new Promise((resolve, reject) => { - that.sdk.fs.writeFile(uri, buffer, (err) => { - if (err) reject(err); - else resolve(); - }); - }); - -const deleteLocalFile = (that, filePath) => - new Promise((resolve, reject) => { - that.sdk.fs.unlink(filePath, (err) => { - if (err) reject(err); - else resolve(); - }); - }); - -module.exports = async function (uri, buffer, logPrefix, resumable) { - try { - logPrefix = logPrefix ? [logPrefix, '>'] : []; - let structure, bucket, path; - - if (uri.substr(0, 5).toLowerCase() == 's3://') { - // aws s3 file - structure = uri.substr(5).split('/'); - bucket = structure.shift(); - path = structure.join('/'); - - // log progress - this.sdk.log(this, 'log', logPrefix.concat(['storage.save.s3 >', uri])); - - // upload to aws - await this.sdk.s3 - .upload({ - Bucket: bucket, - Body: buffer, - Key: path, - }) - .promise(); - - // return ok - return Promise.resolve(); - } else if (uri.substr(0, 5).toLowerCase() == 'gs://') { - // google cloud storage - structure = uri.substr(5).split('/'); - bucket = structure.shift(); - path = structure.join('/'); - - // save to local file - let tempFilePath = pathUtil.resolve(os.tmpdir(), uuidv4()); - await saveLocalFile(this, tempFilePath, buffer); - - // log progress - this.sdk.log(this, 'log', logPrefix.concat(['storage.save.gs >', uri])); - - // create default bucket config - let bucketConfig = { - gzip: false, - destination: path, - metadata: {}, - } - - // update bucket config with resumable flag if set - if (resumable !== undefined && resumable !== null) { - bucketConfig.resumable = resumable - } - - // upload file to gcs - await this.sdk.gs.bucket(bucket).upload(tempFilePath, bucketConfig); - - // delete local temp file - await deleteLocalFile(this, tempFilePath); - - // return ok - return Promise.resolve(); - } else { - // local file - - // log progress - this.sdk.log(this, 'log', logPrefix.concat(['storage.save.local >', uri])); - - // save file - let file = await saveLocalFile(this, uri, buffer); - - // return ok - return Promise.resolve(file); - } - } catch (err) { - return Promise.reject(err); - } -}; diff --git a/tmp/.gitkeep b/tmp/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/utils/ard/createHashedId.js b/utils/ard/createHashedId.js new file mode 100644 index 0000000..35bb79c --- /dev/null +++ b/utils/ard/createHashedId.js @@ -0,0 +1,15 @@ +/* + + by SWR audio lab + + this file creates a CRC64-ECMA182-compliant hash + based on an utf-8 encoded input string + +*/ + +// load node utils +const crc = require('node-crc') + +module.exports = (input) => { + return crc.crc64(Buffer.from(input, 'utf-8')).toString('hex') +} diff --git a/utils/strings/isArray.js b/utils/strings/isArray.js new file mode 100644 index 0000000..3a05411 --- /dev/null +++ b/utils/strings/isArray.js @@ -0,0 +1,2 @@ +// check if a variable is really an array +module.exports = (value) => !!(value instanceof Array) diff --git a/utils/strings/isIncluded.js b/utils/strings/isIncluded.js new file mode 100644 index 0000000..0b74ff2 --- /dev/null +++ b/utils/strings/isIncluded.js @@ -0,0 +1,2 @@ +// check if a variable (haystack) includes a needle +module.exports = (haystack, needle) => haystack.indexOf(needle) !== -1 diff --git a/utils/strings/isObject.js b/utils/strings/isObject.js new file mode 100644 index 0000000..c3c26d5 --- /dev/null +++ b/utils/strings/isObject.js @@ -0,0 +1,5 @@ +// import utils +const isArray = require('./isArray') + +// check if a variable is really an object +module.exports = (value) => value instanceof Object && !isArray(value) diff --git a/utils/strings/removeDoubleSpaces.js b/utils/strings/removeDoubleSpaces.js new file mode 100644 index 0000000..29764a2 --- /dev/null +++ b/utils/strings/removeDoubleSpaces.js @@ -0,0 +1,2 @@ +// remove duplicate spaces from a string +module.exports = (value) => value.replace(/ +(?= )/g, '') diff --git a/utils/strings/toHex.js b/utils/strings/toHex.js new file mode 100644 index 0000000..85ac640 --- /dev/null +++ b/utils/strings/toHex.js @@ -0,0 +1,2 @@ +// convert input to hex value +module.exports = (value) => Buffer.from(value).toString('hex') diff --git a/utils/undici/index.js b/utils/undici/index.js new file mode 100644 index 0000000..9a67801 --- /dev/null +++ b/utils/undici/index.js @@ -0,0 +1,13 @@ +/* + + SWR Audio Lab + + this file runs the undici-wrapper util + +*/ + +// load request handler +const undici = require('undici-wrapper') + +// export handler +module.exports = undici() diff --git a/yarn.lock b/yarn.lock index 2f1278c..e5f7f08 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,139 +2,217 @@ # yarn lockfile v1 -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" + integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== + dependencies: + "@babel/highlight" "^7.16.7" + +"@babel/compat-data@^7.16.4": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.8.tgz#31560f9f29fdf1868de8cb55049538a1b9732a60" + integrity sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q== + +"@babel/core@^7.12.16": + version "7.16.12" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.12.tgz#5edc53c1b71e54881315923ae2aedea2522bb784" + integrity sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.16.8" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helpers" "^7.16.7" + "@babel/parser" "^7.16.12" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.10" + "@babel/types" "^7.16.8" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + source-map "^0.5.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" - integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== +"@babel/eslint-parser@^7.12.16": + version "7.16.5" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.16.5.tgz#48d3485091d6e36915358e4c0d0b2ebe6da90462" + integrity sha512-mUqYa46lgWqHKQ33Q6LNCGp/wPR3eqOYTUixHFsfrSQqRxH0+WOzca75iEjFr5RDGH1dDz622LaHhLOzOuQRUA== dependencies: - "@babel/highlight" "^7.10.4" + eslint-scope "^5.1.1" + eslint-visitor-keys "^2.1.0" + semver "^6.3.0" -"@babel/generator@^7.10.5": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.5.tgz#1b903554bc8c583ee8d25f1e8969732e6b829a69" - integrity sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig== +"@babel/generator@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.8.tgz#359d44d966b8cd059d543250ce79596f792f2ebe" + integrity sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw== dependencies: - "@babel/types" "^7.10.5" + "@babel/types" "^7.16.8" jsesc "^2.5.1" source-map "^0.5.0" -"@babel/helper-function-name@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" - integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== - dependencies: - "@babel/helper-get-function-arity" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-get-function-arity@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" - integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-split-export-declaration@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz#2c70576eaa3b5609b24cb99db2888cc3fc4251d1" - integrity sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-validator-identifier@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" - integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== - -"@babel/highlight@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" - integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== - dependencies: - "@babel/helper-validator-identifier" "^7.10.4" +"@babel/helper-compilation-targets@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" + integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA== + dependencies: + "@babel/compat-data" "^7.16.4" + "@babel/helper-validator-option" "^7.16.7" + browserslist "^4.17.5" + semver "^6.3.0" + +"@babel/helper-environment-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" + integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" + integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== + 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.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" + integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-hoist-variables@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" + integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-module-imports@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" + integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-module-transforms@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz#7665faeb721a01ca5327ddc6bba15a5cb34b6a41" + integrity sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng== + 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-simple-access@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7" + integrity sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-split-export-declaration@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" + integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-validator-identifier@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" + integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== + +"@babel/helper-validator-option@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" + integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== + +"@babel/helpers@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.16.7.tgz#7e3504d708d50344112767c3542fc5e357fffefc" + integrity sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw== + dependencies: + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/highlight@^7.16.7": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" + integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.10.4", "@babel/parser@^7.10.5", "@babel/parser@^7.7.0": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.5.tgz#e7c6bf5a7deff957cec9f04b551e2762909d826b" - integrity sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ== - -"@babel/template@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" - integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/parser" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/traverse@^7.7.0": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.5.tgz#77ce464f5b258be265af618d8fddf0536f20b564" - integrity sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.10.5" - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.10.4" - "@babel/parser" "^7.10.5" - "@babel/types" "^7.10.5" +"@babel/parser@^7.16.10", "@babel/parser@^7.16.12", "@babel/parser@^7.16.7": + version "7.16.12" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.12.tgz#9474794f9a650cf5e2f892444227f98e28cdf8b6" + integrity sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A== + +"@babel/template@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" + integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/parser" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/traverse@^7.16.10", "@babel/traverse@^7.16.7": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.10.tgz#448f940defbe95b5a8029975b051f75993e8239f" + integrity sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.16.8" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.16.10" + "@babel/types" "^7.16.8" debug "^4.1.0" globals "^11.1.0" - lodash "^4.17.19" -"@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.7.0": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.5.tgz#d88ae7e2fde86bfbfe851d4d81afa70a997b5d15" - integrity sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q== +"@babel/types@^7.16.7", "@babel/types@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.8.tgz#0ba5da91dd71e0a4e7781a30f22770831062e3c1" + integrity sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg== dependencies: - "@babel/helper-validator-identifier" "^7.10.4" - lodash "^4.17.19" + "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" -"@eslint/eslintrc@^0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.1.tgz#f72069c330461a06684d119384435e12a5d76e3c" - integrity sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA== - dependencies: - ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^12.1.0" - ignore "^4.0.6" - import-fresh "^3.2.1" - js-yaml "^3.13.1" - lodash "^4.17.19" - minimatch "^3.0.4" - strip-json-comments "^3.1.1" - -"@eslint/eslintrc@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" - integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== +"@eslint/eslintrc@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.5.tgz#33f1b838dbf1f923bfa517e008362b78ddbbf318" + integrity sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ== dependencies: ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" + debug "^4.3.2" + espree "^9.2.0" globals "^13.9.0" ignore "^4.0.6" import-fresh "^3.2.1" - js-yaml "^3.13.1" + js-yaml "^4.1.0" minimatch "^3.0.4" strip-json-comments "^3.1.1" -"@google-cloud/common@^3.7.0": - version "3.7.1" - resolved "https://registry.yarnpkg.com/@google-cloud/common/-/common-3.7.1.tgz#e6a4b512ea0c72435b853831565bfba6a8dff2ac" - integrity sha512-BJfcV5BShbunYcn5HniebXLVp2Y6fpuesNegyar5CG8H2AKYHlKxnVID+FSwy92WAW4N2lpGdvxRsmiAn8Fc3w== +"@google-cloud/common@^3.8.1": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@google-cloud/common/-/common-3.9.0.tgz#d93e62d13e66edacfad1cd25b20fdbbc11d9f6dd" + integrity sha512-R9PfmCKbpOizvcLY+fz/TS4HdOQhvmf4EY4xEXvWnotGbGXujuTLJTJ2URy8BGT8TDxlh6gjjfEwjJ8McnNPIg== dependencies: "@google-cloud/projectify" "^2.0.0" "@google-cloud/promisify" "^2.0.0" @@ -142,125 +220,108 @@ duplexify "^4.1.1" ent "^2.2.0" extend "^3.0.2" - google-auth-library "^7.0.2" + google-auth-library "^7.9.2" retry-request "^4.2.2" teeny-request "^7.0.0" "@google-cloud/paginator@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@google-cloud/paginator/-/paginator-3.0.2.tgz#7d103f0dac00c7c46050f31cb8b524696b03135e" - integrity sha512-kXK+Dbz4pNvv8bKU80Aw5HsIdgOe0WuMTd8/fI6tkANUxzvJOVJQQRsWVqcHSWK2RXHPTA9WBniUCwY6gAJDXw== + version "3.0.6" + resolved "https://registry.yarnpkg.com/@google-cloud/paginator/-/paginator-3.0.6.tgz#02a59dccd348d515069779a4f77a4a4fd15594da" + integrity sha512-XCTm/GfQIlc1ZxpNtTSs/mnZxC2cePNhxU3X8EzHXKIJ2JFncmJj2Fcd2IP+gbmZaSZnY0juFxbUCkIeuu/2eQ== dependencies: arrify "^2.0.0" extend "^3.0.2" "@google-cloud/projectify@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@google-cloud/projectify/-/projectify-2.0.1.tgz#13350ee609346435c795bbfe133a08dfeab78d65" - integrity sha512-ZDG38U/Yy6Zr21LaR3BTiiLtpJl6RkPS/JwoRT453G+6Q1DhlV0waNf8Lfu+YVYGIIxgKnLayJRfYlFJfiI8iQ== + version "2.1.1" + resolved "https://registry.yarnpkg.com/@google-cloud/projectify/-/projectify-2.1.1.tgz#ae6af4fee02d78d044ae434699a630f8df0084ef" + integrity sha512-+rssMZHnlh0twl122gXY4/aCrk0G1acBqkHFfYddtsqpYXGxA29nj9V5V9SfC+GyOG00l650f6lG9KL+EpFEWQ== "@google-cloud/promisify@^2.0.0": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@google-cloud/promisify/-/promisify-2.0.2.tgz#81d654b4cb227c65c7ad2f9a7715262febd409ed" - integrity sha512-EvuabjzzZ9E2+OaYf+7P9OAiiwbTxKYL0oGLnREQd+Su2NTQBpomkdlkBowFvyWsaV0d1sSGxrKpSNcrhPqbxg== + version "2.0.4" + resolved "https://registry.yarnpkg.com/@google-cloud/promisify/-/promisify-2.0.4.tgz#9d8705ecb2baa41b6b2673f3a8e9b7b7e1abc52a" + integrity sha512-j8yRSSqswWi1QqUGKVEKOG03Q7qOoZP6/h2zN2YO+F5h2+DHU0bSrHCK9Y7lo2DI9fBd8qGAw795sf+3Jva4yA== -"@google-cloud/storage@5.13.0": - version "5.13.0" - resolved "https://registry.yarnpkg.com/@google-cloud/storage/-/storage-5.13.0.tgz#f40cf085f807c8456acbd994aff01f65845ec9f5" - integrity sha512-LN3Cv7NRBbjwdwcrIFbEaKEEUCUr7aIoBa7j1HXeuBLjC1lQ5VGVGEbaLRP6uwgBKVnf5rFYSTA545C1GR+e/A== +"@google-cloud/storage@5.18.0": + version "5.18.0" + resolved "https://registry.yarnpkg.com/@google-cloud/storage/-/storage-5.18.0.tgz#a8fcce68addd9f72d20f02326952d9c19887ef4d" + integrity sha512-T4Q4QS3RKU3os6UwcdJATb2gpLyGQUdQxdV8/wzuFpHlcC9YPhflOvVuvGvSlrbGSZXlznu6D2pN/rpMM9RX8A== dependencies: - "@google-cloud/common" "^3.7.0" + "@google-cloud/common" "^3.8.1" "@google-cloud/paginator" "^3.0.0" "@google-cloud/promisify" "^2.0.0" + abort-controller "^3.0.0" arrify "^2.0.0" - async-retry "^1.3.1" + async-retry "^1.3.3" compressible "^2.0.12" - date-and-time "^1.0.0" + configstore "^5.0.0" + date-and-time "^2.0.0" duplexify "^4.0.0" extend "^3.0.2" - gcs-resumable-upload "^3.3.0" + gaxios "^4.0.0" get-stream "^6.0.0" + google-auth-library "^7.0.0" hash-stream-validation "^0.2.2" - mime "^2.2.0" + mime "^3.0.0" mime-types "^2.0.8" - onetime "^5.1.0" p-limit "^3.0.1" pumpify "^2.0.0" snakeize "^0.1.0" - stream-events "^1.0.1" + stream-events "^1.0.4" xdg-basedir "^4.0.0" -"@humanwhocodes/config-array@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" - integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== +"@humanwhocodes/config-array@^0.9.2": + version "0.9.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.2.tgz#68be55c737023009dfc5fe245d51181bb6476914" + integrity sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA== dependencies: - "@humanwhocodes/object-schema" "^1.2.0" + "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" minimatch "^3.0.4" -"@humanwhocodes/object-schema@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf" - integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w== +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== -"@swr/prettier-config@0.0.1": - version "0.0.1" - resolved "https://registry.yarnpkg.com/@swr/prettier-config/-/prettier-config-0.0.1.tgz#11891e5834dc3b5e21c74367b7cbf3caa3a9cbf5" - integrity sha512-V2uiMYMaajqWdTnFDOdM4t4CB2JLUzwfJFzGdRqLwlWZaV6TenzQvsu+0t3wnlUMuFOmfpx7Pq+cyOi+SbQ2tQ== +"@swrlab/eslint-plugin-swr@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@swrlab/eslint-plugin-swr/-/eslint-plugin-swr-0.1.2.tgz#0041aab114708122ea5cb576c341ed20868d930d" + integrity sha512-4QJ9jbBkkoEHYEkaxu3O1zEIdaSbeynQt2Md76kLYkJ0uiMNuwnumxoDr88UKB5NtbX+oTHDf30p1tJoGLfWmw== + dependencies: + eslint-config-airbnb-base "^14.2.0" + eslint-config-prettier "^8.3.0" + eslint-plugin-import "^2.23.4" + eslint-plugin-prettier "^3.4.0" + eslint-plugin-security "^1.4.0" + eslint-plugin-sonarjs "^0.8.0-125" + eslint-plugin-unicorn "^33.0.1" + eslint-plugin-vue "^7.11.2" "@swrlab/swr-prettier-config@0.1.2": version "0.1.2" resolved "https://registry.yarnpkg.com/@swrlab/swr-prettier-config/-/swr-prettier-config-0.1.2.tgz#e7fd79f72ceeb05a8b631ecc12a2bcae6ae2386b" integrity sha512-MyUTKRzzvQPexXINH7ASW9dDPtE/OrFfz6UngwyNMpPjAfUu+zJKCzNpiEagUxLGU/8s76oRHqDz5jsN2vyaHw== -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - -"@types/color-name@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" - integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== - -"@types/json-schema@^7.0.3": - version "7.0.5" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd" - integrity sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ== +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= -"@types/normalize-package-data@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" - integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== +"@types/node@^15.6.1": + version "15.14.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.14.9.tgz#bc43c990c3c9be7281868bbc7b8fdd6e2b57adfa" + integrity sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A== -"@typescript-eslint/experimental-utils@^2.5.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz#d3524b644cdb40eebceca67f8cf3e4cc9c8f980f" - integrity sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA== - dependencies: - "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "2.34.0" - eslint-scope "^5.0.0" - eslint-utils "^2.0.0" - -"@typescript-eslint/typescript-estree@2.34.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz#14aeb6353b39ef0732cc7f1b8285294937cf37d5" - integrity sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg== - dependencies: - debug "^4.1.1" - eslint-visitor-keys "^1.1.0" - glob "^7.1.6" - is-glob "^4.0.1" - lodash "^4.17.15" - semver "^7.3.2" - tsutils "^3.17.1" +"@types/normalize-package-data@^2.4.0": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" + integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== abort-controller@^3.0.0: version "3.0.0" @@ -269,39 +330,29 @@ abort-controller@^3.0.0: dependencies: event-target-shim "^5.0.0" -acorn-jsx@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" - integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== +acorn-jsx@^5.2.0, acorn-jsx@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-jsx@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" - integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== - -acorn@^7.4.0: +acorn@^7.1.1: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.7.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" + integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== + agent-base@6: - version "6.0.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.1.tgz#808007e4e5867decb0ab6ab2f928fbdb5a596db4" - integrity sha512-01q25QQDwLSsyfhrKbn8yuur+JNw0H+0Y4JiGIKd3z9aYk/w/2kxD/Upc+t2ZBBSUNff50VjPsSW2YxM8QYKVg== + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: debug "4" -ajv@^6.10.0, ajv@^6.10.2: - version "6.12.3" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" - integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^6.12.4: +ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -311,140 +362,98 @@ ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.1: - version "8.6.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.0.tgz#60cc45d9c46a477d80d92c48076d972c342e5720" - integrity sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" -ansi-styles@^4.0.0: +ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" -ansi-styles@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" - integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== - dependencies: - "@types/color-name" "^1.1.1" - color-convert "^2.0.1" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -array-includes@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" - integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== +array-includes@^3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9" + integrity sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw== dependencies: + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.17.0" - is-string "^1.0.5" + es-abstract "^1.19.1" + get-intrinsic "^1.1.1" + is-string "^1.0.7" -array.prototype.flat@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b" - integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== +array.prototype.flat@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz#07e0975d84bbc7c48cd1879d609e682598d33e13" + integrity sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg== dependencies: + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" + es-abstract "^1.19.0" arrify@^2.0.0, arrify@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -async-retry@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.1.tgz#139f31f8ddce50c0870b0ba558a6079684aaed55" - integrity sha512-aiieFW/7h3hY0Bq5d+ktDBejxuwR78vRu9hDUdR8rNhSaQ29VzPL4AoIRG7D/c7tdenwOcKvgPM6tIxB3cB6HA== +async-retry@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" + integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== dependencies: - retry "0.12.0" + retry "0.13.1" -aws-sdk@2.965.0: - version "2.965.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.965.0.tgz#e63fb38bcc77334a3c9edbe9353050312f3bdbfe" - integrity sha512-jifeFsA6IEKXM65WI5gvBNSCXKw4n64Wf9Q7/8E7wZ5vzRbBGoHzGpyhK6ZBBRvE2YvNp/ykTWChO7RydkA+AQ== +aws-sdk@2.1062.0: + version "2.1062.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1062.0.tgz#89b55c9dcfa15135910a217489eb8577b11d9899" + integrity sha512-QIU8jwi7Uqyvw2HjsXXXUZv3V/6TinUzLewrdl2EdvonqZCXhwMgnZx2F9I2x62IKH1RqnINwFWdoK+OTgcAjA== dependencies: buffer "4.9.2" events "1.1.1" ieee754 "1.1.13" - jmespath "0.15.0" + jmespath "0.16.0" querystring "0.2.0" sax "1.2.1" url "0.10.3" uuid "3.3.2" xml2js "0.4.19" -babel-eslint@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" - integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.7.0" - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" - eslint-visitor-keys "^1.0.0" - resolve "^1.12.0" - balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base64-js@^1.0.2, base64-js@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" - integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== bignumber.js@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.0.tgz#805880f84a329b5eac6e7cb6f8274b6d82bdf075" - integrity sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A== + version "9.0.2" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.2.tgz#71c6c6bed38de64e24a65ebe16cfcf23ae693673" + integrity sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw== + +bindings@^1.3.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" brace-expansion@^1.1.7: version "1.1.11" @@ -454,6 +463,17 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +browserslist@^4.17.5: + version "4.19.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.1.tgz#4ac0435b35ab655896c31d53018b6dd5e9e4c9a3" + integrity sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A== + dependencies: + caniuse-lite "^1.0.30001286" + electron-to-chromium "^1.4.17" + escalade "^3.1.1" + node-releases "^2.0.1" + picocolors "^1.0.0" + buffer-equal-constant-time@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" @@ -468,11 +488,29 @@ buffer@4.9.2: ieee754 "^1.1.4" isarray "^1.0.0" +builtin-modules@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" + integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + 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.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== +caniuse-lite@^1.0.30001286: + version "1.0.30001301" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001301.tgz#ebc9086026534cab0dab99425d9c3b4425e5f450" + integrity sha512-csfD/GpHMqgEL3V3uIgosvh+SVIQvCh43SNu9HRbP1lnxkKm1kjDG4f32PP571JplkLjfS+mg2p1gxR7MYrrIA== + chalk@^2.0.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -483,17 +521,17 @@ chalk@^2.0.0: supports-color "^5.3.0" chalk@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== +ci-info@^3.1.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" + integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== clean-regexp@^1.0.0: version "1.0.0" @@ -550,20 +588,17 @@ configstore@^5.0.0: write-file-atomic "^3.0.0" xdg-basedir "^4.0.0" -confusing-browser-globals@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz#72bc13b483c0276801681871d4898516f8f54fdd" - integrity sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw== - -contains-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" - integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= +confusing-browser-globals@^1.0.10: + version "1.0.11" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" + integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== -core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +convert-source-map@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" cross-spawn@^7.0.2: version "7.0.3" @@ -579,17 +614,17 @@ crypto-random-string@^2.0.0: resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== -date-and-time@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/date-and-time/-/date-and-time-1.0.1.tgz#4959b7faf1ec5873e59d926d4528b9223a808a57" - integrity sha512-7u+uNfnjWkX+YFQfivvW24TjaJG6ahvTrfw1auq7KlC7osuGcZBIWGBvB9UcENjH6JnLVhMqlRripk1dSHjAUA== +date-and-time@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/date-and-time/-/date-and-time-2.1.0.tgz#007efa9624684457259f19348b442e45128a6f1c" + integrity sha512-X/b2gM7e8zQ7siiE0DhRLeNMpuCkIqec5Jnx4GMk/HWB71a6e5Lz48mH9/GIS/hpLsBRFZfMF1gjXBkY0vq5oA== -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2: + version "4.3.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" + integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== dependencies: - ms "^2.1.1" + ms "2.1.2" debug@^2.6.9: version "2.6.9" @@ -598,25 +633,31 @@ debug@^2.6.9: dependencies: ms "2.0.0" +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + deep-is@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== -define-properties@^1.1.2, define-properties@^1.1.3: +define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== dependencies: object-keys "^1.0.12" -doctrine@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== dependencies: esutils "^2.0.2" - isarray "^1.0.0" doctrine@^3.0.0: version "3.0.0" @@ -626,16 +667,21 @@ doctrine@^3.0.0: esutils "^2.0.2" dot-prop@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb" - integrity sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A== + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== dependencies: is-obj "^2.0.0" +dotenv@^14.2.0: + version "14.3.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-14.3.0.tgz#40f537fe90e229d35361c66cf432903e0db49001" + integrity sha512-PCTcOQSXVo9FI1dB7AichJXMEvmiGCq0gnCpjfDUc8505uR+2MeLXWe+Ue4PN5UXa2isHSa78sr7L59fk+2mnQ== + duplexify@^4.0.0, duplexify@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.1.tgz#7027dc374f157b122a8ae08c2d3ea4d2d953aa61" - integrity sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA== + version "4.1.2" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.2.tgz#18b4f8d28289132fa0b9573c898d9f903f81c7b0" + integrity sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw== dependencies: end-of-stream "^1.4.1" inherits "^2.0.3" @@ -649,15 +695,10 @@ ecdsa-sig-formatter@1.0.11, ecdsa-sig-formatter@^1.0.11: dependencies: safe-buffer "^5.0.1" -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +electron-to-chromium@^1.4.17: + version "1.4.52" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.52.tgz#ce44c6d6cc449e7688a4356b8c261cfeafa26833" + integrity sha512-JGkh8HEh5PnVrhU4HbpyyO0O791dVY6k7AdqfDeqbcRMeoGxtNHWT77deR2nhvbLe4dKpxjlDEvdEwrvRLGu2Q== end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" @@ -666,41 +707,43 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: dependencies: once "^1.4.0" -enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - ent@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0= -error-ex@^1.2.0, error-ex@^1.3.1: +error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: - version "1.17.6" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" - integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== +es-abstract@^1.19.0, es-abstract@^1.19.1: + version "1.19.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3" + integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w== dependencies: + call-bind "^1.0.2" es-to-primitive "^1.2.1" function-bind "^1.1.1" + get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.2.0" - is-regex "^1.1.0" - object-inspect "^1.7.0" + has-symbols "^1.0.2" + internal-slot "^1.0.3" + is-callable "^1.2.4" + is-negative-zero "^2.0.1" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.1" + is-string "^1.0.7" + is-weakref "^1.0.1" + object-inspect "^1.11.0" object-keys "^1.1.1" - object.assign "^4.1.0" - string.prototype.trimend "^1.0.1" - string.prototype.trimstart "^1.0.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.1" es-to-primitive@^1.2.1: version "1.2.1" @@ -711,6 +754,11 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -721,76 +769,59 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-ast-utils@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/eslint-ast-utils/-/eslint-ast-utils-1.1.0.tgz#3d58ba557801cfb1c941d68131ee9f8c34bd1586" - integrity sha512-otzzTim2/1+lVrlH19EfQQJEhVJSu0zOb9ygb3iapN6UlyaDtyRq4b5U1FuW0v1lRa9Fp/GJyHkSwm6NqABgCA== - dependencies: - lodash.get "^4.4.2" - lodash.zip "^4.2.0" - eslint-config-airbnb-base@^14.2.0: - version "14.2.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.0.tgz#fe89c24b3f9dc8008c9c0d0d88c28f95ed65e9c4" - integrity sha512-Snswd5oC6nJaevs3nZoLSTvGJBvzTfnBqOIArkf3cbyTyq9UD79wOk8s+RiL6bhca0p/eRO6veczhf6A/7Jy8Q== + version "14.2.1" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz#8a2eb38455dc5a312550193b319cdaeef042cd1e" + integrity sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA== dependencies: - confusing-browser-globals "^1.0.9" - object.assign "^4.1.0" + confusing-browser-globals "^1.0.10" + object.assign "^4.1.2" object.entries "^1.1.2" -eslint-config-prettier@^6.11.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz#f6d2238c1290d01c859a8b5c1f7d352a0b0da8b1" - integrity sha512-oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA== - dependencies: - get-stdin "^6.0.0" +eslint-config-prettier@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" + integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== -eslint-import-resolver-node@^0.3.3: - version "0.3.4" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" - integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== +eslint-import-resolver-node@^0.3.6: + version "0.3.6" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" + integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== dependencies: - debug "^2.6.9" - resolve "^1.13.1" + debug "^3.2.7" + resolve "^1.20.0" -eslint-module-utils@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" - integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== +eslint-module-utils@^2.7.2: + version "2.7.2" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.2.tgz#1d0aa455dcf41052339b63cada8ab5fd57577129" + integrity sha512-zquepFnWCY2ISMFwD/DqzaM++H+7PDzOpUvotJWm/y1BAFt5R4oeULgdrTejKqLkz7MA/tgstsUMNYc7wNdTrg== dependencies: - debug "^2.6.9" - pkg-dir "^2.0.0" + debug "^3.2.7" + find-up "^2.1.0" -eslint-plugin-import@^2.22.0: - version "2.22.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.0.tgz#92f7736fe1fde3e2de77623c838dd992ff5ffb7e" - integrity sha512-66Fpf1Ln6aIS5Gr/55ts19eUuoDhAbZgnr6UxK5hbDx6l/QgQgx61AePq+BV4PP2uXQFClgMVzep5zZ94qqsxg== +eslint-plugin-import@^2.23.4: + version "2.25.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz#322f3f916a4e9e991ac7af32032c25ce313209f1" + integrity sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA== dependencies: - array-includes "^3.1.1" - array.prototype.flat "^1.2.3" - contains-path "^0.1.0" + array-includes "^3.1.4" + array.prototype.flat "^1.2.5" debug "^2.6.9" - doctrine "1.5.0" - eslint-import-resolver-node "^0.3.3" - eslint-module-utils "^2.6.0" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.6" + eslint-module-utils "^2.7.2" has "^1.0.3" + is-core-module "^2.8.0" + is-glob "^4.0.3" minimatch "^3.0.4" - object.values "^1.1.1" - read-pkg-up "^2.0.0" - resolve "^1.17.0" - tsconfig-paths "^3.9.0" - -eslint-plugin-jest@^23.20.0: - version "23.20.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-23.20.0.tgz#e1d69c75f639e99d836642453c4e75ed22da4099" - integrity sha512-+6BGQt85OREevBDWCvhqj1yYA4+BFK4XnRZSGJionuEYmcglMZYLNNBBemwzbqUAckURaHdJSBcjHPyrtypZOw== - dependencies: - "@typescript-eslint/experimental-utils" "^2.5.0" + object.values "^1.1.5" + resolve "^1.20.0" + tsconfig-paths "^3.12.0" -eslint-plugin-prettier@^3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.4.tgz#168ab43154e2ea57db992a2cd097c828171f75c2" - integrity sha512-jZDa8z76klRqo+TdGDTFJSavwbnWK2ZpqGKNZ+VvweMW516pDUMmQ2koXvxEE4JhzNvTv+radye/bWGBmA6jmg== +eslint-plugin-prettier@^3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz#e9ddb200efb6f3d05ffe83b1665a716af4a387e5" + integrity sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g== dependencies: prettier-linter-helpers "^1.0.0" @@ -801,54 +832,39 @@ eslint-plugin-security@^1.4.0: dependencies: safe-regex "^1.1.0" -eslint-plugin-sonarjs@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.5.0.tgz#ce17b2daba65a874c2862213a9e38e8986ad7d7d" - integrity sha512-XW5MnzlRjhXpIdbULC/qAdJYHWw3rRLws/DyawdlPU/IdVr9AmRK1r2LaCvabwKOAW2XYYSo3kDX58E4MrB7PQ== - -eslint-plugin-swr@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/eslint-plugin-swr/-/eslint-plugin-swr-0.0.5.tgz#037671def781c3a4ef7f0d4cba71088cdba6e905" - integrity sha512-rFC/hn2wo53n+O+qcGEX7YmASFKqDAPtFTt5Es/Y0DLqjSbss+uFs5Pu2Q8hCusYvXoFksohCvuJ8AGsX/GDSA== - dependencies: - "@swr/prettier-config" "0.0.1" - eslint "^7.7.0" - eslint-config-airbnb-base "^14.2.0" - eslint-config-prettier "^6.11.0" - eslint-plugin-import "^2.22.0" - eslint-plugin-jest "^23.20.0" - eslint-plugin-prettier "^3.1.4" - eslint-plugin-security "^1.4.0" - eslint-plugin-sonarjs "^0.5.0" - eslint-plugin-unicorn "^20.1.0" - prettier "^2.1.1" +eslint-plugin-sonarjs@^0.8.0-125: + version "0.8.0-125" + resolved "https://registry.yarnpkg.com/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.8.0-125.tgz#d19fc8a579bb3b2a16879b6375516c9c3c12e60c" + integrity sha512-/nl3Yzy8cHxCj5ohQL8dEqK2AhQqjTM/oXz5K3bU/7XbsBTz0BgyEsDvdz7gdtRlAe0Hzrf2v3qLVHA506Qheg== -eslint-plugin-unicorn@^20.1.0: - version "20.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-unicorn/-/eslint-plugin-unicorn-20.1.0.tgz#a43f60ffc98406d72ec2a5fcc6dad24ba0192bc9" - integrity sha512-XQxLBJT/gnwyRR6cfYsIK1AdekQchAt5tmcsnldevGjgR2xoZsRUa5/i6e0seNHy2RoT57CkTnbVHwHF8No8LA== +eslint-plugin-unicorn@^33.0.1: + version "33.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-unicorn/-/eslint-plugin-unicorn-33.0.1.tgz#15c7d210aad77466acb1e899b06b070099e029ce" + integrity sha512-VxX/L/9DUEyB3D0v00185LrgsB5/fBwkgA4IC7ehHRu5hFSgA6VecmdpFybhsr4GQ/Y1iyXMHf6q+JKvcR2MwA== dependencies: - ci-info "^2.0.0" + ci-info "^3.1.1" clean-regexp "^1.0.0" - eslint-ast-utils "^1.1.0" - eslint-template-visitor "^2.0.0" - eslint-utils "^2.0.0" - import-modules "^2.0.0" - lodash "^4.17.15" + eslint-template-visitor "^2.3.2" + eslint-utils "^3.0.0" + import-modules "^2.1.0" + is-builtin-module "^3.1.0" + lodash "^4.17.21" pluralize "^8.0.0" read-pkg-up "^7.0.1" - regexp-tree "^0.1.21" + regexp-tree "^0.1.23" reserved-words "^0.1.2" safe-regex "^2.1.1" - semver "^7.3.2" + semver "^7.3.5" -eslint-scope@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5" - integrity sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w== +eslint-plugin-vue@^7.11.2: + version "7.20.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-7.20.0.tgz#98c21885a6bfdf0713c3a92957a5afeaaeed9253" + integrity sha512-oVNDqzBC9h3GO+NTgWeLMhhGigy6/bQaQbHS+0z7C4YEu/qK/yxHvca/2PTZtGNPsCrHwOTgKMrwu02A9iPBmw== dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" + eslint-utils "^2.1.0" + natural-compare "^1.4.0" + semver "^6.3.0" + vue-eslint-parser "^7.10.0" eslint-scope@^5.1.1: version "5.1.1" @@ -858,166 +874,120 @@ eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-template-visitor@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/eslint-template-visitor/-/eslint-template-visitor-2.2.1.tgz#2dccb1ab28fa7429e56ba6dd0144def2d89bc2d6" - integrity sha512-q3SxoBXz0XjPGkUpwGVAwIwIPIxzCAJX1uwfVc8tW3v7u/zS7WXNH3I2Mu2MDz2NgSITAyKLRaQFPHu/iyKxDQ== +eslint-scope@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.0.tgz#c1f6ea30ac583031f203d65c73e723b01298f153" + integrity sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg== dependencies: - babel-eslint "^10.1.0" - eslint-visitor-keys "^1.3.0" + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-template-visitor@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/eslint-template-visitor/-/eslint-template-visitor-2.3.2.tgz#b52f96ff311e773a345d79053ccc78275bbc463d" + integrity sha512-3ydhqFpuV7x1M9EK52BPNj6V0Kwu0KKkcIAfpUhwHbR8ocRln/oUHgfxQupY8O1h4Qv/POHDumb/BwwNfxbtnA== + dependencies: + "@babel/core" "^7.12.16" + "@babel/eslint-parser" "^7.12.16" + eslint-visitor-keys "^2.0.0" esquery "^1.3.1" multimap "^1.1.0" -eslint-utils@^2.0.0, eslint-utils@^2.1.0: +eslint-utils@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== dependencies: eslint-visitor-keys "^1.1.0" -eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== -eslint-visitor-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" - integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== +eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.1.0, eslint-visitor-keys@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz#6fbb166a6798ee5991358bc2daa1ba76cc1254a1" + integrity sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ== -eslint@7.32.0: - version "7.32.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" - integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== +eslint@8.7.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.7.0.tgz#22e036842ee5b7cf87b03fe237731675b4d3633c" + integrity sha512-ifHYzkBGrzS2iDU7KjhCAVMGCvF6M3Xfs8X8b37cgrUlDt6bWRTpRh6T/gtSXv1HJ/BUGgmjvNvOEGu85Iif7w== dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.3" - "@humanwhocodes/config-array" "^0.5.0" + "@eslint/eslintrc" "^1.0.5" + "@humanwhocodes/config-array" "^0.9.2" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" - debug "^4.0.1" + debug "^4.3.2" doctrine "^3.0.0" - enquirer "^2.3.5" escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" + eslint-scope "^7.1.0" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.2.0" + espree "^9.3.0" esquery "^1.4.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" + glob-parent "^6.0.1" globals "^13.6.0" - ignore "^4.0.6" + ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - js-yaml "^3.13.1" + js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" minimatch "^3.0.4" natural-compare "^1.4.0" optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" + regexpp "^3.2.0" + strip-ansi "^6.0.1" strip-json-comments "^3.1.0" - table "^6.0.9" text-table "^0.2.0" v8-compile-cache "^2.0.3" -eslint@^7.7.0: - version "7.12.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.12.1.tgz#bd9a81fa67a6cfd51656cdb88812ce49ccec5801" - integrity sha512-HlMTEdr/LicJfN08LB3nM1rRYliDXOmfoO4vj39xN6BLpFzF00hbwBoqHk8UcJ2M/3nlARZWy/mslvGEuZFvsg== +espree@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" + integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== dependencies: - "@babel/code-frame" "^7.0.0" - "@eslint/eslintrc" "^0.2.1" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.0.1" - doctrine "^3.0.0" - enquirer "^2.3.5" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.0" - esquery "^1.2.0" - esutils "^2.0.2" - file-entry-cache "^5.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^12.1.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash "^4.17.19" - minimatch "^3.0.4" - natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^5.2.3" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.0.tgz#dc30437cf67947cf576121ebd780f15eeac72348" - integrity sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw== - dependencies: - acorn "^7.4.0" + acorn "^7.1.1" acorn-jsx "^5.2.0" - eslint-visitor-keys "^1.3.0" + eslint-visitor-keys "^1.1.0" -espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== +espree@^9.2.0, espree@^9.3.0: + version "9.3.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.0.tgz#c1240d79183b72aaee6ccfa5a90bc9111df085a8" + integrity sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ== dependencies: - acorn "^7.4.0" + acorn "^8.7.0" acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + eslint-visitor-keys "^3.1.0" -esquery@^1.2.0, esquery@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" - integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== - dependencies: - estraverse "^5.1.0" - -esquery@^1.4.0: +esquery@^1.3.1, esquery@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== dependencies: estraverse "^5.1.0" -esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== - dependencies: - estraverse "^4.1.0" - esrecurse@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" @@ -1025,20 +995,15 @@ esrecurse@^4.3.0: dependencies: estraverse "^5.2.0" -estraverse@^4.1.0, estraverse@^4.1.1: +estraverse@^4.1.1: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -estraverse@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642" - integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw== - -estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" @@ -1085,13 +1050,6 @@ fast-text-encoding@^1.0.0: resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz#ec02ac8e01ab8a319af182dae2681213cfe9ce53" integrity sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig== -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== - dependencies: - flat-cache "^2.0.1" - file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -1099,7 +1057,12 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" -find-up@^2.0.0, find-up@^2.1.0: +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= @@ -1114,15 +1077,6 @@ find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== - dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" - flat-cache@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" @@ -1131,15 +1085,10 @@ flat-cache@^3.0.4: flatted "^3.1.0" rimraf "^3.0.2" -flatted@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== - flatted@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" - integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== + version "3.2.4" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.4.tgz#28d9969ea90661b5134259f312ab6aa7929ac5e2" + integrity sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw== fs.realpath@^1.0.0: version "1.0.0" @@ -1156,77 +1105,63 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= -gaxios@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-3.0.4.tgz#4714fbb003d6f6f08a297f772284463e041e04db" - integrity sha512-97NmFuMETFQh6gqPUxkqjxRMjmY8aRKRMphIkgO/b90AbCt5wAVuXsp8oWjIXlLN2pIK/fsXD8edcM7ULkFMLg== - dependencies: - abort-controller "^3.0.0" - extend "^3.0.2" - https-proxy-agent "^5.0.0" - is-stream "^2.0.0" - node-fetch "^2.3.0" - gaxios@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-4.0.0.tgz#eb01a923d5fd920174f05f9ccd4c743032c177a6" - integrity sha512-Ge+S+8L8xe/LAjC2tHXFuBMVhjjm4sMevjEHshJeMZ0d37fspa9BO8WEMlYxk4lyydR/v63iHWZZ1Ri7hAqzSg== + version "4.3.2" + resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-4.3.2.tgz#845827c2dc25a0213c8ab4155c7a28910f5be83f" + integrity sha512-T+ap6GM6UZ0c4E6yb1y/hy2UB6hTrqhglp3XfmU9qbLCGRYhLVV5aRPpC4EmoG8N8zOnkYCgoBz+ScvGAARY6Q== dependencies: abort-controller "^3.0.0" extend "^3.0.2" https-proxy-agent "^5.0.0" is-stream "^2.0.0" - node-fetch "^2.3.0" + node-fetch "^2.6.1" gcp-metadata@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-4.2.0.tgz#3b424355ccdc240ee07c5791e2fd6a60a283d89a" - integrity sha512-vQZD57cQkqIA6YPGXM/zc+PIZfNRFdukWGsGZ5+LcJzesi5xp6Gn7a02wRJi4eXPyArNMIYpPET4QMxGqtlk6Q== + version "4.3.1" + resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-4.3.1.tgz#fb205fe6a90fef2fd9c85e6ba06e5559ee1eefa9" + integrity sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A== dependencies: - gaxios "^3.0.0" + gaxios "^4.0.0" json-bigint "^1.0.0" -gcs-resumable-upload@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/gcs-resumable-upload/-/gcs-resumable-upload-3.3.0.tgz#d1a866173f9b47e045d4406cafaa658dbb01e624" - integrity sha512-MQKWi+9hOSTyg5/SI1NBW4gAjL1wlkoevHefvr1PCBBXH4uKYLsug5qRrcotWKolDPLfWS51cWaHRN0CTtQNZw== - dependencies: - abort-controller "^3.0.0" - configstore "^5.0.0" - extend "^3.0.2" - gaxios "^4.0.0" - google-auth-library "^7.0.0" - pumpify "^2.0.0" - stream-events "^1.0.4" +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-stdin@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" - integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" get-stream@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -glob-parent@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" - integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== dependencies: - is-glob "^4.0.1" + call-bind "^1.0.2" + get-intrinsic "^1.1.1" -glob-parent@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: - is-glob "^4.0.1" + is-glob "^4.0.3" -glob@^7.1.3, glob@^7.1.6: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== +glob@^7.1.3: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -1240,24 +1175,17 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^12.1.0: - version "12.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" - integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== - dependencies: - type-fest "^0.8.1" - globals@^13.6.0, globals@^13.9.0: - version "13.9.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.9.0.tgz#4bf2bf635b334a173fb1daf7c5e6b218ecdc06cb" - integrity sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA== + version "13.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.0.tgz#4d733760304230a0082ed96e21e5c565f898089e" + integrity sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg== dependencies: type-fest "^0.20.2" -google-auth-library@^7.0.0, google-auth-library@^7.0.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-7.1.2.tgz#29fc0fe8b6d5a59b93b7cb561b1a28bcc93360b7" - integrity sha512-FMipHgfe2u1LzWsf2n9zEB9KsJ8M3n8OYTHbHtlkzPCyo7IknXQR5X99nfvwUHGuX+iEpihUZxDuPm7+qBYeXg== +google-auth-library@^7.0.0, google-auth-library@^7.9.2: + version "7.11.0" + resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-7.11.0.tgz#b63699c65037310a424128a854ba7e736704cbdb" + integrity sha512-3S5jn2quRumvh9F/Ubf7GFrIq71HZ5a6vqosgdIu105kkk0WtSqc2jGCRqtWWOLRS8SX3AHACMOEDxhyWAQIcg== dependencies: arrify "^2.0.0" base64-js "^1.3.0" @@ -1270,26 +1198,30 @@ google-auth-library@^7.0.0, google-auth-library@^7.0.2: lru-cache "^6.0.0" google-p12-pem@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-3.0.3.tgz#673ac3a75d3903a87f05878f3c75e06fc151669e" - integrity sha512-wS0ek4ZtFx/ACKYF3JhyGe5kzH7pgiQ7J5otlumqR9psmWMYc+U9cErKlCYVYHoUaidXHdZ2xbo34kB+S+24hA== + version "3.1.3" + resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-3.1.3.tgz#5497998798ee86c2fc1f4bb1f92b7729baf37537" + integrity sha512-MC0jISvzymxePDVembypNefkAQp+DRP7dBE+zNUPaIjEspIlYg0++OrsNr248V9tPbz6iqtZ7rX1hxWA5B8qBQ== dependencies: - node-forge "^0.10.0" + node-forge "^1.0.0" graceful-fs@^4.1.2: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + version "4.2.9" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" + integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== gtoken@^5.0.4: - version "5.0.5" - resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-5.0.5.tgz#e752d18538576777dfe237887e30fc0627870eae" - integrity sha512-wvjkecutFh8kVfbcdBdUWqDRrXb+WrgD79DBDEYf1Om8S1FluhylhtFjrL7Tx69vNhh259qA3Q1P4sPtb+kUYw== + version "5.3.1" + resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-5.3.1.tgz#c1c2598a826f2b5df7c6bb53d7be6cf6d50c3c78" + integrity sha512-yqOREjzLHcbzz1UrQoxhBtpk8KjrVhuqPE7od1K2uhyxG2BHjKZetlbLw/SPZak/QqTIQW+addS+EcjqQsZbwQ== dependencies: gaxios "^4.0.0" google-p12-pem "^3.0.3" jws "^4.0.0" - mime "^2.2.0" + +has-bigints@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" + integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== has-flag@^3.0.0: version "3.0.0" @@ -1301,10 +1233,17 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.0, has-symbols@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" - integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== +has-symbols@^1.0.1, has-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" has@^1.0.3: version "1.0.3" @@ -1314,23 +1253,21 @@ has@^1.0.3: function-bind "^1.1.1" hash-stream-validation@^0.2.2: - version "0.2.3" - resolved "https://registry.yarnpkg.com/hash-stream-validation/-/hash-stream-validation-0.2.3.tgz#44e3479d1767c4f1d6924cc2da61eca08ebba8af" - integrity sha512-OEohGLoUOh+bwsIpHpdvhIXFyRGjeLqJbT8Yc5QTZPbRM7LKywagTQxnX/6mghLDOrD9YGz88hy5mLN2eKflYQ== - dependencies: - through2 "^2.0.0" + version "0.2.4" + resolved "https://registry.yarnpkg.com/hash-stream-validation/-/hash-stream-validation-0.2.4.tgz#ee68b41bf822f7f44db1142ec28ba9ee7ccb7512" + integrity sha512-Gjzu0Xn7IagXVkSu9cSFuK1fqzwtLwFhNhVL8IFJijRNMgUttFbBSIAzKuSIrsFMO1+g1RlsoN49zPIbwPDMGQ== hosted-git-info@^2.1.4: - version "2.8.8" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" - integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== -http-proxy-agent@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== dependencies: - "@tootallnate/once" "1" + "@tootallnate/once" "2" agent-base "6" debug "4" @@ -1342,28 +1279,38 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" -ieee754@1.1.13, ieee754@^1.1.4: +ieee754@1.1.13: version "1.1.13" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== +ieee754@^1.1.4: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== +ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" - integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" -import-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-modules/-/import-modules-2.0.0.tgz#9c1e13b4e7a15682f70a6e3fa29534e4540cfc5d" - integrity sha512-iczM/v9drffdNnABOKwj0f9G3cFDon99VcG1mxeBsdqnbd+vnQ5c2uAiCHNQITqFTOPaEvwg3VjoWCur0uHLEw== +import-modules@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-modules/-/import-modules-2.1.0.tgz#abe7df297cb6c1f19b57246eb8b8bd9664b6d8c2" + integrity sha512-8HEWcnkbGpovH9yInoisxaSoIg9Brbul+Ju3Kqe2UsYDUBJD/iQjSgEj0zPcTDPKfPp2fs5xlv1i+JSye/m1/A== imurmurhash@^0.1.4: version "0.1.4" @@ -1378,83 +1325,140 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.3, inherits@~2.0.3: +inherits@2, inherits@^2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= -is-callable@^1.1.4, is-callable@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" - integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-builtin-module@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.1.0.tgz#6fdb24313b1c03b75f8b9711c0feb8c30b903b00" + integrity sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg== + dependencies: + builtin-modules "^3.0.0" + +is-callable@^1.1.4, is-callable@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== + +is-core-module@^2.8.0, is-core-module@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" + integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== + dependencies: + has "^1.0.3" is-date-object@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" - integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= +is-glob@^4.0.0, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-negative-zero@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== -is-glob@^4.0.0, is-glob@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== +is-number-object@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" + integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== dependencies: - is-extglob "^2.1.1" + has-tostringtag "^1.0.0" is-obj@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== -is-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.0.tgz#ece38e389e490df0dc21caea2bd596f987f767ff" - integrity sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw== +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== dependencies: - has-symbols "^1.0.1" + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-shared-array-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6" + integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA== is-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" - integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-string@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" - integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" -is-symbol@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" - integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== dependencies: - has-symbols "^1.0.1" + has-symbols "^1.0.2" is-typedarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -isarray@^1.0.0, isarray@~1.0.0: +is-weakref@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +isarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= @@ -1464,23 +1468,22 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= -jmespath@0.15.0: - version "0.15.0" - resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" - integrity sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc= +jmespath@0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.16.0.tgz#b15b0a85dfd4d930d43e69ed605943c802785076" + integrity sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw== js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.13.1: - version "3.14.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" - integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: - argparse "^1.0.7" - esprima "^4.0.0" + argparse "^2.0.1" jsesc@^2.5.1: version "2.5.2" @@ -1494,21 +1497,16 @@ json-bigint@^1.0.0: dependencies: bignumber.js "^9.0.0" -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" @@ -1521,6 +1519,13 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" +json5@^2.1.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + jwa@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.0.tgz#a7e9c3f29dae94027ebcaf49975c9345593410fc" @@ -1547,19 +1552,9 @@ levn@^0.4.1: type-check "~0.4.0" lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= - -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== locate-path@^2.0.0: version "2.0.0" @@ -1576,35 +1571,15 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - -lodash.get@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= - lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= - -lodash.zip@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.zip/-/lodash.zip-4.2.0.tgz#ec6662e4896408ed4ab6c542a3990b72cc080020" - integrity sha1-7GZi5IlkCO1KtsVCo5kLcswIACA= - -lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19: - version "4.17.19" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" - integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== lru-cache@^6.0.0: version "6.0.0" @@ -1620,27 +1595,22 @@ make-dir@^3.0.0: dependencies: semver "^6.0.0" -mime-db@1.44.0, "mime-db@>= 1.43.0 < 2": - version "1.44.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" - integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== +mime-db@1.51.0, "mime-db@>= 1.43.0 < 2": + version "1.51.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" + integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== mime-types@^2.0.8: - version "2.1.27" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" - integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + version "2.1.34" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" + integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== dependencies: - mime-db "1.44.0" - -mime@^2.2.0: - version "2.4.6" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" - integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== + mime-db "1.51.0" -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mime@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" + integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== minimatch@^3.0.4: version "3.0.4" @@ -1654,23 +1624,21 @@ minimist@^1.2.0, minimist@^1.2.5: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -mkdirp@^0.5.1: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -ms@^2.1.1: +ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + multimap@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/multimap/-/multimap-1.1.0.tgz#5263febc085a1791c33b59bb3afc6a76a2a10ca8" @@ -1681,22 +1649,32 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -node-fetch@2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" - integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== +node-crc@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/node-crc/-/node-crc-1.3.2.tgz#c2f6f4f6abf765529ec99eb7e1a6c3942fc2fe69" + integrity sha512-1ipluqUEawnH1SVUz3JvnHqHaKbjTW5Mz/4lnvSU4fEmvfw9NU4DcTtCU8j2atk9p4P1TzyDKjo7YxVIKGTGdg== + dependencies: + "@types/node" "^15.6.1" + bindings "^1.3.0" -node-fetch@^2.2.0, node-fetch@^2.3.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" - integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== +node-fetch@^2.6.1: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" -node-forge@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" - integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== +node-forge@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.2.1.tgz#82794919071ef2eb5c509293325cec8afd0fd53c" + integrity sha512-Fcvtbb+zBcZXbTTVwqGA5W+MKBj56UjVRevvchv5XrcyXbmNdesfZL37nlcWOfpgHhgmxApw3tQbTr4CqNmX4w== -normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: +node-releases@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" + integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== + +normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -1706,44 +1684,43 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -object-inspect@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" - integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== +object-inspect@^1.11.0, object-inspect@^1.9.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" + integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== -object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: +object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== +object.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" object.entries@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.2.tgz#bc73f00acb6b6bb16c203434b10f9a7e797d3add" - integrity sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA== + version "1.1.5" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861" + integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g== dependencies: + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.17.5" - has "^1.0.3" + es-abstract "^1.19.1" -object.values@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" - integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== +object.values@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" + integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== dependencies: + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" - has "^1.0.3" + es-abstract "^1.19.1" once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" @@ -1752,13 +1729,6 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" - integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== - dependencies: - mimic-fn "^2.1.0" - optionator@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" @@ -1786,11 +1756,11 @@ p-limit@^2.2.0: p-try "^2.0.0" p-limit@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.0.2.tgz#1664e010af3cadc681baafd3e2a437be7b0fb5fe" - integrity sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg== + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: - p-try "^2.0.0" + yocto-queue "^0.1.0" p-locate@^2.0.0: version "2.0.0" @@ -1823,21 +1793,14 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= - dependencies: - error-ex "^1.2.0" - parse-json@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.1.tgz#7cfe35c1ccd641bce3981467e6c2ece61b3b3878" - integrity sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ== + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" + json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" path-exists@^3.0.0: @@ -1860,29 +1823,15 @@ path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= - dependencies: - pify "^2.0.0" - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= - dependencies: - find-up "^2.1.0" +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== pluralize@^8.0.0: version "8.0.0" @@ -1901,20 +1850,10 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.1.2.tgz#3050700dae2e4c8b67c4c3f666cdb8af405e1ce5" - integrity sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== +prettier@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" + integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== pump@^3.0.0: version "3.0.0" @@ -1948,14 +1887,6 @@ querystring@0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - read-pkg-up@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" @@ -1965,15 +1896,6 @@ read-pkg-up@^7.0.1: read-pkg "^5.2.0" type-fest "^0.8.1" -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - read-pkg@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" @@ -1993,33 +1915,15 @@ readable-stream@^3.1.1: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" +regexp-tree@^0.1.23, regexp-tree@~0.1.1: + version "0.1.24" + resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.24.tgz#3d6fa238450a4d66e5bc9c4c14bb720e2196829d" + integrity sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw== -regexp-tree@^0.1.21, regexp-tree@~0.1.1: - version "0.1.21" - resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.21.tgz#55e2246b7f7d36f1b461490942fa780299c400d7" - integrity sha512-kUUXjX4AnqnR8KRTCrayAo9PzYMRKmVoGgaz2tBuz0MF3g1ZbGebmtW0yFHfFK9CmBjQKeYIgoL22pFLBJY7sw== - -regexpp@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" - integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== reserved-words@^0.1.2: version "0.1.2" @@ -2031,12 +1935,14 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.17.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== +resolve@^1.10.0, resolve@^1.20.0: + version "1.22.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" + integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== dependencies: - path-parse "^1.0.6" + is-core-module "^2.8.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" ret@~0.1.10: version "0.1.15" @@ -2051,17 +1957,10 @@ retry-request@^4.2.2: debug "^4.1.1" extend "^3.0.2" -retry@0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= - -rimraf@2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" +retry@0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== rimraf@^3.0.2: version "3.0.2" @@ -2075,7 +1974,7 @@ safe-buffer@^5.0.1, safe-buffer@~5.2.0: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== @@ -2109,15 +2008,17 @@ sax@>=0.6.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.0.0: +semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.2.1, semver@^7.3.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== +semver@^7.3.5: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" shebang-command@^2.0.0: version "2.0.0" @@ -2131,28 +2032,19 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -signal-exit@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== - -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" +signal-exit@^3.0.2: + version "3.0.6" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" + integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== snakeize@^0.1.0: version "0.1.0" @@ -2186,16 +2078,11 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" - integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + version "3.0.11" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" + integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== -stream-events@^1.0.1, stream-events@^1.0.4, stream-events@^1.0.5: +stream-events@^1.0.4, stream-events@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/stream-events/-/stream-events-1.0.5.tgz#bbc898ec4df33a4902d892333d47da9bf1c406d5" integrity sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg== @@ -2207,39 +2094,21 @@ stream-shift@^1.0.0: resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== -string-width@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.2.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -string.prototype.trimend@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" - integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== +string.prototype.trimend@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== dependencies: + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.17.5" -string.prototype.trimstart@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" - integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== +string.prototype.trimstart@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== dependencies: + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.17.5" string_decoder@^1.1.1: version "1.3.0" @@ -2248,26 +2117,12 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: - ansi-regex "^5.0.0" + ansi-regex "^5.0.1" strip-bom@^3.0.0: version "3.0.0" @@ -2292,42 +2147,25 @@ supports-color@^5.3.0: has-flag "^3.0.0" supports-color@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" - integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" -table@^5.2.3: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== - dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" - -table@^6.0.9: - version "6.7.1" - resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" - integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== - dependencies: - ajv "^8.0.1" - lodash.clonedeep "^4.5.0" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.0" - strip-ansi "^6.0.0" +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== teeny-request@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-7.0.0.tgz#0e5c090bd9102ed559ffc8c9ddb00fbe1256db30" - integrity sha512-kWD3sdGmIix6w7c8ZdVKxWq+3YwVPGWz+Mq0wRZXayEKY/YHb63b8uphfBzcFDmyq8frD9+UTc3wLyOhltRbtg== + version "7.1.3" + resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-7.1.3.tgz#5a3d90c559a6c664a993477b138e331a518765ba" + integrity sha512-Ew3aoFzgQEatLA5OBIjdr1DWJUaC1xardG+qbPPo5k/y/3fMwXLxpjh5UB5dVfElktLaQbbMs80chkz53ByvSg== dependencies: - http-proxy-agent "^4.0.0" + http-proxy-agent "^5.0.0" https-proxy-agent "^5.0.0" - node-fetch "^2.2.0" + node-fetch "^2.6.1" stream-events "^1.0.5" uuid "^8.0.0" @@ -2336,41 +2174,26 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -through2@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= -tsconfig-paths@^3.9.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" - integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= + +tsconfig-paths@^3.12.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz#19769aca6ee8f6a1a341e38c8fa45dd9fb18899b" + integrity sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg== dependencies: "@types/json5" "^0.0.29" json5 "^1.0.1" minimist "^1.2.0" strip-bom "^3.0.0" -tslib@^1.8.1: - version "1.13.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" - integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== - -tsutils@^3.17.1: - version "3.17.1" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" - integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== - dependencies: - tslib "^1.8.1" - type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -2400,6 +2223,28 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" +unbox-primitive@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" + integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== + dependencies: + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + which-boxed-primitive "^1.0.2" + +undici-wrapper@frytg/undici-wrapper#v0.0.3: + version "0.0.3" + resolved "https://codeload.github.com/frytg/undici-wrapper/tar.gz/774c57e3dc6007dffc651e164447aad37f76cfcc" + dependencies: + abort-controller "^3.0.0" + undici "^4.12.0" + +undici@^4.12.0: + version "4.12.2" + resolved "https://registry.yarnpkg.com/undici/-/undici-4.12.2.tgz#f2fc50ca77a774ed8c0e7067c9361ee18a2f422b" + integrity sha512-RZj6SbkQFs5O/pJCboGEo6l5DTCe3Zg4r/8Z/0/2qnIv08+s6zL4akohOPMYWKc3mzwv15WTvsfMWaafZcvYoQ== + unique-string@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" @@ -2408,9 +2253,9 @@ unique-string@^2.0.0: crypto-random-string "^2.0.0" uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" @@ -2422,7 +2267,7 @@ url@0.10.3: punycode "1.3.2" querystring "0.2.0" -util-deprecate@^1.0.1, util-deprecate@~1.0.1: +util-deprecate@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= @@ -2432,20 +2277,15 @@ uuid@3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== -uuid@8.3.2: +uuid@8.3.2, uuid@^8.0.0: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -uuid@^8.0.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.2.0.tgz#cb10dd6b118e2dada7d0cd9730ba7417c93d920e" - integrity sha512-CYpGiFTUrmI6OBMkAdjSDM0k5h8SkkiTP4WAjQgDgNB1S3Ou9VBEvr6q0Kv2H1mMk7IWfxYGpMH5sd5AvcIV2Q== - v8-compile-cache@^2.0.3: - version "2.1.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" - integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== validate-npm-package-license@^3.0.1: version "3.0.4" @@ -2455,6 +2295,43 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +vue-eslint-parser@^7.10.0: + version "7.11.0" + resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz#214b5dea961007fcffb2ee65b8912307628d0daf" + integrity sha512-qh3VhDLeh773wjgNTl7ss0VejY9bMMa0GoDG2fQVyDzRFdiU3L7fw74tWZDHNQXdZqxO3EveQroa9ct39D2nqg== + dependencies: + debug "^4.1.1" + eslint-scope "^5.1.1" + eslint-visitor-keys "^1.1.0" + espree "^6.2.1" + esquery "^1.4.0" + lodash "^4.17.21" + semver "^6.3.0" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -2482,13 +2359,6 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" - xdg-basedir@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" @@ -2507,12 +2377,12 @@ xmlbuilder@~9.0.1: resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= -xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==