diff --git a/.create-adapter.json b/.create-adapter.json new file mode 100644 index 0000000..269f175 --- /dev/null +++ b/.create-adapter.json @@ -0,0 +1,45 @@ +{ + "cli": true, + "target": "directory", + "adapterName": "lametric", + "title": "LaMetric Time", + "description": "Control and manage your LaMetric Time", + "keywords": [ + "lametric", + "hardware", + "clock", + "message", + "notification" + ], + "expert": "yes", + "features": [ + "adapter" + ], + "adminFeatures": [], + "type": "hardware", + "startMode": "daemon", + "connectionType": "local", + "dataSource": "poll", + "connectionIndicator": "yes", + "language": "JavaScript", + "adminReact": "no", + "tools": [ + "ESLint", + "type checking" + ], + "releaseScript": "yes", + "devServer": "yes", + "devServerPort": 8081, + "indentation": "Space (4)", + "quotes": "single", + "es6class": "yes", + "authorName": "Matthias Kleine", + "authorGithub": "klein0r", + "authorEmail": "info@haus-automatisierung.com", + "gitRemoteProtocol": "SSH", + "gitCommit": "no", + "defaultBranch": "master", + "license": "MIT License", + "dependabot": "no", + "creatorVersion": "2.0.1" +} \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json index 07a8305..8b1e7fa 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,10 +1,22 @@ { + "root": true, "env": { "es6": true, "node": true, "mocha": true }, - "extends": "eslint:recommended", + "extends": [ + "eslint:recommended", + "plugin:react/recommended" + ], + "plugins": [ + "react" + ], + "settings": { + "react": { + "version": "detect" + } + }, "rules": { "indent": [ "error", @@ -15,8 +27,8 @@ ], "no-console": "off", "no-var": "error", - "prefer-const": "error", "no-trailing-spaces": "error", + "prefer-const": "error", "quotes": [ "error", "single", @@ -31,6 +43,9 @@ ] }, "parserOptions": { - "ecmaVersion": 2018 + "ecmaVersion": 2018, + "ecmaFeatures": { + "jsx": true + } } } \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 8956139..0000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -name: Bug report -about: Something is not working as it should -title: '' -labels: '' -assignees: '' ---- - -**Describe the bug** -A clear and concise description of what the bug is. - -**To Reproduce** -Steps to reproduce the behavior: -1. Go to '...' -2. Click on '...' -3. Scroll down to '....' -4. See error - -**Expected behavior** -A clear and concise description of what you expected to happen. - -**Screenshots & Logfiles** -If applicable, add screenshots and logfiles to help explain your problem. - -**Versions:** - - Adapter version: - - JS-Controller version: - - Node version: - - Operating system: - -**Additional context** -Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..a1be79e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,79 @@ +name: Bug report +title: "Bug report" +description: "Create a report to help improve this ioBroker adapter" +labels: bug +body: + - type: markdown + attributes: + value: > + **Thank you for wanting to report a bug in this adapter!** + + If this is the first time you are doing this, please take a few moments to read + through the [README](https://github.com/klein0r/ioBroker.lametric/blob/master/README.md). + + You are about to report a bug in **LaMetric Adapter**. Do not proceed if your issues + occurs with ioBroker, any third party adapters, unofficial or outdated + adapter versions. + + Do also not seek support here ("I need help with ...", "I have a + question ...", "Can someone walk me through ..."), that belongs into the + [ioBroker forum at forum.iobroker.net](https://forum.iobroker.net/). + + And finally, make sure any bug you want to report is still present with the **current** + adapter (beta) version. + + Thank you for your collaboration! + - type: textarea + attributes: + label: The problem + description: >- + Describe the issue you are experiencing here. Tell us what you were trying to do + step by step, and what happened that you did not expect. + + Provide a clear and concise description of what the problem is and include as many + details as possible. + validations: + required: true + - type: markdown + attributes: + value: | + ## Environment + - type: input + attributes: + label: Version of nodejs + description: Can be found in the host section of ioBroker admin + validations: + required: true + - type: input + attributes: + label: Version of ioBroker js-controller + description: Can be found in the host section of ioBroker admin + validations: + required: true + - type: input + attributes: + label: Version of Adapter + description: Can be found in the adapters tab of ioBroker admin + validations: + required: true + - type: input + attributes: + label: Operating system running ioBroker + description: >- + Linux, Windows, MacOS, something else? With version please? + validations: + required: true + - type: markdown + attributes: + value: | + ## Logs and other files needed for analysis + - type: checkboxes + attributes: + label: Checklist of files to include below + options: + - label: iobroker.current.log (Please share the logs in debug mode) + required: true + - label: Contents of the JavaScript browser console (always include in cases of issues with the user interface) + - type: textarea + attributes: + label: Additional information & file uploads diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..3ba13e0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: false diff --git a/.github/workflows/npmpublish.yml b/.github/workflows/npmpublish.yml deleted file mode 100644 index f5ffe92..0000000 --- a/.github/workflows/npmpublish.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: Publish - -on: - release: - types: [created] - -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v1 - - uses: actions/setup-node@v1 - with: - node-version: 10 - - run: npm i - - run: npm test - - publish-npm: - needs: build - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v1 - - uses: actions/setup-node@v1 - with: - node-version: 10 - registry-url: https://registry.npmjs.org/ - - run: npm i - - run: npm publish - env: - NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} diff --git a/.github/workflows/test-and-release.yml b/.github/workflows/test-and-release.yml new file mode 100644 index 0000000..5a5cb57 --- /dev/null +++ b/.github/workflows/test-and-release.yml @@ -0,0 +1,69 @@ +name: Test and Release + +# Run this job on all pushes and pull requests +# as well as tags with a semantic version +on: + push: + branches: + - "*" + tags: + # normal versions + - "v[0-9]+.[0-9]+.[0-9]+" + # pre-releases + - "v[0-9]+.[0-9]+.[0-9]+-**" + pull_request: {} + +jobs: + # Performs quick checks before the expensive test runs + check-and-lint: + if: contains(github.event.head_commit.message, '[skip ci]') == false + + runs-on: ubuntu-latest + + steps: + - uses: ioBroker/testing-action-check@v1 + with: + node-version: '14.x' + lint: true + + adapter-tests: + if: contains(github.event.head_commit.message, '[skip ci]') == false + + runs-on: ${{ matrix.os }} + strategy: + matrix: + node-version: [12.x, 14.x, 16.x] + os: [ubuntu-latest, windows-latest, macos-latest] + + steps: + - uses: ioBroker/testing-action-adapter@v1 + with: + node-version: ${{ matrix.node-version }} + os: ${{ matrix.os }} + + deploy: + needs: [check-and-lint, adapter-tests] + + if: | + contains(github.event.head_commit.message, '[skip ci]') == false && + github.event_name == 'push' && + startsWith(github.ref, 'refs/tags/v') + + runs-on: ubuntu-latest + + steps: + - uses: ioBroker/testing-action-deploy@v1 + with: + node-version: '14.x' + npm-token: ${{ secrets.NPM_TOKEN }} + github-token: ${{ secrets.GITHUB_TOKEN }} + + # When using Sentry for error reporting, Sentry can be informed about new releases + # To enable create a API-Token in Sentry (User settings, API keys) + # Enter this token as a GitHub secret (with name SENTRY_AUTH_TOKEN) in the repository options + # Then uncomment and customize the following block: + sentry-token: ${{ secrets.SENTRY_AUTH_TOKEN }} + sentry-project: "iobroker-lametric" + sentry-version-prefix: "iobroker.lametric" + # If your sentry project is linked to a GitHub repository, you can enable the following option + # sentry-github-integration: true diff --git a/.gitignore b/.gitignore index 000d0ac..de318ad 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,7 @@ Thumbs.db # i18n intermediate files admin/i18n/flat.txt -admin/i18n/*/flat.txt \ No newline at end of file +admin/i18n/*/flat.txt + +# ioBroker dev-server +.dev-server/ diff --git a/.npmignore b/.npmignore deleted file mode 100644 index f1f2356..0000000 --- a/.npmignore +++ /dev/null @@ -1,27 +0,0 @@ -.git -.idea -node_modules/ -nbproject/ -.vs*/ -*.code-workspace -Thumbs.db -gulpfile.js - -test/ -travis/ -.travis.yml -appveyor.yml -tsconfig.json - -.eslintrc.json -.eslintrc.js - -# npm package files -iobroker.*.tgz -package-lock.json - -# i18n intermediate files -admin/i18n - -# maintenance scripts -maintenance/** \ No newline at end of file diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..b6f27f1 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/.releaseconfig.json b/.releaseconfig.json new file mode 100644 index 0000000..27072bb --- /dev/null +++ b/.releaseconfig.json @@ -0,0 +1,3 @@ +{ + "plugins": ["iobroker", "license"] +} \ No newline at end of file diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index e40afae..0000000 --- a/.travis.yml +++ /dev/null @@ -1,28 +0,0 @@ -os: - - linux - - osx - - windows -language: node_js -node_js: - - '10' - - '12' -env: - - CXX=g++-6 -addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-6 -before_install: - - 'if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then CC=gcc-6; fi' - - 'if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then CC=g++-6; fi' -before_script: - - export NPMVERSION=$(echo "$($(which npm) -v)"|cut -c1) - - 'if [[ $NPMVERSION == 5 ]]; then npm install -g npm; fi' - - npm -v -script: - - 'npm run test:package' - - 'npm run test:unit' - - 'export DEBUG=testing:*' - - 'npm run test:integration' diff --git a/LICENSE b/LICENSE index 391f370..1e4cf1e 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2020 Matthias Kleine +Copyright (c) 2021 Matthias Kleine Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 0f47e08..d4f4f6c 100644 --- a/README.md +++ b/README.md @@ -8,109 +8,122 @@ [![installed](http://iobroker.live/badges/lametric-installed.svg)](http://iobroker.live/badges/lametric-installed.svg) [![Dependency Status](https://img.shields.io/david/klein0r/iobroker.lametric.svg)](https://david-dm.org/klein0r/iobroker.lametric) [![Known Vulnerabilities](https://snyk.io/test/github/klein0r/ioBroker.lametric/badge.svg)](https://snyk.io/test/github/klein0r/ioBroker.lametric) -[![Build Status](http://img.shields.io/travis/klein0r/ioBroker.lametric.svg)](https://travis-ci.org/klein0r/ioBroker.lametric) +![Test and Release](https://github.com/klein0r/ioBroker.lametric/workflows/Test%20and%20Release/badge.svg) [![NPM](https://nodei.co/npm/iobroker.lametric.png?downloads=true)](https://nodei.co/npm/iobroker.lametric/) -This adapter allows you to get status information about your LaMetric Time and to send notifications to it. +This adapter allows you to get status information about your [LaMetric Time](https://haus-auto.com/p/amz/LaMetricTime) *(Affiliate Link)* and to send notifications to it. All you need is the IP address of your device and the api developer key. -## Configuration +## Sponsored by -You can get your personal key [here](https://developer.lametric.com/). +[![ioBroker Master Kurs](https://haus-automatisierung.com/images/ads/ioBroker-Kurs.png)](https://haus-automatisierung.com/iobroker-kurs/?refid=iobroker-lametric) -![api-key](docs/apiKey.png) +## Installation -## Usage +Please use the "adapter list" in ioBroker to install a stable version of this adapter. You can also use the CLI to install this adapter: -You can read more about notifications here: https://lametric-documentation.readthedocs.io/en/latest/reference-docs/device-notifications.html +``` +iobroker add lametric +``` -## Features +## Documentation -- Set display brightness (percent, auto-mode/manual-mode) -- Set audio volume (percent) -- Configure screensaver (enable/disable, time based, when dark) -- Activate/Deactivate bluetooth and change bluetooth name -- Switch between apps (next, previous, go to specific app) -- Send blockly notifications (with configurable priority, sound, icons, text, ...) -- Control special apps like radio, stopwatch and weather +[🇺🇸 Documentation](./docs/en/basics.md) -## Blockly +[🇩🇪 Dokumentation](./docs/de/basics.md) -You can use a simple string as message, which will be shown as a single frame +## Sentry -![simple](docs/blockly1.png) +**This adapter uses Sentry libraries to automatically report exceptions and code errors to the developers.** For more details and for information how to disable the error reporting see [Sentry-Plugin Documentation](https://github.com/ioBroker/plugin-sentry#plugin-sentry)! Sentry reporting is used starting with js-controller 3.0. -To show multiple frames, you can also provide an array as message +## Changelog -![simple](docs/blockly2.png) + -## Scripts -To show the message on your la metric just send a message to this instance with script adapter: -``` -sendTo('lametric.0', 'send', { - "priority": "[info|warning|critical]", - "icon_type": "[none|info|alert]", - "lifeTime": , - "model": { - "frames": [ - { - "icon":"", - "text":"" - }, - { - "icon": 298, - "text":"text" - }, - { - "icon": 120, - "goalData":{ - "start": 0, - "current": 50, - "end": 100, - "unit": "%" - } - }, - { - "chartData": [ ] // [ 1, 2, 3, 4, 5, 6, 7 ] - } - ], - "sound": { - "category":"[alarms|notifications]", - "id":"", - "repeat": - }, - "cycles": - } -}); -``` +### **WORK IN PROGRESS** -Example to show some information cyclic: -``` -let i = 0; -function show() { - console.log('Show ' + i); - sendTo('lametric.0', 'send', { - "priority": "info", - "icon_type": "info", - "lifeTime": 10000, - "model": { - "frames": [ - { - "icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAIAAABLbSncAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjEuNWRHWFIAAAAySURBVBhXY4AAYdcKk1lngCSUDwHIfAQbzgLqgDCgIqRLwFkQCYQoBAD5EATl4wQMDADhuxQzaDgX0gAAAABJRU5ErkJggg==", - "text":"Hi " + i - } - ], - "cycles": 0 - } - }); - i++; -} -setInterval(show, 10000); -show(); -``` +* (klein0r) Updated dependencies -## Changelog +### 1.5.2 (2021-12-23) + +* (klein0r) Updated dependencies +* (klein0r) Updated documentation + +### 1.5.1 + +* (klein0r) Translated all objects +* (klein0r) Fixed HTTPS option + +### 1.5.0 + +* (klein0r) Fixed myData DIY data type **(BREAKING CHANGE - requires SimpleAPI 2.6.2 or later to use json parameter)** +* (klein0r) Added version check + +### 1.4.1 + +* (klein0r) Fixed missing translations + +### 1.4.0 + +* (klein0r) Admin 5 Support + +### 1.3.2 + +* (klein0r) Updated dependencies + +### 1.3.1 + +* (klein0r) Added local start and end time for screensaver + +### 1.3.0 + +* (klein0r) Encrypt sensitive information **(BREAKING CHANGE - RE-ENTER YOUR API KEY)** + +### 1.2.1 + +* (klein0r) Extended regex for My Data (DIY) + +### 1.2.0 + +* (klein0r) Added hide if value for My Data (DIY) +* (klein0r) Remove frames without text from My Data (DIY) +* (klein0r) Allow dynamic states for My Data (DIY) icons + +### 1.1.3 + +* (klein0r) Fixed async object creation + +### 1.1.2 + +* (klein0r) Delete app channels if app was deleted on LaMetric +* (klein0r) Custom app configuration (clockface, countdown duration) + +### 1.1.1 + +* (klein0r) Fixed replacement issue for My Data (DIY) +* (klein0r) Updated README with more configuration details + +### 1.1.0 + +* (klein0r) Added support for My Data (DIY) + +### 1.0.1 + +* (klein0r) Added chart data support to notification + +### 1.0.0 + +* (klein0r) First stable release +* (klein0r) Added iobroker sentry +* (klein0r) Added brightness and volume limit information (min, max) + +### 0.0.10 + +* (klein0r) Switched to axios lib ### 0.0.9 @@ -155,7 +168,7 @@ show(); The MIT License (MIT) -Copyright (c) 2020 Matthias Kleine +Copyright (c) 2021 Matthias Kleine Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/admin/blockly.js b/admin/blockly.js index 426b09f..ce2151c 100644 --- a/admin/blockly.js +++ b/admin/blockly.js @@ -18,8 +18,8 @@ Blockly.Translate = Blockly.Translate || function (word, lang) { Blockly.Words['lametric'] = {'en': 'LaMetric', 'de': 'LaMetric'}; Blockly.Words['lametric_icon'] = {'en': 'icon', 'de': 'Icon'}; Blockly.Words['lametric_icontype'] = {'en': 'icon type', 'de': 'Icon-Typ'}; -Blockly.Words['lametric_lifetime'] = {'en': 'life time', 'de': 'Lebenszeit'}; -Blockly.Words['lametric_message'] = {'en': 'message', 'de': 'Meldung'}; +Blockly.Words['lametric_lifetime'] = {'en': 'life time (ms)', 'de': 'Lebenszeit (ms)'}; +Blockly.Words['lametric_message'] = {'en': 'message', 'de': 'Nachricht'}; Blockly.Words['lametric_sound'] = {'en': 'sound', 'de': 'Ton'}; Blockly.Words['lametric_priority'] = {'en': 'priority', 'de': 'Priorität'}; Blockly.Words['lametric_cycles'] = {'en': 'cycles', 'de': 'Wiederholungen'}; diff --git a/admin/i18n/de/translations.json b/admin/i18n/de/translations.json new file mode 100644 index 0000000..d31d9d2 --- /dev/null +++ b/admin/i18n/de/translations.json @@ -0,0 +1,14 @@ +{ + "Hide if": "verstecke wenn Wert", + "IP": "IP Adresse", + "IP address of your LaMetric Time": "IP-Adresse Deiner LaMetric Time", + "Icon": "Icon", + "My Data (DIY)": "My Data (DIY)", + "Options": "Einstellungen", + "Text": "Text", + "Use the SimpleAPI adapter to request these information (see README for details)": "Verwende den SimpleAPI-Adapter, um diese Informationen abzurufen (Einzelheiten siehe README-Datei).", + "You can find available icons here": "Verfügbare Icons findest Du hier", + "Your personal developer token - you can get it here": "Dein persönliches Entwickler-Token - Du kannst es hier herausfinden", + "Use HTTPS": "HTTPS verwenden", + "API Key": "API-Schlüssel" +} \ No newline at end of file diff --git a/admin/i18n/en/translations.json b/admin/i18n/en/translations.json new file mode 100644 index 0000000..c018f72 --- /dev/null +++ b/admin/i18n/en/translations.json @@ -0,0 +1,14 @@ +{ + "Hide if": "hide if value", + "IP": "IP-Address", + "IP address of your LaMetric Time": "IP address of your LaMetric Time", + "Icon": "Icon", + "My Data (DIY)": "My Data (DIY)", + "Options": "Options", + "Text": "Text", + "Use the SimpleAPI adapter to request these information (see README for details)": "Use the SimpleAPI adapter to request these information (see README for details)", + "You can find available icons here": "You can find available icons here", + "Your personal developer token - you can get it here": "Your personal developer token - you can get it here", + "Use HTTPS": "Use HTTPS", + "API Key": "API Key" +} \ No newline at end of file diff --git a/admin/i18n/es/translations.json b/admin/i18n/es/translations.json new file mode 100644 index 0000000..95f7141 --- /dev/null +++ b/admin/i18n/es/translations.json @@ -0,0 +1,14 @@ +{ + "Hide if": "ocultar si valor", + "IP": "Dirección IP", + "IP address of your LaMetric Time": "Dirección IP de su hora de LaMetric", + "Icon": "icono", + "My Data (DIY)": "Mis datos (bricolaje)", + "Options": "Opciones", + "Text": "texto", + "Use the SimpleAPI adapter to request these information (see README for details)": "Utilice el adaptador SimpleAPI para solicitar esta información (consulte README para obtener más detalles)", + "You can find available icons here": "Puede encontrar los iconos disponibles aquí", + "Your personal developer token - you can get it here": "Tu token de desarrollador personal: puedes obtenerlo aquí", + "Use HTTPS": "Usar HTTPS", + "API Key": "Clave API" +} \ No newline at end of file diff --git a/admin/i18n/fr/translations.json b/admin/i18n/fr/translations.json new file mode 100644 index 0000000..cf30d83 --- /dev/null +++ b/admin/i18n/fr/translations.json @@ -0,0 +1,14 @@ +{ + "Hide if": "cacher si valeur", + "IP": "Adresse IP", + "IP address of your LaMetric Time": "Adresse IP de votre LaMetric Time", + "Icon": "icône", + "My Data (DIY)": "Mes données (bricolage)", + "Options": "Options", + "Text": "texte", + "Use the SimpleAPI adapter to request these information (see README for details)": "Utilisez l'adaptateur SimpleAPI pour demander ces informations (voir README pour plus de détails)", + "You can find available icons here": "Vous pouvez trouver les icônes disponibles ici", + "Your personal developer token - you can get it here": "Votre jeton de développeur personnel - vous pouvez l'obtenir ici", + "Use HTTPS": "Utiliser HTTPS", + "API Key": "clé API" +} \ No newline at end of file diff --git a/admin/i18n/it/translations.json b/admin/i18n/it/translations.json new file mode 100644 index 0000000..718877a --- /dev/null +++ b/admin/i18n/it/translations.json @@ -0,0 +1,14 @@ +{ + "Hide if": "nascondi se valore", + "IP": "Indirizzo IP", + "IP address of your LaMetric Time": "Indirizzo IP di LaMetric Time", + "Icon": "icona", + "My Data (DIY)": "I miei dati (fai da te)", + "Options": "Opzioni", + "Text": "testo", + "Use the SimpleAPI adapter to request these information (see README for details)": "Usa l'adattatore SimpleAPI per richiedere queste informazioni (vedi README per i dettagli)", + "You can find available icons here": "Puoi trovare le icone disponibili qui", + "Your personal developer token - you can get it here": "Il tuo token sviluppatore personale: puoi ottenerlo qui", + "Use HTTPS": "Usa HTTPS", + "API Key": "Chiave API" +} \ No newline at end of file diff --git a/admin/i18n/nl/translations.json b/admin/i18n/nl/translations.json new file mode 100644 index 0000000..a4b1c33 --- /dev/null +++ b/admin/i18n/nl/translations.json @@ -0,0 +1,14 @@ +{ + "Hide if": "verbergen als waarde", + "IP": "IP adres", + "IP address of your LaMetric Time": "IP-adres van uw LaMetric Time", + "Icon": "icoon", + "My Data (DIY)": "Mijn gegevens (DIY)", + "Options": "opties", + "Text": "tekst", + "Use the SimpleAPI adapter to request these information (see README for details)": "Gebruik de SimpleAPI-adapter om deze informatie op te vragen (zie README voor details)", + "You can find available icons here": "Beschikbare pictogrammen vindt u hier", + "Your personal developer token - you can get it here": "Je persoonlijke ontwikkelaarstoken - je kunt het hier downloaden", + "Use HTTPS": "HTTPS gebruiken", + "API Key": "API sleutel" +} \ No newline at end of file diff --git a/admin/i18n/pl/translations.json b/admin/i18n/pl/translations.json new file mode 100644 index 0000000..e523ed7 --- /dev/null +++ b/admin/i18n/pl/translations.json @@ -0,0 +1,14 @@ +{ + "Hide if": "ukryj, jeśli wartość", + "IP": "Adres IP", + "IP address of your LaMetric Time": "Adres IP twojego czasu LaMetric", + "Icon": "Ikona", + "My Data (DIY)": "Moje dane (DIY)", + "Options": "Opcje", + "Text": "tekst", + "Use the SimpleAPI adapter to request these information (see README for details)": "Użyj adaptera SimpleAPI, aby zażądać tych informacji (szczegółowe informacje można znaleźć w pliku README)", + "You can find available icons here": "Dostępne ikony znajdziesz tutaj", + "Your personal developer token - you can get it here": "Twój osobisty token programisty - możesz go zdobyć tutaj", + "Use HTTPS": "Użyj HTTPS", + "API Key": "Klucz API" +} \ No newline at end of file diff --git a/admin/i18n/pt/translations.json b/admin/i18n/pt/translations.json new file mode 100644 index 0000000..37c4b7e --- /dev/null +++ b/admin/i18n/pt/translations.json @@ -0,0 +1,14 @@ +{ + "Hide if": "esconda se o valor", + "IP": "Endereço de IP", + "IP address of your LaMetric Time": "Endereço IP do seu LaMetric Time", + "Icon": "ícone", + "My Data (DIY)": "Meus dados (faça você mesmo)", + "Options": "Opções", + "Text": "texto", + "Use the SimpleAPI adapter to request these information (see README for details)": "Use o adaptador SimpleAPI para solicitar essas informações (consulte README para obter detalhes)", + "You can find available icons here": "Você pode encontrar os ícones disponíveis aqui", + "Your personal developer token - you can get it here": "Seu token de desenvolvedor pessoal - você pode obtê-lo aqui", + "Use HTTPS": "Use HTTPS", + "API Key": "Chave API" +} \ No newline at end of file diff --git a/admin/i18n/ru/translations.json b/admin/i18n/ru/translations.json new file mode 100644 index 0000000..2ad2a63 --- /dev/null +++ b/admin/i18n/ru/translations.json @@ -0,0 +1,14 @@ +{ + "Hide if": "скрыть, если значение", + "IP": "Айпи адрес", + "IP address of your LaMetric Time": "IP-адрес вашего LaMetric Time", + "Icon": "икона", + "My Data (DIY)": "Мои данные (DIY)", + "Options": "Настройки", + "Text": "текст", + "Use the SimpleAPI adapter to request these information (see README for details)": "Используйте адаптер SimpleAPI для запроса этой информации (подробности см. В README)", + "You can find available icons here": "Вы можете найти доступные значки здесь", + "Your personal developer token - you can get it here": "Ваш личный токен разработчика - вы можете получить его здесь", + "Use HTTPS": "Использовать HTTPS", + "API Key": "Ключ API" +} \ No newline at end of file diff --git a/admin/i18n/zh-cn/translations.json b/admin/i18n/zh-cn/translations.json new file mode 100644 index 0000000..6ca53a8 --- /dev/null +++ b/admin/i18n/zh-cn/translations.json @@ -0,0 +1,14 @@ +{ + "Hide if": "如果有价值则隐藏", + "IP": "IP地址", + "IP address of your LaMetric Time": "您的LaMetric Time的IP地址", + "Icon": "图标", + "My Data (DIY)": "我的资料(DIY)", + "Options": "选项", + "Text": "文本", + "Use the SimpleAPI adapter to request these information (see README for details)": "使用SimpleAPI适配器请求这些信息(有关详细信息,请参阅自述文件)", + "You can find available icons here": "您可以在此处找到可用的图标", + "Your personal developer token - you can get it here": "您的个人开发者令牌-您可以在此处获取", + "Use HTTPS": "使用 HTTPS", + "API Key": "API 密钥" +} \ No newline at end of file diff --git a/admin/index_m.html b/admin/index_m.html deleted file mode 100644 index a360691..0000000 --- a/admin/index_m.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
-
-
-
- -
-
-
-
- - - IP address of your LaMetric Time -
-
- - - Your personal developer token - you can get it here -
-
-
-
- - - -
-
-
-
- - \ No newline at end of file diff --git a/admin/jsonConfig.json b/admin/jsonConfig.json new file mode 100644 index 0000000..4a68d5e --- /dev/null +++ b/admin/jsonConfig.json @@ -0,0 +1,120 @@ +{ + "i18n": true, + "type": "tabs", + "items": { + "_options": { + "type": "panel", + "label": "Options", + "items": { + "lametricIp": { + "type": "text", + "sm": 12, + "md": 6, + "lg": 6, + "label": "IP", + "help": "IP address of your LaMetric Time" + }, + "lametricToken": { + "type": "text", + "sm": 12, + "md": 6, + "lg": 6, + "label": "API Key", + "help": "Your personal developer token - you can get it here" + }, + "useHttps": { + "newLine": true, + "type": "checkbox", + "sm": 12, + "md": 6, + "lg": 6, + "label": "Use HTTPS" + }, + "_ioBrokerKursBanner": { + "newLine": true, + "type": "staticImage", + "sm": 12, + "md": 6, + "lg": 6, + "href": "https://haus-automatisierung.com/iobroker-kurs/?refid=iobroker-lametric", + "src": "https://haus-automatisierung.com/images/ads/ioBroker-Kurs.png" + } + } + }, + "_advanced": { + "type": "panel", + "label": "My Data (DIY)", + "items": { + "mydatadiy": { + "type": "table", + "sm": 12, + "md": 12, + "lg": 12, + "label": "My Data (DIY)", + "items": [ + { + "type": "text", + "attr": "icon", + "width": "20%", + "title": { + "en": "Icon", + "de": "Symbol", + "ru": "Значок", + "pt": "Ícone", + "nl": "Icoon", + "fr": "Icône", + "it": "Icona", + "es": "Icono", + "pl": "Ikona", + "zh-cn": "图标" + }, + "filter": false, + "sort": false, + "default": "a9335" + }, + { + "type": "text", + "attr": "text", + "width": "40%", + "title": { + "en": "Text", + "de": "Text", + "ru": "Текст", + "pt": "Texto", + "nl": "Tekst", + "fr": "Texte", + "it": "Testo", + "es": "Texto", + "pl": "Tekst", + "zh-cn": "文本" + }, + "filter": false, + "sort": false, + "default": "haus-automatisierung.com" + }, + { + "type": "text", + "attr": "hideif", + "width": "40%", + "title": { + "en": "Hide if value matches", + "de": "Ausblenden, wenn Wert übereinstimmt", + "ru": "Скрыть, если значение совпадает", + "pt": "Ocultar se o valor corresponder", + "nl": "Verbergen als waarde overeenkomt", + "fr": "Masquer si la valeur correspond", + "it": "Nascondi se il valore corrisponde", + "es": "Ocultar si el valor coincide", + "pl": "Ukryj, jeśli wartość pasuje", + "zh-cn": "如果值匹配则隐藏" + }, + "filter": false, + "sort": false, + "default": "" + } + ] + } + } + } + } +} \ No newline at end of file diff --git a/admin/style.css b/admin/style.css deleted file mode 100644 index 703d654..0000000 --- a/admin/style.css +++ /dev/null @@ -1,10 +0,0 @@ -/* You can delete those if you want. I just found them very helpful */ -* { - box-sizing: border-box -} -.m { - /* Don't cut off dropdowns! */ - overflow: initial; -} - -/* Add your styles here */ diff --git a/admin/words.js b/admin/words.js deleted file mode 100644 index 7b4e180..0000000 --- a/admin/words.js +++ /dev/null @@ -1,53 +0,0 @@ -/*global systemDictionary:true */ -'use strict'; - -systemDictionary = { - "IP": { - "en": "IP-Address", - "de": "IP Adresse", - "ru": "Айпи адрес", - "pt": "Endereço de IP", - "nl": "IP adres", - "fr": "Adresse IP", - "it": "Indirizzo IP", - "es": "Dirección IP", - "pl": "Adres IP", - "zh-cn": "IP地址" - }, - "IP address of your LaMetric Time": { - "en": "IP address of your LaMetric Time", - "de": "IP-Adresse Ihrer LaMetric Time", - "ru": "IP-адрес вашего LaMetric Time", - "pt": "Endereço IP do seu LaMetric Time", - "nl": "IP-adres van uw LaMetric Time", - "fr": "Adresse IP de votre LaMetric Time", - "it": "Indirizzo IP di LaMetric Time", - "es": "Dirección IP de su hora de LaMetric", - "pl": "Adres IP twojego czasu LaMetric", - "zh-cn": "您的LaMetric Time的IP地址" - }, - "Developer Token": { - "en": "Developer Token", - "de": "Entwickler-Token", - "ru": "Жетон разработчика", - "pt": "Token de desenvolvedor", - "nl": "Ontwikkelaarstoken", - "fr": "Jeton de développeur", - "it": "Token sviluppatore", - "es": "Token de desarrollador", - "pl": "Token programisty", - "zh-cn": "开发者令牌" - }, - "Your personal developer token - you can get it here": { - "en": "Your personal developer token - you can get it here", - "de": "Ihr persönliches Entwickler-Token - Sie können es hier erhalten", - "ru": "Ваш личный токен разработчика - вы можете получить его здесь", - "pt": "Seu token de desenvolvedor pessoal - você pode obtê-lo aqui", - "nl": "Je persoonlijke ontwikkelaarstoken - je kunt het hier downloaden", - "fr": "Votre jeton de développeur personnel - vous pouvez l'obtenir ici", - "it": "Il tuo token sviluppatore personale: puoi ottenerlo qui", - "es": "Tu token de desarrollador personal: puedes obtenerlo aquí", - "pl": "Twój osobisty token programisty - możesz go zdobyć tutaj", - "zh-cn": "您的个人开发者令牌-您可以在此处获取" - } -}; \ No newline at end of file diff --git a/docs/blockly3.png b/docs/blockly3.png new file mode 100644 index 0000000..03b67b5 Binary files /dev/null and b/docs/blockly3.png differ diff --git a/docs/de/basics.md b/docs/de/basics.md new file mode 100644 index 0000000..3ca18ac --- /dev/null +++ b/docs/de/basics.md @@ -0,0 +1,184 @@ +![Logo](../../admin/lametric.png) + +# ioBroker.lametric + +## Anforderungen + +- *LaMetric Time* mit Firmware *2.2.2* (oder neuer) + +## Configuration + +Du bekommst deinen Geräte-Schlüssel (API-Key) [hier](https://developer.lametric.com/user/devices). + +![api-key](docs/apiKey.png) + +## Features + +- Verändern der Display-Helligkeit (prozentual, Automatik/Manueller Modus) +- Verändern der Lautstärke (prozentual) +- Konfiguration des Bildschirmschoners (aktivieren/deaktivieren, Zeitbasiert, wenn dunkel) +- Bluetooth aktivieren/deaktivieren, Bluetooth Name verändern +- Zwischen Apps wechseln (nächste, vorige, gehe zu spezifischer App) +- Versenden von Notifications (mit konfigurierbarer Priorität, Sound, Icons, Text, ...) +- Kontrolle von speziellen Apps wie ``clock``, ``radio``, ``stopwatch`` oder ``weather`` +- Nutzung der *My Data (DIY)* LaMetric App um regelmäßig Informationen darzustellen + +Alle Funktionen sind nur durch die [offizielle API](https://lametric-documentation.readthedocs.io/en/latest/reference-docs/lametric-time-reference.html) limitiert. + +## Blockly Beispiele + +Senden eines einfachen Textes, welcher als einzelner Frame angezeigt wird + +![single frame](docs/blockly1.png) + +Um mehrere Frames darzustellen, kann eine Liste von Texten übergeben werden + +![multiple frames](docs/blockly2.png) + +Um Graphen darzustellen, muss ein Array aus Zahlen als Liste in einem Frame übergeben werden. + +![chart data frames](docs/blockly3.png) + +## My Data (DIY) *(version > 1.1.0)* + +*LaMetric* bietet (über den integrierten App-Store) eine zusätzliche App an, um eigene Informationen darzustellen. Diese App heißt [My Data DIY](https://apps.lametric.com/apps/my_data__diy_/8942). Dieser Adapter erstellt einen Datenpunkt im erforderlichen Format. +Du kannst den Simple API Adapter nutzen, um Daten zur LaMetric Time zu übertragen. + +```ioBroker LaMetric Adapter -> State with Frame information <- Simple API Adapter <- My Data DIY App <- LaMetric``` + +### Konfiguration (mit Authentisierung) + +1. Installiere den [Simple API ioBroker Adapter](https://github.com/ioBroker/ioBroker.simple-api) +2. Erstelle einen neuen ioBroker-Nutzer mit dem Namen ``lametric`` und einem eigenen Passwort (z.B. ``HhX7dZl3Fe``) +3. Füge den neuen ``lametric``-Nutzer zur Gruppe ``users`` hinzu +4. Installiere die App *My Data DIY* über den App-Store auf deiner *LaMetric Time* +5. Öffne die Einstellungen der *My Data (DIY)* App und konfiguriere die URL des Simple API Adapters (siehe unten) +6. Gehe in die Adaptereinstellungen und füge neue Frames mit deinen eigenen Informationen hinzu (siehe nächster Abschnitt) + +``` +http://172.16.0.219:8087/getPlainValue/lametric.0.mydatadiy.obj/?json&user=lametric&pass=HhX7dZl3Fe +``` + +**Wichtig: Nutze das json-Flag des SimpleAPI Adapters (verfügbar seit Version 2.6.2)** + +**Stelle sicher, dass die IP, der Port, Benutzername und Passwort in der URL korrekt sind!** + +### Konfiguration (ohne Authentisierung) + +1. Installiere den [Simple API ioBroker Adapter](https://github.com/ioBroker/ioBroker.simple-api) +2. Installiere die App *My Data DIY* über den App-Store auf deiner *LaMetric Time* +3. Öffne die Einstellungen der *My Data (DIY)* App und konfiguriere die URL des Simple API Adapters (siehe unten) +4. Gehe in die Adaptereinstellungen und füge neue Frames mit deinen eigenen Informationen hinzu (siehe nächster Abschnitt) + +``` +http://172.16.0.219:8087/getPlainValue/lametric.0.mydatadiy.obj/?json +``` + +**Stelle sicher, dass die IP und der Port in der URL korrekt sind!** + +### Frame Konfiguration *(Version > 1.1.0)* + +- Füge mit dem Plus-Button so viele Frames hinzu, wie Du möchtest +- Symbol: Wähle ein Symbol von der [offiziellen Webseite](https://developer.lametric.com/icons) und füge die ID in das Feld ein. **Wichtig: Nutze ein i (für statische Sybole) oder ein a (für animierte Symbole) als Präfix der ID (Beispiel: `i3389`)** +- Text: Tippe einen beliebigen anzuzeigenden Text ein. Du kannst Informatioenn aus Datenpunkten abfragem, indem Du deren ID in geschweifte Klammern angibst. An dieser Stelle wird dann der aktuelle Wert der Datenpunkte eingesetzt. (Beispiel: `{youtube.0.channels.HausAutomatisierungCom.statistics.subscriberCount} Subscribers`) + +Beispielkonfiguration von 3 Frames: + +![example frame config](docs/myDataDIYConfig.png) + +## Spezielle Apps / Widgets *(Version > 1.1.2)* + +Einige Apps lassen sich mit Zusatzinformationen versehen oder steuern. + +### clock.clockface + +Gültige Werte sind + +- `weather`, `page_a_day`, `custom` oder `none` +- Eigene Icons im Format `data:image/png;base64,` oder `data:image/gif;base64,` + +Beispiel: `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAOklEQVQYlWNUVFBgwAeYcEncv//gP04FMEmsCmCSiooKjHAFMEF0SRQTsEnCFcAE0SUZGBgYGAl5EwA+6RhuHb9bggAAAABJRU5ErkJggg==` + +### countdown.configure + +Erlaubte Werte: Zeit in Sekunden + +## Scripts + +Um Nachrichten/Notifications auf Deiner *LaMetric Time* anzuzeigen, sende eine Nachricht mit dem JavaScript Adapter (oder einem anderen Adapter) an die entsprechende Instanz: + +```JavaScript +sendTo( + "lametric.0", + "notification", + { + priority: "[info|warning|critical]", + iconType: "[none|info|alert]", + sound: "", + lifeTime: , + icon: "", + text: "", + cycles: + } +); +``` + +Beispiel einzelner Frame: + +```JavaScript +sendTo( + "lametric.0", + "notification", + { + priority: "info", + iconType: "none", + sound: "cat", + lifeTime: 5000, + icon: "i31820", + text: "test", + cycles: 1 + } +); +``` + +Beispiel mehrere Frames: + +```JavaScript +sendTo( + "lametric.0", + "notification", + { + priority: "info", + iconType: "none", + sound: "cat", + lifeTime: 5000, + icon: "i31820", + text: ["frame 1", "frame 2", "frame 3"], + cycles: 1 + } +); +``` + +Beispiel zyklische Informationen: + +```JavaScript +let i = 0; +function show() { + console.log('Show ' + i); + sendTo( + "lametric.0", + "notification", + { + priority: "info", + iconType: "info", + lifeTime: 5000, + icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAIAAABLbSncAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjEuNWRHWFIAAAAySURBVBhXY4AAYdcKk1lngCSUDwHIfAQbzgLqgDCgIqRLwFkQCYQoBAD5EATl4wQMDADhuxQzaDgX0gAAAABJRU5ErkJggg==", + text: "Hi " + i, + cycles: 1 + } + ); + i++; +} +setInterval(show, 10000); +show(); +``` \ No newline at end of file diff --git a/docs/en/basics.md b/docs/en/basics.md new file mode 100644 index 0000000..1ad1b21 --- /dev/null +++ b/docs/en/basics.md @@ -0,0 +1,184 @@ +![Logo](../../admin/lametric.png) + +# ioBroker.lametric + +## Requirements + +- *LaMetric Time* with firmware *2.2.2* (or later) + +## Configuration + +You can get your device API key [here](https://developer.lametric.com/user/devices). + +![api-key](docs/apiKey.png) + +## Features + +- Set display brightness (percent, auto-mode/manual-mode) +- Set audio volume (percent) +- Configure screensaver (enable/disable, time based, when dark) +- Activate/Deactivate bluetooth and change bluetooth name +- Switch between apps (next, previous, go to specific app) +- Send notifications with blockly (with configurable priority, sound, icons, text, ...) +- Control special apps like ``clock``, ``radio``, ``stopwatch`` or ``weather`` +- Use *My Data (DIY)* LaMetric App to display persistent information + +Features are limited by the [official API features](https://lametric-documentation.readthedocs.io/en/latest/reference-docs/lametric-time-reference.html). + +## Blockly Examples + +You can use a simple string as message, which will be shown as a single frame + +![single frame](docs/blockly1.png) + +To show multiple frames, you can also provide an array as message + +![multiple frames](docs/blockly2.png) + +If you want to use chart frames, you have to specify an array of numbers as a frame + +![chart data frames](docs/blockly3.png) + +## My Data (DIY) *(version > 1.1.0)* + +*LaMetric* offers an app (on the integrated app market) to poll custom data. This app is called [My Data DIY](https://apps.lametric.com/apps/my_data__diy_/8942). This adapter creates a new state in the required format. +You can use the Simple API Adapter to transfer the data to the LaMetric Time. + +```ioBroker LaMetric Adapter -> State with Frame information <- Simple API Adapter <- My Data DIY App <- LaMetric``` + +### Configuration (with authentication) + +1. Install the [Simple API ioBroker Adapter](https://github.com/ioBroker/ioBroker.simple-api) +2. Create a new ioBroker user called ``lametric`` with a custom password (e.g. ``HhX7dZl3Fe``) +3. Add the ``lametric`` user to the default group ``users`` +4. Install this *My Data DIY* App on your *LaMetric Time* (use Market) +5. Open the *My Data (DIY)* app settings and configure the simple api url (see below) +6. Go to the adapter configuration and configure the frames with your custom information (see next chapter) + +``` +http://172.16.0.219:8087/getPlainValue/lametric.0.mydatadiy.obj/?json&user=lametric&pass=HhX7dZl3Fe +``` + +**Important: use json flag of SimpleAPI Adapter (available since version 2.6.2)** + +**Ensure to update IP, port, user and password in the URL if necessary!** + +### Configuration (without authentication) + +1. Install the [Simple API ioBroker Adapter](https://github.com/ioBroker/ioBroker.simple-api) +2. Install this *My Data DIY* App on your LaMetric Time (use Market) +3. Open the *My Data (DIY)* app settings and configure the simple api url (see below) +4. Go to the adapter configuration and configure the frames with your custom information (see next chapter) + +``` +http://172.16.0.219:8087/getPlainValue/lametric.0.mydatadiy.obj/?json +``` + +**Ensure to update IP and port in the URL if necessary!** + +### Frame Configuration *(version > 1.1.0)* + +- Use the plus icon to add as many frames as you want +- Icon: Choose an icon from the [official website](https://developer.lametric.com/icons) and put the ID in the configuration field. **Important: Add an i (for static icons) or an a (for animated icons) as a prefix for that ID. (Example: `i3389`)** +- Text: Just type the text information for the frame. You can use states in curly braces. These information will be replaced with the corresponding value of the state. (Example: `{youtube.0.channels.HausAutomatisierungCom.statistics.subscriberCount} Subscribers`) + +Example configuration of 3 frames: + +![example frame config](docs/myDataDIYConfig.png) + +## Special Apps / Widgets *(version > 1.1.2)* + +You can control some apps with custom information. + +### clock.clockface + +Allowed values are: + +- one of `weather`, `page_a_day`, `custom` or `none` +- custom icon data in format `data:image/png;base64,` or `data:image/gif;base64,` + +Example: `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAOklEQVQYlWNUVFBgwAeYcEncv//gP04FMEmsCmCSiooKjHAFMEF0SRQTsEnCFcAE0SUZGBgYGAl5EwA+6RhuHb9bggAAAABJRU5ErkJggg==` + +### countdown.configure + +Allowed value: Time in seconds + +## Scripts + +To show messages/notifications on your *LaMetric Time*, send a message to this instance with the JavaScript adapter (or any other): + +```JavaScript +sendTo( + "lametric.0", + "notification", + { + priority: "[info|warning|critical]", + iconType: "[none|info|alert]", + sound: "", + lifeTime: , + icon: "", + text: "", + cycles: + } +); +``` + +Example single frame: + +```JavaScript +sendTo( + "lametric.0", + "notification", + { + priority: "info", + iconType: "none", + sound: "cat", + lifeTime: 5000, + icon: "i31820", + text: "test", + cycles: 1 + } +); +``` + +Example multiple frames: + +```JavaScript +sendTo( + "lametric.0", + "notification", + { + priority: "info", + iconType: "none", + sound: "cat", + lifeTime: 5000, + icon: "i31820", + text: ["frame 1", "frame 2", "frame 3"], + cycles: 1 + } +); +``` + +Example to show some information cyclic: + +```JavaScript +let i = 0; +function show() { + console.log('Show ' + i); + sendTo( + "lametric.0", + "notification", + { + priority: "info", + iconType: "info", + lifeTime: 5000, + icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAIAAABLbSncAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjEuNWRHWFIAAAAySURBVBhXY4AAYdcKk1lngCSUDwHIfAQbzgLqgDCgIqRLwFkQCYQoBAD5EATl4wQMDADhuxQzaDgX0gAAAABJRU5ErkJggg==", + text: "Hi " + i, + cycles: 1 + } + ); + i++; +} +setInterval(show, 10000); +show(); +``` \ No newline at end of file diff --git a/docs/myDataDIYConfig.png b/docs/myDataDIYConfig.png new file mode 100644 index 0000000..c43e37c Binary files /dev/null and b/docs/myDataDIYConfig.png differ diff --git a/gulpfile.js b/gulpfile.js index b6dfa8d..9174b4e 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,434 +1,160 @@ /*! * ioBroker gulpfile - * Date: 2019-01-28 + * Date: 2021-11-15 */ -"use strict"; -const gulp = require("gulp"); -const fs = require("fs"); -const pkg = require("./package.json"); -const iopackage = require("./io-package.json"); +'use strict'; + +const gulp = require('gulp'); +const fs = require('fs'); +const pkg = require('./package.json'); +const iopackage = require('./io-package.json'); const version = (pkg && pkg.version) ? pkg.version : iopackage.common.version; -const fileName = "words.js"; -const EMPTY = ""; -const translate = require("${useTypeScript ? "./build/lib/tools" : "./lib/tools"}").translateText; +const fileName = 'words.js'; +const EMPTY = ''; +const translate = require('./lib/tools').translateText; const languages = { - en: {}, - de: {}, - ru: {}, - pt: {}, - nl: {}, - fr: {}, - it: {}, - es: {}, - pl: {}, - "zh-cn": {} + en: {}, + de: {}, + ru: {}, + pt: {}, + nl: {}, + fr: {}, + it: {}, + es: {}, + pl: {}, + 'zh-cn': {} }; -function lang2data(lang, isFlat) { - let str = isFlat ? "" : "{\\n"; - let count = 0; - for (const w in lang) { - if (lang.hasOwnProperty(w)) { - count++; - if (isFlat) { - str += (lang[w] === "" ? (isFlat[w] || w) : lang[w]) + "\\n"; - } else { - const key = ' "' + w.replace(/"/g, '\\\\"') + '": '; - str += key + '"' + lang[w].replace(/"/g, '\\\\"') + '",\\n'; - } - } - } - if (!count) - return isFlat ? "" : "{\\n}"; - if (isFlat) { - return str; - } else { - return str.substring(0, str.length - 2) + "\\n}"; - } -} -function readWordJs(src) { - try { - let words; - if (fs.existsSync(src + "js/" + fileName)) { - words = fs.readFileSync(src + "js/" + fileName).toString(); - } else { - words = fs.readFileSync(src + fileName).toString(); - } - words = words.substring(words.indexOf('{'), words.length); - words = words.substring(0, words.lastIndexOf(';')); - const resultFunc = new Function("return " + words + ";"); - return resultFunc(); - } catch (e) { - return null; - } -} -function padRight(text, totalLength) { - return text + (text.length < totalLength ? new Array(totalLength - text.length).join(" ") : ""); -} -function writeWordJs(data, src) { - let text = ""; - text += "/*global systemDictionary:true */\\n"; - text += "'use strict';\\n\\n"; - text += "systemDictionary = {\\n"; - for (const word in data) { - if (data.hasOwnProperty(word)) { - text += " " + padRight('"' + word.replace(/"/g, '\\\\"') + '": {', 50); - let line = ""; - for (const lang in data[word]) { - if (data[word].hasOwnProperty(lang)) { - line += '"' + lang + '": "' + padRight(data[word][lang].replace(/"/g, '\\\\"') + '",', 50) + " "; - } - } - if (line) { - line = line.trim(); - line = line.substring(0, line.length - 1); - } - text += line + "},\\n"; - } - } - text += "};"; - if (fs.existsSync(src + "js/" + fileName)) { - fs.writeFileSync(src + "js/" + fileName, text); - } else { - fs.writeFileSync(src + "" + fileName, text); - } -} -function words2languages(src) { - const langs = Object.assign({}, languages); - const data = readWordJs(src); - if (data) { - for (const word in data) { - if (data.hasOwnProperty(word)) { - for (const lang in data[word]) { - if (data[word].hasOwnProperty(lang)) { - langs[lang][word] = data[word][lang]; - // pre-fill all other languages - for (const j in langs) { - if (langs.hasOwnProperty(j)) { - langs[j][word] = langs[j][word] || EMPTY; - } - } - } - } - } - } - if (!fs.existsSync(src + "i18n/")) { - fs.mkdirSync(src + "i18n/"); - } - for (const l in langs) { - if (!langs.hasOwnProperty(l)) - continue; - const keys = Object.keys(langs[l]); - keys.sort(); - const obj = {}; - for (let k = 0; k < keys.length; k++) { - obj[keys[k]] = langs[l][keys[k]]; - } - if (!fs.existsSync(src + "i18n/" + l)) { - fs.mkdirSync(src + "i18n/" + l); - } - fs.writeFileSync(src + "i18n/" + l + "/translations.json", lang2data(obj)); - } - } else { - console.error("Cannot read or parse " + fileName); - } -} -function words2languagesFlat(src) { - const langs = Object.assign({}, languages); - const data = readWordJs(src); - if (data) { - for (const word in data) { - if (data.hasOwnProperty(word)) { - for (const lang in data[word]) { - if (data[word].hasOwnProperty(lang)) { - langs[lang][word] = data[word][lang]; - // pre-fill all other languages - for (const j in langs) { - if (langs.hasOwnProperty(j)) { - langs[j][word] = langs[j][word] || EMPTY; - } - } - } - } - } - } - const keys = Object.keys(langs.en); - keys.sort(); - for (const l in langs) { - if (!langs.hasOwnProperty(l)) - continue; - const obj = {}; - for (let k = 0; k < keys.length; k++) { - obj[keys[k]] = langs[l][keys[k]]; - } - langs[l] = obj; - } - if (!fs.existsSync(src + "i18n/")) { - fs.mkdirSync(src + "i18n/"); - } - for (const ll in langs) { - if (!langs.hasOwnProperty(ll)) - continue; - if (!fs.existsSync(src + "i18n/" + ll)) { - fs.mkdirSync(src + "i18n/" + ll); - } - fs.writeFileSync(src + "i18n/" + ll + "/flat.txt", lang2data(langs[ll], langs.en)); - } - fs.writeFileSync(src + "i18n/flat.txt", keys.join("\\n")); - } else { - console.error("Cannot read or parse " + fileName); - } -} -function languagesFlat2words(src) { - const dirs = fs.readdirSync(src + "i18n/"); - const langs = {}; - const bigOne = {}; - const order = Object.keys(languages); - dirs.sort(function (a, b) { - const posA = order.indexOf(a); - const posB = order.indexOf(b); - if (posA === -1 && posB === -1) { - if (a > b) - return 1; - if (a < b) - return -1; - return 0; - } else if (posA === -1) { - return -1; - } else if (posB === -1) { - return 1; - } else { - if (posA > posB) - return 1; - if (posA < posB) - return -1; - return 0; - } - }); - const keys = fs.readFileSync(src + "i18n/flat.txt").toString().split("\\n"); - for (const lang of dirs) { - if (lang === "flat.txt") - continue; - const values = fs.readFileSync(src + "i18n/" + lang + "/flat.txt").toString().split("\\n"); - langs[lang] = {}; - keys.forEach(function (word, i) { - langs[lang][word] = values[i]; - }); - const words = langs[lang]; - for (const word in words) { - if (words.hasOwnProperty(word)) { - bigOne[word] = bigOne[word] || {}; - if (words[word] !== EMPTY) { - bigOne[word][lang] = words[word]; - } - } - } - } - // read actual words.js - const aWords = readWordJs(); - const temporaryIgnore = ["flat.txt"]; - if (aWords) { - // Merge words together - for (const w in aWords) { - if (aWords.hasOwnProperty(w)) { - if (!bigOne[w]) { - console.warn("Take from actual words.js: " + w); - bigOne[w] = aWords[w]; - } - dirs.forEach(function (lang) { - if (temporaryIgnore.indexOf(lang) !== -1) - return; - if (!bigOne[w][lang]) { - console.warn('Missing "' + lang + '": ' + w); - } - }); - } - } - } - writeWordJs(bigOne, src); -} -function languages2words(src) { - const dirs = fs.readdirSync(src + "i18n/"); - const langs = {}; - const bigOne = {}; - const order = Object.keys(languages); - dirs.sort(function (a, b) { - const posA = order.indexOf(a); - const posB = order.indexOf(b); - if (posA === -1 && posB === -1) { - if (a > b) - return 1; - if (a < b) - return -1; - return 0; - } else if (posA === -1) { - return -1; - } else if (posB === -1) { - return 1; - } else { - if (posA > posB) - return 1; - if (posA < posB) - return -1; - return 0; - } - }); - for (const lang of dirs) { - if (lang === "flat.txt") - continue; - langs[lang] = fs.readFileSync(src + "i18n/" + lang + "/translations.json").toString(); - langs[lang] = JSON.parse(langs[lang]); - const words = langs[lang]; - for (const word in words) { - if (words.hasOwnProperty(word)) { - bigOne[word] = bigOne[word] || {}; - if (words[word] !== EMPTY) { - bigOne[word][lang] = words[word]; - } - } - } - } - // read actual words.js - const aWords = readWordJs(); - const temporaryIgnore = ["flat.txt"]; - if (aWords) { - // Merge words together - for (const w in aWords) { - if (aWords.hasOwnProperty(w)) { - if (!bigOne[w]) { - console.warn("Take from actual words.js: " + w); - bigOne[w] = aWords[w]; - } - dirs.forEach(function (lang) { - if (temporaryIgnore.indexOf(lang) !== -1) - return; - if (!bigOne[w][lang]) { - console.warn('Missing "' + lang + '": ' + w); - } - }); - } - } - } - writeWordJs(bigOne, src); -} + async function translateNotExisting(obj, baseText, yandex) { - let t = obj['en']; - if (!t) { - t = baseText; - } - if (t) { - for (let l in languages) { - if (!obj[l]) { - const time = new Date().getTime(); - obj[l] = await translate(t, l, yandex); - console.log("en -> " + l + " " + (new Date().getTime() - time) + " ms"); - } - } - } + let t = obj['en']; + if (!t) { + t = baseText; + } + + if (t) { + for (let l in languages) { + if (!obj[l]) { + const time = new Date().getTime(); + try { + obj[l] = await translate(t, l, yandex); + console.log('en -> ' + l + ' ' + (new Date().getTime() - time) + ' ms'); + } catch (ex) { + console.log('err: ' + ex.message); + } + } + } + } } + //TASKS -gulp.task("adminWords2languages", function (done) { - words2languages("./admin/"); - done(); -}); -gulp.task("adminWords2languagesFlat", function (done) { - words2languagesFlat("./admin/"); - done(); -}); -gulp.task("adminLanguagesFlat2words", function (done) { - languagesFlat2words("./admin/"); - done(); -}); -gulp.task("adminLanguages2words", function (done) { - languages2words("./admin/"); - done(); -}); -gulp.task("updatePackages", function (done) { - iopackage.common.version = pkg.version; - iopackage.common.news = iopackage.common.news || {}; - if (!iopackage.common.news[pkg.version]) { - const news = iopackage.common.news; - const newNews = {}; - newNews[pkg.version] = { - en: "news", - de: "neues", - ru: "новое", - pt: "novidades", - nl: "nieuws", - fr: "nouvelles", - it: "notizie", - es: "noticias", - pl: "nowości", - "zh-cn": "新" - }; - iopackage.common.news = Object.assign(newNews, news); - } - fs.writeFileSync("io-package.json", JSON.stringify(iopackage, null, 4)); - done(); + +gulp.task('updatePackages', function (done) { + iopackage.common.version = pkg.version; + iopackage.common.news = iopackage.common.news || {}; + if (!iopackage.common.news[pkg.version]) { + const news = iopackage.common.news; + const newNews = {}; + + newNews[pkg.version] = { + en: 'news', + de: 'neues', + ru: 'новое', + pt: 'novidades', + nl: 'nieuws', + fr: 'nouvelles', + it: 'notizie', + es: 'noticias', + pl: 'nowości', + 'zh-cn': '新' + }; + iopackage.common.news = Object.assign(newNews, news); + } + fs.writeFileSync('io-package.json', JSON.stringify(iopackage, null, 4)); + done(); }); -gulp.task("updateReadme", function (done) { - const readme = fs.readFileSync("README.md").toString(); - const pos = readme.indexOf("## Changelog\\n"); - if (pos !== -1) { - const readmeStart = readme.substring(0, pos + "## Changelog\\n".length); - const readmeEnd = readme.substring(pos + "## Changelog\\n".length); - if (readme.indexOf(version) === -1) { - const timestamp = new Date(); - const date = timestamp.getFullYear() + "-" + - ("0" + (timestamp.getMonth() + 1).toString(10)).slice(-2) + "-" + - ("0" + (timestamp.getDate()).toString(10)).slice(-2); - let news = ""; - if (iopackage.common.news && iopackage.common.news[pkg.version]) { - news += "* " + iopackage.common.news[pkg.version].en; - } - fs.writeFileSync("README.md", readmeStart + "### " + version + " (" + date + ")\\n" + (news ? news + "\\n\\n" : "\\n") + readmeEnd); - } - } - done(); + +gulp.task('updateReadme', function (done) { + const readme = fs.readFileSync('README.md').toString(); + const pos = readme.indexOf('## Changelog\n'); + if (pos !== -1) { + const readmeStart = readme.substring(0, pos + '## Changelog\n'.length); + const readmeEnd = readme.substring(pos + '## Changelog\n'.length); + + if (readme.indexOf(version) === -1) { + const timestamp = new Date(); + const date = timestamp.getFullYear() + '-' + + ('0' + (timestamp.getMonth() + 1).toString(10)).slice(-2) + '-' + + ('0' + (timestamp.getDate()).toString(10)).slice(-2); + + let news = ''; + if (iopackage.common.news && iopackage.common.news[pkg.version]) { + news += '* ' + iopackage.common.news[pkg.version].en; + } + + fs.writeFileSync('README.md', readmeStart + '### ' + version + ' (' + date + ')\n' + (news ? news + '\n\n' : '\n') + readmeEnd); + } + } + done(); }); + gulp.task('translate', async function (done) { - let yandex; - const i = process.argv.indexOf("--yandex"); - if (i > -1) { - yandex = process.argv[i + 1]; - } - if (iopackage && iopackage.common) { - if (iopackage.common.news) { - console.log("Translate News"); - for (let k in iopackage.common.news) { - console.log("News: " + k); - let nw = iopackage.common.news[k]; - await translateNotExisting(nw, null, yandex); - } - } - if (iopackage.common.titleLang) { - console.log("Translate Title"); - await translateNotExisting(iopackage.common.titleLang, iopackage.common.title, yandex); - } - if (iopackage.common.desc) { - console.log("Translate Description"); - await translateNotExisting(iopackage.common.desc, null, yandex); - } - if (fs.existsSync('./admin/i18n/en/translations.json')) { - let enTranslations = require('./admin/i18n/en/translations.json'); - for (let l in languages) { - console.log("Translate Text: " + l); - let existing = {}; - if (fs.existsSync('./admin/i18n/' + l + '/translations.json')) { - existing = require('./admin/i18n/' + l + '/translations.json'); - } - for (let t in enTranslations) { - if (!existing[t]) { - existing[t] = await translate(enTranslations[t], l, yandex); - } - } - if (!fs.existsSync('./admin/i18n/' + l + '/')) { - fs.mkdirSync('./admin/i18n/' + l + '/'); - } - fs.writeFileSync('./admin/i18n/' + l + '/translations.json', JSON.stringify(existing, null, 4)); - } - } - } - fs.writeFileSync('io-package.json', JSON.stringify(iopackage, null, 4)); + + let yandex; + const i = process.argv.indexOf('--yandex'); + if (i > -1) { + yandex = process.argv[i + 1]; + } + + if (iopackage && iopackage.common) { + if (iopackage.common.news) { + console.log('Translate News'); + for (let k in iopackage.common.news) { + console.log('News: ' + k); + let nw = iopackage.common.news[k]; + await translateNotExisting(nw, null, yandex); + } + } + if (iopackage.common.titleLang) { + console.log('Translate Title'); + await translateNotExisting(iopackage.common.titleLang, iopackage.common.title, yandex); + } + if (iopackage.common.desc) { + console.log('Translate Description'); + await translateNotExisting(iopackage.common.desc, null, yandex); + } + + if (iopackage.instanceObjects) { + for (var j = 0; j < iopackage.instanceObjects.length; j++) { + if (iopackage.instanceObjects[j].common.name && typeof iopackage.instanceObjects[j].common.name === 'string') { + iopackage.instanceObjects[j].common.name = {en: iopackage.instanceObjects[j].common.name}; + } + + await translateNotExisting(iopackage.instanceObjects[j].common.name, null, yandex); + } + } + + if (fs.existsSync('./admin/i18n/en/translations.json')) { + let enTranslations = require('./admin/i18n/en/translations.json'); + for (let l in languages) { + console.log('Translate Text: ' + l); + let existing = {}; + if (fs.existsSync('./admin/i18n/' + l + '/translations.json')) { + existing = require('./admin/i18n/' + l + '/translations.json'); + } + for (let t in enTranslations) { + if (!existing[t]) { + existing[t] = await translate(enTranslations[t], l, yandex); + } + } + if (!fs.existsSync('./admin/i18n/' + l + '/')) { + fs.mkdirSync('./admin/i18n/' + l + '/'); + } + fs.writeFileSync('./admin/i18n/' + l + '/translations.json', JSON.stringify(existing, null, 4)); + } + } + + } + fs.writeFileSync('io-package.json', JSON.stringify(iopackage, null, 4)); }); -gulp.task("translateAndUpdateWordsJS", gulp.series("translate", "adminLanguages2words", "adminWords2languages")); -gulp.task("default", gulp.series("updatePackages", "updateReadme")); \ No newline at end of file + +gulp.task('default', gulp.series('updatePackages', 'updateReadme')); \ No newline at end of file diff --git a/io-package.json b/io-package.json index e6e53d2..630e341 100644 --- a/io-package.json +++ b/io-package.json @@ -1,623 +1,1502 @@ { - "common": { - "name": "lametric", - "version": "0.0.9", - "news": { - "0.0.9": { - "en": "Added missing translations", - "de": "Fehlende Übersetzungen hinzugefügt" - }, - "0.0.8": { - "en": "Updated dependencies", - "de": "Abhängigkeiten aktualisiert" - }, - "0.0.7": { - "en": "fixed blockly", - "de": "Blockly-Korrektur" - }, - "0.0.6": { - "en": "switched to setTimeout instead of setInterval, improved logging and fixes eslint complaints", - "de": "Code aufgeräumt" - }, - "0.0.5": { - "en": "Fixed notification, html, updated github template, enable and disable screensaver", - "de": "Notification fix, HTML Änderungen, Bildschirmschoner-Support" - }, - "0.0.4": { - "en": "Refactored blockly sendTo / notifications", - "de": "Refactored Blockly sentTo und Benachrichtigungen" - }, - "0.0.3": { - "en": "Added app switching support, refactored everything", - "de": "Unterstützung für App-Wechsel hinzugefügt" - }, - "0.0.2": { - "en": "The deletion of the actual shown information was added", - "de": "Die Löschung der tatsächlich angezeigten Informationen wurde hinzugefügt" - }, - "0.0.1": { - "en": "initial adapter", - "de": "Initiale Version" - } - }, - "title": "LaMetric Time", - "titleLang": { - "en": "LaMetric Time", - "de": "LaMetric Time" - }, - "desc": { - "en": "Control and manage your LaMetric Time", - "de": "Steuere und Verwalte Deine LaMetric Time" - }, - "authors": [ - "Matthias Kleine " - ], - "keywords": [ - "lametric", - "hardware", - "clock", - "message", - "notification" - ], - "license": "MIT", - "platform": "Javascript/Node.js", - "main": "main.js", - "icon": "lametric.png", - "extIcon": "https://raw.githubusercontent.com/klein0r/ioBroker.lametric/master/admin/lametric.png", - "enabled": true, - "readme": "https://github.com/klein0r/ioBroker.lametric/blob/master/README.md", - "loglevel": "info", - "mode": "daemon", - "type": "hardware", - "compact": true, - "connectionType": "local", - "dataSource": "poll", - "materialize": true, - "blockly": true, - "messagebox": true, - "dependencies": [ - { "js-controller": ">=1.4.2" } - ] - }, - "native": { - "lametricIp": "", - "lametricToken": "" - }, - "objects": [], - "instanceObjects": [ - { - "_id": "info", - "type": "channel", - "common": { - "name": "Information" - }, - "native": {} - }, - { - "_id": "info.connection", - "type": "state", - "common": { - "role": "indicator.reachable", - "name": "If connected to LaMetric", - "type": "boolean", - "read": true, - "write": false, - "def": false - }, - "native": {} - }, - { - "_id": "meta", - "type": "channel", - "common": { - "role": "", - "name": "Meta information" - }, - "native": {} - }, - { - "_id": "meta.name", - "type": "state", - "common": { - "name": "Name", - "type": "string", - "role": "value", - "read": true, - "write": false - }, - "native": {} - }, - { - "_id": "meta.serial", - "type": "state", - "common": { - "name": "Serial number", - "type": "string", - "role": "value", - "read": true, - "write": false - }, - "native": {} - }, - { - "_id": "meta.version", - "type": "state", - "common": { - "name": "OS Version", - "type": "string", - "role": "value", - "read": true, - "write": false - }, - "native": {} - }, - { - "_id": "meta.model", - "type": "state", - "common": { - "name": "Model number", - "type": "string", - "role": "value", - "read": true, - "write": false - }, - "native": {} - }, - { - "_id": "meta.mode", - "type": "state", - "common": { - "name": "Device mode", - "type": "string", - "role": "value", - "read": true, - "write": false - }, - "native": {} - }, - { - "_id": "meta.audio", - "type": "channel", - "common": { - "role": "", - "name": "Volume information" - }, - "native": {} - }, - { - "_id": "meta.audio.volume", - "type": "state", - "common": { - "name": "Audio volume", - "type": "number", - "role": "level.volume", - "unit": "%", - "read": true, - "write": true - }, - "native": {} - }, - { - "_id": "meta.bluetooth", - "type": "channel", - "common": { - "role": "", - "name": "Bluetooth information" - }, - "native": {} - }, - { - "_id": "meta.bluetooth.available", - "type": "state", - "common": { - "name": "Available", - "type": "boolean", - "role": "value", - "read": true, - "write": false - }, - "native": {} - }, - { - "_id": "meta.bluetooth.name", - "type": "state", - "common": { - "name": "Name", - "type": "string", - "role": "value", - "read": true, - "write": true - }, - "native": {} - }, - { - "_id": "meta.bluetooth.active", - "type": "state", - "common": { - "name": "Active", - "type": "boolean", - "role": "value", - "read": true, - "write": true - }, - "native": {} - }, - { - "_id": "meta.bluetooth.discoverable", - "type": "state", - "common": { - "name": "Discoverable", - "type": "boolean", - "role": "value", - "read": true, - "write": false - }, - "native": {} - }, - { - "_id": "meta.bluetooth.pairable", - "type": "state", - "common": { - "name": "Pairable", - "type": "boolean", - "role": "value", - "read": true, - "write": false - }, - "native": {} - }, - { - "_id": "meta.bluetooth.address", - "type": "state", - "common": { - "name": "Address", - "type": "string", - "role": "info.mac", - "read": true, - "write": false - }, - "native": {} - }, - { - "_id": "meta.display", - "type": "channel", - "common": { - "role": "", - "name": "Display information" - }, - "native": {} - }, - { - "_id": "meta.display.brightness", - "type": "state", - "common": { - "name": "Brightness", - "type": "number", - "role": "level.dimmer", - "unit": "%", - "read": true, - "write": true - }, - "native": {} - }, - { - "_id": "meta.display.brightnessAuto", - "type": "state", - "common": { - "name": "Auto", - "type": "boolean", - "role": "value", - "read": true, - "write": true - }, - "native": {} - }, - { - "_id": "meta.display.brightnessMode", - "type": "state", - "common": { - "name": "Brightness mode", - "type": "string", - "role": "value", - "read": true, - "write": false - }, - "native": {} - }, - { - "_id": "meta.display.width", - "type": "state", - "common": { - "name": "Width", - "type": "number", - "role": "value", - "read": true, - "write": false - }, - "native": {} - }, - { - "_id": "meta.display.height", - "type": "state", - "common": { - "name": "Height", - "type": "number", - "role": "value", - "read": true, - "write": false - }, - "native": {} - }, - { - "_id": "meta.display.type", - "type": "state", - "common": { - "name": "Type", - "type": "string", - "role": "value", - "read": true, - "write": false - }, - "native": {} - }, - { - "_id": "meta.display.screensaver", - "type": "channel", - "common": { - "role": "", - "name": "Screensaver information" - }, - "native": {} - }, - { - "_id": "meta.display.screensaver.enabled", - "type": "state", - "common": { - "name": "Enabled", - "type": "boolean", - "role": "value", - "read": true, - "write": true - }, - "native": {} - }, - { - "_id": "meta.display.screensaver.widget", - "type": "state", - "common": { - "name": "Widget", - "type": "string", - "role": "value", - "read": true, - "write": false - }, - "native": {} - }, - { - "_id": "meta.display.screensaver.modes", - "type": "channel", - "common": { - "role": "", - "name": "Mode information" - }, - "native": {} - }, - { - "_id": "meta.display.screensaver.modes.timeBased", - "type": "channel", - "common": { - "role": "", - "name": "Time Based" - }, - "native": {} - }, - { - "_id": "meta.display.screensaver.modes.timeBased.enabled", - "type": "state", - "common": { - "name": "Enabled", - "type": "boolean", - "role": "value", - "read": true, - "write": true - }, - "native": {} - }, - { - "_id": "meta.display.screensaver.modes.timeBased.startTime", - "type": "state", - "common": { - "name": "Enabled", - "type": "string", - "role": "value", - "read": true, - "write": true - }, - "native": {} - }, - { - "_id": "meta.display.screensaver.modes.timeBased.endTime", - "type": "state", - "common": { - "name": "Enabled", - "type": "string", - "role": "value", - "read": true, - "write": true - }, - "native": {} - }, - { - "_id": "meta.display.screensaver.modes.whenDark", - "type": "channel", - "common": { - "role": "", - "name": "When Dark" - }, - "native": {} - }, - { - "_id": "meta.display.screensaver.modes.whenDark.enabled", - "type": "state", - "common": { - "name": "Enabled", - "type": "boolean", - "role": "value", - "read": true, - "write": true - }, - "native": {} - }, - { - "_id": "meta.wifi", - "type": "channel", - "common": { - "role": "", - "name": "WiFi information" - }, - "native": {} - }, - { - "_id": "meta.wifi.active", - "type": "state", - "common": { - "name": "Active", - "type": "boolean", - "role": "value", - "read": true, - "write": false - }, - "native": {} - }, - { - "_id": "meta.wifi.address", - "type": "state", - "common": { - "name": "Address", - "type": "string", - "role": "info.mac", - "read": true, - "write": false - }, - "native": {} - }, - { - "_id": "meta.wifi.available", - "type": "state", - "common": { - "name": "Available", - "type": "boolean", - "role": "value", - "read": true, - "write": false - }, - "native": {} - }, - { - "_id": "meta.wifi.encryption", - "type": "state", - "common": { - "name": "Encryption", - "type": "string", - "role": "value", - "read": true, - "write": false - }, - "native": {} - }, - { - "_id": "meta.wifi.ssid", - "type": "state", - "common": { - "name": "SSID", - "type": "string", - "role": "value", - "read": true, - "write": false - }, - "native": {} - }, - { - "_id": "meta.wifi.ip", - "type": "state", - "common": { - "name": "IP", - "type": "string", - "role": "info.ip", - "read": true, - "write": false - }, - "native": {} - }, - { - "_id": "meta.wifi.mode", - "type": "state", - "common": { - "name": "Mode", - "type": "string", - "role": "value", - "read": true, - "write": false - }, - "native": {} - }, - { - "_id": "meta.wifi.netmask", - "type": "state", - "common": { - "name": "Netmask", - "type": "string", - "role": "value", - "read": true, - "write": false - }, - "native": {} - }, - { - "_id": "meta.wifi.strength", - "type": "state", - "common": { - "name": "Strength", - "type": "number", - "role": "value", - "unit": "%", - "read": true, - "write": false - }, - "native": {} - }, - { - "_id": "apps", - "type": "channel", - "common": { - "role": "", - "name": "App information" - }, - "native": {} - }, - { - "_id": "apps.next", - "type": "state", - "common": { - "name": "Next App", - "type": "boolean", - "role": "button", - "read": false, - "write": true - }, - "native": {} - }, - { - "_id": "apps.prev", - "type": "state", - "common": { - "name": "Previous App", - "type": "boolean", - "role": "button", - "read": false, - "write": true - }, - "native": {} + "common": { + "name": "lametric", + "version": "1.5.2", + "news": { + "1.5.2": { + "en": "Updated dependencies\nUpdated documentation", + "de": "Aktualisierte Abhängigkeiten\nAktualisierte Dokumentation", + "ru": "Обновленные зависимости\nОбновленная документация", + "pt": "Dependências atualizadas\nDocumentação atualizada", + "nl": "Bijgewerkte afhankelijkheden\nBijgewerkte documentatie", + "fr": "Dépendances mises à jour\nDocumentation mise à jour", + "it": "Dipendenze aggiornate\nDocumentazione aggiornata", + "es": "Dependencias actualizadas\nDocumentación actualizada", + "pl": "Zaktualizowane zależności\nZaktualizowana dokumentacja", + "zh-cn": "更新的依赖项\n更新文档" + }, + "1.5.1": { + "en": "Translated all objects", + "de": "Alle Objekte übersetzt", + "ru": "Переведены все объекты", + "pt": "Todos os objetos traduzidos", + "nl": "Alle objecten vertaald", + "fr": "Traduit tous les objets", + "it": "Tradotto tutti gli oggetti", + "es": "Traducido todos los objetos", + "pl": "Przetłumaczono wszystkie obiekty", + "zh-cn": "翻译所有对象" + }, + "1.5.0": { + "en": "Fixed myData DIY data type", + "de": "myData DIY Datentyp korrigiert", + "ru": "Исправлен тип данных myData DIY", + "pt": "Tipo de dados myData DIY corrigido", + "nl": "Vast myData DIY-gegevenstype", + "fr": "Type de données myData DIY fixe", + "it": "Corretto il tipo di dati myData DIY", + "es": "Se corrigió el tipo de datos myData DIY", + "pl": "Naprawiono typ danych myData DIY", + "zh-cn": "修复了 myData DIY 数据类型" + }, + "1.4.1": { + "en": "Fixed missing translations", + "de": "Fehlende Übersetzungen hinzugefügt", + "ru": "Исправлены отсутствующие переводы", + "pt": "Traduções em falta corrigidas", + "nl": "Ontbrekende vertalingen verholpen", + "fr": "Correction des traductions manquantes", + "it": "Risolte le traduzioni mancanti", + "es": "Se corrigieron las traducciones faltantes", + "pl": "Naprawiono brakujące tłumaczenia", + "zh-cn": "修复了丢失的翻译" + }, + "1.4.0": { + "en": "Admin 5 Support", + "de": "Admin 5 Support", + "ru": "Admin 5 Поддержка", + "pt": "Suporte Admin 5", + "nl": "Beheerder 5 Ondersteuning", + "fr": "Assistance administrateur 5", + "it": "Supporto amministratore 5", + "es": "Soporte Admin 5", + "pl": "Wsparcie administratora 5", + "zh-cn": "管理员 5 支持" + }, + "1.3.2": { + "en": "Updated dependencies", + "de": "Abhängigkeiten aktualisiert", + "ru": "Обновленные зависимости", + "pt": "Dependências atualizadas", + "nl": "Bijgewerkte afhankelijkheden", + "fr": "Dépendances mises à jour", + "it": "Dipendenze aggiornate", + "es": "Dependencias actualizadas", + "pl": "Zaktualizowane zależności", + "zh-cn": "更新的依赖项" + }, + "1.3.1": { + "en": "Added local start and end time for screensaver", + "de": "Lokale Start- und Endzeit vom Bildschirmschoner", + "ru": "Добавлено местное время начала и окончания для заставки", + "pt": "Adicionada hora local de início e término para o protetor de tela", + "nl": "Lokale start- en eindtijd toegevoegd voor screensaver", + "fr": "Ajout de l'heure de début et de fin locale pour l'économiseur d'écran", + "it": "Aggiunto l'ora di inizio e di fine locale per lo screensaver", + "es": "Se agregó la hora local de inicio y finalización para el protector de pantalla.", + "pl": "Dodano lokalny czas rozpoczęcia i zakończenia wygaszacza ekranu", + "zh-cn": "为屏幕保护程序添加了本地开始和结束时间" + } + }, + "title": "LaMetric Time", + "titleLang": { + "en": "LaMetric Time", + "de": "LaMetric Time", + "ru": "LaMetric Time", + "pt": "LaMetric Time", + "nl": "LaMetric Time", + "fr": "LaMetric Time", + "it": "LaMetric Time", + "es": "LaMetric Time", + "pl": "LaMetric Time", + "zh-cn": "LaMetric Time" + }, + "desc": { + "en": "Control and manage your LaMetric Time", + "de": "Steuere und Verwalte Deine LaMetric Time", + "ru": "Контролируйте свое время LaMetric и управляйте им", + "pt": "Controle e gerencie seu LaMetric Time", + "nl": "Beheer en beheer uw LaMetric Time", + "fr": "Contrôlez et gérez votre LaMetric Time", + "it": "Controlla e gestisci il tuo LaMetric Time", + "es": "Controle y administre su tiempo LaMetric", + "pl": "Kontroluj i zarządzaj swoim czasem LaMetric", + "zh-cn": "控制和管理您的 LaMetric 时间" + }, + "authors": [ + "Matthias Kleine " + ], + "keywords": [ + "lametric", + "hardware", + "clock", + "message", + "notification" + ], + "license": "MIT", + "platform": "Javascript/Node.js", + "icon": "lametric.png", + "extIcon": "https://raw.githubusercontent.com/klein0r/ioBroker.lametric/master/admin/lametric.png", + "enabled": true, + "readme": "https://github.com/klein0r/ioBroker.lametric/blob/master/README.md", + "loglevel": "info", + "mode": "daemon", + "type": "hardware", + "compact": true, + "connectionType": "local", + "dataSource": "poll", + "blockly": true, + "messagebox": true, + "adminUI": { + "config": "json" + }, + "docs": { + "en": "docs/en/basics.md", + "de": "docs/de/basics.md" + }, + "dependencies": [ + { + "js-controller": ">=3.3.19" + } + ], + "globalDependencies": [ + { + "admin": ">=5.1.28" + } + ], + "plugins": { + "sentry": { + "dsn": "https://e3a7f6c5e3984bc1819c3e5f67a0257d@sentry.iobroker.net/106" + } + } + }, + "protectedNative": [ + "lametricToken" + ], + "encryptedNative": [ + "lametricToken" + ], + "native": { + "lametricIp": "", + "lametricToken": "", + "useHttps": false + }, + "objects": [], + "instanceObjects": [ + { + "_id": "info", + "type": "channel", + "common": { + "name": { + "en": "Information", + "de": "Information", + "ru": "Информация", + "pt": "Em formação", + "nl": "Informatie", + "fr": "Informations", + "it": "Informazione", + "es": "Información", + "pl": "Informacja", + "zh-cn": "信息" + } + }, + "native": {} + }, + { + "_id": "info.connection", + "type": "state", + "common": { + "role": "indicator.reachable", + "name": { + "en": "Connected to LaMetric", + "de": "Verbindung mit LaMetric", + "ru": "При подключении к LaMetric", + "pt": "Se conectado ao LaMetric", + "nl": "Indien verbonden met LaMetric", + "fr": "Si connecté à LaMetric", + "it": "Se connesso a LaMetric", + "es": "Si está conectado a LaMetric", + "pl": "W przypadku połączenia z LaMetric", + "zh-cn": "如果连接到 LaMetric" + }, + "type": "boolean", + "read": true, + "write": false, + "def": false + }, + "native": {} + }, + { + "_id": "meta", + "type": "channel", + "common": { + "role": "", + "name": { + "en": "Meta information", + "de": "Meta-Informationen", + "ru": "Мета информация", + "pt": "Meta informação", + "nl": "Meta informatie", + "fr": "Méta-information", + "it": "Meta informazioni", + "es": "Meta informacion", + "pl": "Metainformacje", + "zh-cn": "元信息" } - ] + }, + "native": {} + }, + { + "_id": "meta.name", + "type": "state", + "common": { + "name": { + "en": "Name", + "de": "Name", + "ru": "Имя", + "pt": "Nome", + "nl": "Naam", + "fr": "Nom", + "it": "Nome", + "es": "Nombre", + "pl": "Nazwa", + "zh-cn": "姓名" + }, + "type": "string", + "role": "value", + "read": true, + "write": false + }, + "native": {} + }, + { + "_id": "meta.serial", + "type": "state", + "common": { + "name": { + "en": "Serial number", + "de": "Seriennummer", + "ru": "Серийный номер", + "pt": "Número de série", + "nl": "Serienummer", + "fr": "Numéro de série", + "it": "Numero di serie", + "es": "Número de serie", + "pl": "Numer seryjny", + "zh-cn": "序列号" + }, + "type": "string", + "role": "value", + "read": true, + "write": false + }, + "native": {} + }, + { + "_id": "meta.version", + "type": "state", + "common": { + "name": { + "en": "OS Version", + "de": "OS-Version", + "ru": "Версия ОС", + "pt": "Versão do sistema operacional", + "nl": "OS-versie", + "fr": "Version du système d'exploitation", + "it": "Versione del sistema operativo", + "es": "Versión del sistema operativo", + "pl": "Wersja systemu operacyjnego", + "zh-cn": "操作系统版本" + }, + "type": "string", + "role": "value", + "read": true, + "write": false + }, + "native": {} + }, + { + "_id": "meta.model", + "type": "state", + "common": { + "name": { + "en": "Model number", + "de": "Modell-Nr", + "ru": "Номер модели", + "pt": "Número do modelo", + "nl": "Modelnummer", + "fr": "Numéro de modèle", + "it": "Numero di modello", + "es": "Número de modelo", + "pl": "Numer modelu", + "zh-cn": "型号" + }, + "type": "string", + "role": "value", + "read": true, + "write": false + }, + "native": {} + }, + { + "_id": "meta.mode", + "type": "state", + "common": { + "name": { + "en": "Device mode", + "de": "Gerätemodus", + "ru": "Режим устройства", + "pt": "Modo de dispositivo", + "nl": "Apparaatmodus:", + "fr": "Mode appareil", + "it": "Modalità dispositivo", + "es": "Modo de dispositivo", + "pl": "Tryb urządzenia", + "zh-cn": "设备模式" + }, + "type": "string", + "role": "value", + "read": true, + "write": false + }, + "native": {} + }, + { + "_id": "meta.audio", + "type": "channel", + "common": { + "role": "", + "name": { + "en": "Audio", + "de": "Audio", + "ru": "Аудио", + "pt": "Áudio", + "nl": "Audio", + "fr": "l'audio", + "it": "Audio", + "es": "Audio", + "pl": "Audio", + "zh-cn": "声音的" + } + }, + "native": {} + }, + { + "_id": "meta.audio.volume", + "type": "state", + "common": { + "name": { + "en": "Audio volume", + "de": "Audiolautstärke", + "ru": "Громкость звука", + "pt": "Volume de áudio", + "nl": "Audiovolume", + "fr": "Volume sonore", + "it": "Volume audio", + "es": "Volumen de audio", + "pl": "Głośność dźwięku", + "zh-cn": "音量" + }, + "type": "number", + "role": "level.volume", + "unit": "%", + "read": true, + "write": true + }, + "native": {} + }, + { + "_id": "meta.audio.volumeMin", + "type": "state", + "common": { + "name": { + "en": "Audio volume (min)", + "de": "Audiolautstärke (min)", + "ru": "Громкость звука (мин.)", + "pt": "Volume de áudio (min)", + "nl": "Audiovolume (min)", + "fr": "Volume sonore (min)", + "it": "Volume audio (min)", + "es": "Volumen de audio (min)", + "pl": "Głośność dźwięku (min)", + "zh-cn": "音频音量(分钟)" + }, + "type": "number", + "role": "level.volume", + "unit": "%", + "read": true, + "write": false + }, + "native": {} + }, + { + "_id": "meta.audio.volumeMax", + "type": "state", + "common": { + "name": { + "en": "Audio volume (max)", + "de": "Audiolautstärke (max.)", + "ru": "Громкость звука (макс.)", + "pt": "Volume de áudio (máximo)", + "nl": "Audiovolume (max.)", + "fr": "Volume sonore (max)", + "it": "Volume audio (massimo)", + "es": "Volumen de audio (máx.)", + "pl": "Głośność dźwięku (maks.)", + "zh-cn": "音频音量(最大)" + }, + "type": "number", + "role": "level.volume", + "unit": "%", + "read": true, + "write": false + }, + "native": {} + }, + { + "_id": "meta.bluetooth", + "type": "channel", + "common": { + "role": "", + "name": { + "en": "Bluetooth", + "de": "Bluetooth", + "ru": "блютуз", + "pt": "Bluetooth", + "nl": "Bluetooth", + "fr": "Bluetooth", + "it": "Bluetooth", + "es": "Bluetooth", + "pl": "Bluetooth", + "zh-cn": "蓝牙" + } + }, + "native": {} + }, + { + "_id": "meta.bluetooth.available", + "type": "state", + "common": { + "name": { + "en": "Bluetooth Available", + "de": "Bluetooth verfügbar", + "ru": "Bluetooth доступен", + "pt": "Bluetooth disponível", + "nl": "Bluetooth beschikbaar", + "fr": "Bluetooth disponible", + "it": "Bluetooth disponibile", + "es": "Bluetooth disponible", + "pl": "Dostępny Bluetooth", + "zh-cn": "蓝牙可用" + }, + "type": "boolean", + "role": "value", + "read": true, + "write": false + }, + "native": {} + }, + { + "_id": "meta.bluetooth.name", + "type": "state", + "common": { + "name": { + "en": "Bluetooth Name", + "de": "Bluetooth-Name", + "ru": "Имя Bluetooth", + "pt": "Nome Bluetooth", + "nl": "Bluetooth-naam", + "fr": "Nom Bluetooth", + "it": "Nome Bluetooth", + "es": "Nombre de Bluetooth", + "pl": "Nazwa Bluetooth", + "zh-cn": "蓝牙名称" + }, + "type": "string", + "role": "value", + "read": true, + "write": true + }, + "native": {} + }, + { + "_id": "meta.bluetooth.active", + "type": "state", + "common": { + "name": { + "en": "Bluetooth Active", + "de": "Bluetooth aktiv", + "ru": "Bluetooth активен", + "pt": "Bluetooth ativo", + "nl": "Bluetooth actief", + "fr": "Bluetooth actif", + "it": "Bluetooth attivo", + "es": "Bluetooth activo", + "pl": "Bluetooth aktywny", + "zh-cn": "蓝牙有源" + }, + "type": "boolean", + "role": "value", + "read": true, + "write": true + }, + "native": {} + }, + { + "_id": "meta.bluetooth.discoverable", + "type": "state", + "common": { + "name": { + "en": "Bluetooth Discoverable", + "de": "Bluetooth erkennbar", + "ru": "Обнаружение Bluetooth", + "pt": "Bluetooth detectável", + "nl": "Bluetooth detecteerbaar", + "fr": "Bluetooth détectable", + "it": "Rilevabile Bluetooth", + "es": "Bluetooth detectable", + "pl": "Wykrywalny przez Bluetooth", + "zh-cn": "蓝牙可发现" + }, + "type": "boolean", + "role": "value", + "read": true, + "write": false + }, + "native": {} + }, + { + "_id": "meta.bluetooth.pairable", + "type": "state", + "common": { + "name": { + "en": "Bluetooth Pairable", + "de": "Bluetooth koppelbar", + "ru": "Bluetooth Pairable", + "pt": "Bluetooth emparelhável", + "nl": "Bluetooth-koppelbaar", + "fr": "Bluetooth appairable", + "it": "Bluetooth abbinabile", + "es": "Bluetooth emparejable", + "pl": "Możliwość parowania przez Bluetooth", + "zh-cn": "蓝牙配对" + }, + "type": "boolean", + "role": "value", + "read": true, + "write": false + }, + "native": {} + }, + { + "_id": "meta.bluetooth.address", + "type": "state", + "common": { + "name": { + "en": "Bluetooth Address", + "de": "Bluetooth-Adresse", + "ru": "Адрес Bluetooth", + "pt": "Endereço Bluetooth", + "nl": "Bluetooth-adres", + "fr": "Adresse Bluetooth", + "it": "Indirizzo Bluetooth", + "es": "Dirección de Bluetooth", + "pl": "Adres Bluetooth", + "zh-cn": "蓝牙地址" + }, + "type": "string", + "role": "info.mac", + "read": true, + "write": false + }, + "native": {} + }, + { + "_id": "meta.bluetooth.low_energy", + "type": "channel", + "common": { + "role": "", + "name": { + "en": "Bluetooth Low Energy", + "de": "Bluetooth Low Energy", + "ru": "Bluetooth с низким энергопотреблением", + "pt": "Bluetooth de baixa energia", + "nl": "Bluetooth lage energie", + "fr": "Bluetooth à faible consommation d'énergie", + "it": "Bluetooth a bassa energia", + "es": "Bluetooth de baja energía", + "pl": "Niska energia Bluetooth", + "zh-cn": "低功耗蓝牙" + } + }, + "native": {} + }, + { + "_id": "meta.bluetooth.low_energy.active", + "type": "state", + "common": { + "name": { + "en": "Bluetooth Low Energy Active", + "de": "Bluetooth Low Energy Aktiv", + "ru": "Bluetooth с низким энергопотреблением, активный", + "pt": "Bluetooth de baixa energia ativo", + "nl": "Bluetooth Lage Energie Actief", + "fr": "Bluetooth à faible consommation d'énergie actif", + "it": "Bluetooth a basso consumo energetico attivo", + "es": "Bluetooth de baja energía activo", + "pl": "Aktywny Bluetooth Low Energy", + "zh-cn": "低功耗蓝牙有源" + }, + "type": "boolean", + "role": "value", + "read": true, + "write": false + }, + "native": {} + }, + { + "_id": "meta.bluetooth.low_energy.advertising", + "type": "state", + "common": { + "name": { + "en": "Bluetooth Low Energy Advertising", + "de": "Bluetooth Low Energy Auffindbar", + "ru": "Bluetooth с низким энергопотреблением", + "pt": "Publicidade de Bluetooth de baixa energia", + "nl": "Bluetooth Low Energy-advertenties", + "fr": "Publicité Bluetooth Low Energy", + "it": "Pubblicità Bluetooth a basso consumo energetico", + "es": "Publicidad Bluetooth Low Energy", + "pl": "Reklama Bluetooth o niskiej energii", + "zh-cn": "蓝牙低功耗广告" + }, + "type": "boolean", + "role": "value", + "read": true, + "write": false + }, + "native": {} + }, + { + "_id": "meta.bluetooth.low_energy.connectable", + "type": "state", + "common": { + "name": { + "en": "Bluetooth Low Energy Connectable", + "de": "Bluetooth Low Energy verbindbar", + "ru": "Возможность подключения по Bluetooth с низким энергопотреблением", + "pt": "Bluetooth conectável de baixa energia", + "nl": "Bluetooth Low Energy aansluitbaar", + "fr": "Bluetooth à faible consommation d'énergie connectable", + "it": "Bluetooth a bassa energia collegabile", + "es": "Bluetooth de baja energía conectable", + "pl": "Możliwość podłączenia Bluetooth Low Energy", + "zh-cn": "蓝牙低功耗可连接" + }, + "type": "boolean", + "role": "value", + "read": true, + "write": false + }, + "native": {} + }, + { + "_id": "meta.display", + "type": "channel", + "common": { + "role": "", + "name": { + "en": "Display", + "de": "Anzeige", + "ru": "Отображать", + "pt": "Exibição", + "nl": "Weergave", + "fr": "Affichage", + "it": "Schermo", + "es": "Monitor", + "pl": "Wyświetlacz", + "zh-cn": "展示" + } + }, + "native": {} + }, + { + "_id": "meta.display.brightness", + "type": "state", + "common": { + "name": { + "en": "Brightness", + "de": "Helligkeit", + "ru": "Яркость", + "pt": "Brilho", + "nl": "Helderheid", + "fr": "Luminosité", + "it": "Luminosità", + "es": "Brillo", + "pl": "Jasność", + "zh-cn": "亮度" + }, + "type": "number", + "role": "level.dimmer", + "unit": "%", + "read": true, + "write": true + }, + "native": {} + }, + { + "_id": "meta.display.brightnessMin", + "type": "state", + "common": { + "name": { + "en": "Brightness Min", + "de": "Helligkeit Min", + "ru": "Яркость Мин.", + "pt": "Brilho Mín", + "nl": "Helderheid Min", + "fr": "Luminosité minimale", + "it": "Luminosità Min", + "es": "Brillo mínimo", + "pl": "Minimalna jasność", + "zh-cn": "亮度最小值" + }, + "type": "number", + "role": "level.dimmer", + "unit": "%", + "read": true, + "write": false + }, + "native": {} + }, + { + "_id": "meta.display.brightnessMax", + "type": "state", + "common": { + "name": { + "en": "Brightness Max", + "de": "Helligkeit Max", + "ru": "Яркость Макс.", + "pt": "Brilho máximo", + "nl": "Helderheid Max", + "fr": "Luminosité maximale", + "it": "Luminosità massima", + "es": "Brillo máximo", + "pl": "Maksymalna jasność", + "zh-cn": "最大亮度" + }, + "type": "number", + "role": "level.dimmer", + "unit": "%", + "read": true, + "write": false + }, + "native": {} + }, + { + "_id": "meta.display.brightnessAuto", + "type": "state", + "common": { + "name": { + "en": "Brightness Auto", + "de": "Helligkeit Auto", + "ru": "Яркость Авто", + "pt": "Brilho Automático", + "nl": "Helderheid Auto", + "fr": "Luminosité Automatique", + "it": "Luminosità automatica", + "es": "Brillo automático", + "pl": "Jasność Auto", + "zh-cn": "亮度自动" + }, + "type": "boolean", + "role": "value", + "read": true, + "write": true + }, + "native": {} + }, + { + "_id": "meta.display.brightnessMode", + "type": "state", + "common": { + "name": { + "en": "Brightness Mode", + "de": "Helligkeitsmodus", + "ru": "Режим яркости", + "pt": "Modo de Brilho", + "nl": "Helderheidsmodus", + "fr": "Mode de luminosité", + "it": "Modalità luminosità", + "es": "Modo de brillo", + "pl": "Tryb jasności", + "zh-cn": "亮度模式" + }, + "type": "string", + "role": "value", + "read": true, + "write": false + }, + "native": {} + }, + { + "_id": "meta.display.width", + "type": "state", + "common": { + "name": { + "en": "Width", + "de": "Breite", + "ru": "Ширина", + "pt": "Largura", + "nl": "Breedte", + "fr": "Largeur", + "it": "Larghezza", + "es": "Ancho", + "pl": "Szerokość", + "zh-cn": "宽度" + }, + "type": "number", + "role": "value", + "read": true, + "write": false + }, + "native": {} + }, + { + "_id": "meta.display.height", + "type": "state", + "common": { + "name": { + "en": "Height", + "de": "Höhe", + "ru": "Рост", + "pt": "Altura", + "nl": "Hoogte", + "fr": "Hauteur", + "it": "Altezza", + "es": "Altura", + "pl": "Wzrost", + "zh-cn": "高度" + }, + "type": "number", + "role": "value", + "read": true, + "write": false + }, + "native": {} + }, + { + "_id": "meta.display.type", + "type": "state", + "common": { + "name": { + "en": "Type", + "de": "Typ", + "ru": "Тип", + "pt": "Modelo", + "nl": "Type", + "fr": "Taper", + "it": "Tipo", + "es": "Escribe", + "pl": "Rodzaj", + "zh-cn": "类型" + }, + "type": "string", + "role": "value", + "read": true, + "write": false + }, + "native": {} + }, + { + "_id": "meta.display.screensaver", + "type": "channel", + "common": { + "role": "", + "name": { + "en": "Screensaver", + "de": "Bildschirmschoner", + "ru": "Заставка", + "pt": "Protetor de tela", + "nl": "Screensaver", + "fr": "Économiseur d'écran", + "it": "Salvaschermo", + "es": "Protector de pantalla", + "pl": "Wygaszacz ekranu", + "zh-cn": "屏幕保护程序" + } + }, + "native": {} + }, + { + "_id": "meta.display.screensaver.enabled", + "type": "state", + "common": { + "name": { + "en": "Screensaver Enabled", + "de": "Bildschirmschoner aktiviert", + "ru": "Заставка включена", + "pt": "Protetor de tela ativado", + "nl": "Schermbeveiliging ingeschakeld", + "fr": "Économiseur d'écran activé", + "it": "Salvaschermo abilitato", + "es": "Salvapantallas habilitado", + "pl": "Włączony wygaszacz ekranu", + "zh-cn": "启用屏幕保护程序" + }, + "type": "boolean", + "role": "value", + "read": true, + "write": true + }, + "native": {} + }, + { + "_id": "meta.display.screensaver.widget", + "type": "state", + "common": { + "name": { + "en": "Widget", + "de": "Widget", + "ru": "Виджет", + "pt": "Ferramenta", + "nl": "Widget", + "fr": "Widget", + "it": "Aggeggio", + "es": "Widget", + "pl": "Widżet", + "zh-cn": "小工具" + }, + "type": "string", + "role": "value", + "read": true, + "write": false + }, + "native": {} + }, + { + "_id": "meta.display.screensaver.modes", + "type": "channel", + "common": { + "role": "", + "name": { + "en": "Screensaver Modes", + "de": "Bildschirmschoner-Modi", + "ru": "Режимы заставки", + "pt": "Modos de proteção de tela", + "nl": "Schermbeveiligingsmodi", + "fr": "Modes économiseur d'écran", + "it": "Modalità salvaschermo", + "es": "Modos de salvapantallas", + "pl": "Tryby wygaszacza ekranu", + "zh-cn": "屏保模式" + } + }, + "native": {} + }, + { + "_id": "meta.display.screensaver.modes.timeBased", + "type": "channel", + "common": { + "role": "", + "name": { + "en": "Time Based Screensaver", + "de": "Zeitbasierter Bildschirmschoner", + "ru": "Заставка по времени", + "pt": "Time Based Screensaver", + "nl": "Op tijd gebaseerde screensaver", + "fr": "Économiseur d'écran basé sur le temps", + "it": "Salvaschermo basato sul tempo", + "es": "Salvapantallas basado en tiempo", + "pl": "Wygaszacz ekranu oparty na czasie", + "zh-cn": "基于时间的屏幕保护程序" + } + }, + "native": {} + }, + { + "_id": "meta.display.screensaver.modes.timeBased.enabled", + "type": "state", + "common": { + "name": { + "en": "Time Based Screensaver Enabled", + "de": "Zeitbasierter Bildschirmschoner aktiviert", + "ru": "Заставка на основе времени включена", + "pt": "Protetor de tela baseado em tempo habilitado", + "nl": "Op tijd gebaseerde screensaver ingeschakeld", + "fr": "Économiseur d'écran basé sur le temps activé", + "it": "Screensaver basato sul tempo abilitato", + "es": "Protector de pantalla basado en tiempo habilitado", + "pl": "Włączony wygaszacz ekranu oparty na czasie", + "zh-cn": "启用基于时间的屏幕保护程序" + }, + "type": "boolean", + "role": "value", + "read": true, + "write": true + }, + "native": {} + }, + { + "_id": "meta.display.screensaver.modes.timeBased.startTime", + "type": "state", + "common": { + "name": { + "en": "Time Based Screensaver Start Time", + "de": "Startzeit des zeitbasierten Bildschirmschoners", + "ru": "Время начала заставки на основе времени", + "pt": "Hora de início do protetor de tela com base em tempo", + "nl": "Op tijd gebaseerde starttijd screensaver", + "fr": "Heure de début de l'économiseur d'écran basé sur le temps", + "it": "Ora di inizio dello screensaver basato sul tempo", + "es": "Hora de inicio del salvapantallas en función del tiempo", + "pl": "Czas rozpoczęcia wygaszacza ekranu na podstawie czasu", + "zh-cn": "基于时间的屏幕保护程序开始时间" + }, + "type": "string", + "role": "value", + "read": true, + "write": true + }, + "native": {} + }, + { + "_id": "meta.display.screensaver.modes.timeBased.startTimeLocal", + "type": "state", + "common": { + "name": { + "en": "Time Based Screensaver Start Time Local", + "de": "Zeitbasierter Bildschirmschoner Startzeit Lokal", + "ru": "Заставка на основе времени Время начала Местное", + "pt": "Time Based Screensaver Start Time Local", + "nl": "Op tijd gebaseerde screensaver Starttijd Lokaal", + "fr": "Heure de début de l'économiseur d'écran basé sur l'heure Locale", + "it": "Ora di inizio del salvaschermo basato sul tempo Local", + "es": "Hora de inicio del salvapantallas basado en el tiempo Local", + "pl": "Czas rozpoczęcia wygaszacza ekranu w oparciu o czas Lokalny", + "zh-cn": "基于时间的屏幕保护程序开始时间本地" + }, + "type": "string", + "role": "value", + "read": true, + "write": false + }, + "native": {} + }, + { + "_id": "meta.display.screensaver.modes.timeBased.endTime", + "type": "state", + "common": { + "name": { + "en": "Time Based Screensaver End Time", + "de": "Zeitbasierter Bildschirmschoner Endzeit", + "ru": "Время окончания заставки на основе времени", + "pt": "Tempo de término do protetor de tela baseado em tempo", + "nl": "Eindtijd screensaver op basis van tijd", + "fr": "Heure de fin de l'économiseur d'écran basé sur le temps", + "it": "Ora di fine del salvaschermo basato sul tempo", + "es": "Hora de finalización del salvapantallas en función del tiempo", + "pl": "Czas zakończenia wygaszacza ekranu na podstawie czasu", + "zh-cn": "基于时间的屏幕保护程序结束时间" + }, + "type": "string", + "role": "value", + "read": true, + "write": true + }, + "native": {} + }, + { + "_id": "meta.display.screensaver.modes.timeBased.endTimeLocal", + "type": "state", + "common": { + "name": { + "en": "Time Based Screensaver End Time Local", + "de": "Zeitbasierter Bildschirmschoner Endzeit Lokal", + "ru": "Заставка на основе времени Время окончания Местное время", + "pt": "Time Based Screensaver End Time Local", + "nl": "Op tijd gebaseerde screensaver Eindtijd Lokaal", + "fr": "Économiseur d'écran basé sur l'heure Heure de fin Locale", + "it": "Salvaschermo basato sul tempo Ora di fine locale", + "es": "Hora de finalización del salvapantallas basado en el tiempo Local", + "pl": "Czas zakończenia wygaszacza ekranu na podstawie czasu Lokalny", + "zh-cn": "基于时间的屏幕保护程序结束时间本地" + }, + "type": "string", + "role": "value", + "read": true, + "write": false + }, + "native": {} + }, + { + "_id": "meta.display.screensaver.modes.whenDark", + "type": "channel", + "common": { + "role": "", + "name": { + "en": "When Dark Screensaver", + "de": "Wenn Dunkel Bildschirmschoner", + "ru": "Когда темная заставка", + "pt": "Protetor de tela quando escuro", + "nl": "Wanneer donkere schermbeveiliging", + "fr": "Quand sombre économiseur d'écran", + "it": "Quando il salvaschermo è scuro", + "es": "When Dark Screensaver", + "pl": "Gdy ciemny wygaszacz ekranu", + "zh-cn": "当黑暗的屏幕保护程序" + } + }, + "native": {} + }, + { + "_id": "meta.display.screensaver.modes.whenDark.enabled", + "type": "state", + "common": { + "name": { + "en": "When Dark Screensaver Enabled", + "de": "Wenn Dunkel Bildschirmschoner aktiviert ist", + "ru": "Когда включена темная заставка", + "pt": "Quando protetor de tela escuro ativado", + "nl": "Wanneer donkere schermbeveiliging is ingeschakeld", + "fr": "Lorsque l'économiseur d'écran sombre est activé", + "it": "Quando lo screensaver scuro è abilitato", + "es": "Cuando el protector de pantalla oscuro está habilitado", + "pl": "Gdy włączony jest ciemny wygaszacz ekranu", + "zh-cn": "启用暗屏保护程序时" + }, + "type": "boolean", + "role": "value", + "read": true, + "write": true + }, + "native": {} + }, + { + "_id": "meta.wifi", + "type": "channel", + "common": { + "role": "", + "name": { + "en": "WiFi", + "de": "W-LAN", + "ru": "Вай фай", + "pt": "Wi-fi", + "nl": "Wifi", + "fr": "Wifi", + "it": "Wifi", + "es": "Wifi", + "pl": "Wi-Fi", + "zh-cn": "无线上网" + } + }, + "native": {} + }, + { + "_id": "meta.wifi.active", + "type": "state", + "common": { + "name": { + "en": "WiFi Active", + "de": "WLAN aktiv", + "ru": "WiFi активен", + "pt": "WiFi ativo", + "nl": "WiFi actief", + "fr": "Wi-Fi actif", + "it": "Wi-Fi attivo", + "es": "WiFi activo", + "pl": "Wi-Fi aktywne", + "zh-cn": "无线上网" + }, + "type": "boolean", + "role": "value", + "read": true, + "write": false + }, + "native": {} + }, + { + "_id": "meta.wifi.address", + "type": "state", + "common": { + "name": { + "en": "WiFi Address", + "de": "WLAN-Adresse", + "ru": "Адрес Wi-Fi", + "pt": "Endereço WiFi", + "nl": "WiFi-adres", + "fr": "Adresse Wi-Fi", + "it": "Indirizzo WiFi", + "es": "Dirección WiFi", + "pl": "Adres Wi-Fi", + "zh-cn": "无线地址" + }, + "type": "string", + "role": "info.mac", + "read": true, + "write": false + }, + "native": {} + }, + { + "_id": "meta.wifi.available", + "type": "state", + "common": { + "name": { + "en": "WiFi Available", + "de": "WLAN verfügbar", + "ru": "Доступен Wi-Fi", + "pt": "WiFi disponível", + "nl": "WiFi beschikbaar", + "fr": "Wi-Fi disponible", + "it": "Wi-Fi disponibile", + "es": "WiFi disponible", + "pl": "Dostępne WiFi", + "zh-cn": "可用无线网络" + }, + "type": "boolean", + "role": "value", + "read": true, + "write": false + }, + "native": {} + }, + { + "_id": "meta.wifi.encryption", + "type": "state", + "common": { + "name": { + "en": "WiFi Encryption", + "de": "WLAN-Verschlüsselung", + "ru": "Шифрование WiFi", + "pt": "Criptografia WiFi", + "nl": "WiFi-codering", + "fr": "Cryptage Wi-Fi", + "it": "Crittografia WiFi", + "es": "Cifrado WiFi", + "pl": "Szyfrowanie Wi-Fi", + "zh-cn": "WiFi加密" + }, + "type": "string", + "role": "value", + "read": true, + "write": false + }, + "native": {} + }, + { + "_id": "meta.wifi.ssid", + "type": "state", + "common": { + "name": { + "en": "WiFi SSID", + "de": "WLAN-SSID", + "ru": "Wi-Fi SSID", + "pt": "SSID WiFi", + "nl": "WiFi-SSID", + "fr": "Wi-Fi SSID", + "it": "SSID Wi-Fi", + "es": "SSID WiFi", + "pl": "Wi-Fi SSID", + "zh-cn": "无线SSID" + }, + "type": "string", + "role": "value", + "read": true, + "write": false + }, + "native": {} + }, + { + "_id": "meta.wifi.ip", + "type": "state", + "common": { + "name": { + "en": "WiFi IP", + "de": "WLAN-IP", + "ru": "WiFi IP", + "pt": "IP WiFi", + "nl": "WiFi-IP", + "fr": "IP Wi-Fi", + "it": "IP WiFi", + "es": "IP WiFi", + "pl": "IP Wi-Fi", + "zh-cn": "无线IP" + }, + "type": "string", + "role": "info.ip", + "read": true, + "write": false + }, + "native": {} + }, + { + "_id": "meta.wifi.mode", + "type": "state", + "common": { + "name": { + "en": "WiFi Mode", + "de": "WLAN-Modus", + "ru": "Режим Wi-Fi", + "pt": "Modo WiFi", + "nl": "WiFi-modus", + "fr": "Mode Wi-Fi", + "it": "Modalità Wi-Fi", + "es": "Modo WiFi", + "pl": "Tryb Wi-Fi", + "zh-cn": "无线模式" + }, + "type": "string", + "role": "value", + "read": true, + "write": false + }, + "native": {} + }, + { + "_id": "meta.wifi.netmask", + "type": "state", + "common": { + "name": { + "en": "WiFi Netmask", + "de": "WLAN-Subnetzmaske", + "ru": "Маска сети Wi-Fi", + "pt": "Máscara de rede WiFi", + "nl": "WiFi-netmasker", + "fr": "Masque de réseau Wi-Fi", + "it": "Maschera di rete WiFi", + "es": "Máscara de red WiFi", + "pl": "Maska sieci Wi-Fi", + "zh-cn": "无线网络掩码" + }, + "type": "string", + "role": "value", + "read": true, + "write": false + }, + "native": {} + }, + { + "_id": "meta.wifi.strength", + "type": "state", + "common": { + "name": { + "en": "WiFi Strength", + "de": "WLAN-Stärke", + "ru": "Мощность Wi-Fi", + "pt": "Força WiFi", + "nl": "WiFi-sterkte", + "fr": "Puissance Wi-Fi", + "it": "Potenza Wi-Fi", + "es": "Fuerza de WiFi", + "pl": "Siła Wi-Fi", + "zh-cn": "WiFi强度" + }, + "type": "number", + "role": "value", + "unit": "%", + "read": true, + "write": false + }, + "native": {} + }, + { + "_id": "apps", + "type": "channel", + "common": { + "role": "", + "name": { + "en": "Apps", + "de": "Apps", + "ru": "Программы", + "pt": "Apps", + "nl": "Apps", + "fr": "applications", + "it": "App", + "es": "Aplicaciones", + "pl": "Aplikacje", + "zh-cn": "应用" + } + }, + "native": {} + }, + { + "_id": "apps.next", + "type": "state", + "common": { + "name": { + "en": "Next App", + "de": "Nächste App", + "ru": "Следующее приложение", + "pt": "Próximo aplicativo", + "nl": "Volgende app", + "fr": "Application suivante", + "it": "App successiva", + "es": "Siguiente aplicación", + "pl": "Następna aplikacja", + "zh-cn": "下一个应用" + }, + "type": "boolean", + "role": "button", + "read": false, + "write": true + }, + "native": {} + }, + { + "_id": "apps.prev", + "type": "state", + "common": { + "name": { + "en": "Previous App", + "de": "Vorherige App", + "ru": "Предыдущее приложение", + "pt": "App anterior", + "nl": "Vorige app", + "fr": "Application précédente", + "it": "App precedente", + "es": "Aplicación anterior", + "pl": "Poprzednia aplikacja", + "zh-cn": "上一个应用" + }, + "type": "boolean", + "role": "button", + "read": false, + "write": true + }, + "native": {} + }, + { + "_id": "mydatadiy", + "type": "channel", + "common": { + "role": "", + "name": { + "en": "My Data (DIY)", + "de": "Meine Daten (DIY)", + "ru": "Мои данные (сделай сам)", + "pt": "Meus dados (faça você mesmo)", + "nl": "Mijn gegevens (doe-het-zelf)", + "fr": "Mes données (bricolage)", + "it": "I miei dati (fai da te)", + "es": "Mis datos (bricolaje)", + "pl": "Moje dane (zrób to sam)", + "zh-cn": "我的数据(DIY)" + } + }, + "native": {} + }, + { + "_id": "mydatadiy.obj", + "type": "state", + "common": { + "name": { + "en": "My Data (DIY) data", + "de": "Meine Daten (DIY) Daten", + "ru": "Данные кадра My Data (DIY)", + "pt": "Dados do quadro My Data (DIY)", + "nl": "Mijn gegevens (DIY) framegegevens", + "fr": "Données du cadre Mes données (DIY)", + "it": "Dati del telaio I miei dati (fai-da-te)", + "es": "Datos del marco de My Data (DIY)", + "pl": "Dane ramki Moje dane (DIY)", + "zh-cn": "我的数据 (DIY) 帧数据" + }, + "type": "string", + "role": "json", + "read": true, + "write": false + }, + "native": {} + } + ] } diff --git a/lib/tools.js b/lib/tools.js index 7d9e8b6..ec0ad32 100644 --- a/lib/tools.js +++ b/lib/tools.js @@ -1,4 +1,4 @@ -const axios = require("axios"); +const axios = require('axios').default; /** * Tests whether the given variable is a real object and not an Array @@ -6,11 +6,11 @@ const axios = require("axios"); * @returns {it is Record} */ function isObject(it) { - // This is necessary because: - // typeof null === 'object' - // typeof [] === 'object' - // [] instanceof Object === true - return Object.prototype.toString.call(it) === "[object Object]"; + // This is necessary because: + // typeof null === 'object' + // typeof [] === 'object' + // [] instanceof Object === true + return Object.prototype.toString.call(it) === '[object Object]'; } /** @@ -19,8 +19,8 @@ function isObject(it) { * @returns {it is any[]} */ function isArray(it) { - if (typeof Array.isArray === "function") return Array.isArray(it); - return Object.prototype.toString.call(it) === "[object Array]"; + if (typeof Array.isArray === 'function') return Array.isArray(it); + return Object.prototype.toString.call(it) === '[object Array]'; } /** @@ -31,37 +31,39 @@ function isArray(it) { * @returns {Promise} */ async function translateText(text, targetLang, yandexApiKey) { - if (targetLang === "en") { - return text; - } - if (yandexApiKey) { - return await translateYandex(text, targetLang, yandexApiKey); - } else { - return await translateGoogle(text, targetLang); - } + if (targetLang === 'en') { + return text; + } else if (!text) { + return ''; + } + if (yandexApiKey) { + return translateYandex(text, targetLang, yandexApiKey); + } else { + return translateGoogle(text, targetLang); + } } /** * Translates text with Yandex API * @param {string} text The text to translate * @param {string} targetLang The target languate - * @param {string} [apiKey] The yandex API key. You can create one for free at https://translate.yandex.com/developers + * @param {string} apiKey The yandex API key. You can create one for free at https://translate.yandex.com/developers * @returns {Promise} */ async function translateYandex(text, targetLang, apiKey) { - if (targetLang === "zh-cn") { - targetLang = "zh"; - } - try { - const url = `https://translate.yandex.net/api/v1.5/tr.json/translate?key=${apiKey}&text=${encodeURIComponent(text)}&lang=en-${targetLang}`; - const response = await axios({url, timeout: 15000}); - if (response.data && response.data["text"]) { - return response.data["text"][0]; - } - throw new Error("Invalid response for translate request"); - } catch (e) { - throw new Error(`Could not translate to "${targetLang}": ${e}`); - } + if (targetLang === 'zh-cn') { + targetLang = 'zh'; + } + try { + const url = `https://translate.yandex.net/api/v1.5/tr.json/translate?key=${apiKey}&text=${encodeURIComponent(text)}&lang=en-${targetLang}`; + const response = await axios({url, timeout: 15000}); + if (response.data && response.data.text && isArray(response.data.text)) { + return response.data.text[0]; + } + throw new Error('Invalid response for translate request'); + } catch (e) { + throw new Error(`Could not translate to "${targetLang}": ${e}`); + } } /** @@ -71,21 +73,27 @@ async function translateYandex(text, targetLang, apiKey) { * @returns {Promise} */ async function translateGoogle(text, targetLang) { - try { - const url = `http://translate.googleapis.com/translate_a/single?client=gtx&sl=en&tl=${targetLang}&dt=t&q=${encodeURIComponent(text)}&ie=UTF-8&oe=UTF-8`; - const response = await axios({url, timeout: 15000}); - if (isArray(response.data)) { - // we got a valid response - return response.data[0][0][0]; - } - throw new Error("Invalid response for translate request"); - } catch (e) { - throw new Error(`Could not translate to "${targetLang}": ${e}`); - } + try { + const url = `http://translate.googleapis.com/translate_a/single?client=gtx&sl=en&tl=${targetLang}&dt=t&q=${encodeURIComponent(text)}&ie=UTF-8&oe=UTF-8`; + const response = await axios({url, timeout: 15000}); + if (isArray(response.data)) { + // we got a valid response + return response.data[0][0][0]; + } + throw new Error('Invalid response for translate request'); + } catch (e) { + if (e.response && e.response.status === 429) { + throw new Error( + `Could not translate to "${targetLang}": Rate-limited by Google Translate` + ); + } else { + throw new Error(`Could not translate to "${targetLang}": ${e}`); + } + } } module.exports = { - isArray, - isObject, - translateText -}; \ No newline at end of file + isArray, + isObject, + translateText +}; diff --git a/main.js b/main.js index 4be2e53..c1375bb 100644 --- a/main.js +++ b/main.js @@ -3,8 +3,9 @@ /* jslint node: true */ 'use strict'; -const utils = require('@iobroker/adapter-core'); -const request = require('request'); +const utils = require('@iobroker/adapter-core'); +const axios = require('axios'); +const https = require('https'); const adapterName = require('./package.json').name.split('.').pop(); class LaMetric extends utils.Adapter { @@ -15,9 +16,14 @@ class LaMetric extends utils.Adapter { name: adapterName, }); + this.supportedVersion = '2.2.2'; + this.refreshStateTimeout = null; this.refreshAppTimeout = null; + this.myDataDiyRegex = /\{([_a-zA-Z0-9\.#-]+)\}/g; + this.myDataDiyForeignStates = []; + this.on('ready', this.onReady.bind(this)); this.on('stateChange', this.onStateChange.bind(this)); this.on('message', this.onMessage.bind(this)); @@ -29,9 +35,32 @@ class LaMetric extends utils.Adapter { this.refreshState(); this.refreshApps(); + + if (this.config.mydatadiy && Array.isArray(this.config.mydatadiy)) { + this.collectMyDataDiyForeignStates(this.config.mydatadiy); + } else { + this.log.debug('My Data (DIY) configuration is not available'); + this.setStateAsync('mydatadiy.obj', {val: JSON.stringify({'frames': [{text: 'No Data', icon: 'a9335'}]}), ack: true}); + } } onStateChange(id, state) { + if (id && state && this.myDataDiyForeignStates.filter(item => { return item.id === id; }).length > 0) { + this.myDataDiyForeignStates = this.myDataDiyForeignStates.map(item => { + if (item.id === id) { + this.log.debug('My Data (DIY) received new value "' + state.val + '" of state: ' + id); + item.val = state.val; + } + + return item; + }); + + this.log.debug('My Data (DIY) list after value update ' + JSON.stringify(this.myDataDiyForeignStates)); + + this.refreshMyDataDiy(); // Refresh Output + } + + // Handle states of LaMetric adapter if (id && state && !state.ack) { // No ack = changed by user if (id === this.namespace + '.meta.display.brightness') { @@ -39,10 +68,12 @@ class LaMetric extends utils.Adapter { this.buildRequest( 'device/display', - content => { - this.setState('meta.display.brightness', {val: content.success.data.brightness, ack: true}); - this.setState('meta.display.brightnessAuto', {val: content.success.data.brightness_mode === 'auto', ack: true}); - this.setState('meta.display.brightnessMode', {val: content.success.data.brightness_mode, ack: true}); + async (content, status) => { + await this.setStateAsync('meta.display.brightness', {val: content.success.data.brightness, ack: true}); + await this.setStateAsync('meta.display.brightnessMin', {val: content.success.data.brightness_limit.min, ack: true}); + await this.setStateAsync('meta.display.brightnessMax', {val: content.success.data.brightness_limit.max, ack: true}); + await this.setStateAsync('meta.display.brightnessAuto', {val: content.success.data.brightness_mode === 'auto', ack: true}); + await this.setStateAsync('meta.display.brightnessMode', {val: content.success.data.brightness_mode, ack: true}); }, 'PUT', { @@ -55,10 +86,12 @@ class LaMetric extends utils.Adapter { this.buildRequest( 'device/display', - content => { - this.setState('meta.display.brightness', {val: content.success.data.brightness, ack: true}); - this.setState('meta.display.brightnessAuto', {val: content.success.data.brightness_mode === 'auto', ack: true}); - this.setState('meta.display.brightnessMode', {val: content.success.data.brightness_mode, ack: true}); + async (content, status) => { + await this.setStateAsync('meta.display.brightness', {val: content.success.data.brightness, ack: true}); + await this.setStateAsync('meta.display.brightnessMin', {val: content.success.data.brightness_limit.min, ack: true}); + await this.setStateAsync('meta.display.brightnessMax', {val: content.success.data.brightness_limit.max, ack: true}); + await this.setStateAsync('meta.display.brightnessAuto', {val: content.success.data.brightness_mode === 'auto', ack: true}); + await this.setStateAsync('meta.display.brightnessMode', {val: content.success.data.brightness_mode, ack: true}); }, 'PUT', { @@ -70,8 +103,10 @@ class LaMetric extends utils.Adapter { this.buildRequest( 'device/audio', - content => { - this.setState('meta.audio.volume', {val: content.success.data.volume, ack: true}); + async (content, status) => { + await this.setStateAsync('meta.audio.volume', {val: content.success.data.volume, ack: true}); + await this.setStateAsync('meta.audio.volumeMin', {val: content.success.data.volume_limit.min, ack: true}); + await this.setStateAsync('meta.audio.volumeMax', {val: content.success.data.volume_limit.max, ack: true}); }, 'PUT', { @@ -83,13 +118,13 @@ class LaMetric extends utils.Adapter { this.buildRequest( 'device/bluetooth', - content => { - this.setState('meta.bluetooth.active', {val: content.success.data.active, ack: true}); - this.setState('meta.bluetooth.available', {val: content.success.data.available, ack: true}); - this.setState('meta.bluetooth.discoverable', {val: content.success.data.discoverable, ack: true}); - this.setState('meta.bluetooth.address', {val: content.success.data.mac, ack: true}); - this.setState('meta.bluetooth.name', {val: content.success.data.name, ack: true}); - this.setState('meta.bluetooth.pairable', {val: content.success.data.pairable, ack: true}); + async (content, status) => { + await this.setStateAsync('meta.bluetooth.active', {val: content.success.data.active, ack: true}); + await this.setStateAsync('meta.bluetooth.available', {val: content.success.data.available, ack: true}); + await this.setStateAsync('meta.bluetooth.discoverable', {val: content.success.data.discoverable, ack: true}); + await this.setStateAsync('meta.bluetooth.address', {val: content.success.data.mac, ack: true}); + await this.setStateAsync('meta.bluetooth.name', {val: content.success.data.name, ack: true}); + await this.setStateAsync('meta.bluetooth.pairable', {val: content.success.data.pairable, ack: true}); }, 'PUT', { @@ -101,13 +136,13 @@ class LaMetric extends utils.Adapter { this.buildRequest( 'device/bluetooth', - content => { - this.setState('meta.bluetooth.active', {val: content.success.data.active, ack: true}); - this.setState('meta.bluetooth.available', {val: content.success.data.available, ack: true}); - this.setState('meta.bluetooth.discoverable', {val: content.success.data.discoverable, ack: true}); - this.setState('meta.bluetooth.address', {val: content.success.data.mac, ack: true}); - this.setState('meta.bluetooth.name', {val: content.success.data.name, ack: true}); - this.setState('meta.bluetooth.pairable', {val: content.success.data.pairable, ack: true}); + async (content, status) => { + await this.setStateAsync('meta.bluetooth.active', {val: content.success.data.active, ack: true}); + await this.setStateAsync('meta.bluetooth.available', {val: content.success.data.available, ack: true}); + await this.setStateAsync('meta.bluetooth.discoverable', {val: content.success.data.discoverable, ack: true}); + await this.setStateAsync('meta.bluetooth.address', {val: content.success.data.mac, ack: true}); + await this.setStateAsync('meta.bluetooth.name', {val: content.success.data.name, ack: true}); + await this.setStateAsync('meta.bluetooth.pairable', {val: content.success.data.pairable, ack: true}); }, 'PUT', { @@ -137,13 +172,17 @@ class LaMetric extends utils.Adapter { this.buildRequest( 'device/display', - content => { - this.setState('meta.display.screensaver.enabled', {val: content.success.data.screensaver.enabled, ack: true}); - this.setState('meta.display.screensaver.widget', {val: content.success.data.screensaver.widget, ack: true}); - this.setState('meta.display.screensaver.modes.timeBased.enabled', {val: content.success.data.screensaver.modes.time_based.enabled, ack: true}); - this.setState('meta.display.screensaver.modes.timeBased.startTime', {val: content.success.data.screensaver.modes.time_based.start_time, ack: true}); - this.setState('meta.display.screensaver.modes.timeBased.endTime', {val: content.success.data.screensaver.modes.time_based.end_time, ack: true}); - this.setState('meta.display.screensaver.modes.whenDark.enabled', {val: content.success.data.screensaver.modes.when_dark.enabled, ack: true}); + async (content, status) => { + await this.setStateAsync('meta.display.screensaver.enabled', {val: content.success.data.screensaver.enabled, ack: true}); + await this.setStateAsync('meta.display.screensaver.widget', {val: content.success.data.screensaver.widget, ack: true}); + + await this.setStateAsync('meta.display.screensaver.modes.timeBased.enabled', {val: content.success.data.screensaver.modes.time_based.enabled, ack: true}); + await this.setStateAsync('meta.display.screensaver.modes.timeBased.startTime', {val: content.success.data.screensaver.modes.time_based.start_time, ack: true}); + await this.setStateAsync('meta.display.screensaver.modes.timeBased.startTimeLocal', {val: content.success.data.screensaver.modes.time_based.local_start_time, ack: true}); + await this.setStateAsync('meta.display.screensaver.modes.timeBased.endTime', {val: content.success.data.screensaver.modes.time_based.end_time, ack: true}); + await this.setStateAsync('meta.display.screensaver.modes.timeBased.endTimeLocal', {val: content.success.data.screensaver.modes.time_based.local_end_time, ack: true}); + + await this.setStateAsync('meta.display.screensaver.modes.whenDark.enabled', {val: content.success.data.screensaver.modes.when_dark.enabled, ack: true}); }, 'PUT', { @@ -175,13 +214,17 @@ class LaMetric extends utils.Adapter { this.buildRequest( 'device/display', - content => { - this.setState('meta.display.screensaver.enabled', {val: content.success.data.screensaver.enabled, ack: true}); - this.setState('meta.display.screensaver.widget', {val: content.success.data.screensaver.widget, ack: true}); - this.setState('meta.display.screensaver.modes.timeBased.enabled', {val: content.success.data.screensaver.modes.time_based.enabled, ack: true}); - this.setState('meta.display.screensaver.modes.timeBased.startTime', {val: content.success.data.screensaver.modes.time_based.start_time, ack: true}); - this.setState('meta.display.screensaver.modes.timeBased.endTime', {val: content.success.data.screensaver.modes.time_based.end_time, ack: true}); - this.setState('meta.display.screensaver.modes.whenDark.enabled', {val: content.success.data.screensaver.modes.when_dark.enabled, ack: true}); + async (content, status) => { + await this.setStateAsync('meta.display.screensaver.enabled', {val: content.success.data.screensaver.enabled, ack: true}); + await this.setStateAsync('meta.display.screensaver.widget', {val: content.success.data.screensaver.widget, ack: true}); + + await this.setStateAsync('meta.display.screensaver.modes.timeBased.enabled', {val: content.success.data.screensaver.modes.time_based.enabled, ack: true}); + await this.setStateAsync('meta.display.screensaver.modes.timeBased.startTime', {val: content.success.data.screensaver.modes.time_based.start_time, ack: true}); + await this.setStateAsync('meta.display.screensaver.modes.timeBased.startTimeLocal', {val: content.success.data.screensaver.modes.time_based.local_start_time, ack: true}); + await this.setStateAsync('meta.display.screensaver.modes.timeBased.endTime', {val: content.success.data.screensaver.modes.time_based.end_time, ack: true}); + await this.setStateAsync('meta.display.screensaver.modes.timeBased.endTimeLocal', {val: content.success.data.screensaver.modes.time_based.local_end_time, ack: true}); + + await this.setStateAsync('meta.display.screensaver.modes.whenDark.enabled', {val: content.success.data.screensaver.modes.when_dark.enabled, ack: true}); }, 'PUT', { @@ -195,16 +238,16 @@ class LaMetric extends utils.Adapter { } ); } else if (id.match(/.+\.apps\.[a-z0-9]{32}\..*$/g)) { - this.log.debug('changing to specific app'); - const matches = id.match(/.+\.apps\.([a-z0-9]{32})\.(.*)$/); const widget = matches[1]; const action = matches[2]; + this.log.debug(`running action "${action}" on specific widget "${widget}"`); + this.getState( 'apps.' + widget + '.package', - (err, state) => { - const pack = state.val; + async (err, packState) => { + const pack = packState.val; if (action === 'activate') { this.log.debug('activating specific widget: ' + widget + ' of package ' + pack); @@ -218,13 +261,66 @@ class LaMetric extends utils.Adapter { } else { this.log.debug('special action (' + action + '): ' + widget + ' of package ' + pack); + const data = { id: action }; + + // START special Widgets + + if (action == 'clock.clockface') { + + if (['weather', 'page_a_day', 'custom', 'none'].indexOf(state.val) > -1) { + + data.params = { + type: state.val + }; + + } else { + + data.params = { + icon: state.val, + type: 'custom' + }; + + } + + data.activate = true; + + this.setStateAsync(id, {val: state.val, ack: true}); // Confirm state change + /* + } else if (action.indexOf('clock.alarm') === 0) { + + const clockAlarmStates = await this.getStatesAsync('apps.' + widget + '.clock.alarm.*'); + + const clockAlarmEnabled = (action === 'clock.alarm.enabled') ? state.val : clockAlarmStates[this.namespace + '.apps.' + widget + '.clock.alarm.enabled'].val; + const clockAlarmTime = (action === 'clock.alarm.time') ? state.val : clockAlarmStates[this.namespace + '.apps.' + widget + '.clock.alarm.time'].val; + const clockAlarmWithRadio = (action === 'clock.alarm.wake_with_radio') ? state.val : clockAlarmStates[this.namespace + '.apps.' + widget + '.clock.alarm.wake_with_radio'].val; + + data.id = 'clock.alarm'; + data.params = { + enabled: clockAlarmEnabled || false, + time: clockAlarmTime || "10:00:00", + wake_with_radio: clockAlarmWithRadio || false + }; + + this.setStateAsync(id, {val: state.val, ack: true}); + */ + } else if (action == 'countdown.configure') { + + data.params = { + duration: state.val, + start_now: false + }; + + this.setStateAsync(id, {val: state.val, ack: true}); // Confirm state change + + } + + // END special Widgets + this.buildRequest( 'device/apps/' + pack + '/widgets/' + widget + '/actions', null, 'POST', - { - id: action - } + data ); } } @@ -233,66 +329,115 @@ class LaMetric extends utils.Adapter { } } + /* + { + "priority": "[info|warning|critical]", + "icon_type": "[none|info|alert]", + "lifeTime": , + "model": { + "frames": [ + { + "icon": "", + "text": "" + }, + { + "icon": 298, + "text": "text" + }, + { + "icon": 120, + "goalData": { + "start": 0, + "current": 50, + "end": 100, + "unit": "%" + } + }, + { + "chartData": [ ] + } + ], + "sound": { + "category": "[alarms|notifications]", + "id": "", + "repeat": + }, + "cycles": + } + } + */ + onMessage(obj) { this.log.debug('received message ' + JSON.stringify(obj.message)); - if (obj && obj.message && obj.command === 'notification') { - - const notification = obj.message; + if (obj && obj.message) { const data = {}; - if (notification.priority) { - data.priority = notification.priority; // Optional - } + if (obj.command === 'notification') { - if (notification.iconType) { - data.icon_type = notification.iconType; // Optional - } + const notification = obj.message; - if (notification.lifeTime) { - data.lifetime = notification.lifeTime; // Optional - } + if (notification.priority) { + data.priority = notification.priority; // Optional + } - const dataModel = { - frames: [] - }; + if (notification.iconType) { + data.icon_type = notification.iconType; // Optional + } - // Always create an array to make frame handling easier - if (!Array.isArray(notification.text)) { - notification.text = [notification.text]; - } + if (notification.lifeTime) { + data.lifetime = notification.lifeTime; // Optional + } - for (let i = 0; i < notification.text.length; i++) { - if (notification.text[i] !== null) { - const frame = { - text: notification.text[i] - }; + const dataModel = { + frames: [] + }; - if (notification.icon) { - frame.icon = notification.icon; + // Always create an array to make frame handling easier + if (!Array.isArray(notification.text)) { + notification.text = [notification.text]; + } + + for (let i = 0; i < notification.text.length; i++) { + if (Array.isArray(notification.text[i])) { + const numberItems = notification.text[i].filter(item => (typeof item === 'number')); + + if (numberItems.length > 0) { + dataModel.frames.push({chartData: numberItems}); + } else { + this.log.warn('Chart frames should contain numbers (other items are ignored)'); + } + } else if (notification.text[i] !== null) { + const frame = { + text: notification.text[i] + }; + + if (notification.icon) { + frame.icon = notification.icon; + } + + dataModel.frames.push(frame); } + } - dataModel.frames.push(frame); + if (notification.sound) { + dataModel.sound = { + category: notification.sound.indexOf('alarm') > -1 ? 'alarms' : 'notifications', + id: notification.sound, + repeat: 1 + }; } - } - if (notification.sound) { - dataModel.sound = { - category: notification.sound.indexOf('alarm') > -1 ? 'alarms' : 'notifications', - id: notification.sound, - repeat: 1 - }; - } + if (notification.cycles) { + dataModel.cycles = notification.cycles; // Optional + } - if (notification.cycles) { - dataModel.cycles = notification.cycles; // Optional + data.model = dataModel; } - data.model = dataModel; - this.buildRequest( 'device/notifications', - content => { + (content, status) => { this.log.debug('Response: ' + JSON.stringify(content)); if (obj.callback) { if (content && content.success) { @@ -314,33 +459,43 @@ class LaMetric extends utils.Adapter { this.buildRequest( 'device', - content => { - this.setState('info.connection', true, true); - - this.setState('meta.name', {val: content.name, ack: true}); - this.setState('meta.serial', {val: content.serial_number, ack: true}); - this.setState('meta.version', {val: content.os_version, ack: true}); - this.setState('meta.model', {val: content.model, ack: true}); - this.setState('meta.mode', {val: content.mode, ack: true}); - - this.setState('meta.audio.volume', {val: content.audio.volume, ack: true}); - - this.setState('meta.bluetooth.available', {val: content.bluetooth.available, ack: true}); - this.setState('meta.bluetooth.name', {val: content.bluetooth.name, ack: true}); - this.setState('meta.bluetooth.active', {val: content.bluetooth.active, ack: true}); - this.setState('meta.bluetooth.discoverable', {val: content.bluetooth.discoverable, ack: true}); - this.setState('meta.bluetooth.pairable', {val: content.bluetooth.pairable, ack: true}); - this.setState('meta.bluetooth.address', {val: content.bluetooth.address, ack: true}); - - this.setState('meta.wifi.active', {val: content.wifi.active, ack: true}); - this.setState('meta.wifi.address', {val: content.wifi.address, ack: true}); - this.setState('meta.wifi.available', {val: content.wifi.available, ack: true}); - this.setState('meta.wifi.encryption', {val: content.wifi.encryption, ack: true}); - this.setState('meta.wifi.ssid', {val: content.wifi.essid, ack: true}); - this.setState('meta.wifi.ip', {val: content.wifi.ip, ack: true}); - this.setState('meta.wifi.mode', {val: content.wifi.mode, ack: true}); - this.setState('meta.wifi.netmask', {val: content.wifi.netmask, ack: true}); - this.setState('meta.wifi.strength', {val: content.wifi.strength, ack: true}); + (content, status) => { + this.setStateAsync('info.connection', true, true); + + if (this.isNewerVersion(content.os_version, this.supportedVersion)) { + this.log.warn('You should update your LaMetric Time - supported version of this adapter is ' + this.supportedVersion + ' (or later). Your current version is ' + content.os_version); + } + + this.setStateAsync('meta.name', {val: content.name, ack: true}); + this.setStateAsync('meta.serial', {val: content.serial_number, ack: true}); + this.setStateAsync('meta.version', {val: content.os_version, ack: true}); + this.setStateAsync('meta.model', {val: content.model, ack: true}); + this.setStateAsync('meta.mode', {val: content.mode, ack: true}); + + this.setStateAsync('meta.audio.volume', {val: content.audio.volume, ack: true}); + this.setStateAsync('meta.audio.volumeMin', {val: content.audio.volume_limit.min, ack: true}); + this.setStateAsync('meta.audio.volumeMax', {val: content.audio.volume_limit.max, ack: true}); + + this.setStateAsync('meta.bluetooth.available', {val: content.bluetooth.available, ack: true}); + this.setStateAsync('meta.bluetooth.name', {val: content.bluetooth.name, ack: true}); + this.setStateAsync('meta.bluetooth.active', {val: content.bluetooth.active, ack: true}); + this.setStateAsync('meta.bluetooth.discoverable', {val: content.bluetooth.discoverable, ack: true}); + this.setStateAsync('meta.bluetooth.pairable', {val: content.bluetooth.pairable, ack: true}); + this.setStateAsync('meta.bluetooth.address', {val: content.bluetooth.address, ack: true}); + + this.setStateAsync('meta.bluetooth.low_energy.active', {val: content.bluetooth.low_energy.active, ack: true}); + this.setStateAsync('meta.bluetooth.low_energy.advertising', {val: content.bluetooth.low_energy.advertising, ack: true}); + this.setStateAsync('meta.bluetooth.low_energy.connectable', {val: content.bluetooth.low_energy.connectable, ack: true}); + + this.setStateAsync('meta.wifi.active', {val: content.wifi.active, ack: true}); + this.setStateAsync('meta.wifi.address', {val: content.wifi.address, ack: true}); + this.setStateAsync('meta.wifi.available', {val: content.wifi.available, ack: true}); + this.setStateAsync('meta.wifi.encryption', {val: content.wifi.encryption, ack: true}); + this.setStateAsync('meta.wifi.ssid', {val: content.wifi.essid, ack: true}); + this.setStateAsync('meta.wifi.ip', {val: content.wifi.ip, ack: true}); + this.setStateAsync('meta.wifi.mode', {val: content.wifi.mode, ack: true}); + this.setStateAsync('meta.wifi.netmask', {val: content.wifi.netmask, ack: true}); + this.setStateAsync('meta.wifi.strength', {val: content.wifi.strength, ack: true}); }, 'GET', null @@ -348,20 +503,27 @@ class LaMetric extends utils.Adapter { this.buildRequest( 'device/display', - content => { - this.setState('meta.display.brightness', {val: content.brightness, ack: true}); - this.setState('meta.display.brightnessAuto', {val: content.brightness_mode === 'auto', ack: true}); - this.setState('meta.display.brightnessMode', {val: content.brightness_mode, ack: true}); - this.setState('meta.display.width', {val: content.width, ack: true}); - this.setState('meta.display.height', {val: content.height, ack: true}); - this.setState('meta.display.type', {val: content.type, ack: true}); - - this.setState('meta.display.screensaver.enabled', {val: content.screensaver.enabled, ack: true}); - this.setState('meta.display.screensaver.widget', {val: content.screensaver.widget, ack: true}); - this.setState('meta.display.screensaver.modes.timeBased.enabled', {val: content.screensaver.modes.time_based.enabled, ack: true}); - this.setState('meta.display.screensaver.modes.timeBased.startTime', {val: content.screensaver.modes.time_based.start_time, ack: true}); - this.setState('meta.display.screensaver.modes.timeBased.endTime', {val: content.screensaver.modes.time_based.end_time, ack: true}); - this.setState('meta.display.screensaver.modes.whenDark.enabled', {val: content.screensaver.modes.when_dark.enabled, ack: true}); + (content, status) => { + this.setStateAsync('meta.display.brightness', {val: content.brightness, ack: true}); + this.setStateAsync('meta.display.brightnessMin', {val: content.brightness_limit.min, ack: true}); + this.setStateAsync('meta.display.brightnessMax', {val: content.brightness_limit.max, ack: true}); + this.setStateAsync('meta.display.brightnessAuto', {val: content.brightness_mode === 'auto', ack: true}); + this.setStateAsync('meta.display.brightnessMode', {val: content.brightness_mode, ack: true}); + + this.setStateAsync('meta.display.width', {val: content.width, ack: true}); + this.setStateAsync('meta.display.height', {val: content.height, ack: true}); + this.setStateAsync('meta.display.type', {val: content.type, ack: true}); + + this.setStateAsync('meta.display.screensaver.enabled', {val: content.screensaver.enabled, ack: true}); + this.setStateAsync('meta.display.screensaver.widget', {val: content.screensaver.widget, ack: true}); + + this.setStateAsync('meta.display.screensaver.modes.timeBased.enabled', {val: content.screensaver.modes.time_based.enabled, ack: true}); + this.setStateAsync('meta.display.screensaver.modes.timeBased.startTime', {val: content.screensaver.modes.time_based.start_time, ack: true}); + this.setStateAsync('meta.display.screensaver.modes.timeBased.startTimeLocal', {val: content.screensaver.modes.time_based.local_start_time, ack: true}); + this.setStateAsync('meta.display.screensaver.modes.timeBased.endTime', {val: content.screensaver.modes.time_based.end_time, ack: true}); + this.setStateAsync('meta.display.screensaver.modes.timeBased.endTimeLocal', {val: content.screensaver.modes.time_based.local_end_time, ack: true}); + + this.setStateAsync('meta.display.screensaver.modes.whenDark.enabled', {val: content.screensaver.modes.when_dark.enabled, ack: true}); }, 'GET', null @@ -377,222 +539,689 @@ class LaMetric extends utils.Adapter { refreshApps() { this.buildRequest( 'device/apps', - content => { - const path = 'apps.'; + (content, status) => { + this.getChannelsOf( + 'apps', + async (err, states) => { + const appsAll = []; + const appsKeep = []; + + // Collect all apps + if (states) { + for (let i = 0; i < states.length; i++) { + const id = this.removeNamespace(states[i]._id); + + // Check if the state is a direct child (e.g. apps.08b8eac21074f8f7e5a29f2855ba8060) + if (id.split('.').length === 2) { + appsAll.push(id); + } + } + } + + const path = 'apps.'; + + // Create new app structure + for (const p of Object.keys(content)) { + const pack = content[p]; + + for (const uuid of Object.keys(pack.widgets)) { + const widget = pack.widgets[uuid]; + + appsKeep.push(path + uuid); + this.log.debug('App found (keep): ' + path + uuid); + + await this.setObjectNotExistsAsync(path + uuid, { + type: 'channel', + common: { + name: 'Widget ' + pack.package + '(' + pack.version + ')' + }, + native: {} + }); + + await this.setObjectNotExistsAsync(path + uuid + '.activate', { + type: 'state', + common: { + name: { + en: 'Activate', + de: 'Aktivieren', + ru: 'Активировать', + pt: 'Ativar', + nl: 'Activeren', + fr: 'Activer', + it: 'Attivare', + es: 'Activar', + pl: 'Aktywuj', + 'zh-cn': '启用' + }, + type: 'boolean', + role: 'button', + read: false, + write: true + }, + native: {} + }); + + await this.setObjectNotExistsAsync(path + uuid + '.index', { + type: 'state', + common: { + name: { + en: 'Index', + de: 'Index', + ru: 'Показатель', + pt: 'Índice', + nl: 'Inhoudsopgave', + fr: 'Indice', + it: 'Indice', + es: 'Índice', + pl: 'Indeks', + 'zh-cn': '指数' + }, + type: 'number', + role: 'value', + read: true, + write: false + }, + native: {} + }); + await this.setStateAsync(path + uuid + '.index', {val: widget.index, ack: true}); + + await this.setObjectNotExistsAsync(path + uuid + '.package', { + type: 'state', + common: { + name: { + en: 'Package', + de: 'Paket', + ru: 'Упаковка', + pt: 'Pacote', + nl: 'Pakket', + fr: 'Emballer', + it: 'Pacchetto', + es: 'Paquete', + pl: 'Pakiet', + 'zh-cn': '包裹' + }, + type: 'string', + role: 'value', + read: true, + write: false + }, + native: {} + }); + await this.setStateAsync(path + uuid + '.package', {val: pack.package, ack: true}); + + await this.setObjectNotExistsAsync(path + uuid + '.vendor', { + type: 'state', + common: { + name: { + en: 'Vendor', + de: 'Hersteller', + ru: 'Продавец', + pt: 'Fornecedor', + nl: 'Leverancier', + fr: 'Vendeur', + it: 'Venditore', + es: 'Vendedor', + pl: 'Sprzedawca', + 'zh-cn': '小贩' + }, + type: 'string', + role: 'value', + read: true, + write: false + }, + native: {} + }); + await this.setStateAsync(path + uuid + '.vendor', {val: pack.vendor, ack: true}); + + await this.setObjectNotExistsAsync(path + uuid + '.version', { + type: 'state', + common: { + name: { + en: 'Version', + de: 'Version', + ru: 'Версия', + pt: 'Versão', + nl: 'Versie', + fr: 'Version', + it: 'Versione', + es: 'Versión', + pl: 'Wersja', + 'zh-cn': '版本' + }, + type: 'string', + role: 'value', + read: true, + write: false + }, + native: {} + }); + await this.setStateAsync(path + uuid + '.version', {val: pack.version, ack: true}); + + // START special Widgets + + if (pack.package === 'com.lametric.clock') { + + await this.setObjectNotExistsAsync(path + uuid + '.clock', { + type: 'channel', + common: { + name: { + en: 'Clock', + de: 'Uhr', + ru: 'Часы', + pt: 'Relógio', + nl: 'Klok', + fr: 'Horloge', + it: 'Orologio', + es: 'Reloj', + pl: 'Zegar', + 'zh-cn': '钟' + } + }, + native: { + package: pack.package + } + }); + + await this.setObjectNotExistsAsync(path + uuid + '.clock.clockface', { + type: 'state', + common: { + name: { + en: 'Clockface (Base64)', + de: 'Zifferblatt (Base64)', + ru: 'Циферблат (Base64)', + pt: 'Face do relógio (Base64)', + nl: 'Wijzerplaat (Base64)', + fr: 'Cadran d\'horloge (Base64)', + it: 'Quadrante orologio (Base64)', + es: 'Esfera de reloj (Base64)', + pl: 'Tarcza zegara (Base64)', + 'zh-cn': '表盘 (Base64)' + }, + type: 'string', + role: 'value', + read: true, + write: true + }, + native: {} + }); + + /* + await this.setObjectNotExistsAsync(path + uuid + '.clock.alarm', { + type: 'channel', + common: { + name: { + en: 'Alarm', + de: 'Alarm', + ru: 'Тревога', + pt: 'Alarme', + nl: 'Alarm', + fr: 'Alarme', + it: 'Allarme', + es: 'Alarma', + pl: 'Alarm', + 'zh-cn': '警报' + } + }, + native: {} + }); + + await this.setObjectNotExistsAsync(path + uuid + '.clock.alarm.enabled', { + type: 'state', + common: { + name: { + en: 'Alarm Enabled', + de: 'Alarm aktiviert', + ru: 'Тревога включена', + pt: 'Alarme Habilitado', + nl: 'Alarm ingeschakeld', + fr: 'Alarme activée', + it: 'Allarme abilitato', + es: 'Alarma habilitada', + pl: 'Alarm włączony', + 'zh-cn': '警报已启用' + }, + type: 'boolean', + role: 'value', + read: true, + write: true + }, + native: {} + }); + + await this.setObjectNotExistsAsync(path + uuid + '.clock.alarm.time', { + type: 'state', + common: { + name: { + en: 'Alarm Time', + de: 'Weckzeit', + ru: 'Время будильника', + pt: 'Hora do alarme', + nl: 'Alarm tijd', + fr: 'Heure de l\'alarme', + it: 'Ora della sveglia', + es: 'Hora de alarma', + pl: 'Czas alarmu', + 'zh-cn': '闹钟时间' + }, + type: 'string', + role: 'value', + read: true, + write: true + }, + native: {} + }); + + await this.setObjectNotExistsAsync(path + uuid + '.clock.alarm.wake_with_radio', { + type: 'state', + common: { + name: { + en: 'with Radio', + de: 'mit Radio', + ru: 'с радио', + pt: 'com rádio', + nl: 'met radio', + fr: 'avec radio', + it: 'con Radio', + es: 'con radio', + pl: 'z radiem', + 'zh-cn': '带收音机' + }, + type: 'boolean', + role: 'value', + read: true, + write: true + }, + native: {} + }); + */ + + } else if (pack.package === 'com.lametric.radio') { + + await this.setObjectNotExistsAsync(path + uuid + '.radio', { + type: 'channel', + common: { + name: { + en: 'Radio', + de: 'Radio', + ru: 'Радио', + pt: 'Rádio', + nl: 'Radio', + fr: 'Radio', + it: 'Radio', + es: 'Radio', + pl: 'Radio', + 'zh-cn': '收音机' + } + }, + native: { + package: pack.package + } + }); + + await this.setObjectNotExistsAsync(path + uuid + '.radio.play', { + type: 'state', + common: { + name: { + en: 'Play Radio', + de: 'Radio starten', + ru: 'Слушать радио', + pt: 'Tocar rádio', + nl: 'Radio afspelen', + fr: 'Écouter la radio', + it: 'Riproduci radio', + es: 'Reproducir radio', + pl: 'Włącz radio', + 'zh-cn': '播放广播' + }, + type: 'boolean', + role: 'button', + read: false, + write: true + }, + native: {} + }); + + await this.setObjectNotExistsAsync(path + uuid + '.radio.stop', { + type: 'state', + common: { + name: { + en: 'Stop Radio', + de: 'Radio stoppen', + ru: 'Остановить радио', + pt: 'Parar Rádio', + nl: 'Radio stoppen', + fr: 'Arrêter la radio', + it: 'Ferma la radio', + es: 'Detener radio', + pl: 'Zatrzymaj radio', + 'zh-cn': '停止广播' + }, + type: 'boolean', + role: 'button', + read: false, + write: true + }, + native: {} + }); + + await this.setObjectNotExistsAsync(path + uuid + '.radio.next', { + type: 'state', + common: { + name: { + en: 'Next Radio', + de: 'Nächstes Radio', + ru: 'Следующее радио', + pt: 'Next Radio', + nl: 'volgende radio', + fr: 'Radio suivante', + it: 'Prossima Radio', + es: 'Siguiente radio', + pl: 'Następne radio', + 'zh-cn': '下一个电台' + }, + type: 'boolean', + role: 'button', + read: false, + write: true + }, + native: {} + }); + + await this.setObjectNotExistsAsync(path + uuid + '.radio.prev', { + type: 'state', + common: { + name: { + en: 'Previous Radio', + de: 'Vorheriges Radio', + ru: 'Предыдущее радио', + pt: 'Rádio Anterior', + nl: 'Vorige radio', + fr: 'Radio précédente', + it: 'Radio precedente', + es: 'Radio anterior', + pl: 'Poprzednie radio', + 'zh-cn': '以前的电台' + }, + type: 'boolean', + role: 'button', + read: false, + write: true + }, + native: {} + }); + + } else if (pack.package === 'com.lametric.stopwatch') { + + await this.setObjectNotExistsAsync(path + uuid + '.stopwatch', { + type: 'channel', + common: { + name: { + en: 'Stopwatch', + de: 'Stoppuhr', + ru: 'Секундомер', + pt: 'Cronômetro', + nl: 'Stopwatch', + fr: 'Chronomètre', + it: 'Cronometro', + es: 'Cronógrafo', + pl: 'Stoper', + 'zh-cn': '跑表' + } + }, + native: { + package: pack.package + } + }); + + await this.setObjectNotExistsAsync(path + uuid + '.stopwatch.start', { + type: 'state', + common: { + name: { + en: 'Start Stopwatch', + de: 'Stoppuhr starten', + ru: 'Запустить секундомер', + pt: 'Iniciar cronômetro', + nl: 'Stopwatch starten', + fr: 'Démarrer le chronomètre', + it: 'Avvia cronometro', + es: 'Iniciar cronómetro', + pl: 'Uruchom stoper', + 'zh-cn': '启动秒表' + }, + type: 'boolean', + role: 'button', + read: false, + write: true + }, + native: {} + }); + + await this.setObjectNotExistsAsync(path + uuid + '.stopwatch.pause', { + type: 'state', + common: { + name: { + en: 'Pause Stopwatch', + de: 'Stoppuhr pausieren', + ru: 'Пауза секундомера', + pt: 'Pausar cronômetro', + nl: 'Stopwatch pauzeren', + fr: 'Suspendre le chronomètre', + it: 'Metti in pausa il cronometro', + es: 'Pausar cronómetro', + pl: 'Wstrzymaj stoper', + 'zh-cn': '暂停秒表' + }, + type: 'boolean', + role: 'button', + read: false, + write: true + }, + native: {} + }); + + await this.setObjectNotExistsAsync(path + uuid + '.stopwatch.reset', { + type: 'state', + common: { + name: { + en: 'Reset Stopwatch', + de: 'Stoppuhr zurücksetzen', + ru: 'Сбросить секундомер', + pt: 'Reiniciar cronômetro', + nl: 'Stopwatch resetten', + fr: 'Réinitialiser le chronomètre', + it: 'Ripristina cronometro', + es: 'Restablecer cronómetro', + pl: 'Zresetuj stoper', + 'zh-cn': '重置秒表' + }, + type: 'boolean', + role: 'button', + read: false, + write: true + }, + native: {} + }); + + } else if (pack.package === 'com.lametric.weather') { + + await this.setObjectNotExistsAsync(path + uuid + '.weather', { + type: 'channel', + common: { + name: { + en: 'Weather', + de: 'Wetter', + ru: 'Погода', + pt: 'Clima', + nl: 'Weer', + fr: 'La\'météo', + it: 'Tempo\'metereologico', + es: 'Clima', + pl: 'Pogoda', + 'zh-cn': '天气' + } + }, + native: { + package: pack.package + } + }); + + await this.setObjectNotExistsAsync(path + uuid + '.weather.forecast', { + type: 'state', + common: { + name: { + en: 'Weather Forecast', + de: 'Wettervorhersage', + ru: 'Прогноз погоды', + pt: 'Previsão do tempo', + nl: 'Weervoorspelling', + fr: 'Prévisions météorologiques', + it: 'Previsioni del tempo', + es: 'Pronóstico del tiempo', + pl: 'Prognoza pogody', + 'zh-cn': '天气预报' + }, + type: 'boolean', + role: 'button', + read: false, + write: true + }, + native: {} + }); + + } else if (pack.package === 'com.lametric.countdown') { + + await this.setObjectNotExistsAsync(path + uuid + '.countdown', { + type: 'channel', + common: { + name: { + en: 'Countdown', + de: 'Countdown', + ru: 'Обратный отсчет', + pt: 'Contagem regressiva', + nl: 'Aftellen', + fr: 'Compte à rebours', + it: 'Conto alla rovescia', + es: 'cuenta regresiva', + pl: 'Odliczanie', + 'zh-cn': '倒数' + } + }, + native: { + package: pack.package + } + }); + + await this.setObjectNotExistsAsync(path + uuid + '.countdown.configure', { + type: 'state', + common: { + name: { + en: 'Countdown Time', + de: 'Countdown-Zeit', + ru: 'Обратный отсчет', + pt: 'Tempo de contagem regressiva', + nl: 'Afteltijd', + fr: 'Temps de compte à rebours', + it: 'Conto alla rovescia', + es: 'Tiempo de cuenta regresiva', + pl: 'Czas odliczania', + 'zh-cn': '倒计时时间' + }, + type: 'number', + role: 'value', + read: true, + write: true + }, + native: {} + }); + + await this.setObjectNotExistsAsync(path + uuid + '.countdown.start', { + type: 'state', + common: { + name: { + en: 'Countdown Start', + de: 'Countdown-Start', + ru: 'Обратный отсчет', + pt: 'Início da contagem regressiva', + nl: 'Aftellen starten', + fr: 'Début du compte à rebours', + it: 'Inizio conto alla rovescia', + es: 'Inicio de la cuenta regresiva', + pl: 'Rozpoczęcie odliczania', + 'zh-cn': '倒计时开始' + }, + type: 'boolean', + role: 'button', + read: false, + write: true + }, + native: {} + }); + + await this.setObjectNotExistsAsync(path + uuid + '.countdown.pause', { + type: 'state', + common: { + name: { + en: 'Countdown Pause', + de: 'Countdown-Pause', + ru: 'Обратный отсчет Пауза', + pt: 'Pausa de contagem regressiva', + nl: 'Aftellen pauze', + fr: 'Pause du compte à rebours', + it: 'Pausa conto alla rovescia', + es: 'Pausa de cuenta regresiva', + pl: 'Pauza odliczania', + 'zh-cn': '倒计时暂停' + }, + type: 'boolean', + role: 'button', + read: false, + write: true + }, + native: {} + }); + + await this.setObjectNotExistsAsync(path + uuid + '.countdown.reset', { + type: 'state', + common: { + name: { + en: 'Countdown Reset', + de: 'Countdown-Reset', + ru: 'Обратный отсчет Сброс', + pt: 'Reinicialização da contagem regressiva', + nl: 'Aftellen resetten', + fr: 'Réinitialisation du compte à rebours', + it: 'Ripristino conto alla rovescia', + es: 'Reinicio de la cuenta regresiva', + pl: 'Resetowanie odliczania', + 'zh-cn': '倒计时重置' + }, + type: 'boolean', + role: 'button', + read: false, + write: true + }, + native: {} + }); - Object.keys(content).forEach(p => { - const pack = content[p]; + } - Object.keys(pack.widgets).forEach(uuid => { - const widget = pack.widgets[uuid]; + // END special Widgets + } + } - this.setObjectNotExists(path + uuid, { - type: 'channel', - common: { - name: 'Widget ' + pack.package + '(' + pack.version + ')', - role: '' - }, - native: {} - }); - - this.setObjectNotExists(path + uuid + '.activate', { - type: 'state', - common: { - name: 'Activate', - type: 'boolean', - role: 'button', - read: false, - write: true - }, - native: {} - }); - - this.setObjectNotExists(path + uuid + '.index', { - type: 'state', - common: { - name: 'Index', - type: 'number', - role: 'value', - read: true, - write: false - }, - native: {} - }); - this.setState(path + uuid + '.index', {val: widget.index, ack: true}); - - this.setObjectNotExists(path + uuid + '.package', { - type: 'state', - common: { - name: 'Package', - type: 'string', - role: 'value', - read: true, - write: false - }, - native: {} - }); - this.setState(path + uuid + '.package', {val: pack.package, ack: true}); - - this.setObjectNotExists(path + uuid + '.vendor', { - type: 'state', - common: { - name: 'Vendor', - type: 'string', - role: 'value', - read: true, - write: false - }, - native: {} - }); - this.setState(path + uuid + '.vendor', {val: pack.vendor, ack: true}); - - this.setObjectNotExists(path + uuid + '.version', { - type: 'state', - common: { - name: 'Vendor', - type: 'string', - role: 'value', - read: true, - write: false - }, - native: {} - }); - this.setState(path + uuid + '.version', {val: pack.version, ack: true}); - - // START special Widgets - if (pack.package === 'com.lametric.radio') { - this.setObjectNotExists(path + uuid + '.radio', { - type: 'channel', - common: { - name: pack.package, - role: '' - }, - native: {} - }); - - this.setObjectNotExists(path + uuid + '.radio.play', { - type: 'state', - common: { - name: 'Play Radio', - type: 'boolean', - role: 'button', - read: false, - write: true - }, - native: {} - }); - - this.setObjectNotExists(path + uuid + '.radio.stop', { - type: 'state', - common: { - name: 'Stop Radio', - type: 'boolean', - role: 'button', - read: false, - write: true - }, - native: {} - }); - - this.setObjectNotExists(path + uuid + '.radio.next', { - type: 'state', - common: { - name: 'Next Radio', - type: 'boolean', - role: 'button', - read: false, - write: true - }, - native: {} - }); - - this.setObjectNotExists(path + uuid + '.radio.prev', { - type: 'state', - common: { - name: 'Prev Radio', - type: 'boolean', - role: 'button', - read: false, - write: true - }, - native: {} - }); - - } else if (pack.package === 'com.lametric.stopwatch') { - - this.setObjectNotExists(path + uuid + '.stopwatch', { - type: 'channel', - common: { - name: pack.package, - role: '' - }, - native: {} - }); - - this.setObjectNotExists(path + uuid + '.stopwatch.start', { - type: 'state', - common: { - name: 'Start Stopwatch', - type: 'boolean', - role: 'button', - read: false, - write: true - }, - native: {} - }); - - this.setObjectNotExists(path + uuid + '.stopwatch.pause', { - type: 'state', - common: { - name: 'Pause Stopwatch', - type: 'boolean', - role: 'button', - read: false, - write: true - }, - native: {} - }); - - this.setObjectNotExists(path + uuid + '.stopwatch.reset', { - type: 'state', - common: { - name: 'Reset Stopwatch', - type: 'boolean', - role: 'button', - read: false, - write: true - }, - native: {} - }); - - } else if (pack.package === 'com.lametric.weather') { - - this.setObjectNotExists(path + uuid + '.weather', { - type: 'channel', - common: { - name: pack.package, - role: '' - }, - native: {} - }); - - this.setObjectNotExists(path + uuid + '.weather.forecast', { - type: 'state', - common: { - name: 'Weather Forecast', - type: 'boolean', - role: 'button', - read: false, - write: true - }, - native: {} - }); + // Delete non existent apps + for (let i = 0; i < appsAll.length; i++) { + const id = appsAll[i]; + if (appsKeep.indexOf(id) === -1) { + this.delObject(id, {recursive: true}, () => { + this.log.debug('App deleted: ' + id); + }); + } } + } + ); - // END special Widgets - }); - }); }, 'GET', null @@ -605,48 +1234,191 @@ class LaMetric extends utils.Adapter { }, 60000 * 60); } - buildRequest(service, callback, method, data) { - const self = this; + async buildRequest(service, callback, method, data) { + const url = '/api/v2/' + service; if (this.config.lametricIp && this.config.lametricToken) { - const url = 'http://' + this.config.lametricIp + ':8080/api/v2/' + service; - - this.log.debug('sending "' + method + '" request to "' + url + '" with data: ' + JSON.stringify(data)); - - request( - { - url: url, - method: method, - json: data ? data : true, - auth: { - user: 'dev', - pass: this.config.lametricToken, - sendImmediately: true - } + const prefix = this.config.useHttps ? 'https' : 'http'; + const port = this.config.useHttps ? 4343 : 8080; + + this.log.debug('sending "' + method + '" request to "' + url + '" on port ' + port + ' (' + prefix + ') with data: ' + JSON.stringify(data)); + + axios({ + method: method, + data: data, + baseURL: prefix + '://' + this.config.lametricIp + ':' + port, + url: url, + timeout: 3000, + responseType: 'json', + auth: { + username: 'dev', + password: this.config.lametricToken + }, + validateStatus: function (status) { + return [200, 201].indexOf(status) > -1; }, - (error, response, content) => { - if (response) { - // Logging - self.log.debug('received data (' + response.statusCode + '): ' + JSON.stringify(content)); + httpsAgent: new https.Agent( + { + rejectUnauthorized: false } + ) + }).then( + (response) => { + this.log.debug('received ' + response.status + ' response from ' + url + ' with content: ' + JSON.stringify(response.data)); - if (!error && (response.statusCode === 200 || response.statusCode === 201)) { - if (callback && typeof callback === 'function') { - callback(content); - } - } else if (error) { - self.log.error(error); + if (response && callback && typeof callback === 'function') { + callback(response.data, response.status); + } + } + ).catch( + (error) => { + if (error.response) { + // The request was made and the server responded with a status code + + this.log.warn('received error ' + error.response.status + ' response from ' + url + ' with content: ' + JSON.stringify(error.response.data)); + } else if (error.request) { + // The request was made but no response was received + // `error.request` is an instance of XMLHttpRequest in the browser and an instance of + // http.ClientRequest in node.js + this.log.info(error.message); + + this.setStateAsync('info.connection', false, true); } else { - self.log.error('Status Code: ' + response.statusCode + ' / Content: ' + JSON.stringify(content)); + // Something happened in setting up the request that triggered an Error + this.log.error(error.message); + + this.setStateAsync('info.connection', false, true); } } ); } } + async collectMyDataDiyForeignStates(frames) { + this.log.debug('My Data (DIY) collecting states'); + + const foreignStates = []; + + // Collect all IDs in texts + frames.forEach(f => { + f.text.replace( + this.myDataDiyRegex, + (m, id) => { + if (foreignStates.indexOf(id) === -1) { + this.log.debug('My Data (DIY) found dynamic state in text: ' + id); + foreignStates.push(id); + } + } + ); + + f.icon.replace( + this.myDataDiyRegex, + (m, id) => { + if (foreignStates.indexOf(id) === -1) { + this.log.debug('My Data (DIY) found dynamic state in icon: ' + id); + foreignStates.push(id); + } + } + ); + }); + + this.log.debug('My Data (DIY) found ' + foreignStates.length + ' dynamic states'); + + Promise.all( + foreignStates.map( + async (id) => { + this.log.debug('My Data (DIY) subscribed to state: ' + id); + this.subscribeForeignStates(id); + + const state = await this.getForeignStateAsync(id); + + return new Promise((resolve) => { + if (state) { + this.log.debug('My Data (DIY) received value "' + state.val + '" of state: ' + id); + resolve( + { + id: id, + val: state.val + } + ); + } else { + this.log.warn('Unable to get value of state: ' + id); + resolve( + { + id: id, + val: '' + } + ); + } + }); + } + ) + ).then(data => { + this.myDataDiyForeignStates = data; + + this.log.debug('My Data (DIY) found foreign states: ' + JSON.stringify(this.myDataDiyForeignStates)); + this.refreshMyDataDiy(); + }); + } + + async refreshMyDataDiy() { + this.log.debug('My Data (DIY) refresh output state with config ' + JSON.stringify(this.config.mydatadiy)); + + const clonedFrames = JSON.parse(JSON.stringify(this.config.mydatadiy)); // TODO: Better way to clone?! + const newFrames = clonedFrames.map(f => { + let replacedText = f.text.replace( + this.myDataDiyRegex, + (m, id) => { + this.log.debug('My Data (DIY) replacing {' + id + '} in frame text'); + + return this.myDataDiyForeignStates.filter(item => { return item.id === id; })[0].val; + } + ); + + if (Object.prototype.hasOwnProperty.call(f, 'hideif')) { + if (f.hideif && f.hideif == replacedText) { + this.log.debug('My Data (DIY) will remove frame because text matches configured hideif: "' + f.hideif + '"'); + replacedText = ''; // Will be removed in filter function (see below) + } + } + + let newObj = { + text: replacedText.trim() + }; + + if (f.icon) { + newObj.icon = f.icon.replace( + this.myDataDiyRegex, + (m, id) => { + this.log.debug('My Data (DIY) replacing {' + id + '} in frame icon'); + + return this.myDataDiyForeignStates.filter(item => { return item.id === id; })[0].val; + } + ); + } + + return newObj; + }).filter(f => { + if (f.text.length == 0) { + this.log.debug('My Data (DIY) removed frame'); + } + return f.text.length > 0; + }); + + this.log.debug('My Data (DIY) frame update to ' + JSON.stringify(newFrames)); + + this.setStateAsync('mydatadiy.obj', {val: JSON.stringify({'frames': newFrames}), ack: true}); + } + + removeNamespace(id) { + const re = new RegExp(this.namespace + '*\.', 'g'); + return id.replace(re, ''); + } + onUnload(callback) { try { - this.setState('info.connection', false, true); + this.setStateAsync('info.connection', false, true); + this.setStateAsync('mydatadiy.obj', {val: JSON.stringify({'frames': [{text: 'Adapter stopped', icon: 'a9335'}]}), ack: true}); if (this.refreshStateTimeout) { this.log.debug('clearing refresh state timeout'); @@ -663,6 +1435,18 @@ class LaMetric extends utils.Adapter { callback(); } } + + isNewerVersion(oldVer, newVer) { + const oldParts = oldVer.split('.'); + const newParts = newVer.split('.'); + for (var i = 0; i < newParts.length; i++) { + const a = ~~newParts[i]; // parse int + const b = ~~oldParts[i]; // parse int + if (a > b) return true; + if (a < b) return false; + } + return false; + } } // @ts-ignore parent is a valid property on module @@ -675,4 +1459,4 @@ if (module.parent) { } else { // otherwise start the instance directly new LaMetric(); -} \ No newline at end of file +} diff --git a/package-lock.json b/package-lock.json index 9e41200..df6f9e6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,99 +1,591 @@ { "name": "iobroker.lametric", - "version": "0.0.8", + "version": "1.5.2", "lockfileVersion": 1, "requires": true, "dependencies": { - "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "@alcalzone/pak": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@alcalzone/pak/-/pak-0.7.0.tgz", + "integrity": "sha512-k5cKJ9/19djy6m2klchQp9JyXUQclGyarI5qz+QFeEvHhbN4ewQ41Ty8ToCx0WRN1SJBa9gLzoXMWb1/UH2HHA==", "dev": true, "requires": { - "@babel/highlight": "^7.8.3" + "axios": "^0.21.1", + "execa": "^5.0.0", + "fs-extra": "^9.1.0" + }, + "dependencies": { + "axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dev": true, + "requires": { + "follow-redirects": "^1.14.0" + } + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } } }, - "@babel/helper-validator-identifier": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", - "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==", - "dev": true + "@alcalzone/release-script": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@alcalzone/release-script/-/release-script-3.4.2.tgz", + "integrity": "sha512-SpQhbKu2lUDUaneRu6+yc2PSnH26VIyyry/E6ZAUDSBE07nySB5pz0g2UAHlLPrX4qwF9ABfAIi/QXCCd22P9w==", + "dev": true, + "requires": { + "@alcalzone/release-script-core": "3.4.1", + "@alcalzone/release-script-plugin-changelog": "3.4.1", + "@alcalzone/release-script-plugin-exec": "3.4.1", + "@alcalzone/release-script-plugin-git": "3.4.1", + "@alcalzone/release-script-plugin-package": "3.4.2", + "@alcalzone/release-script-plugin-version": "3.4.1", + "alcalzone-shared": "^4.0.0", + "axios": "^0.21.4", + "colors": "^1.4.0", + "enquirer": "^2.3.6", + "fs-extra": "^10.0.0", + "semver": "^7.3.5", + "source-map-support": "^0.5.20", + "yargs": "^17.1.1" + }, + "dependencies": { + "axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dev": true, + "requires": { + "follow-redirects": "^1.14.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yargs": { + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.0.tgz", + "integrity": "sha512-GQl1pWyDoGptFPJx9b9L6kmR33TGusZvXIZUT+BOz9f7X2L94oeAskFYLEg/FkhV06zZPBYLvLZRWeYId29lew==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + } + }, + "yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", + "dev": true + } + } + }, + "@alcalzone/release-script-core": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@alcalzone/release-script-core/-/release-script-core-3.4.1.tgz", + "integrity": "sha512-UMY95dCg5cAJzbOcZf+Jsw2hC73aUiucSeiT9af7RFeQckJfG9leFT0ZVH0stLhFofHll19EY5IH9ZLvdkMe4w==", + "dev": true, + "requires": { + "execa": "^5.1.1" + } + }, + "@alcalzone/release-script-plugin-changelog": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@alcalzone/release-script-plugin-changelog/-/release-script-plugin-changelog-3.4.1.tgz", + "integrity": "sha512-FRi6eB67mGwT2hX/yWANpvN46BF1V5sblhitQMAZjUf9TmjxElYLXv/v9dVFCHHGPQWkQz+3WNFQrQL9YFAqNQ==", + "dev": true, + "requires": { + "@alcalzone/release-script-core": "3.4.1", + "alcalzone-shared": "^4.0.0" + } + }, + "@alcalzone/release-script-plugin-exec": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@alcalzone/release-script-plugin-exec/-/release-script-plugin-exec-3.4.1.tgz", + "integrity": "sha512-mCesHN35hq6DkziYBGQDPn2T8BxXU0Yp28J3H4RnO21OcbMffRGfJ/YFJiQ9lZPekc1xqOvNZsLxzJNLmWPyPQ==", + "dev": true, + "requires": { + "@alcalzone/release-script-core": "3.4.1", + "alcalzone-shared": "^4.0.0" + } + }, + "@alcalzone/release-script-plugin-git": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@alcalzone/release-script-plugin-git/-/release-script-plugin-git-3.4.1.tgz", + "integrity": "sha512-9M3OsFR+ESZM3/Z2E0p+zfYVjB0CXyinSFo0YVBkyGEO3ix1cdWNC1W8YzBh/A1CQS09rXNi6apudkHJDPlsyA==", + "dev": true, + "requires": { + "@alcalzone/release-script-core": "3.4.1", + "fs-extra": "^10.0.0" + } + }, + "@alcalzone/release-script-plugin-iobroker": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@alcalzone/release-script-plugin-iobroker/-/release-script-plugin-iobroker-3.4.1.tgz", + "integrity": "sha512-LmaO1/6j4ocKmfg8AZpnwG+nWKEsHaEJtObPMPhv/BupxXTF/FRUP6WFwbY84in38Em6sxKgDl+hLIqOWAMdCg==", + "dev": true, + "requires": { + "@alcalzone/release-script-core": "3.4.1", + "alcalzone-shared": "^4.0.0", + "axios": "^0.21.4" + }, + "dependencies": { + "axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dev": true, + "requires": { + "follow-redirects": "^1.14.0" + } + } + } + }, + "@alcalzone/release-script-plugin-license": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@alcalzone/release-script-plugin-license/-/release-script-plugin-license-3.4.1.tgz", + "integrity": "sha512-e5E/BLH8Jrjk7SSR08BvK+t+Y5acY4zBy5Li3/kLt3eYA/md8mXoOu83KHbWVxHzXvQEnpAPdkIeKSMmqf9gqg==", + "dev": true, + "requires": { + "@alcalzone/release-script-core": "3.4.1", + "fs-extra": "^10.0.0", + "tiny-glob": "^0.2.9" + } + }, + "@alcalzone/release-script-plugin-package": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@alcalzone/release-script-plugin-package/-/release-script-plugin-package-3.4.2.tgz", + "integrity": "sha512-NIcVB9QjNHfbDQtczcNqnks6PhR7eQG5WvmOvuS9XQd5f2++ymi8WO0zTLKuoS3TwIjWP2B9Ae9LxqdPa745EA==", + "dev": true, + "requires": { + "@alcalzone/pak": "^0.7.0", + "@alcalzone/release-script-core": "3.4.1", + "alcalzone-shared": "^4.0.0", + "semver": "^7.3.5" + } }, - "@babel/highlight": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", - "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", + "@alcalzone/release-script-plugin-version": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@alcalzone/release-script-plugin-version/-/release-script-plugin-version-3.4.1.tgz", + "integrity": "sha512-a2QMoo4KyeHreSzkJCNeI7ETldC/W1derfrnfV5brEEsCl+TXTySGQl9Sz+dFshFo3QvOAkTclRD/ZxGItUtcQ==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.9.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@alcalzone/release-script-core": "3.4.1", + "alcalzone-shared": "^4.0.0", + "semver": "^7.3.5", + "tiny-glob": "^0.2.9" } }, + "@eslint/eslintrc": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", + "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.2.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", + "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, "@iobroker/adapter-core": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@iobroker/adapter-core/-/adapter-core-2.4.0.tgz", - "integrity": "sha512-Qi2JRPKpOHtHonQlJX8UpK6OZg5mGXtMQC7k71BIkPDNoVI0QWp1vhqcuZ1Rjos1VQb/6oNIkvG2iivTh8slnQ==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@iobroker/adapter-core/-/adapter-core-2.5.1.tgz", + "integrity": "sha512-ozUQVN8dI2a7+ALmI4GxvTIZ/qoolotd1W5uSYagMuuKYbQ8ICBWO73dRT4CM/PfuVJ4wmgKllYG+IjgdN+bUw==", "requires": { - "@types/iobroker": "^3.0.6" + "@types/iobroker": "^3.3.4" } }, "@iobroker/testing": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@iobroker/testing/-/testing-2.2.0.tgz", - "integrity": "sha512-WlOdRkxz/mDkQOu21xP2MZojoBBdrNE/Lb+zny+rT+SpaJ2dnyL6alOLURTMqJQeSwPRrQmlCg9b7HohituoSw==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@iobroker/testing/-/testing-2.5.2.tgz", + "integrity": "sha512-sPiX1UANjq2SdqCMQQCYMmTc6OoH9ErJf0F59KoYjJdunULZzmteIgdCpg10U9BVHHBqg1rWOxj/OwcyjpF6Pw==", "dev": true, "requires": { - "alcalzone-shared": "~2.2.0", - "chai": "^4.2.0", + "alcalzone-shared": "~4.0.0", + "chai": "^4.3.4", "chai-as-promised": "^7.1.1", - "debug": "^4.1.1", - "fs-extra": "^8.0.0", - "mocha": "^7.0.0", - "sinon": "^8.0.2", - "sinon-chai": "^3.3.0" + "debug": "^4.3.2", + "fs-extra": "^10.0.0", + "mocha": "^9.1.1", + "sinon": "^11.1.2", + "sinon-chai": "^3.7.0" }, "dependencies": { + "@sinonjs/fake-timers": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", + "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@sinonjs/samsam": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.0.2.tgz", + "integrity": "sha512-jxPRPp9n93ci7b8hMfJOFDPRLFYadN6FSpeROFTR4UNF4i5b+EK6m4QXPO46BDhFgRy1JuS87zAnFOzCUwMJcQ==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.6.0", + "lodash.get": "^4.4.2", + "type-detect": "^4.0.8" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "mocha": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.2.tgz", + "integrity": "sha512-ta3LtJ+63RIBP03VBjMGtSqbe6cWXRejF9SyM9Zyli1CKZJZ+vfCTj3oW24V7wAphMJdpOFLoMI3hjJ1LWbs0w==", + "dev": true, + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.2", + "debug": "4.3.2", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.7", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.1.25", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.1.5", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "nanoid": { + "version": "3.1.25", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", + "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", "dev": true + }, + "nise": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.0.tgz", + "integrity": "sha512-W5WlHu+wvo3PaKLsJJkgPup2LrsXCcm7AWwyNZkUnn5rwPkuPBi3Iwk5SQtN0mv+K65k7nKKjwNQ30wg3wLAQQ==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0", + "@sinonjs/fake-timers": "^7.0.4", + "@sinonjs/text-encoding": "^0.7.1", + "just-extend": "^4.0.2", + "path-to-regexp": "^1.7.0" + } + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "sinon": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-11.1.2.tgz", + "integrity": "sha512-59237HChms4kg7/sXhiRcUzdSkKuydDeTiamT/jesUVHshBgL8XAmhgFo0GfK6RruMDM/iRSij1EybmMog9cJw==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.8.3", + "@sinonjs/fake-timers": "^7.1.2", + "@sinonjs/samsam": "^6.0.2", + "diff": "^5.0.0", + "nise": "^5.1.0", + "supports-color": "^7.2.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "workerpool": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", + "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } } } }, "@sinonjs/commons": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.7.2.tgz", - "integrity": "sha512-+DUO6pnp3udV/v2VfUWgaY5BIE1IfT7lLfeDzPVeMT1XKkaAp9LgSI9x5RtrFQoZ9Oi0PgXQQHPaoKu7dCjVxw==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", "dev": true, "requires": { "type-detect": "4.0.8" } }, - "@sinonjs/formatio": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-4.0.1.tgz", - "integrity": "sha512-asIdlLFrla/WZybhm0C8eEzaDNNrzymiTqHMeJl6zPW2881l3uuVRpm0QlRQEjqYWv6CcKMGYME3LbrLJsORBw==", + "@sinonjs/fake-timers": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", + "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", "dev": true, "requires": { - "@sinonjs/commons": "^1", - "@sinonjs/samsam": "^4.2.0" + "@sinonjs/commons": "^1.7.0" } }, "@sinonjs/samsam": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-4.2.2.tgz", - "integrity": "sha512-z9o4LZUzSD9Hl22zV38aXNykgFeVj8acqfFabCY6FY83n/6s/XwNJyYYldz6/9lBJanpno9h+oL6HTISkviweA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.0.2.tgz", + "integrity": "sha512-jxPRPp9n93ci7b8hMfJOFDPRLFYadN6FSpeROFTR4UNF4i5b+EK6m4QXPO46BDhFgRy1JuS87zAnFOzCUwMJcQ==", "dev": true, "requires": { "@sinonjs/commons": "^1.6.0", @@ -108,47 +600,40 @@ "dev": true }, "@types/chai": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.11.tgz", - "integrity": "sha512-t7uW6eFafjO+qJ3BIV2gGUyZs27egcNRkUdalkud+Qa3+kg//f129iuOFivHDXQ+vnU3fDXuwgv0cqMCbcE8sw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.0.tgz", + "integrity": "sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==", "dev": true }, "@types/chai-as-promised": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.2.tgz", - "integrity": "sha512-PO2gcfR3Oxa+u0QvECLe1xKXOqYTzCmWf0FhLhjREoW3fPAVamjihL7v1MOVLJLsnAMdLcjkfrs01yvDMwVK4Q==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.4.tgz", + "integrity": "sha512-1y3L1cHePcIm5vXkh1DSGf/zQq5n5xDKG1fpCvf18+uOkpce0Z1ozNFPkyWsVswK7ntN1sZBw3oU6gmN+pDUcA==", "dev": true, "requires": { "@types/chai": "*" } }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", - "dev": true - }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", + "@types/expect": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz", + "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==", "dev": true }, "@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==", "dev": true, "requires": { - "@types/events": "*", "@types/minimatch": "*", "@types/node": "*" } }, "@types/glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha512-RHv6ZQjcTncXo3thYZrsbAVwoy4vSKosSWhuhuQxLOTv74OJuFQxXkmUuZCr3q9uNBEVCvIzmZL/FeRNbHZGUg==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@types/glob-stream/-/glob-stream-6.1.1.tgz", + "integrity": "sha512-AGOUTsTdbPkRS0qDeyeS+6KypmfVpbT5j23SN8UPG63qjKXNKjXn6V9wZUr8Fin0m9l8oGYaPK8b2WUMF8xI1A==", "dev": true, "requires": { "@types/glob": "*", @@ -156,40 +641,40 @@ } }, "@types/gulp": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/gulp/-/gulp-4.0.6.tgz", - "integrity": "sha512-0E8/iV/7FKWyQWSmi7jnUvgXXgaw+pfAzEB06Xu+l0iXVJppLbpOye5z7E2klw5akXd+8kPtYuk65YBcZPM4ow==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/gulp/-/gulp-4.0.9.tgz", + "integrity": "sha512-zzT+wfQ8uwoXjDhRK9Zkmmk09/fbLLmN/yDHFizJiEKIve85qutOnXcP/TM2sKPBTU+Jc16vfPbOMkORMUBN7Q==", "dev": true, "requires": { "@types/undertaker": "*", "@types/vinyl-fs": "*", - "chokidar": "^2.1.2" + "chokidar": "^3.3.1" } }, "@types/iobroker": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@types/iobroker/-/iobroker-3.0.8.tgz", - "integrity": "sha512-Q5MyRYxB4wgwzNUcP8J+UfzzLaSIh5e28ioKGuHp7nhryvyh1Hx1VLyp7Rk9dQbZx4cJUX70fVqRMvPrAneQPQ==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@types/iobroker/-/iobroker-3.3.4.tgz", + "integrity": "sha512-+/cIRiHujPcjekv0Iec9LQ0QjfNvT4resJxmpkfbCioOzl5li10cEudiz1Z/3sROsUqTelvxmovjAdcQblDxRw==", "requires": { "@types/node": "*" } }, "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", "dev": true }, "@types/mocha": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-7.0.2.tgz", - "integrity": "sha512-ZvO2tAcjmMi8V/5Z3JsyofMe3hasRcaw88cto5etSVMwVQfeivGAlEYmaQgceUSVYFofVjT+ioHsATjdWcFt1w==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz", + "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==", "dev": true }, "@types/node": { - "version": "12.12.39", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.39.tgz", - "integrity": "sha512-pADGfwnDkr6zagDwEiCVE4yQrv7XDkoeVa4OfA9Ju/zRTk6YNDLGtQbkdL4/56mCQQCs4AhNrBIag6jrp7ZuOg==" + "version": "14.18.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.2.tgz", + "integrity": "sha512-fqtSN5xn/bBzDxMT77C1rJg6CsH/R49E7qsGuvdPJa20HtV5zSTuLJPNfnlyVH3wauKnkHdLggTVkOW/xP9oQg==" }, "@types/proxyquire": { "version": "1.3.28", @@ -198,37 +683,33 @@ "dev": true }, "@types/sinon": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-9.0.0.tgz", - "integrity": "sha512-v2TkYHkts4VXshMkcmot/H+ERZ2SevKa10saGaJPGCJ8vh3lKrC4u663zYEeRZxep+VbG6YRDtQ6gVqw9dYzPA==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.6.tgz", + "integrity": "sha512-6EF+wzMWvBNeGrfP3Nx60hhx+FfwSg1JJBLAAP/IdIUq0EYkqCYf70VT3PhuhPX9eLD+Dp+lNdpb/ZeHG8Yezg==", "dev": true, "requires": { - "@types/sinonjs__fake-timers": "*" + "@sinonjs/fake-timers": "^7.1.0" } }, "@types/sinon-chai": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.4.tgz", - "integrity": "sha512-xq5KOWNg70PRC7dnR2VOxgYQ6paumW+4pTZP+6uTSdhpYsAUEeeT5bw6rRHHQrZ4KyR+M5ojOR+lje6TGSpUxA==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.6.tgz", + "integrity": "sha512-Z57LprQ+yOQNu9d6mWdHNvnmncPXzDWGSeLj+8L075/QahToapC4Q13zAFRVKV4clyBmdJ5gz4xBfVkOso5lXw==", "dev": true, "requires": { "@types/chai": "*", "@types/sinon": "*" } }, - "@types/sinonjs__fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.1.tgz", - "integrity": "sha512-yYezQwGWty8ziyYLdZjwxyMb0CZR49h8JALHGrxjQHWlqGgc8kLdHEgWrgL0uZ29DMvEVBDnHU2Wg36zKSIUtA==", - "dev": true - }, "@types/undertaker": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/undertaker/-/undertaker-1.2.2.tgz", - "integrity": "sha512-j4iepCSuY2JGW/hShVtUBagic0klYNFIXP7VweavnYnNC2EjiKxJFeaS9uaJmAT0ty9sQSqTS1aagWMZMV0HyA==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/undertaker/-/undertaker-1.2.7.tgz", + "integrity": "sha512-xuY7nBwo1zSRoY2aitp/HArHfTulFAKql2Fr4b4mWbBBP+F50n7Jm6nwISTTMaDk2xvl92O10TTejVF0Q9mInw==", "dev": true, "requires": { - "@types/undertaker-registry": "*" + "@types/node": "*", + "@types/undertaker-registry": "*", + "async-done": "~1.3.2" } }, "@types/undertaker-registry": { @@ -238,18 +719,19 @@ "dev": true }, "@types/vinyl": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.3.tgz", - "integrity": "sha512-hrT6xg16CWSmndZqOTJ6BGIn2abKyTw0B58bI+7ioUoj3Sma6u8ftZ1DTI2yCaJamOVGLOnQWiPH3a74+EaqTA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.5.tgz", + "integrity": "sha512-1m6uReH8R/RuLVQGvTT/4LlWq67jZEUxp+FBHt0hYv2BT7TUwFbKI0wa7JZVEU/XtlcnX1QcTuZ36es4rGj7jg==", "dev": true, "requires": { + "@types/expect": "^1.20.4", "@types/node": "*" } }, "@types/vinyl-fs": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/@types/vinyl-fs/-/vinyl-fs-2.4.11.tgz", - "integrity": "sha512-2OzQSfIr9CqqWMGqmcERE6Hnd2KY3eBVtFaulVo3sJghplUcaeMdL9ZjEiljcQQeHjheWY9RlNmumjIAvsBNaA==", + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/@types/vinyl-fs/-/vinyl-fs-2.4.12.tgz", + "integrity": "sha512-LgBpYIWuuGsihnlF+OOWWz4ovwCYlT03gd3DuLwex50cYZLmX3yrW+sFF9ndtmh7zcZpS6Ri47PrIu+fV+sbXw==", "dev": true, "requires": { "@types/glob-stream": "*", @@ -257,22 +739,29 @@ "@types/vinyl": "*" } }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, "acorn": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.2.0.tgz", - "integrity": "sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz", + "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", "dev": true }, "acorn-jsx": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", - "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true }, "ajv": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", - "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -281,56 +770,19 @@ } }, "alcalzone-shared": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/alcalzone-shared/-/alcalzone-shared-2.2.0.tgz", - "integrity": "sha512-TdjH76pnPJzbf4LpBtTovoFjBHBkSl7N/UoTKwZbuV61SMT76ktknvAaAirS7e0TEoFRwZfDi4tY3hMYM56O9g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/alcalzone-shared/-/alcalzone-shared-4.0.0.tgz", + "integrity": "sha512-UJ/8eEd4sZwjmMpV4PahmDS5U05UdqWPYJxT+a8xNOTqnNn4vgbuyFMNX1kSx2KKiwX3yJi5QkISS3kY7pXWfQ==", "dev": true, "requires": { - "debug": "^4.1.1" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "debug": "^4.3.1" } }, "ansi-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", - "dev": true, - "requires": { - "ansi-wrap": "^0.1.0" - } - }, - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", - "dev": true, - "requires": { - "type-fest": "^0.11.0" - }, - "dependencies": { - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", - "dev": true - } - } + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true }, "ansi-gray": { "version": "0.1.1", @@ -342,18 +794,18 @@ } }, "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" } }, "ansi-wrap": { @@ -363,13 +815,13 @@ "dev": true }, "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, "append-buffer": { @@ -388,13 +840,10 @@ "dev": true }, "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "arr-diff": { "version": "4.0.0", @@ -488,14 +937,6 @@ "default-compare": "^1.0.0", "get-value": "^2.0.6", "kind-of": "^5.0.2" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } } }, "array-unique": { @@ -504,19 +945,6 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, "assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", @@ -529,12 +957,6 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true - }, "async-done": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", @@ -562,10 +984,11 @@ "async-done": "^1.2.2" } }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true }, "atob": { "version": "2.1.2", @@ -573,23 +996,12 @@ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", - "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==" - }, "axios": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", - "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", - "dev": true, + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", + "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", "requires": { - "follow-redirects": "1.5.10" + "follow-redirects": "^1.14.4" } }, "bach": { @@ -610,9 +1022,9 @@ } }, "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, "base": { @@ -638,52 +1050,25 @@ "requires": { "is-descriptor": "^1.0.0" } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } } } }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - } - }, "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -695,32 +1080,12 @@ } }, "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "fill-range": "^7.0.1" } }, "browser-stdout": { @@ -758,6 +1123,16 @@ "unset-value": "^1.0.0" } }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -770,22 +1145,17 @@ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", "dev": true }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, "chai": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", - "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", "dev": true, "requires": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", "deep-eql": "^3.0.1", "get-func-name": "^2.0.0", - "pathval": "^1.1.0", + "pathval": "^1.1.1", "type-detect": "^4.0.5" } }, @@ -799,33 +1169,41 @@ } }, "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true } } }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, "check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", @@ -833,31 +1211,19 @@ "dev": true }, "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", "dev": true, "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - } + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" } }, "class-utils": { @@ -880,24 +1246,60 @@ "requires": { "is-descriptor": "^0.1.0" } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } } } }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true - }, "cliui": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", @@ -907,6 +1309,43 @@ "string-width": "^1.0.1", "strip-ansi": "^3.0.1", "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } } }, "clone": { @@ -966,18 +1405,18 @@ } }, "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "color-name": "1.1.3" + "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "color-support": { @@ -986,13 +1425,11 @@ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true }, "component-emitter": { "version": "1.3.0", @@ -1019,20 +1456,12 @@ } }, "convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", "dev": true, "requires": { "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } } }, "copy-descriptor": { @@ -1042,40 +1471,30 @@ "dev": true }, "copy-props": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.4.tgz", - "integrity": "sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", + "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", "dev": true, "requires": { - "each-props": "^1.3.0", - "is-plain-object": "^2.0.1" + "each-props": "^1.3.2", + "is-plain-object": "^5.0.0" } }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true }, "cross-spawn": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz", - "integrity": "sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" - }, - "dependencies": { - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } } }, "d": { @@ -1088,21 +1507,13 @@ "type": "^1.0.1" } }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } - }, "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "2.1.2" } }, "decamelize": { @@ -1127,9 +1538,9 @@ } }, "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, "default-compare": { @@ -1139,14 +1550,6 @@ "dev": true, "requires": { "kind-of": "^5.0.2" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } } }, "default-resolution": { @@ -1172,44 +1575,8 @@ "requires": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, "detect-file": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", @@ -1217,9 +1584,9 @@ "dev": true }, "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true }, "doctrine": { @@ -1251,21 +1618,23 @@ "requires": { "is-plain-object": "^2.0.1", "object.defaults": "^1.1.0" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + }, + "dependencies": { + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + } } }, "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "end-of-stream": { @@ -1277,6 +1646,15 @@ "once": "^1.4.0" } }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -1286,53 +1664,15 @@ "is-arrayish": "^0.2.1" } }, - "es-abstract": { - "version": "1.17.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", - "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - }, - "dependencies": { - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - } - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, "es5-ext": { - "version": "0.10.51", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.51.tgz", - "integrity": "sha512-oRpWzM2WcLHVKpnrcyB7OW8j/s67Ba04JCm0WnNv3RiABSvs7mrQlutB8DBv793gKcp0XENR8Il8WxGTlZ73gQ==", + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", "dev": true, "requires": { "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.1", - "next-tick": "^1.0.0" + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" } }, "es6-iterator": { @@ -1347,13 +1687,13 @@ } }, "es6-symbol": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.2.tgz", - "integrity": "sha512-/ZypxQsArlv+KHpGvng52/Iz8by3EQPxhmbuz8yFG89N/caTFBSbcXONDw0aMjy827gQg26XAjP4uXFvnfINmQ==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", "dev": true, "requires": { "d": "^1.0.1", - "es5-ext": "^0.10.51" + "ext": "^1.1.2" } }, "es6-weak-map": { @@ -1368,231 +1708,170 @@ "es6-symbol": "^3.1.1" } }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, "eslint": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.0.0.tgz", - "integrity": "sha512-qY1cwdOxMONHJfGqw52UOpZDeqXy8xmD0u8CT6jIstil72jkhURC704W8CFyTPDPllz4z4lu0Ql1+07PG/XdIg==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.5.0.tgz", + "integrity": "sha512-tVGSkgNbOfiHyVte8bCM8OmX+xG9PzVG/B4UCF60zx7j61WIVY/AqJECDgpLD4DbbESD0e174gOg3ZlrX15GDg==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.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", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0", - "eslint-visitor-keys": "^1.1.0", - "espree": "^7.0.0", - "esquery": "^1.2.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.1.0", + "espree": "^9.2.0", + "esquery": "^1.4.0", "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", "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": "^4.17.14", + "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", + "regexpp": "^3.2.0", "semver": "^7.2.1", - "strip-ansi": "^6.0.0", + "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "table": "^5.2.3", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz", - "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "requires": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" + }, + "dependencies": { + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + } } }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true - }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz", - "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "ansi-regex": "^5.0.1" } } } }, "eslint-scope": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", - "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", + "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", "dev": true, "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" } }, "eslint-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.0.0.tgz", - "integrity": "sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "requires": { - "eslint-visitor-keys": "^1.1.0" + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } } }, "eslint-visitor-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", - "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", + "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", "dev": true }, "espree": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.0.0.tgz", - "integrity": "sha512-/r2XEx5Mw4pgKdyb7GNLQNsu++asx/dltf/CI8RFi9oGHxmQFgvLbc5Op4U6i8Oaj+kdslhJtVlEZeAqH5qOTw==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.2.0.tgz", + "integrity": "sha512-oP3utRkynpZWF/F2x/HZJ+AGtnIclaR7z1pYPxy7NYM2fSO6LgK/Rkny8anRSPK/VwEA1eqm2squui0T7ZMOBg==", "dev": true, "requires": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" + "acorn": "^8.6.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.1.0" } }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, "esquery": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", - "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "requires": { "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", - "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==", - "dev": true - } } }, "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { - "estraverse": "^4.1.0" + "estraverse": "^5.2.0" } }, "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, "esutils": { @@ -1601,6 +1880,23 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -1616,6 +1912,15 @@ "to-regex": "^3.0.1" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", @@ -1633,6 +1938,69 @@ "requires": { "is-extendable": "^0.1.0" } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, @@ -1645,10 +2013,28 @@ "homedir-polyfill": "^1.0.1" } }, + "ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "dev": true, + "requires": { + "type": "^2.0.0" + }, + "dependencies": { + "type": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", + "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==", + "dev": true + } + } + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true }, "extend-shallow": { "version": "3.0.2", @@ -1658,28 +2044,6 @@ "requires": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" } }, "extglob": { @@ -1716,42 +2080,14 @@ "is-extendable": "^0.1.0" } }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true } } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, "fancy-log": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", @@ -1765,14 +2101,16 @@ } }, "fast-deep-equal": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", - "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, "fast-levenshtein": { "version": "2.0.6", @@ -1780,23 +2118,21 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "requires": { - "escape-string-regexp": "^1.0.5" + "flat-cache": "^3.0.4" } }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", "dev": true, - "requires": { - "flat-cache": "^2.0.1" - } + "optional": true }, "fill-keys": { "version": "1.0.2", @@ -1809,36 +2145,22 @@ } }, "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "to-regex-range": "^5.0.1" } }, "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" } }, "findup-sync": { @@ -1864,6 +2186,17 @@ "object.defaults": "^1.1.0", "object.pick": "^1.2.0", "parse-filepath": "^1.0.1" + }, + "dependencies": { + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + } } }, "flagged-respawn": { @@ -1873,37 +2206,25 @@ "dev": true }, "flat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", - "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", - "dev": true, - "requires": { - "is-buffer": "~2.0.3" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", - "dev": true - } - } + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true }, "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" + "flatted": "^3.1.0", + "rimraf": "^3.0.2" } }, "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", + "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", "dev": true }, "flush-write-stream": { @@ -1917,24 +2238,9 @@ } }, "follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", - "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", - "dev": true, - "requires": { - "debug": "=3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } + "version": "1.14.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", + "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==" }, "for-in": { "version": "1.0.2", @@ -1951,21 +2257,6 @@ "for-in": "^1.0.1" } }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -1976,14 +2267,14 @@ } }, "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "dev": true, "requires": { "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } }, "fs-mkdirp-stream": { @@ -2003,552 +2294,11 @@ "dev": true }, "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, - "optional": true, - "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.3.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^4.1.0", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "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" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true - } - } + "optional": true }, "function-bind": { "version": "1.1.1", @@ -2574,24 +2324,33 @@ "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", "dev": true }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", "dev": true }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -2603,58 +2362,224 @@ } }, "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" + "is-glob": "^4.0.1" + } + }, + "glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", + "dev": true, + "requires": { + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" }, "dependencies": { + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, "is-glob": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "^2.1.0" + "is-extglob": "^2.1.0" + } + } + } + }, + "glob-watcher": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", + "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-done": "^1.2.0", + "chokidar": "^2.0.0", + "is-negated-glob": "^1.0.0", + "just-debounce": "^1.0.0", + "normalize-path": "^3.0.0", + "object.defaults": "^1.1.0" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } } } }, - "glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", - "dev": true, - "requires": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", - "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" - } - }, - "glob-watcher": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.3.tgz", - "integrity": "sha512-8tWsULNEPHKQ2MR4zXuzSmqbdyV5PtwwCaWSGQ1WwHsJ07ilNeN1JB8ntxhckbnpSHaf9dXFUHzIWvm1I13dsg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-done": "^1.2.0", - "chokidar": "^2.0.0", - "is-negated-glob": "^1.0.0", - "just-debounce": "^1.0.0", - "object.defaults": "^1.1.0" - } - }, "global-modules": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", @@ -2677,17 +2602,40 @@ "ini": "^1.3.4", "is-windows": "^1.0.1", "which": "^1.2.14" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", "dev": true, "requires": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" } }, + "globalyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", + "dev": true + }, + "globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, "glogg": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", @@ -2698,9 +2646,9 @@ } }, "graceful-fs": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", - "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", "dev": true }, "growl": { @@ -2719,32 +2667,41 @@ "gulp-cli": "^2.2.0", "undertaker": "^1.2.1", "vinyl-fs": "^3.0.0" + } + }, + "gulp-cli": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", + "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", + "dev": true, + "requires": { + "ansi-colors": "^1.0.1", + "archy": "^1.0.0", + "array-sort": "^1.0.0", + "color-support": "^1.1.3", + "concat-stream": "^1.6.0", + "copy-props": "^2.0.1", + "fancy-log": "^1.3.2", + "gulplog": "^1.0.0", + "interpret": "^1.4.0", + "isobject": "^3.0.1", + "liftoff": "^3.1.0", + "matchdep": "^2.0.0", + "mute-stdout": "^1.0.0", + "pretty-hrtime": "^1.0.0", + "replace-homedir": "^1.0.0", + "semver-greatest-satisfied-range": "^1.1.0", + "v8flags": "^3.2.0", + "yargs": "^7.1.0" }, "dependencies": { - "gulp-cli": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.2.0.tgz", - "integrity": "sha512-rGs3bVYHdyJpLqR0TUBnlcZ1O5O++Zs4bA0ajm+zr3WFCfiSLjGwoCBqFs18wzN+ZxahT9DkOK5nDf26iDsWjA==", + "ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", "dev": true, "requires": { - "ansi-colors": "^1.0.1", - "archy": "^1.0.0", - "array-sort": "^1.0.0", - "color-support": "^1.1.3", - "concat-stream": "^1.6.0", - "copy-props": "^2.0.1", - "fancy-log": "^1.3.2", - "gulplog": "^1.0.0", - "interpret": "^1.1.0", - "isobject": "^3.0.1", - "liftoff": "^3.1.0", - "matchdep": "^2.0.0", - "mute-stdout": "^1.0.0", - "pretty-hrtime": "^1.0.0", - "replace-homedir": "^1.0.0", - "semver-greatest-satisfied-range": "^1.1.0", - "v8flags": "^3.0.1", - "yargs": "^7.1.0" + "ansi-wrap": "^0.1.0" } } } @@ -2758,20 +2715,6 @@ "glogg": "^1.0.0" } }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -2782,15 +2725,15 @@ } }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, "has-value": { @@ -2841,29 +2784,16 @@ } }, "hosted-git-info": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", - "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==", + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true }, "ignore": { "version": "4.0.6", @@ -2872,9 +2802,9 @@ "dev": true }, "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { "parent-module": "^1.0.0", @@ -2904,126 +2834,15 @@ "dev": true }, "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, - "inquirer": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz", - "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^3.0.0", - "cli-cursor": "^3.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.15", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.5.3", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "dev": true }, "invert-kv": { @@ -3043,22 +2862,19 @@ } }, "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "^6.0.0" }, "dependencies": { "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true } } }, @@ -3069,12 +2885,12 @@ "dev": true }, "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "requires": { - "binary-extensions": "^1.0.0" + "binary-extensions": "^2.0.0" } }, "is-buffer": { @@ -3083,62 +2899,70 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", - "dev": true + "is-core-module": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.3.0.tgz", + "integrity": "sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw==", + "dev": true, + "requires": { + "has": "^1.0.3" + } }, "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "^6.0.0" }, "dependencies": { "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true } } }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true - }, "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" }, "dependencies": { "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true } } }, "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + }, + "dependencies": { + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + } + } }, "is-extglob": { "version": "2.1.1", @@ -3147,13 +2971,10 @@ "dev": true }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true }, "is-glob": { "version": "4.0.1", @@ -3191,28 +3012,22 @@ } }, "is-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", "dev": true }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true }, - "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true }, "is-relative": { "version": "1.0.0", @@ -3223,27 +3038,11 @@ "is-unc-path": "^1.0.0" } }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - }, - "dependencies": { - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - } - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true }, "is-unc-path": { "version": "1.0.0", @@ -3254,6 +3053,12 @@ "unc-path-regex": "^0.1.2" } }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", @@ -3284,47 +3089,26 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -3332,47 +3116,32 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" } }, "just-debounce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz", - "integrity": "sha1-h/zPrv/AtozRnVX2cilD+SnqNeo=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", + "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==", "dev": true }, "just-extend": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.1.0.tgz", - "integrity": "sha512-ApcjaOdVTJ7y4r08xI5wIqpvwS48Q0PBG4DJROcEkH1f8MdAiNFyFxz3xoL0LWAVwjrwPYZdVHHxhRHcx/uGLA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", + "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", "dev": true }, "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true }, "last-run": { @@ -3436,6 +3205,17 @@ "object.map": "^1.0.0", "rechoir": "^0.6.2", "resolve": "^1.1.7" + }, + "dependencies": { + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + } } }, "load-json-file": { @@ -3452,51 +3232,43 @@ } }, "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } + "p-locate": "^5.0.0" } }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", "dev": true }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "requires": { - "chalk": "^2.4.2" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" } }, - "lolex": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz", - "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==", + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { - "@sinonjs/commons": "^1.7.0" + "yallist": "^4.0.0" } }, "make-iterator": { @@ -3506,6 +3278,14 @@ "dev": true, "requires": { "kind-of": "^6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } } }, "map-cache": { @@ -3564,6 +3344,12 @@ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", "dev": true }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -3583,19 +3369,82 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.2" - } - }, - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" - }, - "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "requires": { - "mime-db": "1.44.0" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } } }, "mimic-fn": { @@ -3613,12 +3462,6 @@ "brace-expansion": "^1.1.7" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, "mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", @@ -3627,164 +3470,68 @@ "requires": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" } }, "mocha": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.1.2.tgz", - "integrity": "sha512-o96kdRKMKI3E8U0bjnfqW4QMk12MwZ4mhdBTf+B5a1q9+aq2HRnj+3ZdJu0B/ZhJeK78MgYuv6L8d/rA5AeBJA==", + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz", + "integrity": "sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==", "dev": true, "requires": { - "ansi-colors": "3.2.3", + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", - "chokidar": "3.3.0", - "debug": "3.2.6", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", + "chokidar": "3.5.2", + "debug": "4.3.2", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.7", "growl": "1.10.5", "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "3.0.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", "minimatch": "3.0.4", - "mkdirp": "0.5.5", - "ms": "2.1.1", - "node-environment-flags": "1.0.6", - "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", - "wide-align": "1.1.3", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.0" + "ms": "2.1.3", + "nanoid": "3.1.25", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.1.5", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" }, "dependencies": { - "ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", - "dev": true - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "binary-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", - "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", - "dev": true - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "chokidar": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", - "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.1", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.2.0" - } - }, "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } } }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true - }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -3792,9 +3539,9 @@ "dev": true }, "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -3805,141 +3552,51 @@ "path-is-absolute": "^1.0.0" } }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "readdirp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", - "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", - "dev": true, - "requires": { - "picomatch": "^2.0.4" - } - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { - "is-number": "^7.0.0" + "has-flag": "^4.0.0" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" } } } @@ -3951,9 +3608,9 @@ "dev": true }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "mute-stdout": { @@ -3962,19 +3619,19 @@ "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", "dev": true }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", "dev": true, "optional": true }, + "nanoid": { + "version": "3.1.25", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", + "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", + "dev": true + }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -3992,6 +3649,14 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.1" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } } }, "natural-compare": { @@ -4007,29 +3672,18 @@ "dev": true }, "nise": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/nise/-/nise-3.0.1.tgz", - "integrity": "sha512-fYcH9y0drBGSoi88kvhpbZEsenX58Yr+wOJ4/Mi1K4cy+iGP/a73gNoyNhu5E9QxPdgTlVChfIaAlnyOy/gHUA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.0.tgz", + "integrity": "sha512-W5WlHu+wvo3PaKLsJJkgPup2LrsXCcm7AWwyNZkUnn5rwPkuPBi3Iwk5SQtN0mv+K65k7nKKjwNQ30wg3wLAQQ==", "dev": true, "requires": { "@sinonjs/commons": "^1.7.0", - "@sinonjs/formatio": "^4.0.1", + "@sinonjs/fake-timers": "^7.0.4", "@sinonjs/text-encoding": "^0.7.1", "just-extend": "^4.0.2", - "lolex": "^5.0.1", "path-to-regexp": "^1.7.0" } }, - "node-environment-flags": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", - "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", - "dev": true, - "requires": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" - } - }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -4040,16 +3694,21 @@ "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true }, "now-and-later": { "version": "2.0.1", @@ -4060,17 +3719,21 @@ "once": "^1.3.2" } }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, "object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", @@ -4088,7 +3751,44 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } } }, "kind-of": { @@ -4102,12 +3802,6 @@ } } }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", - "dev": true - }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -4124,15 +3818,15 @@ } }, "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { - "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.defaults": { @@ -4147,16 +3841,6 @@ "isobject": "^3.0.0" } }, - "object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, "object.map": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", @@ -4196,9 +3880,9 @@ } }, "onetime": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", - "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "requires": { "mimic-fn": "^2.1.0" @@ -4236,36 +3920,24 @@ "lcid": "^1.0.0" } }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" } }, "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "^3.0.2" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -4320,13 +3992,10 @@ "dev": true }, "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true }, "path-is-absolute": { "version": "1.0.1", @@ -4341,9 +4010,9 @@ "dev": true }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "path-root": { @@ -4390,20 +4059,15 @@ } }, "pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "dev": true }, "pify": { @@ -4468,11 +4132,6 @@ "resolve": "^1.11.1" } }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - }, "pump": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", @@ -4497,12 +4156,17 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } }, "read-pkg": { "version": "1.1.0", @@ -4523,12 +4187,33 @@ "requires": { "find-up": "^1.0.0", "read-pkg": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + } } }, "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -4538,25 +4223,15 @@ "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } } }, "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" + "picomatch": "^2.2.1" } }, "rechoir": { @@ -4579,9 +4254,9 @@ } }, "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, "remove-bom-buffer": { @@ -4612,9 +4287,9 @@ "dev": true }, "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", "dev": true }, "repeat-string": { @@ -4624,9 +4299,9 @@ "dev": true }, "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", "dev": true }, "replace-homedir": { @@ -4640,33 +4315,6 @@ "remove-trailing-separator": "^1.1.0" } }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -4680,11 +4328,12 @@ "dev": true }, "resolve": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", - "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "requires": { + "is-core-module": "^2.2.0", "path-parse": "^1.0.6" } }, @@ -4719,16 +4368,6 @@ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -4736,33 +4375,19 @@ "dev": true }, "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" } }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true - }, - "rxjs": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", - "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, "safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "safe-regex": { "version": "1.1.0", @@ -4773,16 +4398,14 @@ "ret": "~0.1.10" } }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } }, "semver-greatest-satisfied-range": { "version": "1.1.0", @@ -4793,6 +4416,15 @@ "sver-compat": "^1.5.0" } }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -4819,6 +4451,21 @@ "requires": { "is-extendable": "^0.1.0" } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } } } }, @@ -4838,74 +4485,42 @@ "dev": true }, "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", + "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", "dev": true }, "sinon": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-8.1.1.tgz", - "integrity": "sha512-E+tWr3acRdoe1nXbHMu86SSqA1WGM7Yw3jZRLvlCMnXwTHP8lgFFVn5BnKnF26uc5SfZ3D7pA9sN7S3Y2jG4Ew==", + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-12.0.1.tgz", + "integrity": "sha512-iGu29Xhym33ydkAT+aNQFBINakjq69kKO6ByPvTsm3yyIACfyQttRTP03aBP/I8GfhFmLzrnKwNNkr0ORb1udg==", "dev": true, "requires": { - "@sinonjs/commons": "^1.7.0", - "@sinonjs/formatio": "^4.0.1", - "@sinonjs/samsam": "^4.2.2", - "diff": "^4.0.2", - "lolex": "^5.1.2", - "nise": "^3.0.1", - "supports-color": "^7.1.0" + "@sinonjs/commons": "^1.8.3", + "@sinonjs/fake-timers": "^8.1.0", + "@sinonjs/samsam": "^6.0.2", + "diff": "^5.0.0", + "nise": "^5.1.0", + "supports-color": "^7.2.0" }, "dependencies": { - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "@sinonjs/commons": "^1.7.0" } } } }, "sinon-chai": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.5.0.tgz", - "integrity": "sha512-IifbusYiQBpUxxFJkR3wTU68xzBN0+bxCScEaKMjBvAQERg6FnTTc1F17rseLb1tjmkJ23730AXpFI0c47FgAg==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.7.0.tgz", + "integrity": "sha512-mf5NURdUaSdnatJx3uhoBOrY9dtL19fiOtAdT1Azxg3+lNJFiuN0uzaU3xX1LeAfL17kHQhTAJgpsfhbMJMY2g==", "dev": true }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - } - } - }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -4922,6 +4537,15 @@ "use": "^3.1.0" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", @@ -4939,6 +4563,69 @@ "requires": { "is-extendable": "^0.1.0" } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, @@ -4961,35 +4648,6 @@ "requires": { "is-descriptor": "^1.0.0" } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } } } }, @@ -5020,22 +4678,40 @@ "dev": true }, "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", "dev": true, "requires": { - "atob": "^2.1.1", + "atob": "^2.1.2", "decode-uri-component": "^0.2.0", "resolve-url": "^0.2.1", "source-map-url": "^0.4.0", "urix": "^0.1.0" } }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", "dev": true }, "sparkles": { @@ -5045,9 +4721,9 @@ "dev": true }, "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", @@ -5055,15 +4731,15 @@ } }, "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "requires": { "spdx-exceptions": "^2.1.0", @@ -5071,9 +4747,9 @@ } }, "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", "dev": true }, "split-string": { @@ -5085,28 +4761,6 @@ "extend-shallow": "^3.0.0" } }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, "stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", @@ -5129,7 +4783,58 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } } } @@ -5141,62 +4846,20 @@ "dev": true }, "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "dev": true }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string.prototype.trimleft": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", - "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "string.prototype.trimstart": "^1.0.0" - } - }, - "string.prototype.trimright": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", - "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "string.prototype.trimend": "^1.0.0" - } - }, - "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" } }, "string_decoder": { @@ -5206,23 +4869,15 @@ "dev": true, "requires": { "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } } }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.0" } }, "strip-bom": { @@ -5234,19 +4889,25 @@ "is-utf8": "^0.2.0" } }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, "supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" } }, "sver-compat": { @@ -5259,64 +4920,12 @@ "es6-symbol": "^3.1.1" } }, - "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dev": true, - "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -5343,13 +4952,14 @@ "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", "dev": true }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "tiny-glob": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", "dev": true, "requires": { - "os-tmpdir": "~1.0.2" + "globalyzer": "0.1.0", + "globrex": "^0.1.2" } }, "to-absolute-glob": { @@ -5395,13 +5005,20 @@ } }, "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "is-number": "^7.0.0" + }, + "dependencies": { + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + } } }, "to-through": { @@ -5413,34 +5030,6 @@ "through2": "^2.0.3" } }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tslib": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.12.0.tgz", - "integrity": "sha512-5rxCQkP0kytf4H1T4xz1imjxaUUPMvc5aWp0rJ/VMIN7ClRiH1FwFvBt8wOeMasp/epeUnmSW6CixSIePtiLqA==", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, "type": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", @@ -5463,9 +5052,9 @@ "dev": true }, "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, "typedarray": { @@ -5474,6 +5063,12 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, + "typescript": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", + "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", + "dev": true + }, "unc-path-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", @@ -5481,9 +5076,9 @@ "dev": true }, "undertaker": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.2.1.tgz", - "integrity": "sha512-71WxIzDkgYk9ZS+spIB8iZXchFhAdEo2YU8xYqBYJ39DIUIqziK78ftm26eecoIY49X0J2MLhG4hr18Yp6/CMA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", + "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", "dev": true, "requires": { "arr-flatten": "^1.0.1", @@ -5491,10 +5086,19 @@ "bach": "^1.0.0", "collection-map": "^1.0.0", "es6-weak-map": "^2.0.1", + "fast-levenshtein": "^1.0.0", "last-run": "^1.1.0", "object.defaults": "^1.0.0", "object.reduce": "^1.0.0", "undertaker-registry": "^1.0.0" + }, + "dependencies": { + "fast-levenshtein": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", + "integrity": "sha1-5qdUzI8V5YmHqpy9J69m/W9OWvk=", + "dev": true + } } }, "undertaker-registry": { @@ -5513,6 +5117,14 @@ "get-value": "^2.0.6", "is-extendable": "^0.1.1", "set-value": "^2.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } } }, "unique-stream": { @@ -5526,9 +5138,9 @@ } }, "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, "unset-value": { @@ -5578,9 +5190,10 @@ "dev": true }, "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, "requires": { "punycode": "^2.1.0" } @@ -5603,21 +5216,16 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - }, "v8-compile-cache": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", - "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, "v8flags": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.3.tgz", - "integrity": "sha512-amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", "dev": true, "requires": { "homedir-polyfill": "^1.0.1" @@ -5639,20 +5247,10 @@ "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", "dev": true }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "vinyl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", - "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", "dev": true, "requires": { "clone": "^2.1.1", @@ -5701,12 +5299,23 @@ "now-and-later": "^2.0.0", "remove-bom-buffer": "^3.0.0", "vinyl": "^2.0.0" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } } }, "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { "isexe": "^2.0.0" @@ -5718,21 +5327,18 @@ "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", "dev": true }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, + "workerpool": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", + "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", + "dev": true + }, "wrap-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", @@ -5741,6 +5347,43 @@ "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } } }, "wrappy": { @@ -5749,15 +5392,6 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -5765,15 +5399,21 @@ "dev": true }, "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", + "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", "dev": true, "requires": { "camelcase": "^3.0.0", @@ -5788,151 +5428,93 @@ "string-width": "^1.0.2", "which-module": "^1.0.0", "y18n": "^3.2.1", - "yargs-parser": "^5.0.0" - } - }, - "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dev": true, - "requires": { - "camelcase": "^3.0.0" - } - }, - "yargs-unparser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", - "dev": true, - "requires": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" + "yargs-parser": "^5.0.1" }, "dependencies": { "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "locate-path": "^3.0.0" + "number-is-nan": "^1.0.0" } }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^2.0.0" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "yargs-parser": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", + "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "camelcase": "^3.0.0", + "object.assign": "^4.1.0" } + } + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "dependencies": { + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true }, - "y18n": { + "decamelize": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } } } + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/package.json b/package.json index 7ce87e8..65d2af3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "iobroker.lametric", - "version": "0.0.9", + "version": "1.5.2", "description": "ioBroker LaMetric Adapter", "author": { "name": "Matthias Kleine", @@ -16,40 +16,59 @@ ], "repository": { "type": "git", - "url": "https://github.com/klein0r/ioBroker.lametric" + "url": "git+https://github.com/klein0r/ioBroker.lametric" + }, + "engines": { + "node": ">=12.0.0" }, "dependencies": { - "@iobroker/adapter-core": "^2.4.0", - "request": "^2.88.2" + "@iobroker/adapter-core": "^2.5.1", + "axios": "^0.24.0" }, "devDependencies": { - "@iobroker/testing": "^2.2.0", - "@types/chai": "^4.2.11", - "@types/chai-as-promised": "^7.1.2", - "@types/gulp": "^4.0.6", - "@types/mocha": "^7.0.2", - "@types/node": "^12.12.39", + "@alcalzone/release-script": "^3.4.2", + "@alcalzone/release-script-plugin-iobroker": "^3.4.1", + "@alcalzone/release-script-plugin-license": "^3.4.1", + "@iobroker/testing": "^2.5.2", + "@types/chai": "^4.3.0", + "@types/chai-as-promised": "^7.1.4", + "@types/gulp": "^4.0.9", + "@types/mocha": "^9.0.0", + "@types/node": "^14.18.2", "@types/proxyquire": "^1.3.28", - "@types/sinon": "^9.0.0", - "@types/sinon-chai": "^3.2.4", - "axios": "^0.19.2", - "chai": "^4.2.0", + "@types/sinon": "^10.0.6", + "@types/sinon-chai": "^3.2.6", + "chai": "^4.3.4", "chai-as-promised": "^7.1.1", - "eslint": "^7.0.0", + "eslint": "^8.5.0", "gulp": "^4.0.2", - "mocha": "^7.1.2", + "mocha": "^9.1.3", "proxyquire": "^2.1.3", - "sinon-chai": "^3.5.0", - "sinon": "^8.1.1" + "sinon": "^12.0.1", + "sinon-chai": "^3.7.0", + "typescript": "~4.4.4" }, "main": "main.js", + "files": [ + "admin{,/!(src)/**}/!(tsconfig|tsconfig.*).json", + "admin{,/!(src)/**}/*.{html,css,png,svg,jpg,js}", + "lib/", + "www/", + "io-package.json", + "LICENSE", + "main.js" + ], "scripts": { - "test:js": "mocha --opts test/mocha.custom.opts", + "test:js": "mocha --config test/mocharc.custom.json \"{!(node_modules|test)/**/*.test.js,*.test.js,test/**/test!(PackageFiles|Startup).js}\"", "test:package": "mocha test/package --exit", "test:unit": "mocha test/unit --exit", "test:integration": "mocha test/integration --exit", "test": "npm run test:js && npm run test:package", - "lint": "eslint" + "check": "tsc --noEmit -p tsconfig.check.json", + "lint": "eslint --ext .js,.jsx", + "release": "release-script patch --yes", + "release-minor": "release-script minor --yes", + "release-major": "release-script major --yes" }, "bugs": { "url": "https://github.com/klein0r/ioBroker.lametric/issues" diff --git a/test/mocha.custom.opts b/test/mocha.custom.opts deleted file mode 100644 index 703f749..0000000 --- a/test/mocha.custom.opts +++ /dev/null @@ -1,2 +0,0 @@ ---require test/mocha.setup.js -{!(node_modules|test)/**/*.test.js,*.test.js,test/**/test!(PackageFiles|Startup).js} \ No newline at end of file diff --git a/test/mocharc.custom.json b/test/mocharc.custom.json new file mode 100644 index 0000000..2e317d5 --- /dev/null +++ b/test/mocharc.custom.json @@ -0,0 +1,10 @@ +{ + "require": [ + "test/mocha.setup.js" + ], + "watch-files": [ + "!(node_modules|test)/**/*.test.js", + "*.test.js", + "test/**/test!(PackageFiles|Startup).js" + ] +} \ No newline at end of file diff --git a/tsconfig.check.json b/tsconfig.check.json new file mode 100644 index 0000000..0adc5c5 --- /dev/null +++ b/tsconfig.check.json @@ -0,0 +1,15 @@ +// Specialized tsconfig for type-checking js files +{ + "extends": "./tsconfig.json", + "compilerOptions": {}, + "include": [ + "**/*.js", + "**/*.d.ts" + ], + "exclude": [ + "**/build", + "node_modules/", + "widgets/", + "gulpfile.js" + ] +}