Remove Grunt in favor of ts/scripts

This commit is contained in:
Scott Nonnenberg 2021-12-14 08:43:46 -08:00 committed by GitHub
parent 4e947211b2
commit e74376b997
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
92 changed files with 1137 additions and 1661 deletions

View file

@ -56,7 +56,7 @@ jobs:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
- name: Build typescript - name: Build typescript
run: yarn grunt run: yarn generate
- name: Bundle - name: Bundle
run: yarn build:webpack run: yarn build:webpack

View file

@ -128,7 +128,6 @@ jobs:
run: yarn install --frozen-lockfile run: yarn install --frozen-lockfile
- run: yarn generate - run: yarn generate
- run: node build\grunt.js
- run: yarn test-node - run: yarn test-node
- run: copy package.json temp.json - run: copy package.json temp.json
- run: del package.json - run: del package.json

View file

@ -59,7 +59,7 @@ cd Signal-Desktop
git-lfs install # Setup Git LFS. git-lfs install # Setup Git LFS.
npm install --global yarn # (only if you dont already have `yarn`) npm install --global yarn # (only if you dont already have `yarn`)
yarn install --frozen-lockfile # Install and build dependencies (this will take a while) 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 build:webpack # Build parts of the app that use webpack (Sticker Creator)
yarn test # A good idea to make sure tests run first yarn test # A good idea to make sure tests run first
yarn start # Start Signal! yarn start # Start Signal!
@ -72,13 +72,14 @@ is no automatic restart mechanism. Alternatively, keep the developer tools open
(Windows & Linux). (Windows & Linux).
Also, note that the assets loaded by the application are not necessarily the same files Also, note that the assets loaded by the application are not necessarily the same files
youre touching. You may not see your changes until you run `yarn grunt` on the youre 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 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 the latest built assets when you change a file. Run each of these in their own terminal
while you make changes: 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. If you miss the `git-lfs` step, run `yarn cache clean` and remove `node_modules` before trying again.

View file

