From e74376b9974b1fa17a33f76481af12c5d08eb210 Mon Sep 17 00:00:00 2001 From: Scott Nonnenberg Date: Tue, 14 Dec 2021 08:43:46 -0800 Subject: [PATCH] Remove Grunt in favor of ts/scripts --- .github/workflows/benchmark.yml | 2 +- .github/workflows/ci.yml | 1 - CONTRIBUTING.md | 11 +- Gruntfile.js | 148 ---- _locales/af/messages.json | 16 +- _locales/ar/messages.json | 16 +- _locales/az/messages.json | 16 +- _locales/bg/messages.json | 16 +- _locales/bn/messages.json | 16 +- _locales/ca/messages.json | 16 +- _locales/cs/messages.json | 16 +- _locales/cy/messages.json | 16 +- _locales/da/messages.json | 16 +- _locales/de/messages.json | 16 +- _locales/el/messages.json | 16 +- _locales/en/messages.json | 2 +- _locales/eo/messages.json | 16 +- _locales/es/messages.json | 16 +- _locales/et/messages.json | 16 +- _locales/eu/messages.json | 16 +- _locales/fa/messages.json | 16 +- _locales/fi/messages.json | 16 +- _locales/fr/messages.json | 16 +- _locales/gu/messages.json | 16 +- _locales/he/messages.json | 16 +- _locales/hi/messages.json | 16 +- _locales/hr/messages.json | 16 +- _locales/hu/messages.json | 16 +- _locales/id/messages.json | 16 +- _locales/is/messages.json | 16 +- _locales/it/messages.json | 16 +- _locales/ja/messages.json | 16 +- _locales/km/messages.json | 16 +- _locales/kn/messages.json | 16 +- _locales/ko/messages.json | 16 +- _locales/ku/messages.json | 16 +- _locales/lo/messages.json | 16 +- _locales/lt/messages.json | 16 +- _locales/lv/messages.json | 16 +- _locales/mk/messages.json | 16 +- _locales/ml/messages.json | 16 +- _locales/mr/messages.json | 16 +- _locales/ms/messages.json | 16 +- _locales/nb/messages.json | 16 +- _locales/nl/messages.json | 16 +- _locales/nn/messages.json | 16 +- _locales/no/messages.json | 16 +- _locales/pa/messages.json | 16 +- _locales/pl/messages.json | 16 +- _locales/ps/messages.json | 16 +- _locales/pt_BR/messages.json | 16 +- _locales/pt_PT/messages.json | 16 +- _locales/ro/messages.json | 16 +- _locales/ru/messages.json | 16 +- _locales/sk/messages.json | 16 +- _locales/sl/messages.json | 16 +- _locales/sq/messages.json | 16 +- _locales/sr/messages.json | 16 +- _locales/sv/messages.json | 16 +- _locales/sw/messages.json | 16 +- _locales/ta/messages.json | 16 +- _locales/te/messages.json | 16 +- _locales/th/messages.json | 16 +- _locales/tr/messages.json | 16 +- _locales/ug/messages.json | 16 +- _locales/uk/messages.json | 16 +- _locales/ur/messages.json | 16 +- _locales/vi/messages.json | 16 +- _locales/zh_CN/messages.json | 16 +- _locales/zh_TW/messages.json | 16 +- bower.json | 43 -- build/grunt.js | 5 - .../backbone-indexeddb.js | 662 ------------------ package.json | 28 +- scripts/.eslintrc.js | 2 + scripts/fuse-electron.js | 1 - scripts/generate-acknowledgments.js | 1 - scripts/install-cross-deps.js | 1 - scripts/prepare_alpha_build.js | 2 - scripts/prepare_alpha_version.js | 2 - scripts/prepare_beta_build.js | 2 - scripts/prepare_windows_cert.js | 2 - ts/scripts/.eslintrc.js | 16 + ts/scripts/copy-and-concat.ts | 54 ++ ts/scripts/get-expire-time.ts | 26 + ts/scripts/get-strings.ts | 53 ++ ts/scripts/zip-macos-release.ts | 2 - ts/types/I18N.ts | 6 + ts/util/lint/exceptions.json | 129 +++- ts/util/lint/license_comments.ts | 1 - ts/util/lint/linter.ts | 8 - yarn.lock | 548 +-------------- 92 files changed, 1137 insertions(+), 1661 deletions(-) delete mode 100644 Gruntfile.js delete mode 100644 bower.json delete mode 100644 build/grunt.js delete mode 100644 components/indexeddb-backbonejs-adapter/backbone-indexeddb.js create mode 100644 ts/scripts/.eslintrc.js create mode 100644 ts/scripts/copy-and-concat.ts create mode 100644 ts/scripts/get-expire-time.ts create mode 100644 ts/scripts/get-strings.ts diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index bef01225601..9789e898199 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -56,7 +56,7 @@ jobs: PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 - name: Build typescript - run: yarn grunt + run: yarn generate - name: Bundle run: yarn build:webpack diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 44a1bc05bcd..dc44bc4c59f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -128,7 +128,6 @@ jobs: run: yarn install --frozen-lockfile - run: yarn generate - - run: node build\grunt.js - run: yarn test-node - run: copy package.json temp.json - run: del package.json diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0746e38f164..54a6d2908db 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -59,7 +59,7 @@ cd Signal-Desktop git-lfs install # Setup Git LFS. npm install --global yarn # (only if you don’t already have `yarn`) yarn install --frozen-lockfile # Install and build dependencies (this will take a while) -yarn grunt # Generate final JS and CSS assets +yarn generate # Generate final JS and CSS assets yarn build:webpack # Build parts of the app that use webpack (Sticker Creator) yarn test # A good idea to make sure tests run first yarn start # Start Signal! @@ -72,13 +72,14 @@ is no automatic restart mechanism. Alternatively, keep the developer tools open (Windows & Linux). Also, note that the assets loaded by the application are not necessarily the same files -you’re touching. You may not see your changes until you run `yarn grunt` on the +you’re touching. You may not see your changes until you run `yarn generate` on the command-line like you did during setup. You can make it easier on yourself by generating -the latest built assets when you change a file. Run this in its own terminal instance -while you make changes: +the latest built assets when you change a file. Run each of these in their own terminal +instance while you make changes - they'll run until you stop them: ``` -yarn grunt dev # runs until you stop it, re-generating built assets on file changes +yarn transpile --watch # recompiles when you change .ts files +yarn sass-manifest --watch # recompiles when you change .scss files ``` If you miss the `git-lfs` step, run `yarn cache clean` and remove `node_modules` before trying again. diff --git a/Gruntfile.js b/Gruntfile.js deleted file mode 100644 index be50217cc37..00000000000 --- a/Gruntfile.js +++ /dev/null @@ -1,148 +0,0 @@ -// Copyright 2014-2021 Signal Messenger, LLC -// SPDX-License-Identifier: AGPL-3.0-only - -const importOnce = require('node-sass-import-once'); -const rimraf = require('rimraf'); -const mkdirp = require('mkdirp'); -const sass = require('node-sass'); - -/* eslint-disable more/no-then, no-console */ - -module.exports = grunt => { - const bower = grunt.file.readJSON('bower.json'); - const components = []; - // eslint-disable-next-line guard-for-in, no-restricted-syntax - for (const i in bower.concat.app) { - components.push(bower.concat.app[i]); - } - - grunt.loadNpmTasks('grunt-sass'); - - grunt.initConfig({ - pkg: grunt.file.readJSON('package.json'), - concat: { - components: { - src: components, - dest: 'js/components.js', - }, - }, - sass: { - options: { - implementation: sass, - sourceMap: true, - importer: importOnce, - }, - dev: { - files: { - 'stylesheets/manifest.css': 'stylesheets/manifest.scss', - 'stylesheets/manifest_bridge.css': 'stylesheets/manifest_bridge.scss', - }, - }, - }, - copy: { - deps: { - files: [ - { - src: 'components/mp3lameencoder/lib/Mp3LameEncoder.js', - dest: 'js/Mp3LameEncoder.min.js', - }, - { - src: 'components/webaudiorecorder/lib/WebAudioRecorderMp3.js', - dest: 'js/WebAudioRecorderMp3.js', - }, - ], - }, - }, - watch: { - protobuf: { - files: ['./protos/SignalService.proto'], - tasks: ['exec:build-protobuf'], - }, - sass: { - files: ['./stylesheets/*.scss', './stylesheets/**/*.scss'], - tasks: ['sass'], - }, - }, - exec: { - 'tx-pull-mostly-translated': { - cmd: 'tx pull --all --use-git-timestamps --minimum-perc=80', - }, - 'tx-pull-any-existing-translation': { - cmd: 'tx pull --use-git-timestamps', - }, - transpile: { - cmd: 'yarn transpile', - }, - 'build-protobuf': { - cmd: 'yarn build-protobuf', - }, - }, - gitinfo: {}, // to be populated by grunt gitinfo - }); - - Object.keys(grunt.config.get('pkg').devDependencies).forEach(key => { - if (/^grunt(?!(-cli)?$)/.test(key)) { - // ignore grunt and grunt-cli - grunt.loadNpmTasks(key); - } - }); - - // Transifex does not understand placeholders, so this task patches all non-en - // locales with missing placeholders - grunt.registerTask('locale-patch', () => { - const en = grunt.file.readJSON('_locales/en/messages.json'); - grunt.file.recurse('_locales', (abspath, rootdir, subdir, filename) => { - if (subdir === 'en' || filename !== 'messages.json') { - return; - } - const messages = grunt.file.readJSON(abspath); - - // eslint-disable-next-line no-restricted-syntax - for (const key in messages) { - if (en[key] !== undefined && messages[key] !== undefined) { - if ( - en[key].placeholders !== undefined && - messages[key].placeholders === undefined - ) { - messages[key].placeholders = en[key].placeholders; - } - } - } - - grunt.file.write(abspath, `${JSON.stringify(messages, null, 4)}\n`); - }); - }); - - grunt.registerTask('getExpireTime', () => { - grunt.task.requires('gitinfo'); - const gitinfo = grunt.config.get('gitinfo'); - const committed = gitinfo.local.branch.current.lastCommitTime; - const buildCreation = Date.parse(committed); - const buildExpiration = buildCreation + 1000 * 60 * 60 * 24 * 90; - grunt.file.write( - 'config/local-production.json', - `${JSON.stringify({ buildCreation, buildExpiration })}\n` - ); - }); - - grunt.registerTask('clean-release', () => { - rimraf.sync('release'); - mkdirp.sync('release'); - }); - - grunt.registerTask('tx', [ - 'exec:tx-pull-mostly-translated', - 'exec:tx-pull-any-existing-translation', - 'locale-patch', - ]); - grunt.registerTask('dev', ['default', 'watch']); - grunt.registerTask('date', ['gitinfo', 'getExpireTime']); - grunt.registerTask('default', [ - 'exec:build-protobuf', - 'exec:transpile', - 'concat', - 'copy:deps', - 'sass', - 'date', - ]); -}; diff --git a/_locales/af/messages.json b/_locales/af/messages.json index a832165e1ea..148c50c5089 100644 --- a/_locales/af/messages.json +++ b/_locales/af/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Voorskou van duimnaelskakel vir $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktop ran into a decryption error.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Submit log", diff --git a/_locales/ar/messages.json b/_locales/ar/messages.json index 1fd0387155e..b81a13a129b 100644 --- a/_locales/ar/messages.json +++ b/_locales/ar/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "يتم جلب صورة مصغرة لمعاينة الوصلة $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "واجه سطح المكتب خطأ في فك التشفير.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "إرسال السجل", diff --git a/_locales/az/messages.json b/_locales/az/messages.json index 19c90c0bf4c..f9226fb4f02 100644 --- a/_locales/az/messages.json +++ b/_locales/az/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "$domain$ üçün bağlantı önbaxış eskizi", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Masaüstü, şifrə açma xətası ilə qarşılaşdı.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Jurnalı göndər", diff --git a/_locales/bg/messages.json b/_locales/bg/messages.json index 169dff33bfd..2538a7ded8d 100644 --- a/_locales/bg/messages.json +++ b/_locales/bg/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Преглед на линк към $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktop ran into a decryption error.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Submit log", diff --git a/_locales/bn/messages.json b/_locales/bn/messages.json index 76050cd8bba..88b3ff07803 100644 --- a/_locales/bn/messages.json +++ b/_locales/bn/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "$domain$ লিঙ্ক এর জন্য ছোট পূর্বরূপ", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "ডেস্কটপে একটি ডিক্রিপশন ত্রুটি হয়েছে।", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "লগ জমা দিন", diff --git a/_locales/ca/messages.json b/_locales/ca/messages.json index 88435c124cb..f9894aa6df7 100644 --- a/_locales/ca/messages.json +++ b/_locales/ca/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Previsualització de la vista en miniatura de l'enllaç $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Hi ha hagut un error de desencriptació.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Envia el registre", diff --git a/_locales/cs/messages.json b/_locales/cs/messages.json index 1bb785dd691..a394b65c749 100644 --- a/_locales/cs/messages.json +++ b/_locales/cs/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Náhled na odkaz pro $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktop narazil na chybu při dešifrování.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Odeslat log", diff --git a/_locales/cy/messages.json b/_locales/cy/messages.json index ed9a887c309..973645170ae 100644 --- a/_locales/cy/messages.json +++ b/_locales/cy/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Rhagolwg dolen llun bach ar gyfer $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Cafodd y bwrdd gwaith yn wall dadgryptio.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Cyflwyno cofnod", diff --git a/_locales/da/messages.json b/_locales/da/messages.json index 48022267c81..41a704d5699 100644 --- a/_locales/da/messages.json +++ b/_locales/da/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Miniature-linkforhåndsvisning for $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktop stødte på en dekrypteringsfejl.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Indsend log", diff --git a/_locales/de/messages.json b/_locales/de/messages.json index 0ba752d6073..58ed1ed7cd1 100644 --- a/_locales/de/messages.json +++ b/_locales/de/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Miniaturbild der Link-Vorschau für $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Es trat ein Entschlüsselungsfehler auf.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Diagnoseprotokoll übermitteln", diff --git a/_locales/el/messages.json b/_locales/el/messages.json index 46973fa2f3b..2112cd65824 100644 --- a/_locales/el/messages.json +++ b/_locales/el/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Προεπισκόπηση συνδέσμου για $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Το Desktop αντιμετώπισε σφάλμα αποκρυπτογράφησης.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Υποβολή αρχείου", diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 452f247a081..72f7c156c5c 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, diff --git a/_locales/eo/messages.json b/_locales/eo/messages.json index af432b21f7e..aa9529d627f 100644 --- a/_locales/eo/messages.json +++ b/_locales/eo/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Miniatura antaŭrigardo de ligilo pri $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Eraro de malĉifrado okazis.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Sendi protokolon", diff --git a/_locales/es/messages.json b/_locales/es/messages.json index 95714a5c20b..c5bd31ca317 100644 --- a/_locales/es/messages.json +++ b/_locales/es/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Miniatura de vista previa para $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Fallo encontrado al descifrar.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Enviar el registro de depuración", diff --git a/_locales/et/messages.json b/_locales/et/messages.json index 06d143fb00d..979dfa15572 100644 --- a/_locales/et/messages.json +++ b/_locales/et/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Lingi eelvaate pisipilt: $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Programmil tekkis dekrüptimistõrge.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Postita logi", diff --git a/_locales/eu/messages.json b/_locales/eu/messages.json index 43c7e219b26..d7fa38ff54d 100644 --- a/_locales/eu/messages.json +++ b/_locales/eu/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Estekaren miniatura aurrebista $domain$ domeinurako", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktop ran into a decryption error.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Submit log", diff --git a/_locales/fa/messages.json b/_locales/fa/messages.json index 345eba71de1..fb0a5d7f70e 100644 --- a/_locales/fa/messages.json +++ b/_locales/fa/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "پیش نمایش پیوند thumbnail برای $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktop ran into a decryption error.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Submit log", diff --git a/_locales/fi/messages.json b/_locales/fi/messages.json index 1379244b921..9d04e253602 100644 --- a/_locales/fi/messages.json +++ b/_locales/fi/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Linkin $domain$ esikatselukuva", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Ohjelma törmäsi salauksen purkuvirheeseen.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Lähetä loki", diff --git a/_locales/fr/messages.json b/_locales/fr/messages.json index d1efb3a24c6..cc2f7359dd2 100644 --- a/_locales/fr/messages.json +++ b/_locales/fr/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Imagette d’aperçu de lien pour $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Signal pour ordinateur a rencontré une erreur de déchiffrement.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Envoyer le journal", diff --git a/_locales/gu/messages.json b/_locales/gu/messages.json index 0fe7042b4a9..82e526389e9 100644 --- a/_locales/gu/messages.json +++ b/_locales/gu/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "$domain$ માટે થંબનેલ લિંક પ્રિવ્યુ", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktop ran into a decryption error.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Submit log", diff --git a/_locales/he/messages.json b/_locales/he/messages.json index e7859193119..788b65e6fc8 100644 --- a/_locales/he/messages.json +++ b/_locales/he/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "קדם־תצוגה של קישור עבור $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "שולחן העבודה נתקל בשגיאת פיענוח.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "הגש יומן", diff --git a/_locales/hi/messages.json b/_locales/hi/messages.json index fc9fbe9726e..91f982a7a02 100644 --- a/_locales/hi/messages.json +++ b/_locales/hi/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "$domain$ के लिये थंबनेल लिंक पूर्वावलोकन", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "डेस्कटॉप एक डिक्रिप्शन एरर में चला गया.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "लॉग सबमिट करें", diff --git a/_locales/hr/messages.json b/_locales/hr/messages.json index 40bc6e758c7..d74f8a2017a 100644 --- a/_locales/hr/messages.json +++ b/_locales/hr/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Sličica pregleda poveznice za $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktop ran into a decryption error.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Submit log", diff --git a/_locales/hu/messages.json b/_locales/hu/messages.json index 43a32c5f16f..9a3f0d75d7e 100644 --- a/_locales/hu/messages.json +++ b/_locales/hu/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "A $domain$ hivatkozás előnézeti képe", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "A Desktop egy dekódolási hibába ütközött.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Log küldése", diff --git a/_locales/id/messages.json b/_locales/id/messages.json index 9a0adfaee9a..73683a4c7c3 100644 --- a/_locales/id/messages.json +++ b/_locales/id/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Gambar mini pratinjau tautan untuk $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktop menemui eror dekripsi.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Kirim catatan", diff --git a/_locales/is/messages.json b/_locales/is/messages.json index 5b68cfc4e30..2c25781d9da 100644 --- a/_locales/is/messages.json +++ b/_locales/is/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Smámynd forskoðunar tengils fyrir $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Forritið lenti í afkóðunarvillu.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Senda inn atvikaskrá", diff --git a/_locales/it/messages.json b/_locales/it/messages.json index c7f9b09d69c..47c1907a4e1 100644 --- a/_locales/it/messages.json +++ b/_locales/it/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Miniatura anteprima del collegamento per $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktop ha riscontrato un errore di decrittazione.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Invia log", diff --git a/_locales/ja/messages.json b/_locales/ja/messages.json index cd4ddfc70c6..fc8c3977007 100644 --- a/_locales/ja/messages.json +++ b/_locales/ja/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "$domain$ のリンクプレビュー", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "デスクトップで復号化エラーが発生しました。", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "ログを送信", diff --git a/_locales/km/messages.json b/_locales/km/messages.json index 3453b4b0ecc..40110850738 100644 --- a/_locales/km/messages.json +++ b/_locales/km/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "ការមើលតំណជារូបភាពតូចៗសម្រាប់$domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktop ran into a decryption error.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Submit log", diff --git a/_locales/kn/messages.json b/_locales/kn/messages.json index 94763f6b2b6..2d661f720f3 100644 --- a/_locales/kn/messages.json +++ b/_locales/kn/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "$domain$ಗೆ ಥಂಬ್‌ನೇಲ್‌ ಲಿಂಕ್‌ ಪೂರ್ವವೀಕ್ಷಣೆ", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktop ran into a decryption error.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Submit log", diff --git a/_locales/ko/messages.json b/_locales/ko/messages.json index 9502187c6ca..6cdd8007880 100644 --- a/_locales/ko/messages.json +++ b/_locales/ko/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "$domain$의 섬네일 링크 미리보기", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktop ran into a decryption error.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Submit log", diff --git a/_locales/ku/messages.json b/_locales/ku/messages.json index 9200ed39bad..8ba8c5d19ce 100644 --- a/_locales/ku/messages.json +++ b/_locales/ku/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Thumbnail link preview for $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktop ran into a decryption error.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Submit log", diff --git a/_locales/lo/messages.json b/_locales/lo/messages.json index 20d9e0a80bf..401b6a69b9f 100644 --- a/_locales/lo/messages.json +++ b/_locales/lo/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "ຮູບນ້ອຍລີງ ທີຜ່ານມາ ສຳລັບ $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktop ran into a decryption error.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Submit log", diff --git a/_locales/lt/messages.json b/_locales/lt/messages.json index 99bd7fcff3b..bfed51a196a 100644 --- a/_locales/lt/messages.json +++ b/_locales/lt/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Miniatiūrinė nuorodos peržiūra, skirta $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Programa susidūrė su iššifravimo klaida.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Pateikti žurnalą", diff --git a/_locales/lv/messages.json b/_locales/lv/messages.json index 6ac9ad8b68c..8fc9a3d73da 100644 --- a/_locales/lv/messages.json +++ b/_locales/lv/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "$domain$ sīktēlu saites priekšskatījums", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktop ran into a decryption error.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Submit log", diff --git a/_locales/mk/messages.json b/_locales/mk/messages.json index ab3fbeffb86..fe7a1c08fcb 100644 --- a/_locales/mk/messages.json +++ b/_locales/mk/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Линк до сликичка за преглед на $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktop ran into a decryption error.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Submit log", diff --git a/_locales/ml/messages.json b/_locales/ml/messages.json index 138091544f3..e65bbd9f2c5 100644 --- a/_locales/ml/messages.json +++ b/_locales/ml/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "$domain$-ൻ്റെ ലിങ്ക് പ്രിവ്യൂ", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktop ran into a decryption error.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Submit log", diff --git a/_locales/mr/messages.json b/_locales/mr/messages.json index 8b2145f0c30..93e138a55ef 100644 --- a/_locales/mr/messages.json +++ b/_locales/mr/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "$domain$ करिता थंबनेल दुवा पुनरावलोकन", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": " डेस्कटॉपमध्ये डिक्रिप्शन त्रुटी आली", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "लॉग सादर करा", diff --git a/_locales/ms/messages.json b/_locales/ms/messages.json index 99103606045..c769ebe8e3c 100644 --- a/_locales/ms/messages.json +++ b/_locales/ms/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Pratonton pautan imej kecil untuk $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Komputer meja mengalami ralat nyahinkripsi.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Hantar log", diff --git a/_locales/nb/messages.json b/_locales/nb/messages.json index d4468f5339f..702744c176d 100644 --- a/_locales/nb/messages.json +++ b/_locales/nb/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Miniatyrbilde til linkforhåndsvisning for $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktop ran into a decryption error.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Submit log", diff --git a/_locales/nl/messages.json b/_locales/nl/messages.json index e9db9c550a2..a43b31872d7 100644 --- a/_locales/nl/messages.json +++ b/_locales/nl/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Voorbeeldafbeelding voor $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Signal-Desktop heeft een probleem met ontsleutelen.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Foutopsporingslog indienen", diff --git a/_locales/nn/messages.json b/_locales/nn/messages.json index f640812cd79..e5fd6cdd5b6 100644 --- a/_locales/nn/messages.json +++ b/_locales/nn/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Førehandsvisning av lenkje til $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktop ran into a decryption error.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Send inn logg", diff --git a/_locales/no/messages.json b/_locales/no/messages.json index 82b2a7a3daf..6e7c9918a92 100644 --- a/_locales/no/messages.json +++ b/_locales/no/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Thumbnail link preview for $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktop ran into a decryption error.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Submit log", diff --git a/_locales/pa/messages.json b/_locales/pa/messages.json index 9065081fbfa..00d3b4d7b48 100644 --- a/_locales/pa/messages.json +++ b/_locales/pa/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": " $domain$ ਦੇ ਲਈ ਥੰਬਨੇਲ ਲਿੰਕ ਦੀ ਝਲਕ", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktop ran into a decryption error.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Submit log", diff --git a/_locales/pl/messages.json b/_locales/pl/messages.json index 61cf1360224..d0fc2890c68 100644 --- a/_locales/pl/messages.json +++ b/_locales/pl/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Podgląd miniatury odnośnika dla $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Aplikacja Desktop napotkała błąd, w trakcie odszyfrowywania.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Wyślij logi debugowania", diff --git a/_locales/ps/messages.json b/_locales/ps/messages.json index 407095541d7..c50091a82e9 100644 --- a/_locales/ps/messages.json +++ b/_locales/ps/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "د $domain$ لپاره د thumbnail د لینک مخکتنه", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "ډیسکټاپ له یوې ډیکرپشن شوې تیروتنې سره رن شوی", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "د رپوټ تسلیمول", diff --git a/_locales/pt_BR/messages.json b/_locales/pt_BR/messages.json index f262b8d60bb..e8637564bbb 100644 --- a/_locales/pt_BR/messages.json +++ b/_locales/pt_BR/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Pré-visualização em miniatura do link $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Signal encontrou um erro ao descriptografar uma mensagem.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Enviar um registro de depuração", diff --git a/_locales/pt_PT/messages.json b/_locales/pt_PT/messages.json index 0e44a5a215e..b8654adfca4 100644 --- a/_locales/pt_PT/messages.json +++ b/_locales/pt_PT/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Pré-visualização da hiperligação da miniatura $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "O desktop apresentou um erro de desencriptação.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Submeter relatório", diff --git a/_locales/ro/messages.json b/_locales/ro/messages.json index 807d45dce9f..fcae52946fb 100644 --- a/_locales/ro/messages.json +++ b/_locales/ro/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Miniatură a previzualizări pentru $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktop a întâmpinat o eroare de decriptare.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Trimite jurnalul", diff --git a/_locales/ru/messages.json b/_locales/ru/messages.json index 0bdc273a923..53af217f04f 100644 --- a/_locales/ru/messages.json +++ b/_locales/ru/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Миниатюра предпросмотра ссылки для $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "В Signal Desktop произошла ошибка расшифровки.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Отправить журнал", diff --git a/_locales/sk/messages.json b/_locales/sk/messages.json index 8fe209a28f3..2d42f2405ac 100644 --- a/_locales/sk/messages.json +++ b/_locales/sk/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Náhľad odkazu pre $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "V programe Signal Desktop sa vyskytla chyba pri dešifrovaní.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Odoslať denník", diff --git a/_locales/sl/messages.json b/_locales/sl/messages.json index bea1732bfda..bb16f76cb62 100644 --- a/_locales/sl/messages.json +++ b/_locales/sl/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Predogledna sličica povezave na: $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Prišlo je do težav z dešifriranjem.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Oddaj sistemsko zabeležbo", diff --git a/_locales/sq/messages.json b/_locales/sq/messages.json index 27791f42cc2..29dd4dcbb42 100644 --- a/_locales/sq/messages.json +++ b/_locales/sq/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Paraparje lidhjeje miniature për $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktopi hasi një gabim shfshehtëzimi.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Parashtroni regjistër", diff --git a/_locales/sr/messages.json b/_locales/sr/messages.json index 6764ac1d2fc..b2670006ddc 100644 --- a/_locales/sr/messages.json +++ b/_locales/sr/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Сличица прегледа линка за $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Десктоп је налетео на грешку у дешифрирању.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Пошањи извештај", diff --git a/_locales/sv/messages.json b/_locales/sv/messages.json index 970a7ad936e..a960de784dc 100644 --- a/_locales/sv/messages.json +++ b/_locales/sv/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Länkförhandsgranskning i miniatyrbild för $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktop stötte på ett dekrypteringsfel.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Skicka in logg", diff --git a/_locales/sw/messages.json b/_locales/sw/messages.json index 3e217ded973..0f5009845a3 100644 --- a/_locales/sw/messages.json +++ b/_locales/sw/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Muunganisho wa hakiki ya kijipicha kwa $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktop ran into a decryption error.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Submit log", diff --git a/_locales/ta/messages.json b/_locales/ta/messages.json index df7a4a38592..d7822198b2d 100644 --- a/_locales/ta/messages.json +++ b/_locales/ta/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "$domain$ க்கான சிறு இணைப்பு முன்னோட்டம்", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktop ran into a decryption error.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Submit log", diff --git a/_locales/te/messages.json b/_locales/te/messages.json index da7a0ae2a75..bafaa1c362e 100644 --- a/_locales/te/messages.json +++ b/_locales/te/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "$domain$కోసం సూక్ష్మచిత్రం పూర్వప్రదర్శన లింకు ", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktop ran into a decryption error.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Submit log", diff --git a/_locales/th/messages.json b/_locales/th/messages.json index 9f835818913..a2fcb3dbb46 100644 --- a/_locales/th/messages.json +++ b/_locales/th/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "ภาพย่อตัวอย่างลิงก์ของ $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktop ran into a decryption error.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Submit log", diff --git a/_locales/tr/messages.json b/_locales/tr/messages.json index 88d78b1295e..148ad3f032a 100644 --- a/_locales/tr/messages.json +++ b/_locales/tr/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "$domain$ için bağlantı ön izlemesi küçük resmi", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktop deşifreleme hatası ile karşılaştı.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Günlüğü gönder", diff --git a/_locales/ug/messages.json b/_locales/ug/messages.json index 1d2b6dc3a50..115fa7f1c9e 100644 --- a/_locales/ug/messages.json +++ b/_locales/ug/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "$domain$ نىڭ كىچىك سۈرەت ئۇلانما ئالدىن كۆزىتىشى", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktop ran into a decryption error.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Submit log", diff --git a/_locales/uk/messages.json b/_locales/uk/messages.json index e2a1498c53a..8643f389120 100644 --- a/_locales/uk/messages.json +++ b/_locales/uk/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Мініатюра попереднього перегляду посилання для $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktop ran into a decryption error.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Submit log", diff --git a/_locales/ur/messages.json b/_locales/ur/messages.json index dee7a52f675..1570daa56c6 100644 --- a/_locales/ur/messages.json +++ b/_locales/ur/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "$domain$کیلئے پیش نظر تھمب نیل لنک", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktop ran into a decryption error.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Submit log", diff --git a/_locales/vi/messages.json b/_locales/vi/messages.json index 0e4444fff2b..da98323ba01 100644 --- a/_locales/vi/messages.json +++ b/_locales/vi/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "Hình thu nhỏ liên kết bản xem trước cho $domain$", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktop ran into a decryption error.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Submit log", diff --git a/_locales/zh_CN/messages.json b/_locales/zh_CN/messages.json index 14d87125900..655c566287f 100644 --- a/_locales/zh_CN/messages.json +++ b/_locales/zh_CN/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "$domain$的链接预览缩略图", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "Desktop ran into a decryption error.", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "Submit log", diff --git a/_locales/zh_TW/messages.json b/_locales/zh_TW/messages.json index 732cc0717a3..7119bbb8870 100644 --- a/_locales/zh_TW/messages.json +++ b/_locales/zh_TW/messages.json @@ -425,7 +425,7 @@ "placeholders": { "count": { "content": "$1", - "example": 123 + "example": "123" } } }, @@ -631,7 +631,7 @@ "message": "$domain$ 的縮圖連結預覽", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "placeholders": { - "path": { + "domain": { "content": "$1", "example": "instagram.com" } @@ -649,7 +649,17 @@ }, "decryptionErrorToast": { "message": "電腦遇到解密錯誤。", - "description": "An error popup when we haven't added an error for decryption error." + "description": "An error popup when we haven't added an error for decryption error.", + "placeholders": { + "name": { + "content": "$1", + "example": "John" + }, + "deviceId": { + "content": "$1", + "example": "2" + } + } }, "decryptionErrorToastAction": { "message": "上傳日誌", diff --git a/bower.json b/bower.json deleted file mode 100644 index 4f95f9b35b4..00000000000 --- a/bower.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "signal-desktop", - "version": "0.0.0", - "homepage": "https://github.com/signalapp/Signal-Desktop", - "license": "AGPL-3.0-only", - "private": true, - "dependencies": { - "mp3lameencoder": "https://github.com/higuma/mp3-lame-encoder-js.git", - "protobuf": "~3.8.0", - "qrcode": "https://github.com/davidshimjs/qrcodejs.git#1c78ccd71", - "webaudiorecorder": "https://github.com/higuma/web-audio-recorder-js.git" - }, - "devDependencies": { - }, - "preen": { - "mp3lameencoder": [ - "lib/Mp3LameEncoder.js" - ], - "protobuf": [ - "dist/ProtoBuf.js" - ], - "qrcode": [ - "qrcode.js" - ], - "webaudiorecorder": [ - "lib/WebAudioRecorder.js", - "lib/WebAudioRecorderMp3.js" - ] - }, - "concat": { - "app": [ - "node_modules/jquery/dist/jquery.js", - "components/long/**/*.js", - "components/bytebuffer/**/*.js", - "components/protobuf/**/*.js", - "node_modules/mustache/mustache.js", - "node_modules/underscore/underscore.js", - "components/qrcode/**/*.js", - "components/autosize/**/*.js", - "components/webaudiorecorder/lib/WebAudioRecorder.js" - ] - } -} diff --git a/build/grunt.js b/build/grunt.js deleted file mode 100644 index e75d87955bf..00000000000 --- a/build/grunt.js +++ /dev/null @@ -1,5 +0,0 @@ -// Copyright 2017-2020 Signal Messenger, LLC -// SPDX-License-Identifier: AGPL-3.0-only - -// because grunt.cmd is totally flakey on windows -require('grunt').cli(); diff --git a/components/indexeddb-backbonejs-adapter/backbone-indexeddb.js b/components/indexeddb-backbonejs-adapter/backbone-indexeddb.js deleted file mode 100644 index 2ae8ad1efc7..00000000000 --- a/components/indexeddb-backbonejs-adapter/backbone-indexeddb.js +++ /dev/null @@ -1,662 +0,0 @@ -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define(['backbone', 'underscore'], factory); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(require('backbone'), require('underscore')); - } else { - // Browser globals (root is window) - root.returnExports = factory(root.Backbone, root._); - } -}(this, function (Backbone, _) { - - // Generate four random hex digits. - function S4() { - return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1); - } - - // Generate a pseudo-GUID by concatenating random hexadecimal. - function guid() { - return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4()); - } - - if ( _(indexedDB).isUndefined() ) { return; } - - // Driver object - // That's the interesting part. - // There is a driver for each schema provided. The schema is a te combination of name (for the database), a version as well as migrations to reach that - // version of the database. - function Driver(schema, ready, nolog, onerror) { - this.schema = schema; - this.ready = ready; - this.error = null; - this.transactions = []; // Used to list all transactions and keep track of active ones. - this.db = null; - this.nolog = nolog; - this.onerror = onerror; - var lastMigrationPathVersion = _.last(this.schema.migrations).version; - if (!this.nolog) debugLog("opening database " + this.schema.id + " in version #" + lastMigrationPathVersion); - this.dbRequest = indexedDB.open(this.schema.id,lastMigrationPathVersion); //schema version need to be an unsigned long - - this.launchMigrationPath = function(dbVersion) { - var transaction = this.dbRequest.transaction; - var clonedMigrations = _.clone(schema.migrations); - this.migrate(transaction, clonedMigrations, dbVersion, { - error: function (event) { - this.error = "Database not up to date. " + dbVersion + " expected was " + lastMigrationPathVersion; - }.bind(this) - }); - }; - - this.dbRequest.onblocked = function(event){ - if (!this.nolog) debugLog("connection to database blocked"); - } - - this.dbRequest.onsuccess = function (e) { - this.db = e.target.result; // Attach the connection ot the queue. - var currentIntDBVersion = (parseInt(this.db.version) || 0); // we need convert beacuse chrome store in integer and ie10 DP4+ in int; - var lastMigrationInt = (parseInt(lastMigrationPathVersion) || 0); // And make sure we compare numbers with numbers. - - if (currentIntDBVersion === lastMigrationInt) { //if support new event onupgradeneeded will trigger the ready function - // No migration to perform! - this.ready(); - } else if (currentIntDBVersion < lastMigrationInt ) { - // We need to migrate up to the current migration defined in the database - this.launchMigrationPath(currentIntDBVersion); - } else { - // Looks like the IndexedDB is at a higher version than the current driver schema. - this.error = "Database version is greater than current code " + currentIntDBVersion + " expected was " + lastMigrationInt; - } - }.bind(this); - - - - this.dbRequest.onerror = function (e) { - // Failed to open the database - this.error = "Couldn't not connect to the database" - if (!this.nolog) debugLog("Couldn't not connect to the database"); - this.onerror(); - }.bind(this); - - this.dbRequest.onabort = function (e) { - // Failed to open the database - this.error = "Connection to the database aborted" - if (!this.nolog) debugLog("Connection to the database aborted"); - this.onerror(); - }.bind(this); - - - - this.dbRequest.onupgradeneeded = function(iDBVersionChangeEvent){ - this.db =iDBVersionChangeEvent.target.result; - - var newVersion = iDBVersionChangeEvent.newVersion; - var oldVersion = iDBVersionChangeEvent.oldVersion; - - // Fix Safari 8 and iOS 8 bug - // at the first connection oldVersion is equal to 9223372036854776000 - // but the real value is 0 - if (oldVersion > 99999999999) - oldVersion = 0; - - if (!this.nolog) debugLog("onupgradeneeded = " + oldVersion + " => " + newVersion); - this.launchMigrationPath(oldVersion); - }.bind(this); - } - - function debugLog(str) { - if (typeof window !== "undefined" && typeof window.console !== "undefined" && typeof window.console.log !== "undefined") { - window.console.log(str); - } - else if(console.log !== "undefined") { - console.log(str) - } - } - - // Driver Prototype - Driver.prototype = { - - // Tracks transactions. Mostly for debugging purposes. TO-IMPROVE - _track_transaction: function(transaction) { - this.transactions.push(transaction); - function removeIt() { - var idx = this.transactions.indexOf(transaction); - if (idx !== -1) {this.transactions.splice(idx); } - }; - transaction.oncomplete = removeIt.bind(this); - transaction.onabort = removeIt.bind(this); - transaction.onerror = removeIt.bind(this); - }, - - // Performs all the migrations to reach the right version of the database. - migrate: function (transaction, migrations, version, options) { - transaction.onerror = options.error; - transaction.onabort = options.error; - - if (!this.nolog) debugLog("migrate begin version from #" + version); - var that = this; - var migration = migrations.shift(); - if (migration) { - if (!version || version < migration.version) { - // We need to apply this migration- - if (typeof migration.before == "undefined") { - migration.before = function (next) { - next(); - }; - } - if (typeof migration.after == "undefined") { - migration.after = function (next) { - next(); - }; - } - // First, let's run the before script - if (!this.nolog) debugLog("migrate begin before version #" + migration.version); - migration.before(function () { - if (!this.nolog) debugLog("migrate done before version #" + migration.version); - - if (!this.nolog) debugLog("migrate begin migrate version #" + migration.version); - - migration.migrate(transaction, function () { - if (!this.nolog) debugLog("migrate done migrate version #" + migration.version); - // Migration successfully appliedn let's go to the next one! - if (!this.nolog) debugLog("migrate begin after version #" + migration.version); - migration.after(function () { - if (!this.nolog) debugLog("migrate done after version #" + migration.version); - if (!this.nolog) debugLog("Migrated to " + migration.version); - - //last modification occurred, need finish - if(migrations.length ==0) { - if (!this.nolog) { - debugLog("migrate setting transaction.oncomplete to finish version #" + migration.version); - transaction.oncomplete = function() { - debugLog("migrate done transaction.oncomplete version #" + migration.version); - debugLog("Done migrating"); - } - } - } - else - { - if (!this.nolog) debugLog("migrate end from version #" + version + " to " + migration.version); - that.migrate(transaction, migrations, version, options); - } - - }.bind(this)); - }.bind(this)); - }.bind(this)); - } else { - // No need to apply this migration - if (!this.nolog) debugLog("Skipping migration " + migration.version); - this.migrate(transaction, migrations, version, options); - } - } - }, - - // This is the main method, called by the ExecutionQueue when the driver is ready (database open and migration performed) - execute: function (storeName, method, object, options) { - if (!this.nolog) debugLog("execute : " + method + " on " + storeName + " for " + object.id); - switch (method) { - case "create": - this.create(storeName, object, options); - break; - case "read": - if (object.id || object.cid) { - this.read(storeName, object, options); // It's a model - } else { - this.query(storeName, object, options); // It's a collection - } - break; - case "update": - this.update(storeName, object, options); // We may want to check that this is not a collection. TOFIX - break; - case "delete": - if (object.id || object.cid) { - this.delete(storeName, object, options); - } else { - this.clear(storeName, object, options); - } - break; - default: - // Hum what? - } - }, - - // Writes the json to the storeName in db. It is a create operations, which means it will fail if the key already exists - // options are just success and error callbacks. - create: function (storeName, object, options) { - var writeTransaction = this.db.transaction([storeName], 'readwrite'); - //this._track_transaction(writeTransaction); - var store = writeTransaction.objectStore(storeName); - var json = object.toJSON(); - var idAttribute = _.result(object, 'idAttribute'); - var writeRequest; - - if (json[idAttribute] === undefined && !store.autoIncrement) json[idAttribute] = guid(); - - writeTransaction.onerror = function (e) { - options.error(e); - }; - writeTransaction.oncomplete = function (e) { - options.success(json); - }; - - if (!store.keyPath) - writeRequest = store.add(json, json[idAttribute]); - else - writeRequest = store.add(json); - }, - - // Writes the json to the storeName in db. It is an update operation, which means it will overwrite the value if the key already exist - // options are just success and error callbacks. - update: function (storeName, object, options) { - var writeTransaction = this.db.transaction([storeName], 'readwrite'); - //this._track_transaction(writeTransaction); - var store = writeTransaction.objectStore(storeName); - var json = object.toJSON(); - var idAttribute = _.result(object, 'idAttribute'); - var writeRequest; - - if (!json[idAttribute]) json[idAttribute] = guid(); - - if (!store.keyPath) - writeRequest = store.put(json, json[idAttribute]); - else - writeRequest = store.put(json); - - writeRequest.onerror = function (e) { - options.error(e); - }; - writeTransaction.oncomplete = function (e) { - options.success(json); - }; - }, - - // Reads from storeName in db with json.id if it's there of with any json.xxxx as long as xxx is an index in storeName - read: function (storeName, object, options) { - var readTransaction = this.db.transaction([storeName], "readonly"); - this._track_transaction(readTransaction); - - var store = readTransaction.objectStore(storeName); - var json = object.toJSON(); - var idAttribute = _.result(object, 'idAttribute'); - - var getRequest = null; - if (json[idAttribute]) { - getRequest = store.get(json[idAttribute]); - } else if(options.index) { - var index = store.index(options.index.name); - getRequest = index.get(options.index.value); - } else { - // We need to find which index we have - var cardinality = 0; // try to fit the index with most matches - _.each(store.indexNames, function (key, index) { - index = store.index(key); - if(typeof index.keyPath === 'string' && 1 > cardinality) { - // simple index - if (json[index.keyPath] !== undefined) { - getRequest = index.get(json[index.keyPath]); - cardinality = 1; - } - } else if(typeof index.keyPath === 'object' && index.keyPath.length > cardinality) { - // compound index - var valid = true; - var keyValue = _.map(index.keyPath, function(keyPart) { - valid = valid && json[keyPart] !== undefined; - return json[keyPart]; - }); - if(valid) { - getRequest = index.get(keyValue); - cardinality = index.keyPath.length; - } - } - }); - } - if (getRequest) { - getRequest.onsuccess = function (event) { - if (event.target.result) { - options.success(event.target.result); - } else { - options.error("Not Found"); - } - }; - getRequest.onerror = function () { - options.error("Not Found"); // We couldn't find the record. - } - } else { - options.error("Not Found"); // We couldn't even look for it, as we don't have enough data. - } - }, - - // Deletes the json.id key and value in storeName from db. - delete: function (storeName, object, options) { - var deleteTransaction = this.db.transaction([storeName], 'readwrite'); - //this._track_transaction(deleteTransaction); - - var store = deleteTransaction.objectStore(storeName); - var json = object.toJSON(); - var idAttribute = _.result(object, 'idAttribute'); - - var deleteRequest = store.delete(json[idAttribute]); - - deleteTransaction.oncomplete = function (event) { - options.success(null); - }; - deleteRequest.onerror = function (event) { - options.error("Not Deleted"); - }; - }, - - // Clears all records for storeName from db. - clear: function (storeName, object, options) { - var deleteTransaction = this.db.transaction([storeName], "readwrite"); - //this._track_transaction(deleteTransaction); - - var store = deleteTransaction.objectStore(storeName); - - var deleteRequest = store.clear(); - deleteRequest.onsuccess = function (event) { - options.success(null); - }; - deleteRequest.onerror = function (event) { - options.error("Not Cleared"); - }; - }, - - // Performs a query on storeName in db. - // options may include : - // - conditions : value of an index, or range for an index - // - range : range for the primary key - // - limit : max number of elements to be yielded - // - offset : skipped items. - query: function (storeName, collection, options) { - var elements = []; - var skipped = 0, processed = 0; - var queryTransaction = this.db.transaction([storeName], "readonly"); - //this._track_transaction(queryTransaction); - - var idAttribute = _.result(collection.model.prototype, 'idAttribute'); - var readCursor = null; - var store = queryTransaction.objectStore(storeName); - var index = null, - lower = null, - upper = null, - bounds = null; - - if (options.conditions) { - // We have a condition, we need to use it for the cursor - _.each(store.indexNames, function (key) { - if (!readCursor) { - index = store.index(key); - if (options.conditions[index.keyPath] instanceof Array) { - lower = options.conditions[index.keyPath][0] > options.conditions[index.keyPath][1] ? options.conditions[index.keyPath][1] : options.conditions[index.keyPath][0]; - upper = options.conditions[index.keyPath][0] > options.conditions[index.keyPath][1] ? options.conditions[index.keyPath][0] : options.conditions[index.keyPath][1]; - bounds = IDBKeyRange.bound(lower, upper, true, true); - - if (options.conditions[index.keyPath][0] > options.conditions[index.keyPath][1]) { - // Looks like we want the DESC order - readCursor = index.openCursor(bounds, window.IDBCursor.PREV || "prev"); - } else { - // We want ASC order - readCursor = index.openCursor(bounds, window.IDBCursor.NEXT || "next"); - } - } else if (typeof options.conditions[index.keyPath] === 'object' && ('$gt' in options.conditions[index.keyPath] || '$gte' in options.conditions[index.keyPath])) { - if('$gt' in options.conditions[index.keyPath]) - bounds = IDBKeyRange.lowerBound(options.conditions[index.keyPath]['$gt'], true); - else - bounds = IDBKeyRange.lowerBound(options.conditions[index.keyPath]['$gte']); - readCursor = index.openCursor(bounds, window.IDBCursor.NEXT || "next"); - } else if (typeof options.conditions[index.keyPath] === 'object' && ('$lt' in options.conditions[index.keyPath] || '$lte' in options.conditions[index.keyPath])) { - if('$lt' in options.conditions[index.keyPath]) - bounds = IDBKeyRange.upperBound(options.conditions[index.keyPath]['$lt'], true); - else - bounds = IDBKeyRange.upperBound(options.conditions[index.keyPath]['$lte']); - readCursor = index.openCursor(bounds, window.IDBCursor.NEXT || "next"); - } else if (options.conditions[index.keyPath] != undefined) { - bounds = IDBKeyRange.only(options.conditions[index.keyPath]); - readCursor = index.openCursor(bounds); - } - } - }); - } else if (options.index) { - index = store.index(options.index.name); - var excludeLower = !!options.index.excludeLower; - var excludeUpper = !!options.index.excludeUpper; - if (index) { - if (options.index.lower && options.index.upper) { - bounds = IDBKeyRange.bound(options.index.lower, options.index.upper, excludeLower, excludeUpper); - } else if (options.index.lower) { - bounds = IDBKeyRange.lowerBound(options.index.lower, excludeLower); - } else if (options.index.upper) { - bounds = IDBKeyRange.upperBound(options.index.upper, excludeUpper); - } else if (options.index.only) { - bounds = IDBKeyRange.only(options.index.only); - } - - if (typeof options.index.order === 'string' && options.index.order.toLowerCase() === 'desc') { - readCursor = index.openCursor(bounds, window.IDBCursor.PREV || "prev"); - } else { - readCursor = index.openCursor(bounds, window.IDBCursor.NEXT || "next"); - } - } - } else { - // No conditions, use the index - if (options.range) { - lower = options.range[0] > options.range[1] ? options.range[1] : options.range[0]; - upper = options.range[0] > options.range[1] ? options.range[0] : options.range[1]; - bounds = IDBKeyRange.bound(lower, upper); - if (options.range[0] > options.range[1]) { - readCursor = store.openCursor(bounds, window.IDBCursor.PREV || "prev"); - } else { - readCursor = store.openCursor(bounds, window.IDBCursor.NEXT || "next"); - } - } else { - readCursor = store.openCursor(); - } - } - - if (typeof (readCursor) == "undefined" || !readCursor) { - options.error("No Cursor"); - } else { - readCursor.onerror = function(e){ - options.error("readCursor error", e); - }; - // Setup a handler for the cursor’s `success` event: - readCursor.onsuccess = function (e) { - var cursor = e.target.result; - if (!cursor) { - if (options.addIndividually || options.clear) { - // nothing! - // We need to indicate that we're done. But, how? - collection.trigger("reset"); - } else { - options.success(elements); // We're done. No more elements. - } - } - else { - // Cursor is not over yet. - if (options.limit && processed >= options.limit) { - // Yet, we have processed enough elements. So, let's just skip. - if (bounds) { - if (options.conditions && options.conditions[index.keyPath]) { - cursor.continue(options.conditions[index.keyPath][1] + 1); /* We need to 'terminate' the cursor cleany, by moving to the end */ - } else if (options.index && (options.index.upper || options.index.lower)) { - if (typeof options.index.order === 'string' && options.index.order.toLowerCase() === 'desc') { - cursor.continue(options.index.lower); - } else { - cursor.continue(options.index.upper); - } - } - } else { - cursor.continue(); /* We need to 'terminate' the cursor cleany, by moving to the end */ - } - } - else if (options.offset && options.offset > skipped) { - skipped++; - cursor.continue(); /* We need to Moving the cursor forward */ - } else { - // This time, it looks like it's good! - if (options.addIndividually) { - collection.add(cursor.value); - } else if (options.clear) { - var deleteRequest = store.delete(cursor.value[idAttribute]); - deleteRequest.onsuccess = function (event) { - elements.push(cursor.value); - }; - deleteRequest.onerror = function (event) { - elements.push(cursor.value); - }; - - } else { - elements.push(cursor.value); - } - processed++; - cursor.continue(); - } - } - }; - } - }, - close :function(){ - if(this.db){ - this.db.close(); - } - } - }; - - // ExecutionQueue object - // The execution queue is an abstraction to buffer up requests to the database. - // It holds a "driver". When the driver is ready, it just fires up the queue and executes in sync. - function ExecutionQueue(schema,next,nolog) { - this.driver = new Driver(schema, this.ready.bind(this), nolog, this.error.bind(this)); - this.started = false; - this.failed = false; - this.stack = []; - this.version = _.last(schema.migrations).version; - this.next = next; - } - - // ExecutionQueue Prototype - ExecutionQueue.prototype = { - // Called when the driver is ready - // It just loops over the elements in the queue and executes them. - ready: function () { - this.started = true; - _.each(this.stack, function (message) { - this.execute(message); - }.bind(this)); - this.stack = []; // fix memory leak - this.next(); - }, - - error: function() { - this.failed = true; - _.each(this.stack, function (message) { - this.execute(message); - }.bind(this)); - this.stack = []; - this.next(); - }, - - // Executes a given command on the driver. If not started, just stacks up one more element. - execute: function (message) { - if (this.started) { - try { - this.driver.execute(message[2].storeName || message[1].storeName, message[0], message[1], message[2]); // Upon messages, we execute the query - } catch (e) { - if (e.name === 'InvalidStateError') { - var f = window.onInvalidStateError; - if (f) f(e); - } - throw e; - } - } else if (this.failed) { - message[2].error(); - } else { - this.stack.push(message); - } - }, - - close : function(){ - this.driver.close(); - } - }; - - // Method used by Backbone for sync of data with data store. It was initially designed to work with "server side" APIs, This wrapper makes - // it work with the local indexedDB stuff. It uses the schema attribute provided by the object. - // The wrapper keeps an active Executuon Queue for each "schema", and executes querues agains it, based on the object type (collection or - // single model), but also the method... etc. - // Keeps track of the connections - var Databases = {}; - - function sync(method, object, options) { - - if(method == "closeall"){ - _.each(Databases,function(database){ - database.close(); - }); - // Clean up active databases object. - Databases = {}; - return Backbone.$.Deferred().resolve(); - } - - // If a model or a collection does not define a database, fall back on ajaxSync - if (!object || !_.isObject(object.database)) { - return Backbone.ajaxSync(method, object, options); - } - - var schema = object.database; - if (Databases[schema.id]) { - if(Databases[schema.id].version != _.last(schema.migrations).version){ - Databases[schema.id].close(); - delete Databases[schema.id]; - } - } - - var promise; - - if (typeof Backbone.$ === 'undefined' || typeof Backbone.$.Deferred === 'undefined') { - var noop = function() {}; - var resolve = noop; - var reject = noop; - } else { - var dfd = Backbone.$.Deferred(); - var resolve = dfd.resolve; - var reject = dfd.reject; - - promise = dfd.promise(); - } - - var success = options.success; - options.success = function(resp) { - if (success) success(resp); - resolve(); - object.trigger('sync', object, resp, options); - }; - - var error = options.error; - options.error = function(resp) { - if (error) error(resp); - reject(); - object.trigger('error', object, resp, options); - }; - - var next = function(){ - Databases[schema.id].execute([method, object, options]); - }; - - if (!Databases[schema.id]) { - Databases[schema.id] = new ExecutionQueue(schema,next,schema.nolog); - } else { - next(); - } - - return promise; - }; - - Backbone.ajaxSync = Backbone.sync; - Backbone.sync = sync; - - return { sync: sync, debugLog: debugLog}; -})); diff --git a/package.json b/package.json index 7ecb0b66f4d..8ae0d7ef8ce 100644 --- a/package.json +++ b/package.json @@ -15,11 +15,17 @@ "postinstall": "yarn build:acknowledgments && yarn build:fuses && patch-package && yarn electron:install-app-deps && rimraf node_modules/dtrace-provider", "postuninstall": "yarn build:acknowledgments", "start": "electron .", - "grunt": "grunt", - "generate": "yarn grunt", + "generate": "npm-run-all build-protobuf transpile sass get-expire-time copy-and-concat", "build-release": "yarn run build", "sign-release": "node ts/updater/generateSignature.js", "notarize": "node ts/build/notarize.js", + "get-strings": "node ts/scripts/get-strings.js", + "get-expire-time": "node ts/scripts/get-expire-time.js", + "copy-and-concat": "node ts/scripts/copy-and-concat.js", + "sass": "npm-run-all sass-manifest sass-manifest-bridge", + "sass-base": "node-sass --source-map true --importer node_modules/node-sass-import-once/index.js", + "sass-manifest": "yarn sass-base stylesheets/manifest.scss stylesheets/manifest.css", + "sass-manifest-bridge": "yarn sass-base stylesheets/manifest_bridge.scss stylesheets/manifest_bridge.css", "build-module-protobuf": "pbjs --target static-module --wrap commonjs --out ts/protobuf/compiled.js protos/*.proto && pbts --out ts/protobuf/compiled.d.ts ts/protobuf/compiled.js", "clean-module-protobuf": "rm -f ts/protobuf/compiled.d.ts ts/protobuf/compiled.js", "build-protobuf": "yarn build-module-protobuf", @@ -43,18 +49,16 @@ "clean-transpile-once": "rimraf app/**/*.js app/*.js ts/**/*.js ts/*.js tsconfig.tsbuildinfo", "clean-transpile": "yarn run clean-transpile-once && yarn run clean-transpile-once", "open-coverage": "open coverage/lcov-report/index.html", - "ready": "npm-run-all --print-label clean-transpile grunt --parallel lint lint-deps test-node test-electron", + "ready": "npm-run-all --print-label clean-transpile generate --parallel lint lint-deps test-node test-electron", "dev": "run-p --print-label dev:*", - "dev:grunt": "yarn grunt dev", "dev:transpile": "yarn run transpile --watch --preserveWatchOutput", "dev:webpack": "cross-env NODE_ENV=development webpack serve --mode development", "dev:typed-scss": "yarn build:typed-scss -w", "dev:storybook": "cross-env SIGNAL_ENV=storybook start-storybook -p 6006 -s ./", "storybook:axe": "build-storybook && axe-storybook", - "build": "run-s --print-label build:grunt build:typed-scss build:webpack build:fuses:release build:release build:fuses build:zip", + "build": "run-s --print-label generate build:typed-scss build:webpack build:fuses:release build:release build:fuses build:zip", "build:acknowledgments": "node scripts/generate-acknowledgments.js", - "build:dev": "run-s --print-label build:grunt build:typed-scss build:webpack", - "build:grunt": "yarn grunt", + "build:dev": "run-s --print-label generate build:typed-scss build:webpack", "build:typed-scss": "tsm sticker-creator", "build:webpack": "run-p build:webpack:sticker-creator build:webpack:preload build:webpack:sql-worker build:webpack:heic-worker", "build:webpack:sticker-creator": "cross-env NODE_ENV=production webpack", @@ -65,7 +69,7 @@ "build:release": "cross-env SIGNAL_ENV=production yarn build:electron -- --config.directories.output=release", "build:fuses": "node scripts/fuse-electron.js", "build:fuses:release": "node scripts/fuse-electron.js --release", - "build:zip": "node scripts/zip-macos-release.js", + "build:zip": "node ts/scripts/zip-macos-release.js", "preverify:ts": "yarn build:typed-scss", "verify": "run-p --print-label verify:*", "verify:ts": "tsc --noEmit", @@ -264,14 +268,6 @@ "eslint-plugin-more": "1.0.0", "eslint-plugin-react": "7.20.6", "file-loader": "4.2.0", - "grunt": "1.4.1", - "grunt-cli": "1.4.3", - "grunt-contrib-concat": "2.0.0", - "grunt-contrib-copy": "1.0.0", - "grunt-contrib-watch": "1.1.0", - "grunt-exec": "3.0.0", - "grunt-gitinfo": "0.1.9", - "grunt-sass": "3.1.0", "html-webpack-plugin": "5.3.1", "mocha": "9.1.3", "mocha-testcheck": "1.0.0-rc.0", diff --git a/scripts/.eslintrc.js b/scripts/.eslintrc.js index e273dfa7f9a..5e8c6b7d77e 100644 --- a/scripts/.eslintrc.js +++ b/scripts/.eslintrc.js @@ -3,6 +3,8 @@ module.exports = { rules: { + 'no-console': 'off', + // We still get the value of this rule, it just allows for dev deps 'import/no-extraneous-dependencies': [ 'error', diff --git a/scripts/fuse-electron.js b/scripts/fuse-electron.js index 53044022248..4ea893d5bc7 100644 --- a/scripts/fuse-electron.js +++ b/scripts/fuse-electron.js @@ -1,6 +1,5 @@ // Copyright 2021 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only -/* eslint-disable no-console */ const { flipFuses, FuseVersion, FuseV1Options } = require('@electron/fuses'); diff --git a/scripts/generate-acknowledgments.js b/scripts/generate-acknowledgments.js index 14c5af4f120..4e4809aeab7 100644 --- a/scripts/generate-acknowledgments.js +++ b/scripts/generate-acknowledgments.js @@ -1,7 +1,6 @@ // Copyright 2020 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only -/* eslint-disable no-console */ const assert = require('assert'); const fs = require('fs'); const { join } = require('path'); diff --git a/scripts/install-cross-deps.js b/scripts/install-cross-deps.js index 6a470fa984c..33ff2fc60b6 100644 --- a/scripts/install-cross-deps.js +++ b/scripts/install-cross-deps.js @@ -1,6 +1,5 @@ // Copyright 2021 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only -/* eslint-disable no-console */ const path = require('path'); const { execSync } = require('child_process'); diff --git a/scripts/prepare_alpha_build.js b/scripts/prepare_alpha_build.js index 68cc211bd45..ff8eb74cd56 100644 --- a/scripts/prepare_alpha_build.js +++ b/scripts/prepare_alpha_build.js @@ -1,8 +1,6 @@ // Copyright 2021 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only -/* eslint-disable no-console */ - const fs = require('fs'); const _ = require('lodash'); diff --git a/scripts/prepare_alpha_version.js b/scripts/prepare_alpha_version.js index d7198cf9e1c..bdd90e47c24 100644 --- a/scripts/prepare_alpha_version.js +++ b/scripts/prepare_alpha_version.js @@ -1,8 +1,6 @@ // Copyright 2021 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only -/* eslint-disable no-console */ - const fs = require('fs'); const { execSync } = require('child_process'); diff --git a/scripts/prepare_beta_build.js b/scripts/prepare_beta_build.js index 478d5050ad5..99173e1b0cf 100644 --- a/scripts/prepare_beta_build.js +++ b/scripts/prepare_beta_build.js @@ -1,8 +1,6 @@ // Copyright 2018-2020 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only -/* eslint-disable no-console */ - const fs = require('fs'); const _ = require('lodash'); diff --git a/scripts/prepare_windows_cert.js b/scripts/prepare_windows_cert.js index ca0cc17bc52..5c772fa0fd1 100644 --- a/scripts/prepare_windows_cert.js +++ b/scripts/prepare_windows_cert.js @@ -1,8 +1,6 @@ // Copyright 2018-2020 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only -/* eslint-disable no-console */ - const fs = require('fs'); const _ = require('lodash'); diff --git a/ts/scripts/.eslintrc.js b/ts/scripts/.eslintrc.js new file mode 100644 index 00000000000..5e8c6b7d77e --- /dev/null +++ b/ts/scripts/.eslintrc.js @@ -0,0 +1,16 @@ +// Copyright 2020 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +module.exports = { + rules: { + 'no-console': 'off', + + // We still get the value of this rule, it just allows for dev deps + 'import/no-extraneous-dependencies': [ + 'error', + { + devDependencies: true, + }, + ], + }, +}; diff --git a/ts/scripts/copy-and-concat.ts b/ts/scripts/copy-and-concat.ts new file mode 100644 index 00000000000..d0ce0c2a59d --- /dev/null +++ b/ts/scripts/copy-and-concat.ts @@ -0,0 +1,54 @@ +// Copyright 2021 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +import { basename, join } from 'path'; +import { copyFileSync, readFileSync, writeFileSync } from 'fs'; + +// Concat + +console.log('Concatenating...'); + +const BASE_BOWER = join(__dirname, '../../components'); +const BASE_NODE = join(__dirname, '../../node_modules'); +const CONCAT_TARGET = join(__dirname, '../../js/components.js'); +const CONCAT_SOURCES = [ + join(BASE_NODE, 'jquery/dist/jquery.js'), + join(BASE_NODE, 'mustache/mustache.js'), + join(BASE_NODE, 'underscore/underscore.js'), + join(BASE_BOWER, 'qrcode/qrcode.js'), + join(BASE_BOWER, 'webaudiorecorder/lib/WebAudioRecorder.js'), +]; + +let concat = '// concatenated components.js'; +CONCAT_SOURCES.forEach(source => { + const contents = readFileSync(source, 'utf8'); + const name = basename(source); + + console.log(`Concatenating ${source}`); + concat += `\n\n// ${name}\n${contents}`; +}); + +console.log(`Writing to ${CONCAT_TARGET}`); +writeFileSync(CONCAT_TARGET, concat); + +// Copy + +console.log(); +console.log('Copying...'); + +const BASE_JS = join(__dirname, '../../js'); +const COPY_SOURCES = [ + { + src: join(BASE_BOWER, 'mp3lameencoder/lib/Mp3LameEncoder.js'), + dest: join(BASE_JS, 'Mp3LameEncoder.min.js'), + }, + { + src: join(BASE_BOWER, 'webaudiorecorder/lib/WebAudioRecorderMp3.js'), + dest: join(BASE_JS, 'WebAudioRecorderMp3.js'), + }, +]; + +for (const { src, dest } of COPY_SOURCES) { + console.log(`Copying ${src} to ${dest}`); + copyFileSync(src, dest); +} diff --git a/ts/scripts/get-expire-time.ts b/ts/scripts/get-expire-time.ts new file mode 100644 index 00000000000..8b88691dcfb --- /dev/null +++ b/ts/scripts/get-expire-time.ts @@ -0,0 +1,26 @@ +// Copyright 2021 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +import { join } from 'path'; +import { execSync } from 'child_process'; +import { writeFileSync } from 'fs'; + +import { DAY } from '../util/durations'; + +const unixTimestamp = parseInt( + execSync('git show -s --format=%ct').toString('utf8'), + 10 +); +const buildCreation = unixTimestamp * 1000; + +const buildExpiration = buildCreation + DAY * 90; + +const localProductionPath = join( + __dirname, + '../../config/local-production.json' +); +const localProductionConfig = { buildCreation, buildExpiration }; +writeFileSync( + localProductionPath, + `${JSON.stringify(localProductionConfig)}\n` +); diff --git a/ts/scripts/get-strings.ts b/ts/scripts/get-strings.ts new file mode 100644 index 00000000000..d37311a4c6f --- /dev/null +++ b/ts/scripts/get-strings.ts @@ -0,0 +1,53 @@ +// Copyright 2021 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +import { join, resolve } from 'path'; +import { existsSync, readdirSync, writeFileSync } from 'fs'; +import { execSync } from 'child_process'; + +import { readJsonSync } from 'fs-extra'; +import type { LocaleMessagesType } from '../types/I18N'; + +console.log('Getting latest strings!'); + +console.log(); +console.log('Getting strings, allow for new ones over 80% translated'); +execSync('tx pull --all --use-git-timestamps --minimum-perc=80', { + stdio: [null, process.stdout, process.stderr], +}); + +console.log(); +console.log('Getting strings, updating everything previously missed'); +execSync('tx pull --use-git-timestamps', { + stdio: [null, process.stdout, process.stderr], +}); + +const BASE_DIR = join(__dirname, '../../_locales'); +const en: LocaleMessagesType = readJsonSync( + join(BASE_DIR, '/en/messages.json') +); +const locales = readdirSync(join(BASE_DIR, '')); + +console.log(); +console.log('Re-adding placeholders to non-en locales'); +locales.forEach((locale: string) => { + if (locale === 'en') { + return; + } + const target = resolve(join(BASE_DIR, locale, 'messages.json')); + if (!existsSync(target)) { + throw new Error(`File not found for ${locale}: ${target}`); + } + + const messages: LocaleMessagesType = readJsonSync(target); + Object.keys(messages).forEach(key => { + if (!en[key]) { + return; + } + + messages[key].placeholders = en[key].placeholders; + }); + + console.log(`Writing ${target}`); + writeFileSync(target, `${JSON.stringify(messages, null, 4)}\n`); +}); diff --git a/ts/scripts/zip-macos-release.ts b/ts/scripts/zip-macos-release.ts index 2c9b9c85d44..4710d16c4dd 100644 --- a/ts/scripts/zip-macos-release.ts +++ b/ts/scripts/zip-macos-release.ts @@ -1,8 +1,6 @@ // Copyright 2020 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only -/* eslint-disable no-console */ - import fs from 'fs'; import path from 'path'; import rimraf from 'rimraf'; diff --git a/ts/types/I18N.ts b/ts/types/I18N.ts index 8e7f468ad92..dfbf5107949 100644 --- a/ts/types/I18N.ts +++ b/ts/types/I18N.ts @@ -7,6 +7,12 @@ export type LocaleMessagesType = { [key: string]: { message: string; description?: string; + placeholders?: { + [name: string]: { + content: string; + example: string; + }; + }; }; }; diff --git a/ts/util/lint/exceptions.json b/ts/util/lint/exceptions.json index 8fad7a7f495..bcfa306840a 100644 --- a/ts/util/lint/exceptions.json +++ b/ts/util/lint/exceptions.json @@ -1,18 +1,4 @@ [ - { - "rule": "jQuery-after(", - "path": "components/indexeddb-backbonejs-adapter/backbone-indexeddb.js", - "reasonCategory": "falseMatch", - "updated": "2018-09-13T21:24:40.667Z", - "line": " migration.after(function () {" - }, - { - "rule": "jQuery-before(", - "path": "components/indexeddb-backbonejs-adapter/backbone-indexeddb.js", - "reasonCategory": "falseMatch", - "updated": "2018-09-13T21:24:40.667Z", - "line": " migration.before(function () {" - }, { "rule": "eval", "path": "components/mp3lameencoder/lib/Mp3LameEncoder.js", @@ -599,6 +585,101 @@ "reasonCategory": "falseMatch", "updated": "2018-09-19T18:13:29.628Z" }, + { + "rule": "jQuery-insertAfter(", + "path": "node_modules/async/dist/async.js", + "line": " if (this.tail) this.insertAfter(this.tail, node);", + "reasonCategory": "falseMatch", + "updated": "2021-12-11T02:14:15.457Z" + }, + { + "rule": "jQuery-insertBefore(", + "path": "node_modules/async/dist/async.js", + "line": " if (this.head) this.insertBefore(this.head, node);", + "reasonCategory": "falseMatch", + "updated": "2021-12-11T02:14:15.457Z" + }, + { + "rule": "jQuery-insertBefore(", + "path": "node_modules/async/dist/async.js", + "line": " q._tasks.insertBefore(nextNode, item);", + "reasonCategory": "falseMatch", + "updated": "2021-12-11T02:14:15.457Z" + }, + { + "rule": "jQuery-wrap(", + "path": "node_modules/async/dist/async.js", + "line": "function wrap(defer) {", + "reasonCategory": "falseMatch", + "updated": "2021-12-11T02:14:15.457Z" + }, + { + "rule": "jQuery-wrap(", + "path": "node_modules/async/dist/async.js", + "line": "var setImmediate$1 = wrap(_defer);", + "reasonCategory": "falseMatch", + "updated": "2021-12-11T02:14:15.457Z" + }, + { + "rule": "jQuery-wrap(", + "path": "node_modules/async/dist/async.js", + "line": "var nextTick = wrap(_defer$1);", + "reasonCategory": "falseMatch", + "updated": "2021-12-11T02:14:15.457Z" + }, + { + "rule": "jQuery-$(", + "path": "node_modules/async/dist/async.min.js", + "reasonCategory": "falseMatch", + "updated": "2021-12-11T02:14:15.457Z" + }, + { + "rule": "jQuery-insertAfter(", + "path": "node_modules/async/dist/async.min.js", + "reasonCategory": "falseMatch", + "updated": "2021-12-11T02:14:15.457Z" + }, + { + "rule": "jQuery-insertBefore(", + "path": "node_modules/async/dist/async.min.js", + "reasonCategory": "falseMatch", + "updated": "2021-12-11T02:14:15.457Z" + }, + { + "rule": "jQuery-insertAfter(", + "path": "node_modules/async/internal/DoublyLinkedList.js", + "line": " if (this.tail) this.insertAfter(this.tail, node);else setInitial(this, node);", + "reasonCategory": "falseMatch", + "updated": "2021-12-11T02:14:15.457Z" + }, + { + "rule": "jQuery-insertBefore(", + "path": "node_modules/async/internal/DoublyLinkedList.js", + "line": " if (this.head) this.insertBefore(this.head, node);else setInitial(this, node);", + "reasonCategory": "falseMatch", + "updated": "2021-12-11T02:14:15.457Z" + }, + { + "rule": "jQuery-wrap(", + "path": "node_modules/async/internal/setImmediate.js", + "line": "function wrap(defer) {", + "reasonCategory": "falseMatch", + "updated": "2021-12-11T02:14:15.457Z" + }, + { + "rule": "jQuery-wrap(", + "path": "node_modules/async/internal/setImmediate.js", + "line": "exports.default = wrap(_defer);", + "reasonCategory": "falseMatch", + "updated": "2021-12-11T02:14:15.457Z" + }, + { + "rule": "jQuery-insertBefore(", + "path": "node_modules/async/priorityQueue.js", + "line": " q._tasks.insertBefore(nextNode, item);", + "reasonCategory": "falseMatch", + "updated": "2021-12-11T02:14:15.457Z" + }, { "rule": "DOM-innerHTML", "path": "node_modules/axe-core/axe.js", @@ -6618,26 +6699,6 @@ "reasonCategory": "falseMatch", "updated": "2018-09-19T21:59:32.770Z" }, - { - "rule": "jQuery-wrap(", - "path": "node_modules/underscore.string/dist/underscore.string.js", - "line": "module.exports = function wrap(str, options){", - "reasonCategory": "falseMatch", - "updated": "2018-09-19T18:13:29.628Z" - }, - { - "rule": "jQuery-wrap(", - "path": "node_modules/underscore.string/dist/underscore.string.min.js", - "reasonCategory": "falseMatch", - "updated": "2021-05-06T21:37:22.288Z" - }, - { - "rule": "jQuery-wrap(", - "path": "node_modules/underscore.string/wrap.js", - "line": "module.exports = function wrap(str, options){", - "reasonCategory": "falseMatch", - "updated": "2018-09-19T18:13:29.628Z" - }, { "rule": "jQuery-after(", "path": "node_modules/underscore/amd/after.js", diff --git a/ts/util/lint/license_comments.ts b/ts/util/lint/license_comments.ts index 8eb83e56ef0..3e89614ba38 100644 --- a/ts/util/lint/license_comments.ts +++ b/ts/util/lint/license_comments.ts @@ -38,7 +38,6 @@ const FILES_TO_IGNORE = new Set( [ '.github/ISSUE_TEMPLATE/bug_report.md', '.github/PULL_REQUEST_TEMPLATE.md', - 'components/indexeddb-backbonejs-adapter/backbone-indexeddb.js', 'components/mp3lameencoder/lib/Mp3LameEncoder.js', 'components/qrcode/qrcode.js', 'components/recorderjs/recorder.js', diff --git a/ts/util/lint/linter.ts b/ts/util/lint/linter.ts index 2c782541e22..e6f6d8a17f4 100644 --- a/ts/util/lint/linter.ts +++ b/ts/util/lint/linter.ts @@ -170,14 +170,6 @@ const excludedFilesRegexp = RegExp( '^node_modules/gauge/.+', '^node_modules/global-agent/.+', '^node_modules/globule/.+', - '^node_modules/grunt-cli/.+', - '^node_modules/grunt-contrib-concat/.+', - '^node_modules/grunt-contrib-watch/.+', - '^node_modules/grunt-gitinfo/.+', - '^node_modules/grunt-legacy-log-utils/.+', - '^node_modules/grunt-legacy-log/.+', - '^node_modules/grunt-legacy-util/.+', - '^node_modules/grunt/.+', '^node_modules/handle-thing/.+', '^node_modules/handlebars/.+', // Used by nyc#istanbul-reports '^node_modules/har-validator/.+', diff --git a/yarn.lock b/yarn.lock index 2ed44b38611..ffb38d5e8d8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3862,11 +3862,6 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= -array-each@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" - integrity sha1-p5SvDAWrF1KEbudTofIRoFugxE8= - array-filter@~0.0.0: version "0.0.1" resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" @@ -3923,11 +3918,6 @@ array-reduce@~0.0.0: resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys= -array-slice@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4" - integrity sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w== - array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" @@ -4127,7 +4117,7 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== -async@0.9.x, async@~0.9.0: +async@0.9.x: version "0.9.2" resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" @@ -4137,18 +4127,13 @@ async@^2.1.4: dependencies: lodash "^4.14.0" -async@^2.6.0, async@^2.6.2: +async@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== dependencies: lodash "^4.17.14" -async@~3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" - integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw== - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -4746,16 +4731,6 @@ body-parser@1.19.0: raw-body "2.4.0" type-is "~1.6.17" -body@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/body/-/body-5.1.0.tgz#e4ba0ce410a46936323367609ecb4e6553125069" - integrity sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk= - dependencies: - continuable-cache "^0.3.1" - error "^7.0.0" - raw-body "~1.1.0" - safe-json-parse "~1.0.1" - bonjour@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" @@ -5036,11 +5011,6 @@ builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" -bytes@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-1.0.0.tgz#3569ede8ba34315fab99c3e92cb04c7220de1fa8" - integrity sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g= - bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -5288,7 +5258,7 @@ chalk@^4.0.0, chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.1.1, chalk@^4.1.2: +chalk@^4.1.1: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -5296,14 +5266,6 @@ chalk@^4.1.1, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@~4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" - integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - change-emitter@^0.1.2: version "0.1.6" resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515" @@ -5681,10 +5643,6 @@ colors@^1.1.2: resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d" integrity sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg== -colors@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" - combined-stream@1.0.6, combined-stream@~1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" @@ -5866,11 +5824,6 @@ content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" -continuable-cache@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/continuable-cache/-/continuable-cache-0.3.1.tgz#bd727a7faed77e71ff3985ac93351a912733ad0f" - integrity sha1-vXJ6f67XfnH/OYWskzUakSczrQ8= - convert-source-map@^1.1.0, convert-source-map@^1.5.0, convert-source-map@^1.5.1: version "1.6.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" @@ -6271,11 +6224,6 @@ date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" -dateformat@~3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" - integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== - debug-log@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f" @@ -6512,11 +6460,6 @@ destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" -detect-file@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" - integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= - detect-indent@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" @@ -7079,13 +7022,6 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -error@^7.0.0: - version "7.2.1" - resolved "https://registry.yarnpkg.com/error/-/error-7.2.1.tgz#eab21a4689b5f684fc83da84a0e390de82d94894" - integrity sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA== - dependencies: - string-template "~0.2.1" - es-abstract@^1.10.0, es-abstract@^1.11.0, es-abstract@^1.12.0, es-abstract@^1.13.0, es-abstract@^1.4.3, es-abstract@^1.5.1, es-abstract@^1.9.0: version "1.13.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" @@ -7661,10 +7597,6 @@ event-target-shim@^5.0.0: resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== -eventemitter2@~0.4.13: - version "0.4.14" - resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-0.4.14.tgz#8f61b75cde012b2e9eb284d4545583b5643b61ab" - eventemitter3@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-2.0.3.tgz#b5e1079b59fb5e1ba2771c0a993be060a58c99ba" @@ -7772,11 +7704,6 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -exit@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= - expand-brackets@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" @@ -7806,13 +7733,6 @@ expand-template@^2.0.3: resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== -expand-tilde@^2.0.0, expand-tilde@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" - integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= - dependencies: - homedir-polyfill "^1.0.1" - express@^4.17.0, express@^4.17.1: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" @@ -8039,12 +7959,6 @@ faye-websocket@^0.11.3, faye-websocket@~0.11.1: dependencies: websocket-driver ">=0.5.1" -faye-websocket@~0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" - dependencies: - websocket-driver ">=0.5.1" - fbjs@^0.8.0, fbjs@^0.8.1: version "0.8.17" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" @@ -8120,10 +8034,6 @@ file-selector@^0.1.11: dependencies: tslib "^1.9.0" -file-sync-cmp@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz#a5e7a8ffbfa493b43b923bbd4ca89a53b63b612b" - file-system-cache@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/file-system-cache/-/file-system-cache-1.0.5.tgz#84259b36a2bbb8d3d6eb1021d3132ffe64cfff4f" @@ -8272,43 +8182,11 @@ find-yarn-workspace-root@^2.0.0: dependencies: micromatch "^4.0.2" -findup-sync@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-4.0.0.tgz#956c9cdde804052b881b428512905c4a5f2cdef0" - integrity sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ== - dependencies: - detect-file "^1.0.0" - is-glob "^4.0.0" - micromatch "^4.0.2" - resolve-dir "^1.0.1" - -findup-sync@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.3.0.tgz#37930aa5d816b777c03445e1966cc6790a4c0b16" - dependencies: - glob "~5.0.0" - -fined@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fined/-/fined-1.2.0.tgz#d00beccf1aa2b475d16d423b0238b713a2c4a37b" - integrity sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng== - dependencies: - expand-tilde "^2.0.2" - is-plain-object "^2.0.3" - object.defaults "^1.1.0" - object.pick "^1.2.0" - parse-filepath "^1.0.1" - firstline@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/firstline/-/firstline-1.2.1.tgz#b88673c42009f8821fac2926e99720acee924fae" integrity sha1-uIZzxCAJ+IIfrCkm6ZcgrO6ST64= -flagged-respawn@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.1.tgz#e7de6f1279ddd9ca9aac8a5971d618606b3aab41" - integrity sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q== - flat-cache@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" @@ -8381,13 +8259,6 @@ for-own@^0.1.3, for-own@^0.1.4: dependencies: for-in "^1.0.1" -for-own@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" - integrity sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs= - dependencies: - for-in "^1.0.1" - foreach@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" @@ -8638,13 +8509,6 @@ gaze@^1.0.0: dependencies: globule "^1.0.0" -gaze@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" - integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g== - dependencies: - globule "^1.0.0" - gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -8740,15 +8604,6 @@ get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" -getobject@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/getobject/-/getobject-0.1.0.tgz#047a449789fa160d018f5486ed91320b6ec7885c" - -getobject@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/getobject/-/getobject-1.0.0.tgz#27eeb6394716cfb6adcef275a33c2752df9ca49a" - integrity sha512-tbUz6AKKKr2YiMB+fLWIgq5ZeBOobop9YMMAU9dC54/ot2ksMXt3DOFyBuhZw6ptcVszEykgByK20j7W9jHFag== - getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -8805,7 +8660,7 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@7.1.6, glob@^7.1.3, glob@^7.1.6, glob@~7.1.6: +glob@7.1.6, glob@^7.1.3, glob@^7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -8874,16 +8729,6 @@ glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -glob@~5.0.0: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - global-agent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-3.0.0.tgz#ae7cd31bd3583b93c5a16437a1afe27cc33a1ab6" @@ -8910,26 +8755,6 @@ global-modules@2.0.0: dependencies: global-prefix "^3.0.0" -global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== - dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^1.0.0" - -global-prefix@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" - integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= - dependencies: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - global-prefix@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" @@ -9102,135 +8927,6 @@ growl@1.10.5: resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== -grunt-cli@1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/grunt-cli/-/grunt-cli-1.4.3.tgz#22c9f1a3d2780bf9b0d206e832e40f8f499175ff" - integrity sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ== - dependencies: - grunt-known-options "~2.0.0" - interpret "~1.1.0" - liftup "~3.0.1" - nopt "~4.0.1" - v8flags "~3.2.0" - -grunt-cli@~1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/grunt-cli/-/grunt-cli-1.4.2.tgz#8a83dcc89ebd92d278ccd6014105011cffc71165" - integrity sha512-wsu6BZh7KCnfeaSkDrKIAvOlqGKxNRTZjc8xfZlvxCByQIqUfZ31kh5uHpPnhQ4NdVgvaWaVxa1LUbVU80nACw== - dependencies: - grunt-known-options "~1.1.1" - interpret "~1.1.0" - liftup "~3.0.1" - nopt "~4.0.1" - v8flags "~3.2.0" - -grunt-contrib-concat@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/grunt-contrib-concat/-/grunt-contrib-concat-2.0.0.tgz#3af65e4663186abce6052a6bed345b53c0551090" - integrity sha512-/cfWwsGiprVTOl7c2bZwMdQ8hIf3e1f4szm1i7qhY9hOnR/X2KL+Xe7dynNweTYHa6aWPZx2B5GPsUpxAXNCaA== - dependencies: - chalk "^4.1.2" - source-map "^0.5.3" - -grunt-contrib-copy@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz#7060c6581e904b8ab0d00f076e0a8f6e3e7c3573" - integrity sha1-cGDGWB6QS4qw0A8HbgqPbj58NXM= - dependencies: - chalk "^1.1.1" - file-sync-cmp "^0.1.0" - -grunt-contrib-watch@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/grunt-contrib-watch/-/grunt-contrib-watch-1.1.0.tgz#c143ca5b824b288a024b856639a5345aedb78ed4" - integrity sha512-yGweN+0DW5yM+oo58fRu/XIRrPcn3r4tQx+nL7eMRwjpvk+rQY6R8o94BPK0i2UhTg9FN21hS+m8vR8v9vXfeg== - dependencies: - async "^2.6.0" - gaze "^1.1.0" - lodash "^4.17.10" - tiny-lr "^1.1.1" - -grunt-exec@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/grunt-exec/-/grunt-exec-3.0.0.tgz#881f868d64098788fddaf22fa25d8572a9d64dc7" - integrity sha512-cgAlreXf3muSYS5LzW0Cc4xHK03BjFOYk0MqCQ/MZ3k1Xz2GU7D+IAJg4UKicxpO+XdONJdx/NJ6kpy2wI+uHg== - -grunt-gitinfo@0.1.9: - version "0.1.9" - resolved "https://registry.yarnpkg.com/grunt-gitinfo/-/grunt-gitinfo-0.1.9.tgz#299601084e5638cff0e3e4d36093beb5cec9b9ba" - integrity sha512-nAyUZQrLkgHZuqepTgkA3jn9CX4kyrNcWzjENxo/nOwYjZPEWDJeaxWcYrAzB5OcBk5gYJmTA0r3XCgczxtbPg== - dependencies: - async "~0.9.0" - getobject "~0.1.0" - lodash "^4.17.14" - -grunt-known-options@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/grunt-known-options/-/grunt-known-options-1.1.1.tgz#6cc088107bd0219dc5d3e57d91923f469059804d" - integrity sha512-cHwsLqoighpu7TuYj5RonnEuxGVFnztcUqTqp5rXFGYL4OuPFofwC4Ycg7n9fYwvK6F5WbYgeVOwph9Crs2fsQ== - -grunt-known-options@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/grunt-known-options/-/grunt-known-options-2.0.0.tgz#cac641e897f9a0a680b8c9839803d35f3325103c" - integrity sha512-GD7cTz0I4SAede1/+pAbmJRG44zFLPipVtdL9o3vqx9IEyb7b4/Y3s7r6ofI3CchR5GvYJ+8buCSioDv5dQLiA== - -grunt-legacy-log-utils@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.1.0.tgz#49a8c7dc74051476dcc116c32faf9db8646856ef" - integrity sha512-lwquaPXJtKQk0rUM1IQAop5noEpwFqOXasVoedLeNzaibf/OPWjKYvvdqnEHNmU+0T0CaReAXIbGo747ZD+Aaw== - dependencies: - chalk "~4.1.0" - lodash "~4.17.19" - -grunt-legacy-log@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/grunt-legacy-log/-/grunt-legacy-log-3.0.0.tgz#1c6eaf92371ea415af31ea84ce50d434ef6d39c4" - integrity sha512-GHZQzZmhyq0u3hr7aHW4qUH0xDzwp2YXldLPZTCjlOeGscAOWWPftZG3XioW8MasGp+OBRIu39LFx14SLjXRcA== - dependencies: - colors "~1.1.2" - grunt-legacy-log-utils "~2.1.0" - hooker "~0.2.3" - lodash "~4.17.19" - -grunt-legacy-util@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/grunt-legacy-util/-/grunt-legacy-util-2.0.1.tgz#0f929d13a2faf9988c9917c82bff609e2d9ba255" - integrity sha512-2bQiD4fzXqX8rhNdXkAywCadeqiPiay0oQny77wA2F3WF4grPJXCvAcyoWUJV+po/b15glGkxuSiQCK299UC2w== - dependencies: - async "~3.2.0" - exit "~0.1.2" - getobject "~1.0.0" - hooker "~0.2.3" - lodash "~4.17.21" - underscore.string "~3.3.5" - which "~2.0.2" - -grunt-sass@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/grunt-sass/-/grunt-sass-3.1.0.tgz#a5936cc2a80ec08092d9f31c101dc307d1e4f71c" - integrity sha512-90s27H7FoCDcA8C8+R0GwC+ntYD3lG6S/jqcavWm3bn9RiJTmSfOvfbFa1PXx4NbBWuiGQMLfQTj/JvvqT5w6A== - -grunt@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/grunt/-/grunt-1.4.1.tgz#7d1e17db1f9c8108777f7273d6b9359755576f50" - integrity sha512-ZXIYXTsAVrA7sM+jZxjQdrBOAg7DyMUplOMhTaspMRExei+fD0BTwdWXnn0W5SXqhb/Q/nlkzXclSi3IH55PIA== - dependencies: - dateformat "~3.0.3" - eventemitter2 "~0.4.13" - exit "~0.1.2" - findup-sync "~0.3.0" - glob "~7.1.6" - grunt-cli "~1.4.2" - grunt-known-options "~2.0.0" - grunt-legacy-log "~3.0.0" - grunt-legacy-util "~2.0.1" - iconv-lite "~0.4.13" - js-yaml "~3.14.0" - minimatch "~3.0.4" - mkdirp "~1.0.4" - nopt "~3.0.6" - rimraf "~3.0.2" - gud@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" @@ -9477,17 +9173,6 @@ hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0: dependencies: react-is "^16.7.0" -homedir-polyfill@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" - integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== - dependencies: - parse-passwd "^1.0.0" - -hooker@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/hooker/-/hooker-0.2.3.tgz#b834f723cc4a242aa65963459df6d984c5d3d959" - hosted-git-info@^2.1.4: version "2.8.9" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" @@ -9748,10 +9433,6 @@ iconv-lite@^0.6.2: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -iconv-lite@~0.4.13: - version "0.4.13" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" - icss-replace-symbols@1.1.0, icss-replace-symbols@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" @@ -9987,11 +9668,6 @@ interpret@^2.2.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== -interpret@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" - integrity sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ= - intl-tel-input@17.0.13: version "17.0.13" resolved "https://registry.yarnpkg.com/intl-tel-input/-/intl-tel-input-17.0.13.tgz#74a51db3b44f47ae8264df7d101a0810e53c77a6" @@ -10043,14 +9719,6 @@ is-absolute-url@^3.0.3: resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== -is-absolute@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" - integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== - dependencies: - is-relative "^1.0.0" - is-windows "^1.0.1" - is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -10471,13 +10139,6 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-relative@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" - integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== - dependencies: - is-unc-path "^1.0.0" - is-root@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" @@ -10532,13 +10193,6 @@ is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" -is-unc-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" - integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== - dependencies: - unc-path-regex "^0.1.2" - is-unicode-supported@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" @@ -10560,7 +10214,7 @@ is-window@^1.0.2: resolved "https://registry.yarnpkg.com/is-window/-/is-window-1.0.2.tgz#2c896ca53db97de45d3c33133a65d8c9f563480d" integrity sha1-LIlspT25feRdPDMTOmXYyfVjSA0= -is-windows@^1.0.0, is-windows@^1.0.1, is-windows@^1.0.2: +is-windows@^1.0.0, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -10748,14 +10402,6 @@ js-yaml@^3.2.7: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@~3.14.0: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -11060,20 +10706,6 @@ libheif-js@^1.10.0: resolved "https://registry.yarnpkg.com/libheif-js/-/libheif-js-1.12.0.tgz#9ad1ed16a8e6412b4d3d83565d285465a00e7305" integrity sha512-hDs6xQ7028VOwAFwEtM0Q+B2x2NW69Jb2MhQFUbk3rUrHzz4qo5mqS8VrqNgYnSc8TiUGnR691LnO4uIfEE23w== -liftup@~3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/liftup/-/liftup-3.0.1.tgz#1cb81aff0f368464ed3a5f1a7286372d6b1a60ce" - integrity sha512-yRHaiQDizWSzoXk3APcA71eOI/UuhEkNN9DiW2Tt44mhYzX4joFoCZlxsSOF7RyeLlfqzFLQI1ngFq3ggMPhOw== - dependencies: - extend "^3.0.2" - findup-sync "^4.0.0" - fined "^1.2.0" - flagged-respawn "^1.0.1" - is-plain-object "^2.0.4" - object.map "^1.0.1" - rechoir "^0.7.0" - resolve "^1.19.0" - lines-and-columns@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" @@ -11086,11 +10718,6 @@ linkify-it@2.2.0: dependencies: uc.micro "^1.0.1" -livereload-js@^2.3.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/livereload-js/-/livereload-js-2.4.0.tgz#447c31cf1ea9ab52fc20db615c5ddf678f78009c" - integrity sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw== - load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" @@ -11201,7 +10828,7 @@ lodash.throttle@^4.1.1: resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ= -lodash@4.17.21, lodash@^4.0.0, lodash@^4.0.1, lodash@^4.14.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.2.1, lodash@~4.17.19, lodash@~4.17.21: +lodash@4.17.21, lodash@^4.0.0, lodash@^4.0.1, lodash@^4.14.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.2.1: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -11340,13 +10967,6 @@ make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== -make-iterator@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6" - integrity sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw== - dependencies: - kind-of "^6.0.2" - mamacro@^0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" @@ -11359,7 +10979,7 @@ map-age-cleaner@^0.1.1: dependencies: p-defer "^1.0.0" -map-cache@^0.2.0, map-cache@^0.2.2: +map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -11748,7 +11368,7 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -"minimatch@2 || 3", minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.2, minimatch@~3.0.4: +minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.2: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== @@ -11860,7 +11480,7 @@ mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.5, mkdirp@~0.5.1: dependencies: minimist "^1.2.5" -mkdirp@^1.0.3, mkdirp@~1.0.4: +mkdirp@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== @@ -12262,20 +11882,6 @@ nopt@~1.0.10: dependencies: abbrev "1" -nopt@~3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - dependencies: - abbrev "1" - -nopt@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" - integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== - dependencies: - abbrev "1" - osenv "^0.1.4" - normalize-package-data@^2.3.2: version "2.4.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" @@ -12469,7 +12075,7 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.11.0: +object-inspect@^1.11.0, object-inspect@^1.9.0: version "1.11.1" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.1.tgz#d4bd7d7de54b9a75599f59a00bd698c1f1c6549b" integrity sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA== @@ -12479,11 +12085,6 @@ object-inspect@^1.7.0, object-inspect@^1.8.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== -object-inspect@^1.9.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" - integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== - object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" @@ -12519,16 +12120,6 @@ object.assign@^4.1.2: has-symbols "^1.0.1" object-keys "^1.1.1" -object.defaults@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" - integrity sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8= - dependencies: - array-each "^1.0.1" - array-slice "^1.0.0" - for-own "^1.0.0" - isobject "^3.0.0" - object.entries@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.0.tgz#2024fc6d6ba246aee38bdb0ffd5cfbcf371b7519" @@ -12602,14 +12193,6 @@ object.hasown@^1.1.0: define-properties "^1.1.3" es-abstract "^1.19.1" -object.map@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object.map/-/object.map-1.0.1.tgz#cf83e59dc8fcc0ad5f4250e1f78b3b81bd801d37" - integrity sha1-z4Plncj8wK1fQlDh94s7gb2AHTc= - dependencies: - for-own "^1.0.0" - make-iterator "^1.0.0" - object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" @@ -12617,7 +12200,7 @@ object.omit@^2.0.0: for-own "^0.1.4" is-extendable "^0.1.1" -object.pick@^1.2.0, object.pick@^1.3.0: +object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" dependencies: @@ -13011,15 +12594,6 @@ parse-entities@^1.1.2: is-decimal "^1.0.0" is-hexadecimal "^1.0.0" -parse-filepath@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" - integrity sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE= - dependencies: - is-absolute "^1.0.0" - map-cache "^0.2.0" - path-root "^0.1.1" - parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" @@ -13053,11 +12627,6 @@ parse-json@^5.0.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= - parseurl@~1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" @@ -13145,18 +12714,6 @@ path-parse@^1.0.5, path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-root-regex@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" - integrity sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0= - -path-root@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" - integrity sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc= - dependencies: - path-root-regex "^0.1.0" - path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" @@ -13886,13 +13443,6 @@ qs@6.7.0: resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== -qs@^6.4.0: - version "6.10.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a" - integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg== - dependencies: - side-channel "^1.0.4" - qs@^6.6.0: version "6.8.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.8.0.tgz#87b763f0d37ca54200334cd57bb2ef8f68a1d081" @@ -14041,14 +13591,6 @@ raw-body@^2.2.0: iconv-lite "0.4.19" unpipe "1.0.0" -raw-body@~1.1.0: - version "1.1.7" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-1.1.7.tgz#1d027c2bfa116acc6623bca8f00016572a87d425" - integrity sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU= - dependencies: - bytes "1" - string_decoder "0.10" - raw-loader@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-2.0.0.tgz#e2813d9e1e3f80d1bbade5ad082e809679e20c26" @@ -15019,14 +14561,6 @@ resolve-cwd@^3.0.0: dependencies: resolve-from "^5.0.0" -resolve-dir@^1.0.0, resolve-dir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" - integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= - dependencies: - expand-tilde "^2.0.0" - global-modules "^1.0.0" - resolve-from@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" @@ -15075,7 +14609,7 @@ resolve@^1.13.1, resolve@^1.17.0: dependencies: path-parse "^1.0.6" -resolve@^1.19.0, resolve@^1.20.0, resolve@^1.9.0: +resolve@^1.20.0, resolve@^1.9.0: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -15160,7 +14694,7 @@ rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: dependencies: glob "^7.1.3" -rimraf@^3.0.0, rimraf@^3.0.2, rimraf@~3.0.2: +rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -15234,11 +14768,6 @@ safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-json-parse@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/safe-json-parse/-/safe-json-parse-1.0.1.tgz#3e76723e38dfdda13c9b1d29a1e07ffee4b30b57" - integrity sha1-PnZyPjjf3aE8mx0poeB//uSzC1c= - safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" @@ -15962,7 +15491,7 @@ split2@4.0.0: resolved "https://registry.yarnpkg.com/split2/-/split2-4.0.0.tgz#c76cb53ad55040ddff3a9c3b73fc88a4690f047c" integrity sha512-gjmavJzvQCAZzaEHWoJBOwqIUAiEvUOlguQ6uO0+0LTS1tlLa2YetTLWCrm049ouvLOa1l6SOGm3XaiRiCg9SQ== -sprintf-js@^1.0.3, sprintf-js@^1.1.2: +sprintf-js@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== @@ -16069,11 +15598,6 @@ strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" -string-template@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" - integrity sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0= - string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -16210,10 +15734,6 @@ string.prototype.trimstart@^1.0.4: call-bind "^1.0.2" define-properties "^1.1.3" -string_decoder@0.10, string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - string_decoder@^1.0.0, string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -16228,6 +15748,10 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + strip-ansi@5.2.0, strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" @@ -16633,18 +16157,6 @@ tiny-invariant@^1.0.2: resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.0.6.tgz#b3f9b38835e36a41c843a3b0907a5a7b3755de73" integrity sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA== -tiny-lr@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/tiny-lr/-/tiny-lr-1.1.1.tgz#9fa547412f238fedb068ee295af8b682c98b2aab" - integrity sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA== - dependencies: - body "^5.1.0" - debug "^3.1.0" - faye-websocket "~0.10.0" - livereload-js "^2.3.0" - object-assign "^4.1.0" - qs "^6.4.0" - tiny-warning@^1.0.0, tiny-warning@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" @@ -17009,19 +16521,6 @@ unbox-primitive@^1.0.1: has-symbols "^1.0.2" which-boxed-primitive "^1.0.2" -unc-path-regex@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" - integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo= - -underscore.string@~3.3.5: - version "3.3.5" - resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.5.tgz#fc2ad255b8bd309e239cbc5816fd23a9b7ea4023" - integrity sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg== - dependencies: - sprintf-js "^1.0.3" - util-deprecate "^1.0.2" - underscore@1.12.1, underscore@>=1.8.3: version "1.12.1" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.12.1.tgz#7bb8cc9b3d397e201cf8553336d262544ead829e" @@ -17264,13 +16763,6 @@ v8-compile-cache@^2.2.0: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== -v8flags@~3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.2.0.tgz#b243e3b4dfd731fa774e7492128109a0fe66d656" - integrity sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg== - dependencies: - homedir-polyfill "^1.0.1" - validate-npm-package-license@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" @@ -17587,14 +17079,14 @@ which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" -which@2.0.2, which@^2.0.1, which@^2.0.2, which@~2.0.2: +which@2.0.2, which@^2.0.1, which@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" -which@^1.2.14, which@^1.2.9, which@^1.3.1: +which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==