From 26884432a2ecb750c108996efc00ef5d0b9a0371 Mon Sep 17 00:00:00 2001 From: Scott Nonnenberg Date: Wed, 18 Nov 2020 07:15:42 -0800 Subject: [PATCH] Update TypeScript, Prettier and typescript-eslint for new TypeScript 3.8 syntax --- .eslintrc.js | 6 + .github/ISSUE_TEMPLATE.md | 10 +- .prettierrc.js | 1 + js/database.js | 2 +- js/deletes.js | 2 +- js/delivery_receipts.js | 2 +- js/expiring_messages.js | 2 +- js/expiring_tap_to_view_messages.js | 2 +- js/keychange_listener.js | 2 +- js/libphonenumber-util.js | 12 +- js/message_controller.js | 2 +- js/message_requests.js | 2 +- js/models/blockedNumbers.js | 2 +- js/modules/attachment_downloads.js | 5 +- js/notifications.js | 2 +- js/reactions.js | 2 +- js/read_receipts.js | 2 +- js/read_syncs.js | 2 +- js/reliable_trigger.js | 8 +- js/rotate_signed_prekey_listener.js | 2 +- js/signal_protocol_store.js | 2 +- js/storage.js | 2 +- js/view_syncs.js | 2 +- js/views/app_view.js | 2 +- js/views/banner_view.js | 2 +- js/views/clear_data_view.js | 2 +- js/views/confirmation_dialog_view.js | 2 +- js/views/contact_list_view.js | 2 +- js/views/debug_log_view.js | 6 +- js/views/group_member_list_view.js | 2 +- js/views/identicon_svg_view.js | 2 +- js/views/inbox_view.js | 2 +- js/views/install_view.js | 2 +- js/views/key_verification_view.js | 2 +- js/views/list_view.js | 2 +- js/views/phone-input-view.js | 2 +- js/views/react_wrapper_view.js | 2 +- js/views/recorder_view.js | 2 +- js/views/safety_number_change_dialog_view.js | 2 +- js/views/settings_view.js | 2 +- js/views/standalone_registration_view.js | 24 +-- js/views/toast_view.js | 2 +- js/views/whisper_view.js | 2 +- js/wall_clock_listener.js | 2 +- libtextsecure/protobufs.js | 2 +- libtextsecure/protocol_wrapper.js | 2 +- libtextsecure/storage/unprocessed.js | 2 +- libtextsecure/storage/user.js | 2 +- package.json | 8 +- preload.js | 4 +- sticker-creator/components/StickerFrame.tsx | 18 ++- sticker-creator/preload.js | 4 +- ts/background.ts | 10 +- .../media-gallery/groupMediaItemsByDate.ts | 4 +- ts/models/messages.ts | 5 +- ts/quill/emoji/completion.tsx | 5 +- ts/quill/mentions/completion.tsx | 5 +- ts/state/createStore.ts | 1 + ts/textsecure/TaskWithTimeout.ts | 5 +- ts/textsecure/WebSocket.ts | 4 +- ts/util/lint/exceptions.json | 93 ++++++------ ts/util/lint/linter.ts | 1 + ts/util/zkgroup.ts | 5 +- ts/views/conversation_view.ts | 5 +- yarn.lock | 142 +++++++++++++++++- 65 files changed, 286 insertions(+), 185 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index a9459faab..55286c224 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -15,6 +15,12 @@ const rules = { }, ], + // Overrides recommended by typescript-eslint + // https://github.com/typescript-eslint/typescript-eslint/releases/tag/v4.0.0 + '@typescript-eslint/no-redeclare': 'error', + '@typescript-eslint/no-shadow': 'error', + 'no-shadow': 'off', + // prevents us from accidentally checking in exclusive tests (`.only`): 'mocha/no-exclusive-tests': 'error', diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 0c6c49ab8..59888c7b9 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -13,11 +13,11 @@ Lastly, be sure to preview your issue before saving. Thanks! --> - [ ] I have searched open and closed issues for duplicates - + --- diff --git a/.prettierrc.js b/.prettierrc.js index 9fd82ac99..26000173a 100644 --- a/.prettierrc.js +++ b/.prettierrc.js @@ -3,5 +3,6 @@ module.exports = { singleQuote: true, + arrowParens: 'avoid', trailingComma: 'es5', }; diff --git a/js/database.js b/js/database.js index b1d1ba09d..d48616add 100644 --- a/js/database.js +++ b/js/database.js @@ -4,7 +4,7 @@ /* global Whisper: false */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; window.Whisper.Database = window.Whisper.Database || {}; window.Whisper.Database.id = window.Whisper.Database.id || 'signal'; diff --git a/js/deletes.js b/js/deletes.js index 8dabd01a8..dfbfa0870 100644 --- a/js/deletes.js +++ b/js/deletes.js @@ -11,7 +11,7 @@ /* eslint-disable more/no-then */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; Whisper.Deletes = new (Backbone.Collection.extend({ forMessage(message) { diff --git a/js/delivery_receipts.js b/js/delivery_receipts.js index e04031cd4..44be4b5e5 100644 --- a/js/delivery_receipts.js +++ b/js/delivery_receipts.js @@ -12,7 +12,7 @@ /* eslint-disable more/no-then */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; Whisper.DeliveryReceipts = new (Backbone.Collection.extend({ diff --git a/js/expiring_messages.js b/js/expiring_messages.js index 95f177f01..5618ca5f2 100644 --- a/js/expiring_messages.js +++ b/js/expiring_messages.js @@ -8,7 +8,7 @@ */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; async function destroyExpiredMessages() { diff --git a/js/expiring_tap_to_view_messages.js b/js/expiring_tap_to_view_messages.js index 37e37e69c..52ff70ea8 100644 --- a/js/expiring_tap_to_view_messages.js +++ b/js/expiring_tap_to_view_messages.js @@ -8,7 +8,7 @@ */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; async function eraseTapToViewMessages() { diff --git a/js/keychange_listener.js b/js/keychange_listener.js index 273960c6f..84053e6f9 100644 --- a/js/keychange_listener.js +++ b/js/keychange_listener.js @@ -6,7 +6,7 @@ /* eslint-disable more/no-then */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; Whisper.KeyChangeListener = { diff --git a/js/libphonenumber-util.js b/js/libphonenumber-util.js index 49e1801e6..57e4155cc 100644 --- a/js/libphonenumber-util.js +++ b/js/libphonenumber-util.js @@ -1,7 +1,7 @@ // Copyright 2014-2020 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only -(function() { +(function () { 'use strict'; /* @@ -12,7 +12,7 @@ window.libphonenumber = window.libphonenumber || {}; window.libphonenumber.util = { - getRegionCodeForNumber: function(number) { + getRegionCodeForNumber: function (number) { try { var parsedNumber = libphonenumber.parse(number); return libphonenumber.getRegionCodeForNumber(parsedNumber); @@ -21,7 +21,7 @@ } }, - splitCountryCode: function(number) { + splitCountryCode: function (number) { var parsedNumber = libphonenumber.parse(number); return { country_code: parsedNumber.values_[1], @@ -29,12 +29,12 @@ }; }, - getCountryCode: function(regionCode) { + getCountryCode: function (regionCode) { var cc = libphonenumber.getCountryCodeForRegion(regionCode); return cc !== 0 ? cc : ''; }, - parseNumber: function(number, defaultRegionCode) { + parseNumber: function (number, defaultRegionCode) { try { var parsedNumber = libphonenumber.parse(number, defaultRegionCode); @@ -53,7 +53,7 @@ } }, - getAllRegionCodes: function() { + getAllRegionCodes: function () { return { AD: 'Andorra', AE: 'United Arab Emirates', diff --git a/js/message_controller.js b/js/message_controller.js index 9db7e4e85..c42933b50 100644 --- a/js/message_controller.js +++ b/js/message_controller.js @@ -2,7 +2,7 @@ // SPDX-License-Identifier: AGPL-3.0-only // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; const messageLookup = Object.create(null); diff --git a/js/message_requests.js b/js/message_requests.js index 55c5753b3..60873b8b6 100644 --- a/js/message_requests.js +++ b/js/message_requests.js @@ -10,7 +10,7 @@ /* eslint-disable more/no-then */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; Whisper.MessageRequests = new (Backbone.Collection.extend({ forConversation(conversation) { diff --git a/js/models/blockedNumbers.js b/js/models/blockedNumbers.js index 979dabb39..a06b0ecca 100644 --- a/js/models/blockedNumbers.js +++ b/js/models/blockedNumbers.js @@ -4,7 +4,7 @@ /* global storage, _ */ // eslint-disable-next-line func-names -(function() { +(function () { const BLOCKED_NUMBERS_ID = 'blocked'; const BLOCKED_UUIDS_ID = 'blocked-uuids'; const BLOCKED_GROUPS_ID = 'blocked-groups'; diff --git a/js/modules/attachment_downloads.js b/js/modules/attachment_downloads.js index 823f00081..01936bf83 100644 --- a/js/modules/attachment_downloads.js +++ b/js/modules/attachment_downloads.js @@ -199,8 +199,9 @@ async function _runJob(job) { logger.warn( `_runJob: Got 404 from server for CDN ${ attachment.cdnNumber - }, marking attachment ${attachment.cdnId || - attachment.cdnKey} from message ${message.idForLogging()} as permanent error` + }, marking attachment ${ + attachment.cdnId || attachment.cdnKey + } from message ${message.idForLogging()} as permanent error` ); await _finishJob(message, id); diff --git a/js/notifications.js b/js/notifications.js index 626922f1b..72c3dc050 100644 --- a/js/notifications.js +++ b/js/notifications.js @@ -11,7 +11,7 @@ /* global _: false */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; // The keys and values don't match here. This is because the values correspond to old diff --git a/js/reactions.js b/js/reactions.js index 4d9791c3a..fd1d04f52 100644 --- a/js/reactions.js +++ b/js/reactions.js @@ -11,7 +11,7 @@ /* eslint-disable more/no-then */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; Whisper.Reactions = new (Backbone.Collection.extend({ forMessage(message) { diff --git a/js/read_receipts.js b/js/read_receipts.js index 8d3dc4595..0f1b17328 100644 --- a/js/read_receipts.js +++ b/js/read_receipts.js @@ -12,7 +12,7 @@ /* eslint-disable more/no-then */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; Whisper.ReadReceipts = new (Backbone.Collection.extend({ forMessage(conversation, message) { diff --git a/js/read_syncs.js b/js/read_syncs.js index 8c5df2d79..ca76472f5 100644 --- a/js/read_syncs.js +++ b/js/read_syncs.js @@ -10,7 +10,7 @@ /* eslint-disable more/no-then */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; Whisper.ReadSyncs = new (Backbone.Collection.extend({ forMessage(message) { diff --git a/js/reliable_trigger.js b/js/reliable_trigger.js index b9fcbeae6..4e3c79e8a 100644 --- a/js/reliable_trigger.js +++ b/js/reliable_trigger.js @@ -6,7 +6,7 @@ // This file was taken from Backbone and then modified. It does not conform to this // project's standards. -(function() { +(function () { 'use strict'; // Note: this is all the code required to customize Backbone's trigger() method to make @@ -32,7 +32,7 @@ // Implement fancy features of the Events API such as multiple event // names `"change blur"` and jQuery-style event maps `{change: action}` // in terms of the existing API. - const eventsApi = function(obj, action, name, rest) { + const eventsApi = function (obj, action, name, rest) { if (!name) return true; // Handle event maps. @@ -58,14 +58,14 @@ // A difficult-to-believe, but optimized internal dispatch function for // triggering events. Tries to keep the usual cases speedy (most internal // Backbone events have 3 arguments). - const triggerEvents = function(events, name, args) { + const triggerEvents = function (events, name, args) { let ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2]; - const logError = function(error) { + const logError = function (error) { window.log.error( 'Model caught error triggering', name, diff --git a/js/rotate_signed_prekey_listener.js b/js/rotate_signed_prekey_listener.js index c49d2f109..4589cc543 100644 --- a/js/rotate_signed_prekey_listener.js +++ b/js/rotate_signed_prekey_listener.js @@ -4,7 +4,7 @@ /* global Whisper, storage, getAccountManager */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; const ROTATION_INTERVAL = 48 * 60 * 60 * 1000; let timeout; diff --git a/js/signal_protocol_store.js b/js/signal_protocol_store.js index 840b4c5c2..792d4dd80 100644 --- a/js/signal_protocol_store.js +++ b/js/signal_protocol_store.js @@ -7,7 +7,7 @@ /* eslint-disable no-proto */ // eslint-disable-next-line func-names -(function() { +(function () { const TIMESTAMP_THRESHOLD = 5 * 1000; // 5 seconds const Direction = { SENDING: 1, diff --git a/js/storage.js b/js/storage.js index f4417c2b9..47eb94b4b 100644 --- a/js/storage.js +++ b/js/storage.js @@ -5,7 +5,7 @@ /* eslint-disable more/no-then */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; let ready = false; diff --git a/js/view_syncs.js b/js/view_syncs.js index e21540afd..4346234e3 100644 --- a/js/view_syncs.js +++ b/js/view_syncs.js @@ -10,7 +10,7 @@ /* eslint-disable more/no-then */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; Whisper.ViewSyncs = new (Backbone.Collection.extend({ forMessage(message) { diff --git a/js/views/app_view.js b/js/views/app_view.js index e5b55b0f9..bf12e61f6 100644 --- a/js/views/app_view.js +++ b/js/views/app_view.js @@ -6,7 +6,7 @@ /* eslint-disable more/no-then */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; function resolveTheme() { diff --git a/js/views/banner_view.js b/js/views/banner_view.js index c75197fae..70eea630b 100644 --- a/js/views/banner_view.js +++ b/js/views/banner_view.js @@ -4,7 +4,7 @@ /* global Whisper */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; Whisper.BannerView = Whisper.View.extend({ diff --git a/js/views/clear_data_view.js b/js/views/clear_data_view.js index ff6313c85..ebdae23e4 100644 --- a/js/views/clear_data_view.js +++ b/js/views/clear_data_view.js @@ -7,7 +7,7 @@ /* eslint-disable no-new */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; const { Logs } = window.Signal; diff --git a/js/views/confirmation_dialog_view.js b/js/views/confirmation_dialog_view.js index b40f83502..4a95637de 100644 --- a/js/views/confirmation_dialog_view.js +++ b/js/views/confirmation_dialog_view.js @@ -4,7 +4,7 @@ /* global Backbone, Whisper, i18n */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; Whisper.ConfirmationDialogView = Whisper.View.extend({ diff --git a/js/views/contact_list_view.js b/js/views/contact_list_view.js index 9af1cc658..fdbe5d2b6 100644 --- a/js/views/contact_list_view.js +++ b/js/views/contact_list_view.js @@ -5,7 +5,7 @@ /* global textsecure: false */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; Whisper.ContactListView = Whisper.ListView.extend({ diff --git a/js/views/debug_log_view.js b/js/views/debug_log_view.js index 8ae526a55..519091156 100644 --- a/js/views/debug_log_view.js +++ b/js/views/debug_log_view.js @@ -5,7 +5,7 @@ /* global Whisper: false */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; Whisper.LinkedCopiedToast = Whisper.ToastView.extend({ @@ -80,9 +80,7 @@ }); this.$('.loading').removeClass('loading'); view.render(); - this.$('.link') - .focus() - .select(); + this.$('.link').focus().select(); } catch (error) { window.log.error( 'DebugLogView error:', diff --git a/js/views/group_member_list_view.js b/js/views/group_member_list_view.js index fd080f625..d0c75b616 100644 --- a/js/views/group_member_list_view.js +++ b/js/views/group_member_list_view.js @@ -4,7 +4,7 @@ /* global Whisper, i18n */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; // TODO: take a title string which could replace the 'members' header diff --git a/js/views/identicon_svg_view.js b/js/views/identicon_svg_view.js index c6f6f9394..60b51999d 100644 --- a/js/views/identicon_svg_view.js +++ b/js/views/identicon_svg_view.js @@ -4,7 +4,7 @@ /* global Whisper, loadImage */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; /* diff --git a/js/views/inbox_view.js b/js/views/inbox_view.js index 66bdb5e09..535a24190 100644 --- a/js/views/inbox_view.js +++ b/js/views/inbox_view.js @@ -9,7 +9,7 @@ */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; Whisper.StickerPackInstallFailedToast = Whisper.ToastView.extend({ diff --git a/js/views/install_view.js b/js/views/install_view.js index 19737d384..221ccb888 100644 --- a/js/views/install_view.js +++ b/js/views/install_view.js @@ -6,7 +6,7 @@ /* eslint-disable more/no-then */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; const Steps = { diff --git a/js/views/key_verification_view.js b/js/views/key_verification_view.js index ad0c89682..116f3cce9 100644 --- a/js/views/key_verification_view.js +++ b/js/views/key_verification_view.js @@ -6,7 +6,7 @@ /* eslint-disable more/no-then */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; Whisper.KeyVerificationPanelView = Whisper.View.extend({ diff --git a/js/views/list_view.js b/js/views/list_view.js index 7ae52e43a..b546ce89a 100644 --- a/js/views/list_view.js +++ b/js/views/list_view.js @@ -4,7 +4,7 @@ /* global Backbone, Whisper, _ */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; /* diff --git a/js/views/phone-input-view.js b/js/views/phone-input-view.js index 6c9c738dc..8e185fcc9 100644 --- a/js/views/phone-input-view.js +++ b/js/views/phone-input-view.js @@ -4,7 +4,7 @@ /* global libphonenumber, Whisper */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; Whisper.PhoneInputView = Whisper.View.extend({ diff --git a/js/views/react_wrapper_view.js b/js/views/react_wrapper_view.js index a672da667..58a614fe7 100644 --- a/js/views/react_wrapper_view.js +++ b/js/views/react_wrapper_view.js @@ -7,7 +7,7 @@ /* global ReactDOM: false */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; window.Whisper.ReactWrapperView = Backbone.View.extend({ diff --git a/js/views/recorder_view.js b/js/views/recorder_view.js index f7b485dad..b481da405 100644 --- a/js/views/recorder_view.js +++ b/js/views/recorder_view.js @@ -6,7 +6,7 @@ /* eslint-disable more/no-then */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; Whisper.RecorderView = Whisper.View.extend({ diff --git a/js/views/safety_number_change_dialog_view.js b/js/views/safety_number_change_dialog_view.js index c37607e45..64ff82001 100644 --- a/js/views/safety_number_change_dialog_view.js +++ b/js/views/safety_number_change_dialog_view.js @@ -4,7 +4,7 @@ /* global Whisper, Signal */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; Whisper.SafetyNumberChangeDialogView = Whisper.View.extend({ diff --git a/js/views/settings_view.js b/js/views/settings_view.js index f86d8165f..d5eff2de3 100644 --- a/js/views/settings_view.js +++ b/js/views/settings_view.js @@ -8,7 +8,7 @@ /* eslint-disable no-new */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; const { Settings } = window.Signal.Types; diff --git a/js/views/standalone_registration_view.js b/js/views/standalone_registration_view.js index 98308c350..3df07054c 100644 --- a/js/views/standalone_registration_view.js +++ b/js/views/standalone_registration_view.js @@ -6,7 +6,7 @@ /* eslint-disable more/no-then */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; Whisper.StandaloneRegistrationView = Whisper.View.extend({ @@ -37,9 +37,7 @@ }, verifyCode() { const number = this.phoneView.validateNumber(); - const verificationCode = $('#code') - .val() - .replace(/\D+/g, ''); + const verificationCode = $('#code').val().replace(/\D+/g, ''); this.accountManager .registerSingleDevice(number, verificationCode) @@ -53,9 +51,7 @@ this.$('#status').text(s); }, validateCode() { - const verificationCode = $('#code') - .val() - .replace(/\D/g, ''); + const verificationCode = $('#code').val().replace(/\D/g, ''); if (verificationCode.length === 6) { return verificationCode; @@ -64,11 +60,7 @@ return null; }, displayError(error) { - this.$('#error') - .hide() - .text(error) - .addClass('in') - .fadeIn(); + this.$('#error').hide().text(error).addClass('in').fadeIn(); }, onValidation() { if (this.$('#number-container').hasClass('valid')) { @@ -92,9 +84,7 @@ this.accountManager .requestVoiceVerification(number) .catch(this.displayError.bind(this)); - this.$('#step2') - .addClass('in') - .fadeIn(); + this.$('#step2').addClass('in').fadeIn(); } else { this.$('#number-container').addClass('invalid'); } @@ -107,9 +97,7 @@ this.accountManager .requestSMSVerification(number) .catch(this.displayError.bind(this)); - this.$('#step2') - .addClass('in') - .fadeIn(); + this.$('#step2').addClass('in').fadeIn(); } else { this.$('#number-container').addClass('invalid'); } diff --git a/js/views/toast_view.js b/js/views/toast_view.js index be7e72185..51e14a213 100644 --- a/js/views/toast_view.js +++ b/js/views/toast_view.js @@ -4,7 +4,7 @@ /* global Whisper, Mustache, _ */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; Whisper.ToastView = Whisper.View.extend({ diff --git a/js/views/whisper_view.js b/js/views/whisper_view.js index 20bcabd82..1388b69c6 100644 --- a/js/views/whisper_view.js +++ b/js/views/whisper_view.js @@ -24,7 +24,7 @@ */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; Whisper.View = Backbone.View.extend( diff --git a/js/wall_clock_listener.js b/js/wall_clock_listener.js index 7936d4d43..4b4bf63b7 100644 --- a/js/wall_clock_listener.js +++ b/js/wall_clock_listener.js @@ -4,7 +4,7 @@ /* global Whisper */ // eslint-disable-next-line func-names -(function() { +(function () { window.Whisper = window.Whisper || {}; let lastTime; diff --git a/libtextsecure/protobufs.js b/libtextsecure/protobufs.js index 1c0a910a2..5b6d57dc5 100644 --- a/libtextsecure/protobufs.js +++ b/libtextsecure/protobufs.js @@ -4,7 +4,7 @@ /* global window, dcodeIO, textsecure */ // eslint-disable-next-line func-names -(function() { +(function () { const FILES_TO_LOAD = [ 'SignalService.proto', 'SignalStorage.proto', diff --git a/libtextsecure/protocol_wrapper.js b/libtextsecure/protocol_wrapper.js index 4ab35a0c0..559a3ee42 100644 --- a/libtextsecure/protocol_wrapper.js +++ b/libtextsecure/protocol_wrapper.js @@ -4,7 +4,7 @@ /* global window, textsecure, SignalProtocolStore, libsignal */ // eslint-disable-next-line func-names -(function() { +(function () { window.textsecure = window.textsecure || {}; window.textsecure.storage = window.textsecure.storage || {}; diff --git a/libtextsecure/storage/unprocessed.js b/libtextsecure/storage/unprocessed.js index 97448b922..60645c97e 100644 --- a/libtextsecure/storage/unprocessed.js +++ b/libtextsecure/storage/unprocessed.js @@ -4,7 +4,7 @@ /* global window, textsecure */ // eslint-disable-next-line func-names -(function() { +(function () { /** *************************************** *** Not-yet-processed message storage *** **************************************** */ diff --git a/libtextsecure/storage/user.js b/libtextsecure/storage/user.js index 00e2533ed..3a6aa7f3e 100644 --- a/libtextsecure/storage/user.js +++ b/libtextsecure/storage/user.js @@ -4,7 +4,7 @@ /* global textsecure, window */ // eslint-disable-next-line func-names -(function() { +(function () { /** ******************************************* *** Utilities to store data about the user *** ********************************************* */ diff --git a/package.json b/package.json index cd2806b8f..137374b4b 100644 --- a/package.json +++ b/package.json @@ -206,8 +206,8 @@ "@types/webpack": "4.39.0", "@types/webpack-dev-server": "3.1.7", "@types/websocket": "1.0.0", - "@typescript-eslint/eslint-plugin": "3.10.1", - "@typescript-eslint/parser": "3.10.1", + "@typescript-eslint/eslint-plugin": "4.8.1", + "@typescript-eslint/parser": "4.8.1", "arraybuffer-loader": "1.0.3", "asar": "0.14.0", "babel-core": "7.0.0-bridge.0", @@ -246,7 +246,7 @@ "npm-run-all": "4.1.5", "nyc": "11.4.1", "patch-package": "6.1.2", - "prettier": "1.19.1", + "prettier": "2.1.2", "react-docgen-typescript": "1.2.6", "sass-loader": "7.2.0", "sinon": "9.2.0", @@ -256,7 +256,7 @@ "ts-loader": "4.1.0", "ts-node": "8.3.0", "typed-scss-modules": "0.0.11", - "typescript": "3.7.4", + "typescript": "3.8.3", "webpack": "4.39.2", "webpack-cli": "3.3.7", "webpack-dev-server": "3.8.0" diff --git a/preload.js b/preload.js index 456396ab0..414a01de9 100644 --- a/preload.js +++ b/preload.js @@ -367,8 +367,8 @@ try { directoryEnclaveId: config.directoryEnclaveId, directoryTrustAnchor: config.directoryTrustAnchor, cdnUrlObject: { - '0': config.cdnUrl0, - '2': config.cdnUrl2, + 0: config.cdnUrl0, + 2: config.cdnUrl2, }, certificateAuthority: config.certificateAuthority, contentProxyUrl: config.contentProxyUrl, diff --git a/sticker-creator/components/StickerFrame.tsx b/sticker-creator/components/StickerFrame.tsx index 5e86ee48e..5b7dfbf1d 100644 --- a/sticker-creator/components/StickerFrame.tsx +++ b/sticker-creator/components/StickerFrame.tsx @@ -188,14 +188,16 @@ export const StickerFrame = React.memo( onMouseLeave={handleMouseLeave} ref={rootRef} > - {// eslint-disable-next-line no-nested-ternary - mode !== 'add' ? ( - image ? ( - - ) : ( -
{spinnerSvg}
- ) - ) : null} + { + // eslint-disable-next-line no-nested-ternary + mode !== 'add' ? ( + image ? ( + + ) : ( +
{spinnerSvg}
+ ) + ) : null + } {showGuide && mode !== 'add' ? (
) : null} diff --git a/sticker-creator/preload.js b/sticker-creator/preload.js index d0a55ed4d..7e60050c4 100644 --- a/sticker-creator/preload.js +++ b/sticker-creator/preload.js @@ -52,8 +52,8 @@ const WebAPI = initializeWebAPI({ directoryEnclaveId: config.directoryEnclaveId, directoryTrustAnchor: config.directoryTrustAnchor, cdnUrlObject: { - '0': config.cdnUrl0, - '2': config.cdnUrl2, + 0: config.cdnUrl0, + 2: config.cdnUrl2, }, certificateAuthority: config.certificateAuthority, contentProxyUrl: config.contentProxyUrl, diff --git a/ts/background.ts b/ts/background.ts index 997a8cae1..8d70d1525 100644 --- a/ts/background.ts +++ b/ts/background.ts @@ -4,7 +4,7 @@ type WhatIsThis = typeof window.WhatIsThis; // eslint-disable-next-line func-names -(async function() { +(async function () { const eventHandlerQueue = new window.PQueue({ concurrency: 1, timeout: 1000 * 60 * 2, @@ -136,9 +136,7 @@ type WhatIsThis = typeof window.WhatIsThis; } interactionMode = 'keyboard'; - $(document.body) - .addClass('keyboard-mode') - .removeClass('mouse-mode'); + $(document.body).addClass('keyboard-mode').removeClass('mouse-mode'); const { userChanged } = window.reduxActions.user; const { clearSelectedMessage } = window.reduxActions.conversations; if (clearSelectedMessage) { @@ -156,9 +154,7 @@ type WhatIsThis = typeof window.WhatIsThis; } interactionMode = 'mouse'; - $(document.body) - .addClass('mouse-mode') - .removeClass('keyboard-mode'); + $(document.body).addClass('mouse-mode').removeClass('keyboard-mode'); const { userChanged } = window.reduxActions.user; const { clearSelectedMessage } = window.reduxActions.conversations; if (clearSelectedMessage) { diff --git a/ts/components/conversation/media-gallery/groupMediaItemsByDate.ts b/ts/components/conversation/media-gallery/groupMediaItemsByDate.ts index 1628f8486..22121e8b7 100644 --- a/ts/components/conversation/media-gallery/groupMediaItemsByDate.ts +++ b/ts/components/conversation/media-gallery/groupMediaItemsByDate.ts @@ -115,9 +115,7 @@ const withSection = (referenceDateTime: moment.Moment) => ( mediaItem: MediaItemType ): MediaItemWithSection => { const today = moment(referenceDateTime).startOf('day'); - const yesterday = moment(referenceDateTime) - .subtract(1, 'day') - .startOf('day'); + const yesterday = moment(referenceDateTime).subtract(1, 'day').startOf('day'); const thisWeek = moment(referenceDateTime).startOf('isoWeek'); const thisMonth = moment(referenceDateTime).startOf('month'); diff --git a/ts/models/messages.ts b/ts/models/messages.ts index 5cdcea977..9782f2053 100644 --- a/ts/models/messages.ts +++ b/ts/models/messages.ts @@ -2987,8 +2987,9 @@ export class MessageModel extends window.Backbone.Model { ); if (preview.length < incomingPreview.length) { window.log.info( - `${message.idForLogging()}: Eliminated ${preview.length - - incomingPreview.length} previews with invalid urls'` + `${message.idForLogging()}: Eliminated ${ + preview.length - incomingPreview.length + } previews with invalid urls'` ); } diff --git a/ts/quill/emoji/completion.tsx b/ts/quill/emoji/completion.tsx index 355cba5f4..3eee54196 100644 --- a/ts/quill/emoji/completion.tsx +++ b/ts/quill/emoji/completion.tsx @@ -222,10 +222,7 @@ export class EmojiCompletion { ): void { const emoji = convertShortName(emojiData.short_name, this.options.skinTone); - const delta = new Delta() - .retain(index) - .delete(range) - .insert({ emoji }); + const delta = new Delta().retain(index).delete(range).insert({ emoji }); if (withTrailingSpace) { this.quill.updateContents(delta.insert(' '), 'user'); diff --git a/ts/quill/mentions/completion.tsx b/ts/quill/mentions/completion.tsx index d5624cfc9..3f22feb0f 100644 --- a/ts/quill/mentions/completion.tsx +++ b/ts/quill/mentions/completion.tsx @@ -183,10 +183,7 @@ export class MentionCompletion { range: number, withTrailingSpace = false ): void { - const delta = new Delta() - .retain(index) - .delete(range) - .insert({ mention }); + const delta = new Delta().retain(index).delete(range).insert({ mention }); if (withTrailingSpace) { this.quill.updateContents(delta.insert(' '), 'user'); diff --git a/ts/state/createStore.ts b/ts/state/createStore.ts index f6bf1b3af..eb35cded0 100644 --- a/ts/state/createStore.ts +++ b/ts/state/createStore.ts @@ -17,6 +17,7 @@ import { createLogger } from 'redux-logger'; import { reducer, StateType } from './reducer'; declare global { + // eslint-disable-next-line @typescript-eslint/no-unused-vars interface Console { _log: Console['log']; } diff --git a/ts/textsecure/TaskWithTimeout.ts b/ts/textsecure/TaskWithTimeout.ts index 8e3a94dba..8d9d66427 100644 --- a/ts/textsecure/TaskWithTimeout.ts +++ b/ts/textsecure/TaskWithTimeout.ts @@ -15,8 +15,9 @@ export default function createTaskWithTimeout( let complete = false; let timer: NodeJS.Timeout | null = setTimeout(() => { if (!complete) { - const message = `${id || - ''} task did not complete in time. Calling stack: ${ + const message = `${ + id || '' + } task did not complete in time. Calling stack: ${ errorForStack.stack }`; diff --git a/ts/textsecure/WebSocket.ts b/ts/textsecure/WebSocket.ts index daa2013be..80f733da4 100644 --- a/ts/textsecure/WebSocket.ts +++ b/ts/textsecure/WebSocket.ts @@ -5,7 +5,8 @@ import { w3cwebsocket } from 'websocket'; type ModifiedEventSource = Omit; -declare class ModifiedWebSocket extends w3cwebsocket +declare class ModifiedWebSocket + extends w3cwebsocket implements ModifiedEventSource { withCredentials: boolean; @@ -17,4 +18,5 @@ declare class ModifiedWebSocket extends w3cwebsocket } export type WebSocket = ModifiedWebSocket; +// eslint-disable-next-line @typescript-eslint/no-redeclare export const WebSocket = w3cwebsocket as typeof ModifiedWebSocket; diff --git a/ts/util/lint/exceptions.json b/ts/util/lint/exceptions.json index 52e820236..2c21ed804 100644 --- a/ts/util/lint/exceptions.json +++ b/ts/util/lint/exceptions.json @@ -441,29 +441,29 @@ { "rule": "jQuery-$(", "path": "js/views/debug_log_view.js", - "line": " this.$('.link')", + "line": " this.$('.link').focus().select();", "lineNumber": 83, "reasonCategory": "usageTrusted", - "updated": "2020-05-01T17:11:39.527Z", + "updated": "2020-11-18T03:39:29.033Z", "reasonDetail": "Protected from arbitrary input" }, { "rule": "jQuery-$(", "path": "js/views/debug_log_view.js", "line": " this.$('.loading').removeClass('loading');", - "lineNumber": 91, + "lineNumber": 89, "reasonCategory": "usageTrusted", - "updated": "2020-05-01T17:11:39.527Z", + "updated": "2020-11-18T03:39:29.033Z", "reasonDetail": "Protected from arbitrary input" }, { "rule": "jQuery-$(", "path": "js/views/debug_log_view.js", "line": " this.$('.result').text(i18n('debugLogError'));", - "lineNumber": 92, + "lineNumber": 90, "reasonCategory": "usageTrusted", - "updated": "2020-09-11T17:24:56.124Z", - "reasonDetail": "Static selector argument" + "updated": "2020-11-18T03:39:29.033Z", + "reasonDetail": "Protected from arbitrary input" }, { "rule": "jQuery-$(", @@ -1201,136 +1201,136 @@ { "rule": "jQuery-$(", "path": "js/views/standalone_registration_view.js", - "line": " const verificationCode = $('#code')", + "line": " const verificationCode = $('#code').val().replace(/\\D+/g, '');", "lineNumber": 40, "reasonCategory": "usageTrusted", - "updated": "2018-09-19T21:59:32.770Z", + "updated": "2020-11-18T03:39:29.033Z", "reasonDetail": "Protected from arbitrary input" }, { "rule": "jQuery-$(", "path": "js/views/standalone_registration_view.js", "line": " this.$('#status').text(s);", - "lineNumber": 53, + "lineNumber": 51, "reasonCategory": "usageTrusted", - "updated": "2018-09-19T21:59:32.770Z", + "updated": "2020-11-18T03:39:29.033Z", "reasonDetail": "Protected from arbitrary input" }, { "rule": "jQuery-$(", "path": "js/views/standalone_registration_view.js", - "line": " const verificationCode = $('#code')", - "lineNumber": 56, + "line": " const verificationCode = $('#code').val().replace(/\\D/g, '');", + "lineNumber": 54, "reasonCategory": "usageTrusted", - "updated": "2018-09-19T21:59:32.770Z", + "updated": "2020-11-18T03:39:29.033Z", "reasonDetail": "Protected from arbitrary input" }, { "rule": "jQuery-$(", "path": "js/views/standalone_registration_view.js", - "line": " this.$('#error')", - "lineNumber": 67, + "line": " this.$('#error').hide().text(error).addClass('in').fadeIn();", + "lineNumber": 63, "reasonCategory": "usageTrusted", - "updated": "2018-09-19T21:59:32.770Z", + "updated": "2020-11-18T03:39:29.033Z", "reasonDetail": "Protected from arbitrary input" }, { "rule": "jQuery-$(", "path": "js/views/standalone_registration_view.js", "line": " if (this.$('#number-container').hasClass('valid')) {", - "lineNumber": 74, + "lineNumber": 66, "reasonCategory": "usageTrusted", - "updated": "2018-09-19T21:59:32.770Z", + "updated": "2020-11-18T03:39:29.033Z", "reasonDetail": "Protected from arbitrary input" }, { "rule": "jQuery-$(", "path": "js/views/standalone_registration_view.js", "line": " this.$('#request-sms, #request-voice').removeAttr('disabled');", - "lineNumber": 75, + "lineNumber": 67, "reasonCategory": "usageTrusted", - "updated": "2020-09-11T17:24:56.124Z", - "reasonDetail": "Static selector argument" + "updated": "2020-11-18T03:39:29.033Z", + "reasonDetail": "Protected from arbitrary input" }, { "rule": "jQuery-$(", "path": "js/views/standalone_registration_view.js", "line": " this.$('#request-sms, #request-voice').prop('disabled', 'disabled');", - "lineNumber": 77, + "lineNumber": 69, "reasonCategory": "usageTrusted", - "updated": "2018-09-19T21:59:32.770Z", + "updated": "2020-11-18T03:39:29.033Z", "reasonDetail": "Protected from arbitrary input" }, { "rule": "jQuery-$(", "path": "js/views/standalone_registration_view.js", "line": " this.$('#code').addClass('invalid');", - "lineNumber": 82, + "lineNumber": 74, "reasonCategory": "usageTrusted", - "updated": "2018-09-19T21:59:32.770Z", + "updated": "2020-11-18T03:39:29.033Z", "reasonDetail": "Protected from arbitrary input" }, { "rule": "jQuery-$(", "path": "js/views/standalone_registration_view.js", "line": " this.$('#code').removeClass('invalid');", - "lineNumber": 84, + "lineNumber": 76, "reasonCategory": "usageTrusted", - "updated": "2018-09-19T21:59:32.770Z", + "updated": "2020-11-18T03:39:29.033Z", "reasonDetail": "Protected from arbitrary input" }, { "rule": "jQuery-$(", "path": "js/views/standalone_registration_view.js", "line": " this.$('#error').hide();", - "lineNumber": 89, + "lineNumber": 81, "reasonCategory": "usageTrusted", - "updated": "2018-09-19T21:59:32.770Z", + "updated": "2020-11-18T03:39:29.033Z", "reasonDetail": "Protected from arbitrary input" }, { "rule": "jQuery-$(", "path": "js/views/standalone_registration_view.js", - "line": " this.$('#step2')", - "lineNumber": 95, + "line": " this.$('#step2').addClass('in').fadeIn();", + "lineNumber": 87, "reasonCategory": "usageTrusted", - "updated": "2018-09-19T21:59:32.770Z", + "updated": "2020-11-18T03:39:29.033Z", "reasonDetail": "Protected from arbitrary input" }, { "rule": "jQuery-$(", "path": "js/views/standalone_registration_view.js", "line": " this.$('#number-container').addClass('invalid');", - "lineNumber": 99, + "lineNumber": 89, "reasonCategory": "usageTrusted", - "updated": "2018-09-19T21:59:32.770Z", + "updated": "2020-11-18T03:39:29.033Z", "reasonDetail": "Protected from arbitrary input" }, { "rule": "jQuery-$(", "path": "js/views/standalone_registration_view.js", "line": " $('#error').hide();", - "lineNumber": 104, + "lineNumber": 94, "reasonCategory": "usageTrusted", - "updated": "2018-09-19T21:59:32.770Z", + "updated": "2020-11-18T03:39:29.033Z", "reasonDetail": "Protected from arbitrary input" }, { "rule": "jQuery-$(", "path": "js/views/standalone_registration_view.js", - "line": " this.$('#step2')", - "lineNumber": 110, + "line": " this.$('#step2').addClass('in').fadeIn();", + "lineNumber": 100, "reasonCategory": "usageTrusted", - "updated": "2018-09-19T21:59:32.770Z", + "updated": "2020-11-18T03:39:29.033Z", "reasonDetail": "Protected from arbitrary input" }, { "rule": "jQuery-$(", "path": "js/views/standalone_registration_view.js", "line": " this.$('#number-container').addClass('invalid');", - "lineNumber": 114, + "lineNumber": 102, "reasonCategory": "usageTrusted", - "updated": "2018-09-19T21:59:32.770Z", + "updated": "2020-11-18T03:39:29.033Z", "reasonDetail": "Protected from arbitrary input" }, { @@ -1667,15 +1667,6 @@ "updated": "2020-10-09T22:28:48.591Z", "reasonDetail": "Test code. Also a false match." }, - { - "rule": "eval", - "path": "node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-implied-eval.js", - "line": " description: 'Disallow the use of `eval()`-like methods',", - "lineNumber": 38, - "reasonCategory": "falseMatch", - "updated": "2020-08-26T00:10:28.628Z", - "reasonDetail": "just a doc" - }, { "rule": "jQuery-$(", "path": "node_modules/@yarnpkg/lockfile/index.js", diff --git a/ts/util/lint/linter.ts b/ts/util/lint/linter.ts index 9505cd80c..c80847a2a 100644 --- a/ts/util/lint/linter.ts +++ b/ts/util/lint/linter.ts @@ -161,6 +161,7 @@ const excludedFilesRegexps = [ '^node_modules/es6-shim/.+', // Currently only used in storybook '^node_modules/escodegen/.+', '^node_modules/eslint.+', + '^node_modules/@typescript-eslint.+', '^node_modules/esprima/.+', '^node_modules/express/.+', '^node_modules/file-loader/.+', diff --git a/ts/util/zkgroup.ts b/ts/util/zkgroup.ts index 4778530c7..6b4c013a9 100644 --- a/ts/util/zkgroup.ts +++ b/ts/util/zkgroup.ts @@ -148,10 +148,7 @@ export function deriveGroupID( ); return compatArrayToArrayBuffer( - groupSecretParams - .getPublicParams() - .getGroupIdentifier() - .serialize() + groupSecretParams.getPublicParams().getGroupIdentifier().serialize() ); } diff --git a/ts/views/conversation_view.ts b/ts/views/conversation_view.ts index f74b0b516..aa82cbaa0 100644 --- a/ts/views/conversation_view.ts +++ b/ts/views/conversation_view.ts @@ -1838,10 +1838,7 @@ Whisper.ConversationView = Whisper.View.extend({ return fileName; } - return fileName - .split('.') - .slice(0, -1) - .join('.'); + return fileName.split('.').slice(0, -1).join('.'); }, getType(contentType: any) { diff --git a/yarn.lock b/yarn.lock index 597f79e11..a69764317 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2669,7 +2669,20 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@3.10.1", "@typescript-eslint/eslint-plugin@^3.3.0": +"@typescript-eslint/eslint-plugin@4.8.1": + version "4.8.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.8.1.tgz#b362abe0ee478a6c6d06c14552a6497f0b480769" + integrity sha512-d7LeQ7dbUrIv5YVFNzGgaW3IQKMmnmKFneRWagRlGYOSfLJVaRbj/FrBNOBC1a3tVO+TgNq1GbHvRtg1kwL0FQ== + dependencies: + "@typescript-eslint/experimental-utils" "4.8.1" + "@typescript-eslint/scope-manager" "4.8.1" + debug "^4.1.1" + functional-red-black-tree "^1.0.1" + regexpp "^3.0.0" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/eslint-plugin@^3.3.0": version "3.10.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.10.1.tgz#7e061338a1383f59edc204c605899f93dc2e2c8f" integrity sha512-PQg0emRtzZFWq6PxBcdxRH3QIQiyFO3WCVpRL3fgj5oQS3CDs3AeAKfv4DxNhzn8ITdNJGJ4D3Qw8eAJf3lXeQ== @@ -2692,7 +2705,29 @@ eslint-scope "^5.0.0" eslint-utils "^2.0.0" -"@typescript-eslint/parser@3.10.1", "@typescript-eslint/parser@^3.3.0": +"@typescript-eslint/experimental-utils@4.8.1": + version "4.8.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.8.1.tgz#27275c20fa4336df99ebcf6195f7d7aa7aa9f22d" + integrity sha512-WigyLn144R3+lGATXW4nNcDJ9JlTkG8YdBWHkDlN0lC3gUGtDi7Pe3h5GPvFKMcRz8KbZpm9FJV9NTW8CpRHpg== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/scope-manager" "4.8.1" + "@typescript-eslint/types" "4.8.1" + "@typescript-eslint/typescript-estree" "4.8.1" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + +"@typescript-eslint/parser@4.8.1": + version "4.8.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.8.1.tgz#4fe2fbdbb67485bafc4320b3ae91e34efe1219d1" + integrity sha512-QND8XSVetATHK9y2Ltc/XBl5Ro7Y62YuZKnPEwnNPB8E379fDsvzJ1dMJ46fg/VOmk0hXhatc+GXs5MaXuL5Uw== + dependencies: + "@typescript-eslint/scope-manager" "4.8.1" + "@typescript-eslint/types" "4.8.1" + "@typescript-eslint/typescript-estree" "4.8.1" + debug "^4.1.1" + +"@typescript-eslint/parser@^3.3.0": version "3.10.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.10.1.tgz#1883858e83e8b442627e1ac6f408925211155467" integrity sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw== @@ -2703,11 +2738,24 @@ "@typescript-eslint/typescript-estree" "3.10.1" eslint-visitor-keys "^1.1.0" +"@typescript-eslint/scope-manager@4.8.1": + version "4.8.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.8.1.tgz#e343c475f8f1d15801b546cb17d7f309b768fdce" + integrity sha512-r0iUOc41KFFbZdPAdCS4K1mXivnSZqXS5D9oW+iykQsRlTbQRfuFRSW20xKDdYiaCoH+SkSLeIF484g3kWzwOQ== + dependencies: + "@typescript-eslint/types" "4.8.1" + "@typescript-eslint/visitor-keys" "4.8.1" + "@typescript-eslint/types@3.10.1": version "3.10.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.10.1.tgz#1d7463fa7c32d8a23ab508a803ca2fe26e758727" integrity sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ== +"@typescript-eslint/types@4.8.1": + version "4.8.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.8.1.tgz#23829c73c5fc6f4fcd5346a7780b274f72fee222" + integrity sha512-ave2a18x2Y25q5K05K/U3JQIe2Av4+TNi/2YuzyaXLAsDx6UZkz1boZ7nR/N6Wwae2PpudTZmHFXqu7faXfHmA== + "@typescript-eslint/typescript-estree@3.10.1": version "3.10.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz#fd0061cc38add4fad45136d654408569f365b853" @@ -2722,6 +2770,20 @@ semver "^7.3.2" tsutils "^3.17.1" +"@typescript-eslint/typescript-estree@4.8.1": + version "4.8.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.8.1.tgz#7307e3f2c9e95df7daa8dc0a34b8c43b7ec0dd32" + integrity sha512-bJ6Fn/6tW2g7WIkCWh3QRlaSU7CdUUK52shx36/J7T5oTQzANvi6raoTsbwGM11+7eBbeem8hCCKbyvAc0X3sQ== + dependencies: + "@typescript-eslint/types" "4.8.1" + "@typescript-eslint/visitor-keys" "4.8.1" + debug "^4.1.1" + globby "^11.0.1" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^7.3.2" + tsutils "^3.17.1" + "@typescript-eslint/visitor-keys@3.10.1": version "3.10.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz#cd4274773e3eb63b2e870ac602274487ecd1e931" @@ -2729,6 +2791,14 @@ dependencies: eslint-visitor-keys "^1.1.0" +"@typescript-eslint/visitor-keys@4.8.1": + version "4.8.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.8.1.tgz#794f68ee292d1b2e3aa9690ebedfcb3a8c90e3c3" + integrity sha512-3nrwXFdEYALQh/zW8rFwP4QltqsanCDz4CwWMPiIZmwlk9GlvBeueEIbq05SEq4ganqM0g9nh02xXgv5XI3PeQ== + dependencies: + "@typescript-eslint/types" "4.8.1" + eslint-visitor-keys "^2.0.0" + "@webassemblyjs/ast@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" @@ -3342,6 +3412,11 @@ array-union@^1.0.1: dependencies: array-uniq "^1.0.1" +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" @@ -6002,6 +6077,13 @@ dir-glob@2.0.0: arrify "^1.0.1" path-type "^3.0.0" +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + dmg-builder@22.3.6: version "22.3.6" resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-22.3.6.tgz#2affc0bfb29a49eb35c11d91e5bf7ba32c140fbc" @@ -6849,6 +6931,11 @@ eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== +eslint-visitor-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" + integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + eslint@7.7.0: version "7.7.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.7.0.tgz#18beba51411927c4b64da0a8ceadefe4030d6073" @@ -7247,6 +7334,18 @@ fast-glob@^2.0.2: merge2 "^1.2.3" micromatch "^3.1.10" +fast-glob@^3.1.1: + version "3.2.4" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" + integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" + fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" @@ -8191,6 +8290,18 @@ globby@8.0.2: pify "^3.0.0" slash "^1.0.0" +globby@^11.0.1: + version "11.0.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" + integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + globby@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" @@ -8943,6 +9054,11 @@ ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== +ignore@^5.1.4: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + immediate@~3.0.5: version "3.0.6" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" @@ -12265,6 +12381,11 @@ path-type@^3.0.0: dependencies: pify "^3.0.0" +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + path@^0.12.7: version "0.12.7" resolved "https://registry.yarnpkg.com/path/-/path-0.12.7.tgz#d4dc2a506c4ce2197eb481ebfcd5b36c0140b10f" @@ -12604,7 +12725,12 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@1.19.1, prettier@^1.19.1: +prettier@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.1.2.tgz#3050700dae2e4c8b67c4c3f666cdb8af405e1ce5" + integrity sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg== + +prettier@^1.19.1: version "1.19.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== @@ -14720,6 +14846,11 @@ slash@^2.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + slice-ansi@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" @@ -16289,11 +16420,6 @@ typeface-inter@3.10.0: resolved "https://registry.yarnpkg.com/typeface-inter/-/typeface-inter-3.10.0.tgz#04a55d62e2dc3f60db3afab5d8a547e067692bc6" integrity sha512-WuXE+TaJLB8pdMuvIVY3LfT5UQqndR8+Js0xfhNpdXlsEx0Abwd1bzg4w4YWl2eoOmmLYrRpx6UJJ7a7/q6wZQ== -typescript@3.7.4: - version "3.7.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.4.tgz#1743a5ec5fef6a1fa9f3e4708e33c81c73876c19" - integrity sha512-A25xv5XCtarLwXpcDNZzCGvW2D1S3/bACratYBx2sax8PefsFhlYmkQicKHvpYflFS8if4zne5zT5kpJ7pzuvw== - typescript@3.8.3: version "3.8.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061"