diff --git a/_locales/en/messages.json b/_locales/en/messages.json index df4cc04d72..ec9ee73d17 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -204,7 +204,7 @@ "Shown in menu for conversation, and moves conversation out of main conversation list" }, "moveConversationToInbox": { - "message": "Move Converstion to Inbox", + "message": "Move Conversation to Inbox", "description": "Undoes Archive Conversation action, and moves archived conversation back to the main conversation list" }, @@ -817,6 +817,11 @@ "description": "When rendering an address, used to provide context to a post office box" }, + "downloading": { + "message": "Downloading", + "description": + "Shown in the message bubble while a long message attachment is being downloaded" + }, "downloadAttachment": { "message": "Download Attachment", "description": @@ -1316,12 +1321,6 @@ "description": "Warning notification that this version of the app has expired" }, - "androidMessageLengthWarning": { - "message": - "Android clients will only receive the first 2000 characters of this message.", - "description": - "Warning that long messages could not get received completely by Android clients." - }, "upgrade": { "message": "Upgrade", "description": diff --git a/background.html b/background.html index 8deac77ac3..18f22929d9 100644 --- a/background.html +++ b/background.html @@ -132,9 +132,6 @@

{{ welcomeToSignal }}

-
- {{ android-length-warning }} -
diff --git a/js/models/conversations.js b/js/models/conversations.js index e6d7a475d3..2f8f8c075e 100644 --- a/js/models/conversations.js +++ b/js/models/conversations.js @@ -1293,12 +1293,21 @@ messageWithSchema.attachments.map(loadAttachmentData) ); + const { + body: messageBody, + attachments: finalAttachments, + } = Whisper.Message.getLongMessageAttachment({ + body, + attachments: attachmentsWithData, + now, + }); + // Special-case the self-send case - we send only a sync message if (this.isMe()) { const dataMessage = await textsecure.messaging.getMessageProto( destination, - body, - attachmentsWithData, + messageBody, + finalAttachments, quote, preview, now, @@ -1320,8 +1329,8 @@ case Message.PRIVATE: return textsecure.messaging.sendMessageToNumber( destination, - body, - attachmentsWithData, + messageBody, + finalAttachments, quote, preview, now, @@ -1333,8 +1342,8 @@ return textsecure.messaging.sendMessageToGroup( destination, groupNumbers, - body, - attachmentsWithData, + messageBody, + finalAttachments, quote, preview, now, @@ -1649,6 +1658,8 @@ let promise; if (this.isMe()) { + const flags = + textsecure.protobuf.DataMessage.Flags.EXPIRATION_TIMER_UPDATE; const dataMessage = await textsecure.messaging.getMessageProto( this.get('id'), null, @@ -1657,7 +1668,8 @@ [], message.get('sent_at'), expireTimer, - profileKey + profileKey, + flags ); return message.sendSyncMessageOnly(dataMessage); } diff --git a/js/models/messages.js b/js/models/messages.js index a804ad6fea..9b927d737f 100644 --- a/js/models/messages.js +++ b/js/models/messages.js @@ -35,6 +35,7 @@ writeAttachment, upgradeMessageSchema, } = window.Signal.Migrations; + const { bytesFromString } = window.Signal.Crypto; window.AccountCache = Object.create(null); window.AccountJobs = Object.create(null); @@ -366,9 +367,12 @@ this.hasExpired = true; }, getPropsForTimerNotification() { - const { expireTimer, fromSync, source } = this.get( - 'expirationTimerUpdate' - ); + const timerUpdate = this.get('expirationTimerUpdate'); + if (!timerUpdate) { + return null; + } + + const { expireTimer, fromSync, source } = timerUpdate; const timespan = Whisper.ExpirationTimerOptions.getName(expireTimer || 0); const disabled = !expireTimer; @@ -641,6 +645,7 @@ return { text: this.createNonBreakingLastSeparator(this.get('body')), + textPending: this.get('bodyPending'), id: this.id, direction: this.isIncoming() ? 'incoming' : 'outgoing', timestamp: this.get('sent_at'), @@ -1008,6 +1013,12 @@ const attachmentsWithData = await Promise.all( (this.get('attachments') || []).map(loadAttachmentData) ); + const { body, attachments } = Whisper.Message.getLongMessageAttachment({ + body: this.get('body'), + attachments: attachmentsWithData, + now: this.get('sent_at'), + }); + const quoteWithData = await loadQuoteData(this.get('quote')); const previewWithData = await loadPreviewData(this.get('preview')); @@ -1016,8 +1027,8 @@ const [number] = numbers; const dataMessage = await textsecure.messaging.getMessageProto( number, - this.get('body'), - attachmentsWithData, + body, + attachments, quoteWithData, previewWithData, this.get('sent_at'), @@ -1035,8 +1046,8 @@ const [number] = numbers; promise = textsecure.messaging.sendMessageToNumber( number, - this.get('body'), - attachmentsWithData, + body, + attachments, quoteWithData, previewWithData, this.get('sent_at'), @@ -1051,9 +1062,9 @@ promise = textsecure.messaging.sendMessage( { recipients: numbers, - body: this.get('body'), + body, timestamp: this.get('sent_at'), - attachments: attachmentsWithData, + attachments, quote: quoteWithData, preview: previewWithData, needsSync: !this.get('synced'), @@ -1096,6 +1107,12 @@ const attachmentsWithData = await Promise.all( (this.get('attachments') || []).map(loadAttachmentData) ); + const { body, attachments } = Whisper.Message.getLongMessageAttachment({ + body: this.get('body'), + attachments: attachmentsWithData, + now: this.get('sent_at'), + }); + const quoteWithData = await loadQuoteData(this.get('quote')); const previewWithData = await loadPreviewData(this.get('preview')); @@ -1103,8 +1120,8 @@ if (number === this.OUR_NUMBER) { const dataMessage = await textsecure.messaging.getMessageProto( number, - this.get('body'), - attachmentsWithData, + body, + attachments, quoteWithData, previewWithData, this.get('sent_at'), @@ -1119,8 +1136,8 @@ ); const promise = textsecure.messaging.sendMessageToNumber( number, - this.get('body'), - attachmentsWithData, + body, + attachments, quoteWithData, previewWithData, this.get('sent_at'), @@ -1471,9 +1488,34 @@ async queueAttachmentDownloads() { const messageId = this.id; let count = 0; + let bodyPending; + + const [longMessageAttachments, normalAttachments] = _.partition( + this.get('attachments') || [], + attachment => + attachment.contentType === Whisper.Message.LONG_MESSAGE_CONTENT_TYPE + ); + + if (longMessageAttachments.length > 1) { + window.log.error( + `Received more than one long message attachment in message ${this.idForLogging()}` + ); + } + if (longMessageAttachments.length > 0) { + count += 1; + bodyPending = true; + await window.Signal.AttachmentDownloads.addJob( + longMessageAttachments[0], + { + messageId, + type: 'long-message', + index: 0, + } + ); + } const attachments = await Promise.all( - (this.get('attachments') || []).map((attachment, index) => { + normalAttachments.map((attachment, index) => { count += 1; return window.Signal.AttachmentDownloads.addJob(attachment, { messageId, @@ -1567,7 +1609,7 @@ } if (count > 0) { - this.set({ attachments, preview, contact, quote, group }); + this.set({ bodyPending, attachments, preview, contact, quote, group }); await window.Signal.Data.saveMessage(this.attributes, { Message: Whisper.Message, @@ -2081,6 +2123,39 @@ }, }); + // Receive will be enabled before we enable send + Whisper.Message.LONG_MESSAGE_SEND_DISABLED = true; + Whisper.Message.LONG_MESSAGE_CONTENT_TYPE = 'text/x-signal-plain'; + + Whisper.Message.getLongMessageAttachment = ({ body, attachments, now }) => { + if (Whisper.Message.LONG_MESSAGE_SEND_DISABLED) { + return { + body, + attachments, + }; + } + + if (body.length <= 2048) { + return { + body, + attachments, + }; + } + + const data = bytesFromString(body); + const attachment = { + contentType: Whisper.Message.LONG_MESSAGE_CONTENT_TYPE, + fileName: `long-message-${now}.txt`, + data, + size: data.byteLength, + }; + + return { + body: body.slice(0, 2048), + attachments: [attachment, ...attachments], + }; + }; + Whisper.Message.refreshExpirationTimer = () => Whisper.ExpiringMessagesListener.update(); diff --git a/js/modules/attachment_downloads.js b/js/modules/attachment_downloads.js index 9a74b8aed2..d330c8653f 100644 --- a/js/modules/attachment_downloads.js +++ b/js/modules/attachment_downloads.js @@ -11,6 +11,7 @@ const { saveMessage, setAttachmentDownloadJobPending, } = require('./data'); +const { stringFromBytes } = require('./crypto'); module.exports = { start, @@ -312,6 +313,19 @@ async function _addAttachmentToMessage(message, attachment, { type, index }) { const logPrefix = `${message.idForLogging()} (type: ${type}, index: ${index})`; + if (type === 'long-message') { + try { + const { data } = await Signal.Migrations.loadAttachmentData(attachment); + message.set({ + body: attachment.isError ? message.get('body') : stringFromBytes(data), + bodyPending: false, + }); + } finally { + Signal.Migrations.deleteAttachmentData(attachment.path); + } + return; + } + if (type === 'attachment') { const attachments = message.get('attachments'); if (!attachments || attachments.length <= index) { diff --git a/js/notifications.js b/js/notifications.js index 92ecd0eeef..b110a1ca70 100644 --- a/js/notifications.js +++ b/js/notifications.js @@ -22,6 +22,15 @@ MESSAGE: 'message', }; + function filter(text) { + return (text || '') + .replace(/&/g, '&') + .replace(/"/g, '"') + .replace(/'/g, ''') + .replace(//g, '>'); + } + Whisper.Notifications = new (Backbone.Collection.extend({ initialize() { this.isEnabled = false; @@ -151,15 +160,13 @@ drawAttention(); - const notification = new Notification(title, { - body: message, + this.lastNotification = new Notification(title, { + body: window.platform === 'linux' ? filter(message) : message, icon: iconUrl, - tag: isNotificationGroupingSupported ? 'signal' : undefined, silent: !status.shouldPlayNotificationSound, }); - notification.onclick = () => + this.lastNotification.onclick = () => this.trigger('click', last.conversationId, last.id); - this.lastNotification = notification; // We continue to build up more and more messages for our notifications // until the user comes back to our app or closes the app. Then we’ll diff --git a/js/views/conversation_view.js b/js/views/conversation_view.js index 870588c765..25e6234be5 100644 --- a/js/views/conversation_view.js +++ b/js/views/conversation_view.js @@ -81,7 +81,6 @@ return { 'disable-inputs': false, 'send-message': i18n('sendMessage'), - 'android-length-warning': i18n('androidMessageLengthWarning'), }; }, initialize(options) { @@ -247,7 +246,7 @@ this.model.copyPublicKey(); }, onArchive: () => { - this.unload(); + this.unload('archive'); this.model.setArchived(true); }, onMoveToInbox: () => { @@ -597,13 +596,6 @@ } */ }, - toggleLengthWarning() { - if (this.$('.send-message').val().length > 2000) { - this.$('.android-length-warning').show(); - } else { - this.$('.android-length-warning').hide(); - } - }, captureAudio(e) { e.preventDefault(); @@ -2103,7 +2095,6 @@ return; } this.toggleMicrophone(); - this.toggleLengthWarning(); this.view.measureScrollPosition(); window.autosize(this.$messageField); diff --git a/libtextsecure/sendmessage.js b/libtextsecure/sendmessage.js index 94940c85eb..7cd7d36e5e 100644 --- a/libtextsecure/sendmessage.js +++ b/libtextsecure/sendmessage.js @@ -28,11 +28,11 @@ function Message(options) { this.profileKey = options.profileKey; this.profile = options.profile; - if (!(this.recipients instanceof Array) || this.recipients.length < 1) { + if (!(this.recipients instanceof Array)) { throw new Error('Invalid recipient list'); } - if (!this.group && this.recipients.length > 1) { + if (!this.group && this.recipients.length !== 1) { throw new Error('Invalid recipient list for non-group'); } @@ -754,6 +754,7 @@ MessageSender.prototype = { failoverNumbers: [], errors: [], unidentifiedDeliveries: [], + dataMessage: proto.toArrayBuffer(), }); } @@ -787,7 +788,8 @@ MessageSender.prototype = { preview, timestamp, expireTimer, - profileKey + profileKey, + flags ) { const attributes = { recipients: [number], @@ -798,8 +800,13 @@ MessageSender.prototype = { preview, expireTimer, profileKey, + flags, }; + return this.getMessageProtoObj(attributes); + }, + + async getMessageProtoObj(attributes) { const message = new Message(attributes); await Promise.all([ this.uploadAttachments(message), @@ -920,7 +927,7 @@ MessageSender.prototype = { */ }, - sendMessageToGroup( + async sendMessageToGroup( groupId, groupNumbers, messageText, @@ -934,28 +941,33 @@ MessageSender.prototype = { ) { const me = textsecure.storage.user.getNumber(); const numbers = groupNumbers.filter(number => number !== me); + const attrs = { + recipients: numbers, + body: messageText, + timestamp, + attachments, + quote, + preview, + needsSync: true, + expireTimer, + profileKey, + group: { + id: groupId, + type: textsecure.protobuf.GroupContext.Type.DELIVER, + }, + }; + if (numbers.length === 0) { - return Promise.reject(new Error('No other members in the group')); + return Promise.resolve({ + successfulNumbers: [], + failoverNumbers: [], + errors: [], + unidentifiedDeliveries: [], + dataMessage: await this.getMessageProtoObj(attrs), + }); } - return this.sendMessage( - { - recipients: numbers, - body: messageText, - timestamp, - attachments, - quote, - preview, - needsSync: true, - expireTimer, - profileKey, - group: { - id: groupId, - type: textsecure.protobuf.GroupContext.Type.DELIVER, - }, - }, - options - ); + return this.sendMessage(attrs, options); }, createGroup(targetNumbers, id, name, avatar, options) { @@ -1038,7 +1050,7 @@ MessageSender.prototype = { proto.group.type = textsecure.protobuf.GroupContext.Type.QUIT; return this.sendGroupProto(groupNumbers, proto, Date.now(), options); }, - sendExpirationTimerUpdateToGroup( + async sendExpirationTimerUpdateToGroup( groupId, groupNumbers, expireTimer, @@ -1048,24 +1060,30 @@ MessageSender.prototype = { ) { const me = textsecure.storage.user.getNumber(); const numbers = groupNumbers.filter(number => number !== me); + const attrs = { + recipients: numbers, + timestamp, + needsSync: true, + expireTimer, + profileKey, + flags: textsecure.protobuf.DataMessage.Flags.EXPIRATION_TIMER_UPDATE, + group: { + id: groupId, + type: textsecure.protobuf.GroupContext.Type.DELIVER, + }, + }; + if (numbers.length === 0) { - return Promise.reject(new Error('No other members in the group')); + return Promise.resolve({ + successfulNumbers: [], + failoverNumbers: [], + errors: [], + unidentifiedDeliveries: [], + dataMessage: await this.getMessageProtoObj(attrs), + }); } - return this.sendMessage( - { - recipients: numbers, - timestamp, - needsSync: true, - expireTimer, - profileKey, - flags: textsecure.protobuf.DataMessage.Flags.EXPIRATION_TIMER_UPDATE, - group: { - id: groupId, - type: textsecure.protobuf.GroupContext.Type.DELIVER, - }, - }, - options - ); + + return this.sendMessage(attrs, options); }, sendExpirationTimerUpdateToNumber( number, diff --git a/package.json b/package.json index 662ef88049..7cad75a557 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "config": "1.28.1", "electron-editor-context-menu": "1.1.1", "electron-is-dev": "0.3.0", - "electron-updater": "2.21.10", + "electron-updater": "3.0.3", "emoji-datasource": "4.0.0", "emoji-datasource-apple": "4.0.0", "emoji-js": "3.4.0", @@ -92,7 +92,7 @@ "protobufjs": "6.8.6", "proxy-agent": "3.0.3", "react": "16.8.3", - "react-contextmenu": "2.9.2", + "react-contextmenu": "2.11.0", "react-dom": "16.8.3", "react-redux": "6.0.1", "react-virtualized": "9.21.0", @@ -103,7 +103,7 @@ "reselect": "4.0.0", "rimraf": "2.6.2", "semver": "5.4.1", - "spellchecker": "3.4.4", + "spellchecker": "3.5.1", "tar": "4.4.8", "testcheck": "1.0.0-rc.2", "tmp": "0.0.33", @@ -133,8 +133,8 @@ "axios": "0.18.0", "bower": "1.8.2", "chai": "4.1.2", - "electron": "4.0.5", - "electron-builder": "20.13.5", + "electron": "4.0.8", + "electron-builder": "20.31.3", "electron-icon-maker": "0.0.3", "eslint": "4.14.0", "eslint-config-airbnb-base": "12.1.0", diff --git a/preload.js b/preload.js index fcd2622003..9badefc7e2 100644 --- a/preload.js +++ b/preload.js @@ -21,6 +21,7 @@ if (config.appInstance) { title += ` - ${config.appInstance}`; } +window.platform = process.platform; window.getTitle = () => title; window.getEnvironment = () => config.environment; window.getAppInstance = () => config.appInstance; diff --git a/stylesheets/_ios.scss b/stylesheets/_ios.scss index 16f6c8d538..cf3ba988c4 100644 --- a/stylesheets/_ios.scss +++ b/stylesheets/_ios.scss @@ -142,12 +142,6 @@ .module-spinner__arc--incoming { background-color: $color-gray-60; } - .module-spinner__circle--small-incoming { - background-color: $color-white-04; - } - .module-spinner__arc--small-incoming { - background-color: $color-gray-60; - } .module-spinner__circle--outgoing { background-color: $color-white-04; @@ -155,12 +149,6 @@ .module-spinner__arc--outgoing { background-color: $color-white; } - .module-spinner__circle--small-outgoing { - background-color: $color-white-04; - } - .module-spinner__arc--small-outgoing { - background-color: $color-white; - } &.dark-theme { // _modules diff --git a/stylesheets/_modules.scss b/stylesheets/_modules.scss index 3c04c2be5f..8045777590 100644 --- a/stylesheets/_modules.scss +++ b/stylesheets/_modules.scss @@ -2957,32 +2957,47 @@ } } +// In these --small and --mini sizes, we're exploding our @color-svg mixin so we don't +// have to duplicate our background colors for the dark/ios/size matrix. + .module-spinner__container--small { height: 24px; width: 24px; } - .module-spinner__circle--small { - @include color-svg('../images/spinner-track-24.svg', $color-white-04); + -webkit-mask: url('../images/spinner-track-24.svg') no-repeat center; + -webkit-mask-size: 100%; height: 24px; width: 24px; } .module-spinner__arc--small { - @include color-svg('../images/spinner-24.svg', $color-gray-60); + -webkit-mask: url('../images/spinner-24.svg') no-repeat center; + -webkit-mask-size: 100%; height: 24px; width: 24px; } -.module-spinner__circle--incoming { - background-color: $color-white-04; +.module-spinner__container--mini { + height: 14px; + width: 14px; } -.module-spinner__arc--incoming { - background-color: $color-white; +.module-spinner__circle--mini { + -webkit-mask: url('../images/spinner-track-24.svg') no-repeat center; + -webkit-mask-size: 100%; + height: 14px; + width: 14px; } -.module-spinner__circle--small-incoming { +.module-spinner__arc--mini { + -webkit-mask: url('../images/spinner-24.svg') no-repeat center; + -webkit-mask-size: 100%; + height: 14px; + width: 14px; +} + +.module-spinner__circle--incoming { background-color: $color-white-04; } -.module-spinner__arc--small-incoming { +.module-spinner__arc--incoming { background-color: $color-white; } @@ -3184,18 +3199,21 @@ font-weight: 300px; } -.module-left-pane__list { - flex-grow: 1; - flex-shrink: 1; -} - .module-left-pane__archive-helper-text { + flex-grow: 0; + flex-shrink: 0; + padding: 1em; font-size: 12px; color: $color-gray-60; background-color: $color-gray-05; } +.module-left-pane__list { + flex-grow: 1; + flex-shrink: 1; +} + .module-left-pane__virtual-list { outline: none; } diff --git a/stylesheets/_theme_dark.scss b/stylesheets/_theme_dark.scss index 7847798fed..0b0adb649e 100644 --- a/stylesheets/_theme_dark.scss +++ b/stylesheets/_theme_dark.scss @@ -1489,12 +1489,6 @@ body.dark-theme { .module-spinner__arc { background-color: $color-gray-05; } - .module-spinner__circle--small { - background-color: $color-white-04; - } - .module-spinner__arc--small { - background-color: $color-gray-05; - } .module-spinner__circle--incoming { background-color: $color-white-04; @@ -1502,12 +1496,6 @@ body.dark-theme { .module-spinner__arc--incoming { background-color: $color-gray-05; } - .module-spinner__circle--small-incoming { - background-color: $color-white-04; - } - .module-spinner__arc--small-incoming { - background-color: $color-gray-05; - } .module-spinner__circle--outgoing { background-color: $color-white-04; @@ -1515,12 +1503,6 @@ body.dark-theme { .module-spinner__arc--outgoing { background-color: $color-gray-05; } - .module-spinner__circle--small-outgoing { - background-color: $color-white-04; - } - .module-spinner__arc--small-outgoing { - background-color: $color-gray-05; - } // Module: Caption Editor diff --git a/test/index.html b/test/index.html index b0193dc94d..5937d56f40 100644 --- a/test/index.html +++ b/test/index.html @@ -112,9 +112,6 @@