@ -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',
]);
};

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Voorskou van duimnaelskakel vir $domain$", "message": "Voorskou van duimnaelskakel vir $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktop ran into a decryption error.", "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": { "decryptionErrorToastAction": {
"message": "Submit log", "message": "Submit log",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "يتم جلب صورة مصغرة لمعاينة الوصلة $domain$", "message": "يتم جلب صورة مصغرة لمعاينة الوصلة $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "واجه سطح المكتب خطأ في فك التشفير.", "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": { "decryptionErrorToastAction": {
"message": "إرسال السجل", "message": "إرسال السجل",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "$domain$ üçün bağlantı önbaxış eskizi", "message": "$domain$ üçün bağlantı önbaxış eskizi",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Masaüstü, şifrə açma xətası ilə qarşılaşdı.", "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": { "decryptionErrorToastAction": {
"message": "Jurnalı göndər", "message": "Jurnalı göndər",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Преглед на линк към $domain$", "message": "Преглед на линк към $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktop ran into a decryption error.", "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": { "decryptionErrorToastAction": {
"message": "Submit log", "message": "Submit log",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "$domain$ লিঙ্ক এর জন্য ছোট পূর্বরূপ", "message": "$domain$ লিঙ্ক এর জন্য ছোট পূর্বরূপ",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "ডেস্কটপে একটি ডিক্রিপশন ত্রুটি হয়েছে।", "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": { "decryptionErrorToastAction": {
"message": "লগ জমা দিন", "message": "লগ জমা দিন",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Previsualització de la vista en miniatura de l'enllaç $domain$", "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", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Hi ha hagut un error de desencriptació.", "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": { "decryptionErrorToastAction": {
"message": "Envia el registre", "message": "Envia el registre",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Náhled na odkaz pro $domain$", "message": "Náhled na odkaz pro $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktop narazil na chybu při dešifrování.", "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": { "decryptionErrorToastAction": {
"message": "Odeslat log", "message": "Odeslat log",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Rhagolwg dolen llun bach ar gyfer $domain$", "message": "Rhagolwg dolen llun bach ar gyfer $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Cafodd y bwrdd gwaith yn wall dadgryptio.", "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": { "decryptionErrorToastAction": {
"message": "Cyflwyno cofnod", "message": "Cyflwyno cofnod",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Miniature-linkforhåndsvisning for $domain$", "message": "Miniature-linkforhåndsvisning for $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktop stødte på en dekrypteringsfejl.", "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": { "decryptionErrorToastAction": {
"message": "Indsend log", "message": "Indsend log",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Miniaturbild der Link-Vorschau für $domain$", "message": "Miniaturbild der Link-Vorschau für $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Es trat ein Entschlüsselungsfehler auf.", "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": { "decryptionErrorToastAction": {
"message": "Diagnoseprotokoll übermitteln", "message": "Diagnoseprotokoll übermitteln",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Προεπισκόπηση συνδέσμου για $domain$", "message": "Προεπισκόπηση συνδέσμου για $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Το Desktop αντιμετώπισε σφάλμα αποκρυπτογράφησης.", "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": { "decryptionErrorToastAction": {
"message": "Υποβολή αρχείου", "message": "Υποβολή αρχείου",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Miniatura antaŭrigardo de ligilo pri $domain$", "message": "Miniatura antaŭrigardo de ligilo pri $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Eraro de malĉifrado okazis.", "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": { "decryptionErrorToastAction": {
"message": "Sendi protokolon", "message": "Sendi protokolon",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Miniatura de vista previa para $domain$", "message": "Miniatura de vista previa para $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Fallo encontrado al descifrar.", "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": { "decryptionErrorToastAction": {
"message": "Enviar el registro de depuración", "message": "Enviar el registro de depuración",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Lingi eelvaate pisipilt: $domain$", "message": "Lingi eelvaate pisipilt: $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Programmil tekkis dekrüptimistõrge.", "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": { "decryptionErrorToastAction": {
"message": "Postita logi", "message": "Postita logi",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Estekaren miniatura aurrebista $domain$ domeinurako", "message": "Estekaren miniatura aurrebista $domain$ domeinurako",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktop ran into a decryption error.", "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": { "decryptionErrorToastAction": {
"message": "Submit log", "message": "Submit log",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "پیش نمایش پیوند thumbnail برای $domain$", "message": "پیش نمایش پیوند thumbnail برای $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktop ran into a decryption error.", "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": { "decryptionErrorToastAction": {
"message": "Submit log", "message": "Submit log",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Linkin $domain$ esikatselukuva", "message": "Linkin $domain$ esikatselukuva",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Ohjelma törmäsi salauksen purkuvirheeseen.", "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": { "decryptionErrorToastAction": {
"message": "Lähetä loki", "message": "Lähetä loki",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Imagette daperçu de lien pour $domain$", "message": "Imagette daperçu de lien pour $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Signal pour ordinateur a rencontré une erreur de déchiffrement.", "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": { "decryptionErrorToastAction": {
"message": "Envoyer le journal", "message": "Envoyer le journal",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "$domain$ માટે થંબનેલ લિંક પ્રિવ્યુ", "message": "$domain$ માટે થંબનેલ લિંક પ્રિવ્યુ",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktop ran into a decryption error.", "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": { "decryptionErrorToastAction": {
"message": "Submit log", "message": "Submit log",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "קדם־תצוגה של קישור עבור $domain$", "message": "קדם־תצוגה של קישור עבור $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "שולחן העבודה נתקל בשגיאת פיענוח.", "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": { "decryptionErrorToastAction": {
"message": "הגש יומן", "message": "הגש יומן",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "$domain$ के लिये थंबनेल लिंक पूर्वावलोकन", "message": "$domain$ के लिये थंबनेल लिंक पूर्वावलोकन",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "डेस्कटॉप एक डिक्रिप्शन एरर में चला गया.", "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": { "decryptionErrorToastAction": {
"message": "लॉग सबमिट करें", "message": "लॉग सबमिट करें",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Sličica pregleda poveznice za $domain$", "message": "Sličica pregleda poveznice za $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktop ran into a decryption error.", "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": { "decryptionErrorToastAction": {
"message": "Submit log", "message": "Submit log",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "A $domain$ hivatkozás előnézeti képe", "message": "A $domain$ hivatkozás előnézeti képe",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "A Desktop egy dekódolási hibába ütközött.", "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": { "decryptionErrorToastAction": {
"message": "Log küldése", "message": "Log küldése",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Gambar mini pratinjau tautan untuk $domain$", "message": "Gambar mini pratinjau tautan untuk $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktop menemui eror dekripsi.", "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": { "decryptionErrorToastAction": {
"message": "Kirim catatan", "message": "Kirim catatan",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Smámynd forskoðunar tengils fyrir $domain$", "message": "Smámynd forskoðunar tengils fyrir $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Forritið lenti í afkóðunarvillu.", "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": { "decryptionErrorToastAction": {
"message": "Senda inn atvikaskrá", "message": "Senda inn atvikaskrá",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Miniatura anteprima del collegamento per $domain$", "message": "Miniatura anteprima del collegamento per $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktop ha riscontrato un errore di decrittazione.", "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": { "decryptionErrorToastAction": {
"message": "Invia log", "message": "Invia log",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "$domain$ のリンクプレビュー", "message": "$domain$ のリンクプレビュー",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "デスクトップで復号化エラーが発生しました。", "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": { "decryptionErrorToastAction": {
"message": "ログを送信", "message": "ログを送信",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "ការមើលតំណជារូបភាពតូចៗសម្រាប់$domain$", "message": "ការមើលតំណជារូបភាពតូចៗសម្រាប់$domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktop ran into a decryption error.", "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": { "decryptionErrorToastAction": {
"message": "Submit log", "message": "Submit log",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "$domain$ಗೆ ಥಂಬ್‌ನೇಲ್‌ ಲಿಂಕ್‌ ಪೂರ್ವವೀಕ್ಷಣೆ", "message": "$domain$ಗೆ ಥಂಬ್‌ನೇಲ್‌ ಲಿಂಕ್‌ ಪೂರ್ವವೀಕ್ಷಣೆ",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktop ran into a decryption error.", "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": { "decryptionErrorToastAction": {
"message": "Submit log", "message": "Submit log",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "$domain$의 섬네일 링크 미리보기", "message": "$domain$의 섬네일 링크 미리보기",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktop ran into a decryption error.", "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": { "decryptionErrorToastAction": {
"message": "Submit log", "message": "Submit log",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Thumbnail link preview for $domain$", "message": "Thumbnail link preview for $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktop ran into a decryption error.", "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": { "decryptionErrorToastAction": {
"message": "Submit log", "message": "Submit log",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "ຮູບນ້ອຍລີງ ທີຜ່ານມາ ສຳລັບ $domain$", "message": "ຮູບນ້ອຍລີງ ທີຜ່ານມາ ສຳລັບ $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktop ran into a decryption error.", "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": { "decryptionErrorToastAction": {
"message": "Submit log", "message": "Submit log",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Miniatiūrinė nuorodos peržiūra, skirta $domain$", "message": "Miniatiūrinė nuorodos peržiūra, skirta $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Programa susidūrė su iššifravimo klaida.", "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": { "decryptionErrorToastAction": {
"message": "Pateikti žurnalą", "message": "Pateikti žurnalą",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "$domain$ sīktēlu saites priekšskatījums", "message": "$domain$ sīktēlu saites priekšskatījums",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktop ran into a decryption error.", "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": { "decryptionErrorToastAction": {
"message": "Submit log", "message": "Submit log",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Линк до сликичка за преглед на $domain$", "message": "Линк до сликичка за преглед на $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktop ran into a decryption error.", "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": { "decryptionErrorToastAction": {
"message": "Submit log", "message": "Submit log",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "$domain$-ൻ്റെ ലിങ്ക് പ്രിവ്യൂ", "message": "$domain$-ൻ്റെ ലിങ്ക് പ്രിവ്യൂ",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktop ran into a decryption error.", "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": { "decryptionErrorToastAction": {
"message": "Submit log", "message": "Submit log",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "$domain$ करिता थंबनेल दुवा पुनरावलोकन", "message": "$domain$ करिता थंबनेल दुवा पुनरावलोकन",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": " डेस्कटॉपमध्ये डिक्रिप्शन त्रुटी आली", "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": { "decryptionErrorToastAction": {
"message": "लॉग सादर करा", "message": "लॉग सादर करा",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Pratonton pautan imej kecil untuk $domain$", "message": "Pratonton pautan imej kecil untuk $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Komputer meja mengalami ralat nyahinkripsi.", "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": { "decryptionErrorToastAction": {
"message": "Hantar log", "message": "Hantar log",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Miniatyrbilde til linkforhåndsvisning for $domain$", "message": "Miniatyrbilde til linkforhåndsvisning for $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktop ran into a decryption error.", "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": { "decryptionErrorToastAction": {
"message": "Submit log", "message": "Submit log",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Voorbeeldafbeelding voor $domain$", "message": "Voorbeeldafbeelding voor $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Signal-Desktop heeft een probleem met ontsleutelen.", "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": { "decryptionErrorToastAction": {
"message": "Foutopsporingslog indienen", "message": "Foutopsporingslog indienen",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Førehandsvisning av lenkje til $domain$", "message": "Førehandsvisning av lenkje til $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktop ran into a decryption error.", "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": { "decryptionErrorToastAction": {
"message": "Send inn logg", "message": "Send inn logg",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Thumbnail link preview for $domain$", "message": "Thumbnail link preview for $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktop ran into a decryption error.", "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": { "decryptionErrorToastAction": {
"message": "Submit log", "message": "Submit log",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": " $domain$ ਦੇ ਲਈ ਥੰਬਨੇਲ ਲਿੰਕ ਦੀ ਝਲਕ", "message": " $domain$ ਦੇ ਲਈ ਥੰਬਨੇਲ ਲਿੰਕ ਦੀ ਝਲਕ",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktop ran into a decryption error.", "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": { "decryptionErrorToastAction": {
"message": "Submit log", "message": "Submit log",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Podgląd miniatury odnośnika dla $domain$", "message": "Podgląd miniatury odnośnika dla $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Aplikacja Desktop napotkała błąd, w trakcie odszyfrowywania.", "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": { "decryptionErrorToastAction": {
"message": "Wyślij logi debugowania", "message": "Wyślij logi debugowania",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "د $domain$ لپاره د thumbnail د لینک مخکتنه", "message": "د $domain$ لپاره د thumbnail د لینک مخکتنه",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "ډیسکټاپ له یوې ډیکرپشن شوې تیروتنې سره رن شوی", "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": { "decryptionErrorToastAction": {
"message": "د رپوټ تسلیمول", "message": "د رپوټ تسلیمول",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Pré-visualização em miniatura do link $domain$", "message": "Pré-visualização em miniatura do link $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Signal encontrou um erro ao descriptografar uma mensagem.", "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": { "decryptionErrorToastAction": {
"message": "Enviar um registro de depuração", "message": "Enviar um registro de depuração",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Pré-visualização da hiperligação da miniatura $domain$", "message": "Pré-visualização da hiperligação da miniatura $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "O desktop apresentou um erro de desencriptação.", "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": { "decryptionErrorToastAction": {
"message": "Submeter relatório", "message": "Submeter relatório",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Miniatură a previzualizări pentru $domain$", "message": "Miniatură a previzualizări pentru $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktop a întâmpinat o eroare de decriptare.", "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": { "decryptionErrorToastAction": {
"message": "Trimite jurnalul", "message": "Trimite jurnalul",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Миниатюра предпросмотра ссылки для $domain$", "message": "Миниатюра предпросмотра ссылки для $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "В Signal Desktop произошла ошибка расшифровки.", "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": { "decryptionErrorToastAction": {
"message": "Отправить журнал", "message": "Отправить журнал",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Náhľad odkazu pre $domain$", "message": "Náhľad odkazu pre $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "V programe Signal Desktop sa vyskytla chyba pri dešifrovaní.", "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": { "decryptionErrorToastAction": {
"message": "Odoslať denník", "message": "Odoslať denník",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Predogledna sličica povezave na: $domain$", "message": "Predogledna sličica povezave na: $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Prišlo je do težav z dešifriranjem.", "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": { "decryptionErrorToastAction": {
"message": "Oddaj sistemsko zabeležbo", "message": "Oddaj sistemsko zabeležbo",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Paraparje lidhjeje miniature për $domain$", "message": "Paraparje lidhjeje miniature për $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktopi hasi një gabim shfshehtëzimi.", "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": { "decryptionErrorToastAction": {
"message": "Parashtroni regjistër", "message": "Parashtroni regjistër",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Сличица прегледа линка за $domain$", "message": "Сличица прегледа линка за $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Десктоп је налетео на грешку у дешифрирању.", "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": { "decryptionErrorToastAction": {
"message": "Пошањи извештај", "message": "Пошањи извештај",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Länkförhandsgranskning i miniatyrbild för $domain$", "message": "Länkförhandsgranskning i miniatyrbild för $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktop stötte på ett dekrypteringsfel.", "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": { "decryptionErrorToastAction": {
"message": "Skicka in logg", "message": "Skicka in logg",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Muunganisho wa hakiki ya kijipicha kwa $domain$", "message": "Muunganisho wa hakiki ya kijipicha kwa $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktop ran into a decryption error.", "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": { "decryptionErrorToastAction": {
"message": "Submit log", "message": "Submit log",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "$domain$ க்கான சிறு இணைப்பு முன்னோட்டம்", "message": "$domain$ க்கான சிறு இணைப்பு முன்னோட்டம்",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktop ran into a decryption error.", "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": { "decryptionErrorToastAction": {
"message": "Submit log", "message": "Submit log",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "$domain$కోసం సూక్ష్మచిత్రం పూర్వప్రదర్శన లింకు ", "message": "$domain$కోసం సూక్ష్మచిత్రం పూర్వప్రదర్శన లింకు ",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktop ran into a decryption error.", "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": { "decryptionErrorToastAction": {
"message": "Submit log", "message": "Submit log",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "ภาพย่อตัวอย่างลิงก์ของ $domain$", "message": "ภาพย่อตัวอย่างลิงก์ของ $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktop ran into a decryption error.", "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": { "decryptionErrorToastAction": {
"message": "Submit log", "message": "Submit log",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "$domain$ için bağlantı ön izlemesi küçük resmi", "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", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktop deşifreleme hatası ile karşılaştı.", "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": { "decryptionErrorToastAction": {
"message": "Günlüğü gönder", "message": "Günlüğü gönder",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "$domain$ نىڭ كىچىك سۈرەت ئۇلانما ئالدىن كۆزىتىشى", "message": "$domain$ نىڭ كىچىك سۈرەت ئۇلانما ئالدىن كۆزىتىشى",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktop ran into a decryption error.", "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": { "decryptionErrorToastAction": {
"message": "Submit log", "message": "Submit log",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "Мініатюра попереднього перегляду посилання для $domain$", "message": "Мініатюра попереднього перегляду посилання для $domain$",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktop ran into a decryption error.", "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": { "decryptionErrorToastAction": {
"message": "Submit log", "message": "Submit log",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "$domain$کیلئے پیش نظر تھمب نیل لنک", "message": "$domain$کیلئے پیش نظر تھمب نیل لنک",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktop ran into a decryption error.", "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": { "decryptionErrorToastAction": {
"message": "Submit log", "message": "Submit log",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "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$", "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", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktop ran into a decryption error.", "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": { "decryptionErrorToastAction": {
"message": "Submit log", "message": "Submit log",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "$domain$的链接预览缩略图", "message": "$domain$的链接预览缩略图",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "Desktop ran into a decryption error.", "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": { "decryptionErrorToastAction": {
"message": "Submit log", "message": "Submit log",

View file

@ -425,7 +425,7 @@
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
"example": 123 "example": "123"
} }
} }
}, },
@ -631,7 +631,7 @@
"message": "$domain$ 的縮圖連結預覽", "message": "$domain$ 的縮圖連結預覽",
"description": "Shown while Signal Desktop is fetching metadata for a url in composition area", "description": "Shown while Signal Desktop is fetching metadata for a url in composition area",
"placeholders": { "placeholders": {
"path": { "domain": {
"content": "$1", "content": "$1",
"example": "instagram.com" "example": "instagram.com"
} }
@ -649,7 +649,17 @@
}, },
"decryptionErrorToast": { "decryptionErrorToast": {
"message": "電腦遇到解密錯誤。", "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": { "decryptionErrorToastAction": {
"message": "上傳日誌", "message": "上傳日誌",

View file

@ -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"
]
}
}

View file

@ -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();

View file

@ -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 cursors `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};
}));

View file

@ -15,11 +15,17 @@
"postinstall": "yarn build:acknowledgments && yarn build:fuses && patch-package && yarn electron:install-app-deps && rimraf node_modules/dtrace-provider", "postinstall": "yarn build:acknowledgments && yarn build:fuses && patch-package && yarn electron:install-app-deps && rimraf node_modules/dtrace-provider",
"postuninstall": "yarn build:acknowledgments", "postuninstall": "yarn build:acknowledgments",
"start": "electron .", "start": "electron .",
"grunt": "grunt", "generate": "npm-run-all build-protobuf transpile sass get-expire-time copy-and-concat",
"generate": "yarn grunt",
"build-release": "yarn run build", "build-release": "yarn run build",
"sign-release": "node ts/updater/generateSignature.js", "sign-release": "node ts/updater/generateSignature.js",
"notarize": "node ts/build/notarize.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", "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", "clean-module-protobuf": "rm -f ts/protobuf/compiled.d.ts ts/protobuf/compiled.js",
"build-protobuf": "yarn build-module-protobuf", "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-once": "rimraf app/**/*.js app/*.js ts/**/*.js ts/*.js tsconfig.tsbuildinfo",
"clean-transpile": "yarn run clean-transpile-once && yarn run clean-transpile-once", "clean-transpile": "yarn run clean-transpile-once && yarn run clean-transpile-once",
"open-coverage": "open coverage/lcov-report/index.html", "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": "run-p --print-label dev:*",
"dev:grunt": "yarn grunt dev",
"dev:transpile": "yarn run transpile --watch --preserveWatchOutput", "dev:transpile": "yarn run transpile --watch --preserveWatchOutput",
"dev:webpack": "cross-env NODE_ENV=development webpack serve --mode development", "dev:webpack": "cross-env NODE_ENV=development webpack serve --mode development",
"dev:typed-scss": "yarn build:typed-scss -w", "dev:typed-scss": "yarn build:typed-scss -w",
"dev:storybook": "cross-env SIGNAL_ENV=storybook start-storybook -p 6006 -s ./", "dev:storybook": "cross-env SIGNAL_ENV=storybook start-storybook -p 6006 -s ./",
"storybook:axe": "build-storybook && axe-storybook", "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:acknowledgments": "node scripts/generate-acknowledgments.js",
"build:dev": "run-s --print-label build:grunt build:typed-scss build:webpack", "build:dev": "run-s --print-label generate build:typed-scss build:webpack",
"build:grunt": "yarn grunt",
"build:typed-scss": "tsm sticker-creator", "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": "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", "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:release": "cross-env SIGNAL_ENV=production yarn build:electron -- --config.directories.output=release",
"build:fuses": "node scripts/fuse-electron.js", "build:fuses": "node scripts/fuse-electron.js",
"build:fuses:release": "node scripts/fuse-electron.js --release", "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", "preverify:ts": "yarn build:typed-scss",
"verify": "run-p --print-label verify:*", "verify": "run-p --print-label verify:*",
"verify:ts": "tsc --noEmit", "verify:ts": "tsc --noEmit",
@ -264,14 +268,6 @@
"eslint-plugin-more": "1.0.0", "eslint-plugin-more": "1.0.0",
"eslint-plugin-react": "7.20.6", "eslint-plugin-react": "7.20.6",
"file-loader": "4.2.0", "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", "html-webpack-plugin": "5.3.1",
"mocha": "9.1.3", "mocha": "9.1.3",
"mocha-testcheck": "1.0.0-rc.0", "mocha-testcheck": "1.0.0-rc.0",

View file

@ -3,6 +3,8 @@
module.exports = { module.exports = {
rules: { rules: {
'no-console': 'off',
// We still get the value of this rule, it just allows for dev deps // We still get the value of this rule, it just allows for dev deps
'import/no-extraneous-dependencies': [ 'import/no-extraneous-dependencies': [
'error', 'error',

View file

@ -1,6 +1,5 @@
// Copyright 2021 Signal Messenger, LLC // Copyright 2021 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only
/* eslint-disable no-console */
const { flipFuses, FuseVersion, FuseV1Options } = require('@electron/fuses'); const { flipFuses, FuseVersion, FuseV1Options } = require('@electron/fuses');

View file

@ -1,7 +1,6 @@
// Copyright 2020 Signal Messenger, LLC // Copyright 2020 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only
/* eslint-disable no-console */
const assert = require('assert'); const assert = require('assert');
const fs = require('fs'); const fs = require('fs');
const { join } = require('path'); const { join } = require('path');

View file

@ -1,6 +1,5 @@
// Copyright 2021 Signal Messenger, LLC // Copyright 2021 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only
/* eslint-disable no-console */
const path = require('path'); const path = require('path');
const { execSync } = require('child_process'); const { execSync } = require('child_process');

View file

@ -1,8 +1,6 @@
// Copyright 2021 Signal Messenger, LLC // Copyright 2021 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only
/* eslint-disable no-console */
const fs = require('fs'); const fs = require('fs');
const _ = require('lodash'); const _ = require('lodash');

View file

@ -1,8 +1,6 @@
// Copyright 2021 Signal Messenger, LLC // Copyright 2021 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only
/* eslint-disable no-console */
const fs = require('fs'); const fs = require('fs');
const { execSync } = require('child_process'); const { execSync } = require('child_process');

View file

@ -1,8 +1,6 @@
// Copyright 2018-2020 Signal Messenger, LLC // Copyright 2018-2020 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only
/* eslint-disable no-console */
const fs = require('fs'); const fs = require('fs');
const _ = require('lodash'); const _ = require('lodash');

View file

@ -1,8 +1,6 @@
// Copyright 2018-2020 Signal Messenger, LLC // Copyright 2018-2020 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only
/* eslint-disable no-console */
const fs = require('fs'); const fs = require('fs');
const _ = require('lodash'); const _ = require('lodash');

16
ts/scripts/.eslintrc.js Normal file
View file

@ -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,
},
],
},
};

View file

@ -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);
}

View file

@ -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`
);

53
ts/scripts/get-strings.ts Normal file
View file

@ -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`);
});

View file

@ -1,8 +1,6 @@
// Copyright 2020 Signal Messenger, LLC // Copyright 2020 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only
/* eslint-disable no-console */
import fs from 'fs'; import fs from 'fs';
import path from 'path'; import path from 'path';
import rimraf from 'rimraf'; import rimraf from 'rimraf';

View file

@ -7,6 +7,12 @@ export type LocaleMessagesType = {
[key: string]: { [key: string]: {
message: string; message: string;
description?: string; description?: string;
placeholders?: {
[name: string]: {
content: string;
example: string;
};
};
}; };
}; };

View file

@ -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", "rule": "eval",
"path": "components/mp3lameencoder/lib/Mp3LameEncoder.js", "path": "components/mp3lameencoder/lib/Mp3LameEncoder.js",
@ -599,6 +585,101 @@
"reasonCategory": "falseMatch", "reasonCategory": "falseMatch",
"updated": "2018-09-19T18:13:29.628Z" "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", "rule": "DOM-innerHTML",
"path": "node_modules/axe-core/axe.js", "path": "node_modules/axe-core/axe.js",
@ -6618,26 +6699,6 @@
"reasonCategory": "falseMatch", "reasonCategory": "falseMatch",
"updated": "2018-09-19T21:59:32.770Z" "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(", "rule": "jQuery-after(",
"path": "node_modules/underscore/amd/after.js", "path": "node_modules/underscore/amd/after.js",

View file

@ -38,7 +38,6 @@ const FILES_TO_IGNORE = new Set(
[ [
'.github/ISSUE_TEMPLATE/bug_report.md', '.github/ISSUE_TEMPLATE/bug_report.md',
'.github/PULL_REQUEST_TEMPLATE.md', '.github/PULL_REQUEST_TEMPLATE.md',
'components/indexeddb-backbonejs-adapter/backbone-indexeddb.js',
'components/mp3lameencoder/lib/Mp3LameEncoder.js', 'components/mp3lameencoder/lib/Mp3LameEncoder.js',
'components/qrcode/qrcode.js', 'components/qrcode/qrcode.js',
'components/recorderjs/recorder.js', 'components/recorderjs/recorder.js',

View file

@ -170,14 +170,6 @@ const excludedFilesRegexp = RegExp(
'^node_modules/gauge/.+', '^node_modules/gauge/.+',
'^node_modules/global-agent/.+', '^node_modules/global-agent/.+',
'^node_modules/globule/.+', '^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/handle-thing/.+',
'^node_modules/handlebars/.+', // Used by nyc#istanbul-reports '^node_modules/handlebars/.+', // Used by nyc#istanbul-reports
'^node_modules/har-validator/.+', '^node_modules/har-validator/.+',

548
yarn.lock
View file

@ -3862,11 +3862,6 @@ arr-union@^3.1.0:
resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= 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: array-filter@~0.0.0:
version "0.0.1" version "0.0.1"
resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" 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" resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b"
integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys= 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: array-union@^1.0.1:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" 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" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
async@0.9.x, async@~0.9.0: async@0.9.x:
version "0.9.2" version "0.9.2"
resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
@ -4137,18 +4127,13 @@ async@^2.1.4:
dependencies: dependencies:
lodash "^4.14.0" lodash "^4.14.0"
async@^2.6.0, async@^2.6.2: async@^2.6.2:
version "2.6.3" version "2.6.3"
resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==
dependencies: dependencies:
lodash "^4.17.14" 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: asynckit@^0.4.0:
version "0.4.0" version "0.4.0"
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 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" raw-body "2.4.0"
type-is "~1.6.17" 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: bonjour@^3.5.0:
version "3.5.0" version "3.5.0"
resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" 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" version "3.0.0"
resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" 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: bytes@3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" 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" ansi-styles "^4.1.0"
supports-color "^7.1.0" supports-color "^7.1.0"
chalk@^4.1.1, chalk@^4.1.2: chalk@^4.1.1:
version "4.1.2" version "4.1.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
@ -5296,14 +5266,6 @@ chalk@^4.1.1, chalk@^4.1.2:
ansi-styles "^4.1.0" ansi-styles "^4.1.0"
supports-color "^7.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: change-emitter@^0.1.2:
version "0.1.6" version "0.1.6"
resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515" 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" resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d"
integrity sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg== 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: combined-stream@1.0.6, combined-stream@~1.0.6:
version "1.0.6" version "1.0.6"
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" 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" version "1.0.4"
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 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: convert-source-map@^1.1.0, convert-source-map@^1.5.0, convert-source-map@^1.5.1:
version "1.6.0" version "1.6.0"
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" 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" version "0.1.4"
resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" 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: debug-log@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f" 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" version "1.0.4"
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 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: detect-indent@^4.0.0:
version "4.0.0" version "4.0.0"
resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
@ -7079,13 +7022,6 @@ error-ex@^1.3.1:
dependencies: dependencies:
is-arrayish "^0.2.1" 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: 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" version "1.13.0"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" 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" 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== 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: eventemitter3@^2.0.3:
version "2.0.3" version "2.0.3"
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-2.0.3.tgz#b5e1079b59fb5e1ba2771c0a993be060a58c99ba" 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" signal-exit "^3.0.3"
strip-final-newline "^2.0.0" 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: expand-brackets@^0.1.4:
version "0.1.5" version "0.1.5"
resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" 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" resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c"
integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== 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: express@^4.17.0, express@^4.17.1:
version "4.17.1" version "4.17.1"
resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" 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: dependencies:
websocket-driver ">=0.5.1" 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: fbjs@^0.8.0, fbjs@^0.8.1:
version "0.8.17" version "0.8.17"
resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd"
@ -8120,10 +8034,6 @@ file-selector@^0.1.11:
dependencies: dependencies:
tslib "^1.9.0" 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: file-system-cache@^1.0.5:
version "1.0.5" version "1.0.5"
resolved "https://registry.yarnpkg.com/file-system-cache/-/file-system-cache-1.0.5.tgz#84259b36a2bbb8d3d6eb1021d3132ffe64cfff4f" 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: dependencies:
micromatch "^4.0.2" 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: firstline@1.2.1:
version "1.2.1" version "1.2.1"
resolved "https://registry.yarnpkg.com/firstline/-/firstline-1.2.1.tgz#b88673c42009f8821fac2926e99720acee924fae" resolved "https://registry.yarnpkg.com/firstline/-/firstline-1.2.1.tgz#b88673c42009f8821fac2926e99720acee924fae"
integrity sha1-uIZzxCAJ+IIfrCkm6ZcgrO6ST64= 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: flat-cache@^2.0.1:
version "2.0.1" version "2.0.1"
resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" 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: dependencies:
for-in "^1.0.1" 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: foreach@^2.0.5:
version "2.0.5" version "2.0.5"
resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99"
@ -8638,13 +8509,6 @@ gaze@^1.0.0:
dependencies: dependencies:
globule "^1.0.0" 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: gensync@^1.0.0-beta.2:
version "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" 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" version "2.0.6"
resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" 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: getpass@^0.1.1:
version "0.1.7" version "0.1.7"
resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 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" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== 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" version "7.1.6"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
@ -8874,16 +8729,6 @@ glob@^7.1.4:
once "^1.3.0" once "^1.3.0"
path-is-absolute "^1.0.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: global-agent@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-3.0.0.tgz#ae7cd31bd3583b93c5a16437a1afe27cc33a1ab6" resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-3.0.0.tgz#ae7cd31bd3583b93c5a16437a1afe27cc33a1ab6"
@ -8910,26 +8755,6 @@ global-modules@2.0.0:
dependencies: dependencies:
global-prefix "^3.0.0" 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: global-prefix@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" 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" resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e"
integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== 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: gud@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" 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: dependencies:
react-is "^16.7.0" 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: hosted-git-info@^2.1.4:
version "2.8.9" version "2.8.9"
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" 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: dependencies:
safer-buffer ">= 2.1.2 < 3.0.0" 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: icss-replace-symbols@1.1.0, icss-replace-symbols@^1.1.0:
version "1.1.0" version "1.1.0"
resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" 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" resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9"
integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== 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: intl-tel-input@17.0.13:
version "17.0.13" version "17.0.13"
resolved "https://registry.yarnpkg.com/intl-tel-input/-/intl-tel-input-17.0.13.tgz#74a51db3b44f47ae8264df7d101a0810e53c77a6" 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" resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698"
integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== 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: is-accessor-descriptor@^0.1.6:
version "0.1.6" version "0.1.6"
resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" 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" call-bind "^1.0.2"
has-tostringtag "^1.0.0" 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: is-root@2.1.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" 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" version "1.0.0"
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 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: is-unicode-supported@^0.1.0:
version "0.1.0" version "0.1.0"
resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" 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" resolved "https://registry.yarnpkg.com/is-window/-/is-window-1.0.2.tgz#2c896ca53db97de45d3c33133a65d8c9f563480d"
integrity sha1-LIlspT25feRdPDMTOmXYyfVjSA0= 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" version "1.0.2"
resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" 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" argparse "^1.0.7"
esprima "^4.0.0" 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: jsbn@~0.1.0:
version "0.1.1" version "0.1.1"
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 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" resolved "https://registry.yarnpkg.com/libheif-js/-/libheif-js-1.12.0.tgz#9ad1ed16a8e6412b4d3d83565d285465a00e7305"
integrity sha512-hDs6xQ7028VOwAFwEtM0Q+B2x2NW69Jb2MhQFUbk3rUrHzz4qo5mqS8VrqNgYnSc8TiUGnR691LnO4uIfEE23w== 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: lines-and-columns@^1.1.6:
version "1.1.6" version "1.1.6"
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" 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: dependencies:
uc.micro "^1.0.1" 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: load-json-file@^1.0.0:
version "1.1.0" version "1.1.0"
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" 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" resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4"
integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ= 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" version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 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" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8"
integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== 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: mamacro@^0.0.3:
version "0.0.3" version "0.0.3"
resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4"
@ -11359,7 +10979,7 @@ map-age-cleaner@^0.1.1:
dependencies: dependencies:
p-defer "^1.0.0" p-defer "^1.0.0"
map-cache@^0.2.0, map-cache@^0.2.2: map-cache@^0.2.2:
version "0.2.2" version "0.2.2"
resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" 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" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= 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" version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 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: dependencies:
minimist "^1.2.5" minimist "^1.2.5"
mkdirp@^1.0.3, mkdirp@~1.0.4: mkdirp@^1.0.3:
version "1.0.4" version "1.0.4"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
@ -12262,20 +11882,6 @@ nopt@~1.0.10:
dependencies: dependencies:
abbrev "1" 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: normalize-package-data@^2.3.2:
version "2.4.0" version "2.4.0"
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" 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" define-property "^0.2.5"
kind-of "^3.0.3" kind-of "^3.0.3"
object-inspect@^1.11.0: object-inspect@^1.11.0, object-inspect@^1.9.0:
version "1.11.1" version "1.11.1"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.1.tgz#d4bd7d7de54b9a75599f59a00bd698c1f1c6549b" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.1.tgz#d4bd7d7de54b9a75599f59a00bd698c1f1c6549b"
integrity sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA== 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" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0"
integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== 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: object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1:
version "1.1.1" version "1.1.1"
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 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" has-symbols "^1.0.1"
object-keys "^1.1.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: object.entries@^1.1.0:
version "1.1.0" version "1.1.0"
resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.0.tgz#2024fc6d6ba246aee38bdb0ffd5cfbcf371b7519" 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" define-properties "^1.1.3"
es-abstract "^1.19.1" 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: object.omit@^2.0.0:
version "2.0.1" version "2.0.1"
resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" 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" for-own "^0.1.4"
is-extendable "^0.1.1" is-extendable "^0.1.1"
object.pick@^1.2.0, object.pick@^1.3.0: object.pick@^1.3.0:
version "1.3.0" version "1.3.0"
resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
dependencies: dependencies:
@ -13011,15 +12594,6 @@ parse-entities@^1.1.2:
is-decimal "^1.0.0" is-decimal "^1.0.0"
is-hexadecimal "^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: parse-glob@^3.0.4:
version "3.0.4" version "3.0.4"
resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" 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" json-parse-even-better-errors "^2.3.0"
lines-and-columns "^1.1.6" 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: parseurl@~1.3.2:
version "1.3.2" version "1.3.2"
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" 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" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 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: path-to-regexp@0.1.7:
version "0.1.7" version "0.1.7"
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 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" resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== 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: qs@^6.6.0:
version "6.8.0" version "6.8.0"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.8.0.tgz#87b763f0d37ca54200334cd57bb2ef8f68a1d081" 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" iconv-lite "0.4.19"
unpipe "1.0.0" 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: raw-loader@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-2.0.0.tgz#e2813d9e1e3f80d1bbade5ad082e809679e20c26" resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-2.0.0.tgz#e2813d9e1e3f80d1bbade5ad082e809679e20c26"
@ -15019,14 +14561,6 @@ resolve-cwd@^3.0.0:
dependencies: dependencies:
resolve-from "^5.0.0" 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: resolve-from@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" 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: dependencies:
path-parse "^1.0.6" 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" version "1.20.0"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"
integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== 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: dependencies:
glob "^7.1.3" 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" version "3.0.2"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 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" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 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: safe-regex@^1.1.0:
version "1.1.0" version "1.1.0"
resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" 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" resolved "https://registry.yarnpkg.com/split2/-/split2-4.0.0.tgz#c76cb53ad55040ddff3a9c3b73fc88a4690f047c"
integrity sha512-gjmavJzvQCAZzaEHWoJBOwqIUAiEvUOlguQ6uO0+0LTS1tlLa2YetTLWCrm049ouvLOa1l6SOGm3XaiRiCg9SQ== integrity sha512-gjmavJzvQCAZzaEHWoJBOwqIUAiEvUOlguQ6uO0+0LTS1tlLa2YetTLWCrm049ouvLOa1l6SOGm3XaiRiCg9SQ==
sprintf-js@^1.0.3, sprintf-js@^1.1.2: sprintf-js@^1.1.2:
version "1.1.2" version "1.1.2"
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673"
integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==
@ -16069,11 +15598,6 @@ strict-uri-encode@^1.0.0:
version "1.1.0" version "1.1.0"
resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" 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: string-width@^1.0.1:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 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" call-bind "^1.0.2"
define-properties "^1.1.3" 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: string_decoder@^1.0.0, string_decoder@~1.1.1:
version "1.1.1" version "1.1.1"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
@ -16228,6 +15748,10 @@ string_decoder@^1.1.1:
dependencies: dependencies:
safe-buffer "~5.2.0" 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: strip-ansi@5.2.0, strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
version "5.2.0" version "5.2.0"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 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" resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.0.6.tgz#b3f9b38835e36a41c843a3b0907a5a7b3755de73"
integrity sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA== 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: tiny-warning@^1.0.0, tiny-warning@^1.0.2:
version "1.0.3" version "1.0.3"
resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" 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" has-symbols "^1.0.2"
which-boxed-primitive "^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: underscore@1.12.1, underscore@>=1.8.3:
version "1.12.1" version "1.12.1"
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.12.1.tgz#7bb8cc9b3d397e201cf8553336d262544ead829e" 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" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== 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: validate-npm-package-license@^3.0.1:
version "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" 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" version "2.0.0"
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 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" version "2.0.2"
resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
dependencies: dependencies:
isexe "^2.0.0" 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" version "1.3.1"
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==