{{ welcomeToSignal }}

-
- {{ android-length-warning }} -
diff --git a/ts/components/LeftPane.tsx b/ts/components/LeftPane.tsx index e476c76dbc..b3c0ab1d3f 100644 --- a/ts/components/LeftPane.tsx +++ b/ts/components/LeftPane.tsx @@ -43,26 +43,6 @@ type RowRendererParamsType = { }; export class LeftPane extends React.Component { - public listRef: React.RefObject = React.createRef(); - - public scrollToTop() { - if (this.listRef && this.listRef.current) { - const { current } = this.listRef; - current.scrollToRow(0); - } - } - - public componentDidUpdate(prevProps: Props) { - const { showArchived, searchResults } = this.props; - - const isNotShowingSearchResults = !searchResults; - const hasArchiveViewChanged = showArchived !== prevProps.showArchived; - - if (isNotShowingSearchResults && hasArchiveViewChanged) { - this.scrollToTop(); - } - } - public renderRow = ({ index, key, @@ -135,7 +115,7 @@ export class LeftPane extends React.Component { ); } - public renderList(): JSX.Element { + public renderList(): JSX.Element | Array { const { archivedConversations, i18n, @@ -168,21 +148,27 @@ export class LeftPane extends React.Component { ? archivedConversations.length : conversations.length + (archivedConversations.length ? 1 : 0); + const archived = showArchived ? ( +
+ {i18n('archiveHelperText')} +
+ ) : null; + + // We ensure that the listKey differs between inbox and archive views, which ensures + // that AutoSizer properly detects the new size of its slot in the flexbox. The + // archive explainer text at the top of the archive view causes problems otherwise. + // It also ensures that we scroll to the top when switching views. + const listKey = showArchived ? 1 : 0; + // Note: conversations is not a known prop for List, but it is required to ensure that // it re-renders when our conversation data changes. Otherwise it would just render // on startup and scroll. - return ( -
- {showArchived ? ( -
- {i18n('archiveHelperText')} -
- ) : null} + const list = ( +
{({ height, width }) => ( {
); + + return [archived, list]; } public renderArchivedHeader(): JSX.Element { diff --git a/ts/components/Spinner.md b/ts/components/Spinner.md index ee30bbc82c..1924dcc65f 100644 --- a/ts/components/Spinner.md +++ b/ts/components/Spinner.md @@ -2,7 +2,10 @@ ```jsx - + +
+ +
``` @@ -10,6 +13,20 @@ ```jsx - + +
+ +
+
+``` + +#### Mini + +```jsx + + +
+ +
``` diff --git a/ts/components/Spinner.tsx b/ts/components/Spinner.tsx index ad2a326d20..acd8e484da 100644 --- a/ts/components/Spinner.tsx +++ b/ts/components/Spinner.tsx @@ -2,43 +2,37 @@ import React from 'react'; import classNames from 'classnames'; interface Props { - small?: boolean; + size: 'small' | 'mini' | 'normal'; direction?: string; } export class Spinner extends React.Component { public render() { - const { small, direction } = this.props; + const { size, direction } = this.props; return (
diff --git a/ts/components/conversation/Image.tsx b/ts/components/conversation/Image.tsx index 90a4b7c21c..d94d682fc8 100644 --- a/ts/components/conversation/Image.tsx +++ b/ts/components/conversation/Image.tsx @@ -94,7 +94,7 @@ export class Image extends React.Component { }} // alt={i18n('loading')} > - +
) : ( { public static defaultProps: Partial = { @@ -50,7 +51,11 @@ export class Linkify extends React.Component { } const { url, text: originalText } = match; - if (SUPPORTED_PROTOCOLS.test(url) && !isLinkSneaky(url)) { + if ( + SUPPORTED_PROTOCOLS.test(url) && + !isLinkSneaky(url) && + !HAS_AT.test(url) + ) { results.push( {originalText} diff --git a/ts/components/conversation/Message.md b/ts/components/conversation/Message.md index 98d89acf17..aacf7c89c4 100644 --- a/ts/components/conversation/Message.md +++ b/ts/components/conversation/Message.md @@ -474,13 +474,17 @@ Note that timestamp and status can be hidden with the `collapseMetadata` boolean @@ -490,13 +494,53 @@ Note that timestamp and status can be hidden with the `collapseMetadata` boolean authorColor="purple" direction="outgoing" status="delivered" - text={`Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum eget condimentum tellus. Aenean vulputate, dui a gravida rhoncus, mi orci varius urna, ut placerat felis ex ac elit. In pulvinar quis velit convallis varius. Quisque mattis, metus id lobortis porttitor, lacus ex laoreet dui, sit amet laoreet massa leo sed tellus. Phasellus iaculis pulvinar bibendum. In vitae imperdiet felis. Vivamus lacinia eros nec arcu varius, sodales faucibus nulla molestie. Etiam luctus lectus sit amet nulla facilisis, a porta mi tempus. Donec sit amet convallis ipsum. + text={`Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam efficitur finibus tellus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eu metus leo. Nullam consequat leo ut accumsan aliquam. In est elit, faucibus vel arcu vitae, dapibus egestas nunc. Curabitur nec orci semper, auctor justo ornare, sagittis massa. Aliquam ultrices sem ac ex vestibulum dapibus. Etiam erat purus, interdum sit amet magna vitae, elementum lacinia leo. Duis vel mauris dui. Morbi sed accumsan erat, at facilisis metus. Nullam molestie lectus eleifend congue ultrices. Nunc porta at justo semper egestas. Proin non iaculis nibh. Cras sit amet urna dignissim, venenatis arcu a, pulvinar ipsum. + + Integer et justo ut urna tempor ultrices. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In bibendum a nulla non blandit. In iaculis id orci maximus elementum. Mauris ultricies ipsum et magna iaculis, non porta orci elementum. Curabitur ipsum magna, porttitor id cursus nec, euismod at orci. Sed et ex id neque hendrerit auctor sed et mauris. In hac habitasse platea dictumst. + + Aliquam erat volutpat. Mauris quis erat luctus enim tincidunt fringilla. Vestibulum ornare, erat sit amet pretium gravida, tortor ipsum pretium eros, ac congue mauris elit vel elit. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Maecenas ultrices neque vulputate, pellentesque massa non, imperdiet justo. Curabitur vel ex non enim volutpat fringilla. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In gravida consectetur justo sit amet feugiat. Vivamus non eros dignissim, interdum magna at, suscipit mauris. Duis sit amet dui tempor, ornare arcu ultrices, convallis neque. Proin quis risus leo. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nunc lectus sapien, feugiat sit amet orci nec, consectetur vehicula odio. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Maecenas porta scelerisque egestas. + + Fusce diam massa, lacinia sit amet vehicula vitae, pretium sed augue. Duis diam velit, efficitur eget fringilla vel, pharetra eu lacus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Maecenas et convallis tellus. Aenean in orci tincidunt, finibus nulla ut, aliquam quam. Nullam feugiat egestas urna, ultricies suscipit justo venenatis eget. Curabitur sollicitudin odio eu tincidunt porta. Nullam in metus in purus rutrum varius et sit amet nibh. Nunc at efficitur turpis, a tincidunt dolor. + + Nam non leo euismod, volutpat leo quis, semper orci. Proin malesuada ultrices ex, nec fringilla ante condimentum eu. Sed vel gravida nibh. Vivamus sed tincidunt sem. Phasellus arcu orci, condimentum nec fringilla ac, maximus a arcu. Mauris sit amet sodales nisl. Etiam molestie consequat auctor. Proin auctor pulvinar mi vitae consequat. + + Phasellus commodo viverra condimentum. Nam vitae facilisis nibh, dapibus eleifend nisl. Quisque eu massa nunc.`} + timestamp={Date.now()} + i18n={util.i18n} + /> + + +``` + +### Pending long message download - In eros risus, posuere non viverra at, finibus ac elit. Nunc convallis vulputate risus. Donec ligula justo, lacinia id vulputate in, semper non nibh. Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque porttitor neque a metus dapibus varius. Sed luctus purus vel semper rhoncus. In imperdiet risus ut convallis porttitor. Fusce vel ligula placerat, imperdiet ante vel, mollis ipsum. +```jsx + +
  • + +
  • +
  • + diff --git a/ts/components/conversation/Message.tsx b/ts/components/conversation/Message.tsx index f34448c716..8c29c60fed 100644 --- a/ts/components/conversation/Message.tsx +++ b/ts/components/conversation/Message.tsx @@ -49,6 +49,7 @@ interface LinkPreviewType { export interface Props { disableMenu?: boolean; text?: string; + textPending?: boolean; id?: string; collapseMetadata?: boolean; direction: 'incoming' | 'outgoing'; @@ -199,6 +200,7 @@ export class Message extends React.PureComponent { i18n, status, text, + textPending, timestamp, isP2p, } = this.props; @@ -261,7 +263,12 @@ export class Message extends React.PureComponent { /> ) : null} - {direction === 'outgoing' && status !== 'error' ? ( + {textPending ? ( +
    + +
    + ) : null} + {!textPending && direction === 'outgoing' && status !== 'error' ? (
    { > {pending ? (
    - +
    ) : (
    @@ -661,7 +668,7 @@ export class Message extends React.PureComponent { } public renderText() { - const { text, i18n, direction, status } = this.props; + const { text, textPending, i18n, direction, status } = this.props; const contents = direction === 'incoming' && status === 'error' @@ -683,7 +690,11 @@ export class Message extends React.PureComponent { : null )} > - +
    ); } diff --git a/ts/components/conversation/MessageBody.md b/ts/components/conversation/MessageBody.md index 2c9a87b510..428f9a673e 100644 --- a/ts/components/conversation/MessageBody.md +++ b/ts/components/conversation/MessageBody.md @@ -36,13 +36,13 @@ ### Jumbomoji disabled ```jsx - + ``` ### Links disabled ```jsx - + ``` ### Emoji in link @@ -50,3 +50,24 @@ ```jsx ``` + +### Text pending + +```jsx + +``` + +### Text pending, disable links + +```jsx + +``` diff --git a/ts/components/conversation/MessageBody.tsx b/ts/components/conversation/MessageBody.tsx index 953c263c23..fa04036c9b 100644 --- a/ts/components/conversation/MessageBody.tsx +++ b/ts/components/conversation/MessageBody.tsx @@ -9,6 +9,7 @@ import { LocalizerType, RenderTextCallbackType } from '../../types/Util'; interface Props { text: string; + textPending?: boolean; /** If set, all emoji will be the same size. Otherwise, just one emoji will be large. */ disableJumbomoji?: boolean; /** If set, links will be left alone instead of turned into clickable `
    ` tags. */ @@ -50,23 +51,48 @@ const renderEmoji = ({ * them for you. */ export class MessageBody extends React.Component { + public addDownloading(jsx: JSX.Element): JSX.Element { + const { i18n, textPending } = this.props; + + return ( + + {jsx} + {textPending ? ( + + {' '} + {i18n('downloading')} + + ) : null} + + ); + } + public render() { - const { text, disableJumbomoji, disableLinks, i18n } = this.props; + const { + text, + textPending, + disableJumbomoji, + disableLinks, + i18n, + } = this.props; const sizeClass = disableJumbomoji ? undefined : getSizeClass(text); + const textWithPending = textPending ? `${text}...` : text; if (disableLinks) { - return renderEmoji({ - i18n, - text, - sizeClass, - key: 0, - renderNonEmoji: renderNewLines, - }); + return this.addDownloading( + renderEmoji({ + i18n, + text: textWithPending, + sizeClass, + key: 0, + renderNonEmoji: renderNewLines, + }) + ); } - return ( + return this.addDownloading( { return renderEmoji({ i18n, diff --git a/ts/components/conversation/_contactUtil.tsx b/ts/components/conversation/_contactUtil.tsx index 9f91538e3c..496aba756d 100644 --- a/ts/components/conversation/_contactUtil.tsx +++ b/ts/components/conversation/_contactUtil.tsx @@ -25,11 +25,12 @@ export function renderAvatar({ const avatarPath = avatar && avatar.avatar && avatar.avatar.path; const pending = avatar && avatar.avatar && avatar.avatar.pending; const name = getName(contact) || ''; + const spinnerSize = size < 50 ? 'small' : 'normal'; if (pending) { return (
    - +
    ); } diff --git a/ts/util/lint/exceptions.json b/ts/util/lint/exceptions.json index 71890fb39f..7dfd7bac63 100644 --- a/ts/util/lint/exceptions.json +++ b/ts/util/lint/exceptions.json @@ -203,22 +203,6 @@ "updated": "2018-09-19T18:13:29.628Z", "reasonDetail": "Interacting with already-existing DOM nodes" }, - { - "rule": "jQuery-wrap(", - "path": "js/models/messages.js", - "line": " return this.send(wrap(promise));", - "lineNumber": 938, - "reasonCategory": "falseMatch", - "updated": "2018-10-05T23:12:28.961Z" - }, - { - "rule": "jQuery-wrap(", - "path": "js/models/messages.js", - "line": " return wrap(", - "lineNumber": 1185, - "reasonCategory": "falseMatch", - "updated": "2018-10-05T23:12:28.961Z" - }, { "rule": "jQuery-wrap(", "path": "js/modules/crypto.js", @@ -1737,70 +1721,6 @@ "reasonCategory": "falseMatch", "updated": "2018-09-19T18:13:29.628Z" }, - { - "rule": "jQuery-load(", - "path": "node_modules/builder-util-runtime/node_modules/debug/src/browser.js", - "line": "function load() {", - "lineNumber": 160, - "reasonCategory": "falseMatch", - "updated": "2018-09-15T00:38:04.183Z" - }, - { - "rule": "jQuery-load(", - "path": "node_modules/builder-util-runtime/node_modules/debug/src/browser.js", - "line": "exports.enable(load());", - "lineNumber": 178, - "reasonCategory": "falseMatch", - "updated": "2018-09-15T00:38:04.183Z" - }, - { - "rule": "jQuery-load(", - "path": "node_modules/builder-util-runtime/node_modules/debug/src/node.js", - "line": "function load() {", - "lineNumber": 162, - "reasonCategory": "falseMatch", - "updated": "2018-09-15T00:38:04.183Z" - }, - { - "rule": "jQuery-load(", - "path": "node_modules/builder-util-runtime/node_modules/debug/src/node.js", - "line": "exports.enable(load());", - "lineNumber": 186, - "reasonCategory": "falseMatch", - "updated": "2018-09-15T00:38:04.183Z" - }, - { - "rule": "jQuery-load(", - "path": "node_modules/builder-util/node_modules/debug/src/browser.js", - "line": "function load() {", - "lineNumber": 160, - "reasonCategory": "falseMatch", - "updated": "2018-09-15T00:38:04.183Z" - }, - { - "rule": "jQuery-load(", - "path": "node_modules/builder-util/node_modules/debug/src/browser.js", - "line": "exports.enable(load());", - "lineNumber": 178, - "reasonCategory": "falseMatch", - "updated": "2018-09-15T00:38:04.183Z" - }, - { - "rule": "jQuery-load(", - "path": "node_modules/builder-util/node_modules/debug/src/node.js", - "line": "function load() {", - "lineNumber": 162, - "reasonCategory": "falseMatch", - "updated": "2018-09-15T00:38:04.183Z" - }, - { - "rule": "jQuery-load(", - "path": "node_modules/builder-util/node_modules/debug/src/node.js", - "line": "exports.enable(load());", - "lineNumber": 186, - "reasonCategory": "falseMatch", - "updated": "2018-09-15T00:38:04.183Z" - }, { "rule": "jQuery-$(", "path": "node_modules/bunyan/node_modules/moment/min/locales.min.js", @@ -2153,6 +2073,46 @@ "updated": "2018-09-18T19:19:27.699Z", "reasonDetail": "What's being eval'd is a static string, with one variable: args. Args is of the form arg1, arg2, generated programmatically." }, + { + "rule": "jQuery-load(", + "path": "node_modules/dmg-builder/node_modules/debug/dist/debug.js", + "line": " createDebug.enable(createDebug.load());", + "lineNumber": 721, + "reasonCategory": "falseMatch", + "updated": "2019-03-13T02:42:07.830Z" + }, + { + "rule": "jQuery-load(", + "path": "node_modules/dmg-builder/node_modules/debug/dist/debug.js", + "line": " function load() {", + "lineNumber": 855, + "reasonCategory": "falseMatch", + "updated": "2019-03-13T02:42:07.830Z" + }, + { + "rule": "jQuery-load(", + "path": "node_modules/dmg-builder/node_modules/debug/src/browser.js", + "line": "function load() {", + "lineNumber": 211, + "reasonCategory": "falseMatch", + "updated": "2019-03-13T02:42:07.830Z" + }, + { + "rule": "jQuery-load(", + "path": "node_modules/dmg-builder/node_modules/debug/src/common.js", + "line": "\tcreateDebug.enable(createDebug.load());", + "lineNumber": 261, + "reasonCategory": "falseMatch", + "updated": "2019-03-13T02:42:07.830Z" + }, + { + "rule": "jQuery-load(", + "path": "node_modules/dmg-builder/node_modules/debug/src/node.js", + "line": "function load() {", + "lineNumber": 216, + "reasonCategory": "falseMatch", + "updated": "2019-03-13T02:42:07.830Z" + }, { "rule": "jQuery-$(", "path": "node_modules/dotenv-expand/lib/main.js", @@ -2177,37 +2137,53 @@ "reasonCategory": "falseMatch", "updated": "2018-09-19T18:13:29.628Z" }, + { + "rule": "thenify-multiArgs", + "path": "node_modules/electron-updater/node_modules/bluebird-lst/index.d.ts", + "line": " multiArgs?: boolean;", + "lineNumber": 985, + "reasonCategory": "falseMatch", + "updated": "2019-03-13T02:42:07.830Z" + }, + { + "rule": "thenify-multiArgs", + "path": "node_modules/electron-updater/node_modules/bluebird-lst/index.d.ts", + "line": " multiArgs?: boolean;", + "lineNumber": 989, + "reasonCategory": "falseMatch", + "updated": "2019-03-13T02:42:07.830Z" + }, { "rule": "jQuery-load(", - "path": "node_modules/electron-download-tf/node_modules/debug/src/browser.js", + "path": "node_modules/electron-updater/node_modules/debug/src/browser.js", "line": "function load() {", "lineNumber": 160, "reasonCategory": "falseMatch", - "updated": "2018-09-15T00:38:04.183Z" + "updated": "2019-03-13T01:27:05.473Z" }, { "rule": "jQuery-load(", - "path": "node_modules/electron-download-tf/node_modules/debug/src/browser.js", + "path": "node_modules/electron-updater/node_modules/debug/src/browser.js", "line": "exports.enable(load());", "lineNumber": 178, "reasonCategory": "falseMatch", - "updated": "2018-09-15T00:38:04.183Z" + "updated": "2019-03-13T01:27:05.473Z" }, { "rule": "jQuery-load(", - "path": "node_modules/electron-download-tf/node_modules/debug/src/node.js", + "path": "node_modules/electron-updater/node_modules/debug/src/node.js", "line": "function load() {", - "lineNumber": 153, + "lineNumber": 162, "reasonCategory": "falseMatch", - "updated": "2018-09-15T00:38:04.183Z" + "updated": "2019-03-13T01:27:05.473Z" }, { "rule": "jQuery-load(", - "path": "node_modules/electron-download-tf/node_modules/debug/src/node.js", + "path": "node_modules/electron-updater/node_modules/debug/src/node.js", "line": "exports.enable(load());", - "lineNumber": 177, + "lineNumber": 186, "reasonCategory": "falseMatch", - "updated": "2018-09-15T00:38:04.183Z" + "updated": "2019-03-13T01:27:05.473Z" }, { "rule": "eval", @@ -3714,24 +3690,24 @@ "rule": "jQuery-load(", "path": "node_modules/js-yaml/dist/js-yaml.js", "line": "function load(input, options) {", - "lineNumber": 2537, + "lineNumber": 2545, "reasonCategory": "falseMatch", - "updated": "2018-09-15T00:38:04.183Z" + "updated": "2019-03-13T01:27:05.473Z" }, { "rule": "jQuery-load(", "path": "node_modules/js-yaml/dist/js-yaml.js", "line": " return load(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options));", - "lineNumber": 2560, + "lineNumber": 2568, "reasonCategory": "falseMatch", - "updated": "2018-09-15T00:38:04.183Z" + "updated": "2019-03-13T01:27:05.473Z" }, { "rule": "jQuery-$(", "path": "node_modules/js-yaml/dist/js-yaml.min.js", "lineNumber": 1, "reasonCategory": "falseMatch", - "updated": "2018-09-19T21:59:32.770Z" + "updated": "2019-03-13T01:27:05.473Z" }, { "rule": "jQuery-load(", @@ -3739,7 +3715,7 @@ "line": "function load(input, options) {", "lineNumber": 1568, "reasonCategory": "falseMatch", - "updated": "2018-09-15T00:38:04.183Z" + "updated": "2019-03-13T01:27:05.473Z" }, { "rule": "jQuery-load(", @@ -3747,7 +3723,7 @@ "line": " return load(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options));", "lineNumber": 1591, "reasonCategory": "falseMatch", - "updated": "2018-09-15T00:38:04.183Z" + "updated": "2019-03-13T01:27:05.473Z" }, { "rule": "jQuery-$(", @@ -5101,41 +5077,41 @@ { "rule": "jQuery-prepend(", "path": "node_modules/source-map-support/browser-source-map-support.js", - "lineNumber": 93, + "lineNumber": 90, "reasonCategory": "falseMatch", - "updated": "2018-09-19T18:13:29.628Z" + "updated": "2019-03-13T01:27:05.473Z" }, { "rule": "eval", "path": "node_modules/source-map-support/source-map-support.js", "line": " // Most eval() calls are in this format", - "lineNumber": 235, + "lineNumber": 234, "reasonCategory": "falseMatch", - "updated": "2018-09-15T00:38:04.183Z" + "updated": "2019-03-13T01:27:05.473Z" }, { "rule": "eval", "path": "node_modules/source-map-support/source-map-support.js", "line": " // Parse nested eval() calls using recursion", - "lineNumber": 247, + "lineNumber": 246, "reasonCategory": "falseMatch", - "updated": "2018-09-15T00:38:04.183Z" + "updated": "2019-03-13T01:27:05.473Z" }, { "rule": "eval", "path": "node_modules/source-map-support/source-map-support.js", "line": " // passed to eval() ending in \"//# sourceURL=...\" will return the source file", - "lineNumber": 345, + "lineNumber": 344, "reasonCategory": "falseMatch", - "updated": "2018-09-15T00:38:04.183Z" + "updated": "2019-03-13T01:27:05.473Z" }, { "rule": "eval", "path": "node_modules/source-map-support/source-map-support.js", "line": " // Code called using eval() needs special handling", - "lineNumber": 372, + "lineNumber": 373, "reasonCategory": "falseMatch", - "updated": "2018-09-15T00:38:04.183Z" + "updated": "2019-03-13T01:27:05.473Z" }, { "rule": "jQuery-prepend(", @@ -5464,24 +5440,6 @@ "updated": "2019-03-09T00:08:44.242Z", "reasonDetail": "Used only to set focus" }, - { - "rule": "React-createRef", - "path": "ts/components/LeftPane.js", - "line": " this.listRef = react_1.default.createRef();", - "lineNumber": 13, - "reasonCategory": "usageTrusted", - "updated": "2019-03-12T23:33:50.889Z", - "reasonDetail": "Used only to scroll to top on archive/inbox switch" - }, - { - "rule": "React-createRef", - "path": "ts/components/LeftPane.tsx", - "line": " public listRef: React.RefObject = React.createRef();", - "lineNumber": 46, - "reasonCategory": "usageTrusted", - "updated": "2019-03-12T23:33:50.889Z", - "reasonDetail": "Used only to scroll to top on archive/inbox switch" - }, { "rule": "React-createRef", "path": "ts/components/Lightbox.js", diff --git a/ts/util/lint/linter.ts b/ts/util/lint/linter.ts index b87abc0735..74a68d2e29 100644 --- a/ts/util/lint/linter.ts +++ b/ts/util/lint/linter.ts @@ -50,6 +50,7 @@ const results: Array = []; const excludedFiles = [ // High-traffic files in our project + '^js/models/messages.js', '^js/views/conversation_view.js', '^js/views/file_input_view.js', '^js/background.js', @@ -83,6 +84,7 @@ const excludedFiles = [ '^node_modules/ajv/*', '^node_modules/amdefine/*', '^node_modules/anymatch/*', + '^node_modules/app-builder-lib/*', '^node_modules/asn1\\.js/*', '^node_modules/autoprefixer/*', '^node_modules/babel*', @@ -90,6 +92,8 @@ const excludedFiles = [ '^node_modules/body-parser/*', '^node_modules/bower/*', '^node_modules/buble/*', + '^node_modules/builder-util/*', + '^node_modules/builder-util-runtime/*', '^node_modules/chai/*', '^node_modules/cli-table2/*', '^node_modules/codemirror/*', diff --git a/yarn.lock b/yarn.lock index 0bc3b81da8..d265a2b1b1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,25 +2,10 @@ # yarn lockfile v1 -"7zip-bin-linux@~1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/7zip-bin-linux/-/7zip-bin-linux-1.3.1.tgz#4856db1ab1bf5b6ee8444f93f5a8ad71446d00d5" - -"7zip-bin-mac@~1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/7zip-bin-mac/-/7zip-bin-mac-1.0.1.tgz#3e68778bbf0926adc68159427074505d47555c02" - -"7zip-bin-win@~2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/7zip-bin-win/-/7zip-bin-win-2.2.0.tgz#0b81c43e911100f3ece2ebac4f414ca95a572d5b" - -"7zip-bin@~3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-3.1.0.tgz#70814c6b6d44fef8b74be6fc64d3977a2eff59a5" - optionalDependencies: - "7zip-bin-linux" "~1.3.1" - "7zip-bin-mac" "~1.0.1" - "7zip-bin-win" "~2.2.0" +"7zip-bin@~4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-4.1.0.tgz#33eff662a5c39c0c2061170cc003c5120743fff0" + integrity sha512-AsnBZN3a8/JcNt+KPkGGODaA4c7l3W5+WpeKgGSbstSLxqWtTXqd1ieJGBQ8IFCtRg8DmmKUcSkIkUc0A4p3YA== "@babel/runtime@^7.1.2", "@babel/runtime@^7.3.1": version "7.3.1" @@ -315,14 +300,15 @@ ajv@^6.1.0: json-schema-traverse "^0.3.0" uri-js "^3.0.2" -ajv@^6.4.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.0.tgz#4c8affdf80887d8f132c9c52ab8a2dc4d0b7b24c" +ajv@^6.5.5: + version "6.10.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" + integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== dependencies: fast-deep-equal "^2.0.1" fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" - uri-js "^4.2.1" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" @@ -390,25 +376,45 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -app-builder-bin-linux@1.8.6: - version "1.8.6" - resolved "https://registry.yarnpkg.com/app-builder-bin-linux/-/app-builder-bin-linux-1.8.6.tgz#81176bbcb2929958a90f2184afb54df90b7210a3" - -app-builder-bin-mac@1.8.6: - version "1.8.6" - resolved "https://registry.yarnpkg.com/app-builder-bin-mac/-/app-builder-bin-mac-1.8.6.tgz#20d7233c5cadf00472e7b0ccaf85627b53f90787" +app-builder-bin@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-2.3.0.tgz#01be654554167267c26a990b8cfc39ab9646007c" + integrity sha512-jxquarsPVHkUMatxFZzuEmovy2pxaGCIsVqZiAIdQV7wm1Cbq3Jl+gsq26aMXFFIgsN19jCq2HCoXhVv+Mx7HA== -app-builder-bin-win@1.8.6: - version "1.8.6" - resolved "https://registry.yarnpkg.com/app-builder-bin-win/-/app-builder-bin-win-1.8.6.tgz#d09f78fb1dd5a5f8ea231294828fd5c9ad0358a5" +app-builder-bin@2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-2.3.1.tgz#4690f5bb049b9f0f84e6a21c09a90c2a8b9c3e00" + integrity sha512-hmqM9qc3jqmmUzkMhUZt81q8l7cdC3i5yZFBZyVpwCWJdG9zTeLwLitVGR7IJd0uK9Vf9sBejKBv6Yi8xise6A== -app-builder-bin@1.8.6: - version "1.8.6" - resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-1.8.6.tgz#85604ece9c1b63ed0437abe92ddaf41c88c3f2e4" - optionalDependencies: - app-builder-bin-linux "1.8.6" - app-builder-bin-mac "1.8.6" - app-builder-bin-win "1.8.6" +app-builder-lib@20.31.3, app-builder-lib@~20.31.2: + version "20.31.3" + resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-20.31.3.tgz#ed360cdc0879d033c97c42866cbe08259e024459" + integrity sha512-BwpaBs7tqdxcRT4NZ8jBhdSnAGxRilZ32WvCHZQGpaVTXk5whEt2QULwQi1TldwFCmk1tpC99es4YX9mhPP+xw== + dependencies: + "7zip-bin" "~4.1.0" + app-builder-bin "2.3.1" + async-exit-hook "^2.0.1" + bluebird-lst "^1.0.6" + builder-util "8.0.0" + builder-util-runtime "6.1.0" + chromium-pickle-js "^0.2.0" + debug "^4.1.0" + ejs "^2.6.1" + electron-osx-sign "0.4.11" + electron-publish "20.31.2" + fs-extra-p "^7.0.0" + hosted-git-info "^2.7.1" + is-ci "^1.2.1" + isbinaryfile "^3.0.3" + js-yaml "^3.12.0" + lazy-val "^1.0.3" + minimatch "^3.0.4" + normalize-package-data "^2.4.0" + plist "^3.0.1" + read-config-file "3.2.0" + sanitize-filename "^1.6.1" + semver "^5.6.0" + temp-file "^3.1.3" append-transform@^0.4.0: version "0.4.0" @@ -803,7 +809,7 @@ balanced-match@^0.4.1, balanced-match@^0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" -base64-js@1.2.0, base64-js@^1.0.2: +base64-js@^1.0.2: version "1.2.0" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" @@ -882,6 +888,13 @@ bluebird-lst@^1.0.5: dependencies: bluebird "^3.5.1" +bluebird-lst@^1.0.6, bluebird-lst@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/bluebird-lst/-/bluebird-lst-1.0.7.tgz#f0babade9ef1dce3989b603f3796ff3b16b90d50" + integrity sha512-5ix04IbXVIZ6nSRM4aZnwQfk40Td0D57WAl8LfhnICF6XwT4efCZYh0veOHvfDmgpbqE4ju5L5XEAMIcAe13Kw== + dependencies: + bluebird "^3.5.3" + bluebird@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" @@ -890,6 +903,11 @@ bluebird@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" +bluebird@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" + integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw== + blueimp-canvas-to-blob@3.14.0: version "3.14.0" resolved "https://registry.yarnpkg.com/blueimp-canvas-to-blob/-/blueimp-canvas-to-blob-3.14.0.tgz#ea075ffbfb1436607b0c75e951fb1ceb3ca0288e" @@ -1096,7 +1114,20 @@ buble@^0.19.3: os-homedir "^1.0.1" vlq "^1.0.0" -buffer-crc32@0.2.13, buffer-crc32@^0.2.1: +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-crc32@^0.2.1: version "0.2.13" resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" @@ -1104,6 +1135,11 @@ buffer-equal@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-0.0.1.tgz#91bc74b11ea405bc916bc6aa908faafa5b4aac4b" +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= + buffer-from@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.0.0.tgz#4cb8832d23612589b0406e9e2956c17f06fdf531" @@ -1128,33 +1164,65 @@ buffers@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" -builder-util-runtime@4.2.1, builder-util-runtime@^4.2.1, builder-util-runtime@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-4.2.1.tgz#0caa358f1331d70680010141ca591952b69b35bc" +builder-util-runtime@6.1.0, builder-util-runtime@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-6.1.0.tgz#85f0c7bddbe4950ad708a1455b6ba79e16f2b731" + integrity sha512-/1dvNkUNSlMQuIEMBGzJUS60tmDBBA6CYiWT5P9ZTIl2nskMX8VdEClTNTfknkCBQqZArgSTXfWrNmcbXEkbEg== + dependencies: + bluebird-lst "^1.0.6" + debug "^4.1.0" + fs-extra-p "^7.0.0" + sax "^1.2.4" + +builder-util-runtime@~4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-4.4.1.tgz#2770d03241e51fde46acacc7ed3ed8a9f45f02cb" + integrity sha512-8L2pbL6D3VdI1f8OMknlZJpw0c7KK15BRz3cY77AOUElc4XlCv2UhVV01jJM7+6Lx7henaQh80ALULp64eFYAQ== dependencies: bluebird-lst "^1.0.5" debug "^3.1.0" - fs-extra-p "^4.6.0" + fs-extra-p "^4.6.1" sax "^1.2.4" -builder-util@5.8.1, builder-util@^5.8.1: - version "5.8.1" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-5.8.1.tgz#8dd953c018b7a7b2a56c3427b2c62ef77c925ac7" +builder-util@8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-8.0.0.tgz#ade1d5b0c62b9c260eb4fcb9be9918a28f2eb13b" + integrity sha512-hszhXrRZKfBf+178Y+QZCLwSH5UXgnDX+/q+fIRtFktCk5Dc9ipdvHAKPVfzhc5vhiw/eVDdFUUX8ShAQcyyBA== dependencies: - "7zip-bin" "~3.1.0" - app-builder-bin "1.8.6" - bluebird-lst "^1.0.5" - builder-util-runtime "^4.2.1" + "7zip-bin" "~4.1.0" + app-builder-bin "2.3.0" + bluebird-lst "^1.0.6" + builder-util-runtime "^6.1.0" chalk "^2.4.1" - debug "^3.1.0" - fs-extra-p "^4.6.0" - is-ci "^1.1.0" - js-yaml "^3.11.0" + debug "^4.1.0" + fs-extra-p "^7.0.0" + is-ci "^1.2.1" + js-yaml "^3.12.0" lazy-val "^1.0.3" - semver "^5.5.0" - source-map-support "^0.5.5" + semver "^5.6.0" + source-map-support "^0.5.9" stat-mode "^0.2.2" - temp-file "^3.1.2" + temp-file "^3.1.3" + +builder-util@~8.0.0: + version "8.0.1" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-8.0.1.tgz#8d5e07a98508bbd24fbca4f8169aa353234b28e4" + integrity sha512-VHy/Bcszermiqvd0+xhMunNTmfquXm8BiaIie3kXkVnIcIcFGCtHl2k3M46iyB6a571Pm/0IgG7A8J9V3Sqa6w== + dependencies: + "7zip-bin" "~4.1.0" + app-builder-bin "2.3.1" + bluebird-lst "^1.0.6" + builder-util-runtime "^6.1.0" + chalk "^2.4.1" + debug "^4.1.0" + fs-extra-p "^7.0.0" + is-ci "^1.2.1" + js-yaml "^3.12.0" + lazy-val "^1.0.3" + semver "^5.6.0" + source-map-support "^0.5.9" + stat-mode "^0.2.2" + temp-file "^3.1.3" builtin-modules@^1.0.0, builtin-modules@^1.1.1: version "1.1.1" @@ -1271,6 +1339,11 @@ camelcase@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" +camelcase@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.2.0.tgz#e7522abda5ed94cc0489e1b8466610e88404cf45" + integrity sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ== + caniuse-api@^1.5.2: version "1.6.1" resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" @@ -1421,6 +1494,11 @@ ci-info@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== + cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -1902,6 +1980,17 @@ cross-spawn@^4: lru-cache "^4.0.1" which "^1.2.9" +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + cryptiles@2.x.x: version "2.0.5" resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" @@ -2108,11 +2197,12 @@ debug@^2.1.3, debug@^2.2.0, debug@^2.6.8: dependencies: ms "2.0.0" -debug@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.0.1.tgz#0564c612b521dc92d9f2988f0549e34f9c98db64" +debug@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== dependencies: - ms "2.0.0" + ms "^2.1.1" debug@~2.2.0: version "2.2.0" @@ -2120,7 +2210,7 @@ debug@~2.2.0: dependencies: ms "0.7.1" -decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: +decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -2335,16 +2425,17 @@ dir-glob@^2.0.0: arrify "^1.0.1" path-type "^3.0.0" -dmg-builder@4.1.8: - version "4.1.8" - resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-4.1.8.tgz#365048a4abf3f4e9a4d8fb0331ce7ba13458f4bd" - dependencies: - bluebird-lst "^1.0.5" - builder-util "^5.8.1" - electron-builder-lib "~20.13.2" - fs-extra-p "^4.6.0" - iconv-lite "^0.4.23" - js-yaml "^3.11.0" +dmg-builder@6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-6.1.2.tgz#c6bdeab54cd051853eff7f91bfedbcde6c75a7b9" + integrity sha512-zhU2toylQ4A82mtubyDBmP0KJnF+b7uXVX+xIJwDR5fsPzIJIT9Uy0x2cwmhMby+4KrPBqg3bMHrbGgIPX7MNw== + dependencies: + app-builder-lib "~20.31.2" + bluebird-lst "^1.0.6" + builder-util "~8.0.0" + fs-extra-p "^7.0.0" + iconv-lite "^0.4.24" + js-yaml "^3.12.0" parse-color "^1.0.0" sanitize-filename "^1.6.1" @@ -2409,9 +2500,10 @@ dotenv-expand@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-4.2.0.tgz#def1f1ca5d6059d24a766e587942c21106ce1275" -dotenv@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef" +dotenv@^6.1.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-6.2.0.tgz#941c0410535d942c8becf28d3f357dbd9d476064" + integrity sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w== dtrace-provider@~0.8: version "0.8.7" @@ -2455,54 +2547,24 @@ ejs@~2.5.6: version "2.5.7" resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.7.tgz#cc872c168880ae3c7189762fd5ffc00896c9518a" -electron-builder-lib@20.13.5, electron-builder-lib@~20.13.2: - version "20.13.5" - resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-20.13.5.tgz#7c1d978c08b5ca6f668d5d825f7d3aae9cc9296e" - dependencies: - "7zip-bin" "~3.1.0" - app-builder-bin "1.8.6" - async-exit-hook "^2.0.1" - bluebird-lst "^1.0.5" - builder-util "5.8.1" - builder-util-runtime "4.2.1" - chromium-pickle-js "^0.2.0" - debug "^3.1.0" - ejs "^2.6.1" - electron-osx-sign "0.4.10" - electron-publish "20.13.2" - fs-extra-p "^4.6.0" - hosted-git-info "^2.6.0" - is-ci "^1.1.0" - isbinaryfile "^3.0.2" - js-yaml "^3.11.0" - lazy-val "^1.0.3" - minimatch "^3.0.4" - normalize-package-data "^2.4.0" - plist "^3.0.1" - read-config-file "3.0.1" - sanitize-filename "^1.6.1" - semver "^5.5.0" - temp-file "^3.1.2" - -electron-builder@20.13.5: - version "20.13.5" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-20.13.5.tgz#e91c9ad4500220add1edcfbc696eda356e825291" - integrity sha512-QhgUq1GKGEJUO6C0jjJeNwAymvHJb4mfUmUfVuVLoVNoOgmAC9AYSQuiw214TswyhlOh+yfXNG6qC4MUaoIlcA== +electron-builder@20.31.3: + version "20.31.3" + resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-20.31.3.tgz#83373db9e9c92e1d8b0a6b2e1f807dba8680d392" + integrity sha512-/niZQtE2DBKDHSdiNBQK2pdH5pS5I6X4eM1rFYVGEf5P+1aR2elQ/VjTWPCi5pVKBhUZk0ODeoiVHO/GCIyaTw== dependencies: - bluebird-lst "^1.0.5" - builder-util "5.8.1" - builder-util-runtime "4.2.1" + app-builder-lib "20.31.3" + bluebird-lst "^1.0.6" + builder-util "8.0.0" + builder-util-runtime "6.1.0" chalk "^2.4.1" - dmg-builder "4.1.8" - electron-builder-lib "20.13.5" - electron-download-tf "4.3.4" - fs-extra-p "^4.6.0" - is-ci "^1.1.0" + dmg-builder "6.1.2" + fs-extra-p "^7.0.0" + is-ci "^1.2.1" lazy-val "^1.0.3" - read-config-file "3.0.1" + read-config-file "3.2.0" sanitize-filename "^1.6.1" update-notifier "^2.5.0" - yargs "^11.0.0" + yargs "^12.0.2" electron-chromedriver@~3.0.0: version "3.0.0" @@ -2512,20 +2574,6 @@ electron-chromedriver@~3.0.0: electron-download "^4.1.0" extract-zip "^1.6.5" -electron-download-tf@4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/electron-download-tf/-/electron-download-tf-4.3.4.tgz#b03740b2885aa2ad3f8784fae74df427f66d5165" - dependencies: - debug "^3.0.0" - env-paths "^1.0.0" - fs-extra "^4.0.1" - minimist "^1.2.0" - nugget "^2.0.1" - path-exists "^3.0.0" - rc "^1.2.1" - semver "^5.4.1" - sumchecker "^2.0.2" - electron-download@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/electron-download/-/electron-download-4.1.0.tgz#bf932c746f2f87ffcc09d1dd472f2ff6b9187845" @@ -2565,26 +2613,28 @@ electron-is-dev@0.3.0, electron-is-dev@^0.3.0: resolved "https://registry.yarnpkg.com/electron-is-dev/-/electron-is-dev-0.3.0.tgz#14e6fda5c68e9e4ecbeff9ccf037cbd7c05c5afe" integrity sha1-FOb9pcaOnk7L7/nM8DfL18BcWv4= -electron-osx-sign@0.4.10: - version "0.4.10" - resolved "https://registry.yarnpkg.com/electron-osx-sign/-/electron-osx-sign-0.4.10.tgz#be4f3b89b2a75a1dc5f1e7249081ab2929ca3a26" +electron-osx-sign@0.4.11: + version "0.4.11" + resolved "https://registry.yarnpkg.com/electron-osx-sign/-/electron-osx-sign-0.4.11.tgz#8377732fe7b207969f264b67582ee47029ce092f" + integrity sha512-VVd40nrnVqymvFrY9ZkOYgHJOvexHHYTR3di/SN+mjJ0OWhR1I8BRVj3U+Yamw6hnkZZNKZp52rqL5EFAAPFkQ== dependencies: bluebird "^3.5.0" compare-version "^0.1.2" debug "^2.6.8" isbinaryfile "^3.0.2" minimist "^1.2.0" - plist "^2.1.0" + plist "^3.0.1" -electron-publish@20.13.2: - version "20.13.2" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-20.13.2.tgz#a5388098ac17fa10d0494687e8548a26cf1522ac" +electron-publish@20.31.2: + version "20.31.2" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-20.31.2.tgz#46d36168a26c85c1cbc21476cd71367bf6f542bc" + integrity sha512-5R8Nxnc/26BJbvFn2h3oD8aoMMxjE5CnPWm5j92Cuze+Ht7x6AoSDQAa1Cx6L19X/HSE3DWjTXEOe08SP3N/QA== dependencies: - bluebird-lst "^1.0.5" - builder-util "^5.8.1" - builder-util-runtime "^4.2.1" + bluebird-lst "^1.0.6" + builder-util "~8.0.0" + builder-util-runtime "^6.1.0" chalk "^2.4.1" - fs-extra-p "^4.6.0" + fs-extra-p "^7.0.0" lazy-val "^1.0.3" mime "^2.3.1" @@ -2592,25 +2642,25 @@ electron-to-chromium@^1.2.7: version "1.3.41" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.41.tgz#7e33643e00cd85edfd17e04194f6d00e73737235" -electron-updater@2.21.10: - version "2.21.10" - resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-2.21.10.tgz#aa66757ebf966f4247f247a8433af45cfe8e93b0" - integrity sha512-9QNUGHqwddLFIsFiAoFSxu0NdmvB1VGKrH2dGCn/b8nDwfWwHUyCnetMsnwcVSMjHA2Lz4tGfRSDSN3PtlVDKA== +electron-updater@3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-3.0.3.tgz#67f7edd578d260f9351ccd46ff23c2789c2a5a4f" + integrity sha512-7gJLZp34Db+lXiJsFzW8DunGnvxJgZclBZa1DNLbXOet3lRXkVKbFJ73mClbv+UTW6hW/EJ6MmSsofRiK1s6Dw== dependencies: bluebird-lst "^1.0.5" - builder-util-runtime "~4.2.1" + builder-util-runtime "~4.4.1" electron-is-dev "^0.3.0" - fs-extra-p "^4.6.0" - js-yaml "^3.11.0" + fs-extra-p "^4.6.1" + js-yaml "^3.12.0" lazy-val "^1.0.3" lodash.isequal "^4.5.0" semver "^5.5.0" - source-map-support "^0.5.5" + source-map-support "^0.5.6" -electron@4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/electron/-/electron-4.0.5.tgz#d8e7d8a581a3e31071b2226129b26b6110c1d877" - integrity sha512-UWFH6SrzNtzfvusGUFYxXDrgsUEbtBXkH/66hpDWxjA2Ckt7ozcYIujZpshbr7LPy8kV3ZRxIvoyCMdaS5DkVQ== +electron@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/electron/-/electron-4.0.8.tgz#b7998b16543d2094f081757a0c5afdb8875ea510" + integrity sha512-FOBJIHkuv8wc15N+ZyqwDzPavYVu5CHMBEf14jHDWv7QW2vkEIpJjVK+PIT31kfZfvjsIP0j2wvA/FBsiqB7pw== dependencies: "@types/node" "^10.12.18" electron-download "^4.1.0" @@ -2968,6 +3018,19 @@ execa@^0.7.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + exif-parser@^0.1.9: version "0.1.9" resolved "https://registry.yarnpkg.com/exif-parser/-/exif-parser-0.1.9.tgz#1d087e05fd2b079e3a8eaf8ff249978cb5f6fba7" @@ -3270,6 +3333,13 @@ find-up@^2.0.0, find-up@^2.1.0: dependencies: locate-path "^2.0.0" +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + findup-sync@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.3.0.tgz#37930aa5d816b777c03445e1966cc6790a4c0b16" @@ -3393,12 +3463,21 @@ from2@^2.1.0, from2@^2.1.1: inherits "^2.0.1" readable-stream "^2.0.0" -fs-extra-p@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/fs-extra-p/-/fs-extra-p-4.6.0.tgz#c7b7117f0dcf8a99c9b2ed589067c960abcf3ef9" +fs-extra-p@^4.6.1: + version "4.6.1" + resolved "https://registry.yarnpkg.com/fs-extra-p/-/fs-extra-p-4.6.1.tgz#6156e0cc98097f415fcd17029578fc41c78b5092" + integrity sha512-IsTMbUS0svZKZTvqF4vDS9c/L7Mw9n8nZQWWeSzAGacOSe+8CzowhUN0tdZEZFIJNP5HC7L9j3MMikz/G4hDeQ== dependencies: bluebird-lst "^1.0.5" - fs-extra "^6.0.0" + fs-extra "^6.0.1" + +fs-extra-p@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra-p/-/fs-extra-p-7.0.1.tgz#4eec0b6dfa150fa90f6ddd773b4fb1d55cad54e3" + integrity sha512-yhd2OV0HnHt2oitlp+X9hl2ReX4X/7kQeL7/72qzPHTZj5eUPGzAKOvEglU02Fa1OeG2rSy/aKB4WGVaLiF8tw== + dependencies: + bluebird-lst "^1.0.7" + fs-extra "^7.0.1" fs-extra@0.26.7, fs-extra@^0.26.5: version "0.26.7" @@ -3434,17 +3513,18 @@ fs-extra@^2.0.0: graceful-fs "^4.1.2" jsonfile "^2.1.0" -fs-extra@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.2.tgz#f91704c53d1b461f893452b0c307d9997647ab6b" +fs-extra@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-6.0.1.tgz#8abc128f7946e310135ddc93b98bddb410e7a34b" dependencies: graceful-fs "^4.1.2" jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-6.0.1.tgz#8abc128f7946e310135ddc93b98bddb410e7a34b" +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== dependencies: graceful-fs "^4.1.2" jsonfile "^4.0.0" @@ -3557,6 +3637,13 @@ get-stream@3.0.0, get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + get-uri@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-2.0.1.tgz#dbdcacacd8c608a38316869368117697a1631c59" @@ -4127,9 +4214,10 @@ hosted-git-info@^2.1.4: version "2.5.0" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" -hosted-git-info@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.6.0.tgz#23235b29ab230c576aab0d4f13fc046b0b038222" +hosted-git-info@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" + integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== hpack.js@^2.1.6: version "2.1.6" @@ -4257,7 +4345,14 @@ iconv-lite@0.4.19, iconv-lite@^0.4.17: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" -iconv-lite@^0.4.23, iconv-lite@^0.4.4: +iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.4.4: version "0.4.23" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" dependencies: @@ -4411,6 +4506,11 @@ invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== + ip-regex@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-1.0.3.tgz#dc589076f659f419c222039a33316f1c7387effd" @@ -4479,12 +4579,19 @@ is-callable@^1.1.1, is-callable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" -is-ci@^1.0.10, is-ci@^1.1.0: +is-ci@^1.0.10: version "1.1.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5" dependencies: ci-info "^1.0.0" +is-ci@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== + dependencies: + ci-info "^1.5.0" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -4757,6 +4864,13 @@ isbinaryfile@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.2.tgz#4a3e974ec0cba9004d3fc6cde7209ea69368a621" +isbinaryfile@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80" + integrity sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw== + dependencies: + buffer-alloc "^1.2.0" + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -4897,9 +5011,10 @@ js-tokens@^3.0.0, js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.11.0, js-yaml@^3.7.0: - version "3.11.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" +js-yaml@^3.12.0: + version "3.12.2" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.2.tgz#ef1d067c5a9d9cb65bd72f285b5d8105c77f14fc" + integrity sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q== dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -4911,6 +5026,13 @@ js-yaml@^3.2.7, js-yaml@^3.9.1: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^3.7.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + js-yaml@~3.5.2: version "3.5.5" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.5.5.tgz#0377c38017cabc7322b0d1fbcd25a491641f2fbe" @@ -4951,6 +5073,11 @@ json-schema-traverse@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" @@ -4981,9 +5108,10 @@ json5@^0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" +json5@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" + integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ== dependencies: minimist "^1.2.0" @@ -5122,6 +5250,13 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== + dependencies: + invert-kv "^2.0.0" + leven@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" @@ -5216,6 +5351,14 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + lodash-es@^4.2.1: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.11.tgz#145ab4a7ac5c5e52a3531fb4f310255a152b4be0" @@ -5397,6 +5540,13 @@ make-dir@^1.0.0: dependencies: pify "^2.3.0" +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -5465,6 +5615,15 @@ mem@^1.1.0: dependencies: mimic-fn "^1.0.0" +mem@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.2.0.tgz#5ee057680ed9cb8dad8a78d820f9a8897a102025" + integrity sha512-5fJxa68urlY0Ir8ijatKa3eRz5lwXnRCTvo9+TbTGAuTFJOwpGcY0X05moBd0nW45965Njt4CDI2GFQoG8DvqA== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + memory-fs@^0.4.0, memory-fs@~0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" @@ -5606,6 +5765,11 @@ mimic-fn@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" +mimic-fn@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.0.0.tgz#0913ff0b121db44ef5848242c38bbb35d44cabde" + integrity sha512-jbex9Yd/3lmICXwYT6gA/j2mNQGU48wCh/VzRd+/Y/PjYQtlg1gLMdZqvu9s/xH7qKvngxRObl56XZR609IMbA== + mimic-response@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.0.tgz#df3d3652a73fded6b9b0b24146e6fd052353458e" @@ -5775,6 +5939,11 @@ ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" +ms@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + multicast-dns-service-types@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" @@ -5811,7 +5980,7 @@ mz@^2.3.1: object-assign "^4.0.1" thenify-all "^1.0.0" -nan@^2.0.0, nan@^2.10.0, nan@^2.11.0, nan@^2.9.2: +nan@^2.10.0, nan@^2.11.0, nan@^2.9.2: version "2.11.1" resolved "https://registry.yarnpkg.com/nan/-/nan-2.11.1.tgz#90e22bccb8ca57ea4cd37cc83d3819b52eea6766" integrity sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA== @@ -5867,6 +6036,11 @@ netmask@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/netmask/-/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35" +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + nise@^1.2.0: version "1.2.6" resolved "https://registry.yarnpkg.com/nise/-/nise-1.2.6.tgz#42b054981a5c869d6c447be5776cc6f137f00ac5" @@ -6089,7 +6263,7 @@ npmlog@^4.0.0, npmlog@^4.0.2: gauge "~2.7.3" set-blocking "~2.0.0" -nugget@^2.0.0, nugget@^2.0.1: +nugget@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/nugget/-/nugget-2.0.1.tgz#201095a487e1ad36081b3432fa3cada4f8d071b0" dependencies: @@ -6287,6 +6461,15 @@ os-locale@^1.4.0: dependencies: lcid "^1.0.0" +os-locale@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + os-tmpdir@^1.0.0, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -6309,6 +6492,11 @@ p-cancelable@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" @@ -6317,6 +6505,11 @@ p-is-promise@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" +p-is-promise@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.0.0.tgz#7554e3d572109a87e1f3f53f6a7d85d1b194f4c5" + integrity sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg== + p-limit@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c" @@ -6327,12 +6520,26 @@ p-limit@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" +p-limit@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" + integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== + dependencies: + p-try "^2.0.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" dependencies: p-limit "^1.1.0" +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + p-map@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" @@ -6347,6 +6554,11 @@ p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" +p-try@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" + integrity sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ== + pac-proxy-agent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-3.0.0.tgz#11d578b72a164ad74bf9d5bac9ff462a38282432" @@ -6498,7 +6710,7 @@ path-is-inside@^1.0.1, path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" -path-key@^2.0.0: +path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" @@ -6617,14 +6829,6 @@ pkginfo@0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.4.0.tgz#349dbb7ffd38081fcadc0853df687f0c7744cd65" -plist@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/plist/-/plist-2.1.0.tgz#57ccdb7a0821df21831217a3cad54e3e146a1025" - dependencies: - base64-js "1.2.0" - xmlbuilder "8.2.2" - xmldom "0.1.x" - plist@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.1.tgz#a9b931d17c304e8912ef0ba3bdd6182baf2e1f8c" @@ -7098,6 +7302,14 @@ pump@^2.0.0, pump@^2.0.1: end-of-stream "^1.1.0" once "^1.3.1" +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + pumpify@^1.3.3: version "1.4.0" resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.4.0.tgz#80b7c5df7e24153d03f0e7ac8a05a5d068bd07fb" @@ -7227,7 +7439,7 @@ raw-body@~2.1.5: iconv-lite "0.4.13" unpipe "1.0.0" -rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@^1.2.1: +rc@^1.0.1, rc@^1.1.2, rc@^1.1.6: version "1.2.1" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" dependencies: @@ -7249,10 +7461,10 @@ react-codemirror2@^4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/react-codemirror2/-/react-codemirror2-4.2.1.tgz#4ad3c5c60ebbcb34880f961721b51527324ec021" -react-contextmenu@2.9.2: - version "2.9.2" - resolved "https://registry.yarnpkg.com/react-contextmenu/-/react-contextmenu-2.9.2.tgz#7076075f09e4cad023a1252da347d9e6782d003a" - integrity sha512-DdcO6iLBIJuDVsRpJLG/9N6ine0OVZhuQvnSPCEihfcyJFz+SHU9pQo+w9LWi2PdUxFbFV52BwAuutQkAYJxaA== +react-contextmenu@2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/react-contextmenu/-/react-contextmenu-2.11.0.tgz#ec57614e6d687ceaec5c0ba97d56a302c9551d17" + integrity sha512-vT9QV9p/9h1BSIvmajRVG3KsgjuBnISpEQp0F1QYsUPFMe3VOKV2l7IiD8yrNUyXYZKrWMqI0YKsaBwGSRVgJg== dependencies: classnames "^2.2.5" object-assign "^4.1.0" @@ -7449,18 +7661,19 @@ read-chunk@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-chunk/-/read-chunk-1.0.1.tgz#5f68cab307e663f19993527d9b589cace4661194" -read-config-file@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-3.0.1.tgz#307ed2e162fa54306d0ae6d41e9cdc829720d2a9" +read-config-file@3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-3.2.0.tgz#50a2756a9a128ab9dcbe087e2724c512e3d0ccd1" + integrity sha512-i1QRc5jy4sHm9YBGb6ArA5SU1mDrc5wu2mnm3r9gPnm+LVZhBGbpTCKqAXyvV4TJHnBR3Yaaww+9b3DyRZcfww== dependencies: - ajv "^6.4.0" + ajv "^6.5.5" ajv-keywords "^3.2.0" - bluebird-lst "^1.0.5" - dotenv "^5.0.1" + bluebird-lst "^1.0.6" + dotenv "^6.1.0" dotenv-expand "^4.2.0" - fs-extra-p "^4.6.0" - js-yaml "^3.11.0" - json5 "^1.0.1" + fs-extra-p "^7.0.0" + js-yaml "^3.12.0" + json5 "^2.1.0" lazy-val "^1.0.3" read-last-lines@1.3.0: @@ -8117,7 +8330,7 @@ semver-diff@^2.0.0: dependencies: semver "^5.0.3" -"semver@2 || 3 || 4 || 5", semver@5.4.1, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1: +"semver@2 || 3 || 4 || 5", semver@5.4.1, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0: version "5.4.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" @@ -8125,6 +8338,11 @@ semver@^5.0.1, semver@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" +semver@^5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" + integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== + semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" @@ -8387,9 +8605,10 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.5.5: - version "0.5.6" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.6.tgz#4435cee46b1aab62b8e8610ce60f788091c51c13" +source-map-support@^0.5.6, source-map-support@^0.5.9: + version "0.5.11" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.11.tgz#efac2ce0800355d026326a0ca23e162aeac9a4e2" + integrity sha512-//sajEx/fGL3iw6fltKMdPvy8kL3kJ2O3iuYlRoT3k9Kb4BjOoZ+BZzaNHeuaruSt+Kf3Zk9tnfAQg9/AJqUVQ== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -8494,13 +8713,13 @@ speedometer@~0.1.2: version "0.1.4" resolved "https://registry.yarnpkg.com/speedometer/-/speedometer-0.1.4.tgz#9876dbd2a169d3115402d48e6ea6329c8816a50d" -spellchecker@3.4.4: - version "3.4.4" - resolved "https://registry.yarnpkg.com/spellchecker/-/spellchecker-3.4.4.tgz#5c5384786e207efd3b76d18c77ae928971cd7b52" - integrity sha512-l0s86YZs5+PzATeFbqD0sTSMEF7bgzqUYgxrU8+nBSw3V19tzRYKMi+hDGG6v8MskWeG2dRK0Q79sqs1eGIKwQ== +spellchecker@3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/spellchecker/-/spellchecker-3.5.1.tgz#72cc2bcbb0c610536bc2a36df1ced9b2665816cc" + integrity sha512-R1qUBsDZzio+7MFZN6/AtPUe5NGvnc0wywckuXAlp9akASaYSFqKuI5O8p3rSiA+yKP31qC7Iijjoygmzkh6xw== dependencies: any-promise "^1.3.0" - nan "^2.0.0" + nan "^2.10.0" split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" @@ -8724,7 +8943,7 @@ style-loader@^0.20.3: loader-utils "^1.1.0" schema-utils "^0.4.5" -sumchecker@^2.0.1, sumchecker@^2.0.2: +sumchecker@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-2.0.2.tgz#0f42c10e5d05da5d42eea3e56c3399a37d6c5b3e" dependencies: @@ -8848,14 +9067,14 @@ tar@^4: safe-buffer "^5.1.2" yallist "^3.0.2" -temp-file@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-3.1.2.tgz#54ba4084097558e8ff2ad1e4bd84841ef2804043" +temp-file@^3.1.3: + version "3.3.2" + resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-3.3.2.tgz#69b6daf1bbe23231d0a5d03844e3d96f3f531aaa" + integrity sha512-FGKccAW0Mux9hC/2bdUIe4bJRv4OyVo4RpVcuplFird1V/YoplIFbnPZjfzbJSf/qNvRZIRB9/4n/RkI0GziuQ== dependencies: async-exit-hook "^2.0.1" - bluebird-lst "^1.0.5" - fs-extra-p "^4.6.0" - lazy-val "^1.0.3" + bluebird-lst "^1.0.6" + fs-extra-p "^7.0.0" term-size@^1.2.0: version "1.2.0" @@ -9384,9 +9603,10 @@ uri-js@^3.0.2: dependencies: punycode "^2.1.0" -uri-js@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.1.tgz#4595a80a51f356164e22970df64c7abd6ade9850" +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== dependencies: punycode "^2.1.0" @@ -9822,10 +10042,6 @@ xml2js@^0.4.5: sax ">=0.6.0" xmlbuilder "^4.1.0" -xmlbuilder@8.2.2: - version "8.2.2" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773" - xmlbuilder@^4.1.0: version "4.2.1" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-4.2.1.tgz#aa58a3041a066f90eaa16c2f5389ff19f3f461a5" @@ -9858,9 +10074,10 @@ y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" -y18n@^4.0.0: +"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== yaeti@^0.0.6: version "0.0.6" @@ -9874,6 +10091,14 @@ yallist@^3.0.0, yallist@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" +yargs-parser@^11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" + integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + yargs-parser@^4.2.0: version "4.2.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" @@ -9892,12 +10117,6 @@ yargs-parser@^8.0.0: dependencies: camelcase "^4.1.0" -yargs-parser@^9.0.2: - version "9.0.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" - dependencies: - camelcase "^4.1.0" - yargs@6.6.0, yargs@^6.5.0: version "6.6.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" @@ -9934,22 +10153,23 @@ yargs@^10.0.3: y18n "^3.2.1" yargs-parser "^8.0.0" -yargs@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.0.0.tgz#c052931006c5eee74610e5fc0354bedfd08a201b" +yargs@^12.0.2: + version "12.0.5" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" + integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== dependencies: cliui "^4.0.0" - decamelize "^1.1.1" - find-up "^2.1.0" + decamelize "^1.2.0" + find-up "^3.0.0" get-caller-file "^1.0.1" - os-locale "^2.0.0" + os-locale "^3.0.0" require-directory "^2.1.1" require-main-filename "^1.0.1" set-blocking "^2.0.0" string-width "^2.0.0" which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^9.0.2" + y18n "^3.2.1 || ^4.0.0" + yargs-parser "^11.1.1" yargs@^7.0.0: version "7.1.0"