From 58731f928be2651c403e7c1620d92cb19211d80c Mon Sep 17 00:00:00 2001 From: McSam Date: Thu, 20 Jun 2019 11:47:33 +0800 Subject: [PATCH 01/20] webhook block --- src/botPage/bot/Interface/ToolsInterface.js | 4 +- src/botPage/bot/Interface/WebhookInterface.js | 29 ++++++++++ .../view/blockly/blocks/tools/index.js | 2 + .../view/blockly/blocks/tools/webhook.js | 58 +++++++++++++++++++ .../blockly/blocks/tools/webhook_payload.js | 41 +++++++++++++ static/xml/toolbox.xml | 16 +++++ 6 files changed, 149 insertions(+), 1 deletion(-) create mode 100644 src/botPage/bot/Interface/WebhookInterface.js create mode 100644 src/botPage/view/blockly/blocks/tools/webhook.js create mode 100644 src/botPage/view/blockly/blocks/tools/webhook_payload.js diff --git a/src/botPage/bot/Interface/ToolsInterface.js b/src/botPage/bot/Interface/ToolsInterface.js index 90fb23f451..61c17b9d28 100644 --- a/src/botPage/bot/Interface/ToolsInterface.js +++ b/src/botPage/bot/Interface/ToolsInterface.js @@ -1,16 +1,18 @@ import CandleInterface from './CandleInterface'; import MiscInterface from './MiscInterface'; import IndicatorsInterface from './IndicatorsInterface'; +import WebhookInterface from './WebhookInterface'; // prettier-ignore export default Interface => class extends IndicatorsInterface( - MiscInterface(CandleInterface(Interface))) { + MiscInterface(CandleInterface(WebhookInterface(Interface)))) { getToolsInterface() { return { getTime: () => parseInt(new Date().getTime() / 1000), ...this.getCandleInterface(), ...this.getMiscInterface(), ...this.getIndicatorsInterface(), + ...this.getWebhookInterface(), }; } }; diff --git a/src/botPage/bot/Interface/WebhookInterface.js b/src/botPage/bot/Interface/WebhookInterface.js new file mode 100644 index 0000000000..4c27febe9a --- /dev/null +++ b/src/botPage/bot/Interface/WebhookInterface.js @@ -0,0 +1,29 @@ +import { notify } from '../broadcast'; +import { translate } from '../../../common/i18n'; + +export default Interface => + class extends Interface { + // eslint-disable-next-line class-methods-use-this + sendWebhook(url, payload) { + const onError = () => notify('warn', translate('The webhook could not be sent')); + + fetch(`https://cors-anywhere.herokuapp.com/${url}`, { + method : 'POST', + mode : 'cors', + headers: { 'Content-Type': 'application/json' }, + body : JSON.stringify(payload), + }) + .then(response => { + if (!response.ok) { + onError(); + } + }) + .catch(onError); + } + + getWebhookInterface() { + return { + sendWebhook: this.sendWebhook, + }; + } + }; diff --git a/src/botPage/view/blockly/blocks/tools/index.js b/src/botPage/view/blockly/blocks/tools/index.js index 699e51210a..1703cb9829 100644 --- a/src/botPage/view/blockly/blocks/tools/index.js +++ b/src/botPage/view/blockly/blocks/tools/index.js @@ -7,3 +7,5 @@ import './block_holder'; import './loader'; import './candle'; import './time'; +import './webhook'; +import './webhook_payload'; diff --git a/src/botPage/view/blockly/blocks/tools/webhook.js b/src/botPage/view/blockly/blocks/tools/webhook.js new file mode 100644 index 0000000000..b5b83dd6a7 --- /dev/null +++ b/src/botPage/view/blockly/blocks/tools/webhook.js @@ -0,0 +1,58 @@ +import { translate } from '../../../../../common/i18n'; +import { expectValue } from '../shared'; + +Blockly.Blocks.webhook = { + init() { + this.jsonInit({ + message0: translate('Webhook URL : %1'), + args0 : [ + { + type: 'input_value', + name: 'WEBHOOK_URL', + }, + ], + message1: translate('Payload : %1'), + args1 : [ + { + type: 'input_statement', + name: 'WEBHOOK_PAYLOAD', + }, + ], + colour : '#dedede', + previousStatement: null, + nextStatement : null, + tooltip : translate('Send payload to URL'), + }); + }, + onchange: function onchange(ev) { + if (!this.workspace || this.isInFlyout || this.workspace.isDragging()) { + return; + } + + if (ev.type === Blockly.Events.MOVE) { + let currentBlock = this.getInputTargetBlock('WEBHOOK_PAYLOAD'); + + while (currentBlock !== null) { + if (currentBlock.type !== 'webhook_payload') { + currentBlock.unplug(); + } + + currentBlock = currentBlock.getNextBlock(); + } + } + }, +}; + +Blockly.JavaScript.webhook = block => { + const url = expectValue(block, 'WEBHOOK_URL'); + let payload = Blockly.JavaScript.statementToCode(block, 'WEBHOOK_PAYLOAD') || ''; + + if (!url || !payload) { + return ''; + } + + payload = payload.replace(/'/g, '"'); + + const code = `Bot.sendWebhook(${url}, {${payload.trim().slice(0, -1)}});\n`; + return code; +}; diff --git a/src/botPage/view/blockly/blocks/tools/webhook_payload.js b/src/botPage/view/blockly/blocks/tools/webhook_payload.js new file mode 100644 index 0000000000..94c8b03162 --- /dev/null +++ b/src/botPage/view/blockly/blocks/tools/webhook_payload.js @@ -0,0 +1,41 @@ +import { translate } from '../../../../../common/i18n'; +import { expectValue } from '../shared'; + +Blockly.Blocks.webhook_payload = { + init() { + this.jsonInit({ + message0: translate('Key : %1 Value : %2'), + args0 : [ + { + type: 'field_input', + name: 'WEBHOOK_KEY', + text: 'default', + }, + { + type : 'input_value', + name : 'WEBHOOK_VALUE', + check: ['Number', 'String'], + }, + ], + colour : '#dedede', + previousStatement: null, + nextStatement : null, + tooltip : translate('Payload for webhook'), + }); + }, +}; + +Blockly.JavaScript.webhook_payload = block => { + const key = block.getFieldValue('WEBHOOK_KEY') || ''; + let value = expectValue(block, 'WEBHOOK_VALUE'); + + if (!key || !value) { + return ''; + } + + if (typeof value !== 'string') { + value = value.toString(); + } + + return `'${key}':${value},`; +}; diff --git a/static/xml/toolbox.xml b/static/xml/toolbox.xml index a5aff41962..d64c334d62 100644 --- a/static/xml/toolbox.xml +++ b/static/xml/toolbox.xml @@ -453,6 +453,22 @@ + + + + + https://example.com + + + + + + + abc + + + + From 64811a81aea342cb52364005fb9787f0874a539e Mon Sep 17 00:00:00 2001 From: McSam Date: Thu, 20 Jun 2019 16:23:46 +0800 Subject: [PATCH 02/20] webhook blocks --- src/botPage/bot/Interface/WebhookInterface.js | 2 +- src/botPage/view/blockly/blocks/tools/webhook.js | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/botPage/bot/Interface/WebhookInterface.js b/src/botPage/bot/Interface/WebhookInterface.js index 4c27febe9a..3ebac2933f 100644 --- a/src/botPage/bot/Interface/WebhookInterface.js +++ b/src/botPage/bot/Interface/WebhookInterface.js @@ -7,7 +7,7 @@ export default Interface => sendWebhook(url, payload) { const onError = () => notify('warn', translate('The webhook could not be sent')); - fetch(`https://cors-anywhere.herokuapp.com/${url}`, { + fetch(`${url}`, { method : 'POST', mode : 'cors', headers: { 'Content-Type': 'application/json' }, diff --git a/src/botPage/view/blockly/blocks/tools/webhook.js b/src/botPage/view/blockly/blocks/tools/webhook.js index b5b83dd6a7..a8f2018c27 100644 --- a/src/botPage/view/blockly/blocks/tools/webhook.js +++ b/src/botPage/view/blockly/blocks/tools/webhook.js @@ -51,6 +51,7 @@ Blockly.JavaScript.webhook = block => { return ''; } + // JSON does not aceept single quote payload = payload.replace(/'/g, '"'); const code = `Bot.sendWebhook(${url}, {${payload.trim().slice(0, -1)}});\n`; From 8874d3821de2289ed16216315546cdc727dd747a Mon Sep 17 00:00:00 2001 From: McSam Date: Thu, 20 Jun 2019 18:15:03 +0800 Subject: [PATCH 03/20] webhook value allow boolean --- src/botPage/view/blockly/blocks/tools/webhook_payload.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/botPage/view/blockly/blocks/tools/webhook_payload.js b/src/botPage/view/blockly/blocks/tools/webhook_payload.js index 94c8b03162..09c9174f4c 100644 --- a/src/botPage/view/blockly/blocks/tools/webhook_payload.js +++ b/src/botPage/view/blockly/blocks/tools/webhook_payload.js @@ -14,7 +14,7 @@ Blockly.Blocks.webhook_payload = { { type : 'input_value', name : 'WEBHOOK_VALUE', - check: ['Number', 'String'], + check: ['Number', 'String', 'Boolean'], }, ], colour : '#dedede', From 497dc9eb67ea28e738697fea8e5f1b611ac207f9 Mon Sep 17 00:00:00 2001 From: McSam Date: Fri, 21 Jun 2019 18:39:18 +0800 Subject: [PATCH 04/20] resolve changes --- src/botPage/view/blockly/blocks/tools/webhook.js | 2 +- src/botPage/view/blockly/blocks/tools/webhook_payload.js | 7 +++---- static/xml/toolbox.xml | 5 +---- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/botPage/view/blockly/blocks/tools/webhook.js b/src/botPage/view/blockly/blocks/tools/webhook.js index a8f2018c27..48146a1051 100644 --- a/src/botPage/view/blockly/blocks/tools/webhook.js +++ b/src/botPage/view/blockly/blocks/tools/webhook.js @@ -34,7 +34,7 @@ Blockly.Blocks.webhook = { while (currentBlock !== null) { if (currentBlock.type !== 'webhook_payload') { - currentBlock.unplug(); + currentBlock.unplug(true); } currentBlock = currentBlock.getNextBlock(); diff --git a/src/botPage/view/blockly/blocks/tools/webhook_payload.js b/src/botPage/view/blockly/blocks/tools/webhook_payload.js index 09c9174f4c..6866920e6c 100644 --- a/src/botPage/view/blockly/blocks/tools/webhook_payload.js +++ b/src/botPage/view/blockly/blocks/tools/webhook_payload.js @@ -4,7 +4,7 @@ import { expectValue } from '../shared'; Blockly.Blocks.webhook_payload = { init() { this.jsonInit({ - message0: translate('Key : %1 Value : %2'), + message0: translate('Key: %1 Value: %2'), args0 : [ { type: 'field_input', @@ -12,9 +12,8 @@ Blockly.Blocks.webhook_payload = { text: 'default', }, { - type : 'input_value', - name : 'WEBHOOK_VALUE', - check: ['Number', 'String', 'Boolean'], + type: 'input_value', + name: 'WEBHOOK_VALUE', }, ], colour : '#dedede', diff --git a/static/xml/toolbox.xml b/static/xml/toolbox.xml index d64c334d62..459dc5d9ba 100644 --- a/static/xml/toolbox.xml +++ b/static/xml/toolbox.xml @@ -451,10 +451,7 @@ - - - - + https://example.com From 10baf8dd7431e88861eca8cb1dceea8fe22953db Mon Sep 17 00:00:00 2001 From: McSam Date: Mon, 24 Jun 2019 17:24:32 +0800 Subject: [PATCH 05/20] nested json payload --- .../view/blockly/blocks/tools/webhook.js | 144 +++++++++++++++--- .../blockly/blocks/tools/webhook_payload.js | 15 +- 2 files changed, 130 insertions(+), 29 deletions(-) diff --git a/src/botPage/view/blockly/blocks/tools/webhook.js b/src/botPage/view/blockly/blocks/tools/webhook.js index 48146a1051..638174b9f5 100644 --- a/src/botPage/view/blockly/blocks/tools/webhook.js +++ b/src/botPage/view/blockly/blocks/tools/webhook.js @@ -4,25 +4,127 @@ import { expectValue } from '../shared'; Blockly.Blocks.webhook = { init() { this.jsonInit({ - message0: translate('Webhook URL : %1'), + message0: translate('Webhook URL: %1'), args0 : [ { type: 'input_value', name: 'WEBHOOK_URL', }, ], - message1: translate('Payload : %1'), - args1 : [ - { - type: 'input_statement', - name: 'WEBHOOK_PAYLOAD', - }, - ], colour : '#dedede', previousStatement: null, nextStatement : null, tooltip : translate('Send payload to URL'), }); + + this.itemCount_ = 3; + this.updateShape_(); + this.setMutator(new Blockly.Mutator(['lists_create_with_item'])); + }, + /** + * Create XML to represent list inputs. + * @return {!Element} XML storage element. + * @this Blockly.Block + */ + mutationToDom() { + const container = document.createElement('mutation'); + container.setAttribute('items', this.itemCount_); + return container; + }, + /** + * Parse XML to restore the list inputs. + * @param {!Element} xmlElement XML storage element. + * @this Blockly.Block + */ + domToMutation(xmlElement) { + this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10); + this.updateShape_(); + }, + /** + * Populate the mutator's dialog with this block's components. + * @param {!Blockly.Workspace} workspace Mutator's workspace. + * @return {!Blockly.Block} Root block in mutator. + * @this Blockly.Block + */ + decompose(workspace) { + const containerBlock = workspace.newBlock('lists_create_with_container'); + containerBlock.initSvg(); + let connection = containerBlock.getInput('STACK').connection; + for (let i = 0; i < this.itemCount_; i++) { + const itemBlock = workspace.newBlock('lists_create_with_item'); + itemBlock.initSvg(); + connection.connect(itemBlock.previousConnection); + connection = itemBlock.nextConnection; + } + return containerBlock; + }, + /** + * Reconfigure this block based on the mutator dialog's components. + * @param {!Blockly.Block} containerBlock Root block in mutator. + * @this Blockly.Block + */ + compose(containerBlock) { + let itemBlock = containerBlock.getInputTargetBlock('STACK'); + // Count number of inputs. + const connections = []; + while (itemBlock) { + connections.push(itemBlock.valueConnection_); + itemBlock = itemBlock.nextConnection && itemBlock.nextConnection.targetBlock(); + } + // Disconnect any children that don't belong. + for (var i = 0; i < this.itemCount_; i++) { + const connection = this.getInput(`ADD${ i}`).connection.targetConnection; + if (connection && connections.indexOf(connection) == -1) { + connection.disconnect(); + } + } + this.itemCount_ = connections.length; + this.updateShape_(); + // Reconnect any child blocks. + for (var i = 0; i < this.itemCount_; i++) { + Blockly.Mutator.reconnect(connections[i], this, `ADD${ i}`); + } + }, + /** + * Store pointers to any connected child blocks. + * @param {!Blockly.Block} containerBlock Root block in mutator. + * @this Blockly.Block + */ + saveConnections(containerBlock) { + let itemBlock = containerBlock.getInputTargetBlock('STACK'); + let i = 0; + while (itemBlock) { + const input = this.getInput(`ADD${ i}`); + itemBlock.valueConnection_ = input && input.connection.targetConnection; + i++; + itemBlock = itemBlock.nextConnection && itemBlock.nextConnection.targetBlock(); + } + }, + /** + * Modify this block to have the correct number of inputs. + * @private + * @this Blockly.Block + */ + updateShape_() { + if (this.itemCount_ && this.getInput('EMPTY')) { + this.removeInput('EMPTY'); + } else if (!this.itemCount_ && !this.getInput('EMPTY')) { + this.appendDummyInput('EMPTY').appendField(Blockly.Msg.LISTS_CREATE_EMPTY_TITLE); + } + // Add new inputs. + for (var i = 0; i < this.itemCount_; i++) { + if (!this.getInput(`ADD${ i}`)) { + const input = this.appendValueInput(`ADD${ i}`); + if (i == 0) { + input.appendField(translate('Payload:')); + } + } + } + // Remove deleted inputs. + while (this.getInput(`ADD${ i}`)) { + this.removeInput(`ADD${ i}`); + i++; + } }, onchange: function onchange(ev) { if (!this.workspace || this.isInFlyout || this.workspace.isDragging()) { @@ -30,14 +132,11 @@ Blockly.Blocks.webhook = { } if (ev.type === Blockly.Events.MOVE) { - let currentBlock = this.getInputTargetBlock('WEBHOOK_PAYLOAD'); - - while (currentBlock !== null) { - if (currentBlock.type !== 'webhook_payload') { + for (let i = 0; i < this.itemCount_; i++) { + const currentBlock = this.getInputTargetBlock(`ADD${i}`); + if (currentBlock && currentBlock.type !== 'webhook_payload') { currentBlock.unplug(true); } - - currentBlock = currentBlock.getNextBlock(); } } }, @@ -45,15 +144,22 @@ Blockly.Blocks.webhook = { Blockly.JavaScript.webhook = block => { const url = expectValue(block, 'WEBHOOK_URL'); - let payload = Blockly.JavaScript.statementToCode(block, 'WEBHOOK_PAYLOAD') || ''; + const payloads = new Array(block.itemCount_); + for (let i = 0; i < block.itemCount_; i++) { + payloads[i] = Blockly.JavaScript.valueToCode(block, `ADD${ i}`, Blockly.JavaScript.ORDER_ATOMIC) || null; + } - if (!url || !payload) { + if (!url || !payloads) { return ''; } - // JSON does not aceept single quote - payload = payload.replace(/'/g, '"'); + const params = payloads + .filter(p => p !== null) + .map(payload => { + const regExp = /^{(.*?)}$/; + return payload && payload.match(regExp)[1]; + }); - const code = `Bot.sendWebhook(${url}, {${payload.trim().slice(0, -1)}});\n`; + const code = `Bot.sendWebhook(${url}, {${params}});\n`; return code; }; diff --git a/src/botPage/view/blockly/blocks/tools/webhook_payload.js b/src/botPage/view/blockly/blocks/tools/webhook_payload.js index 6866920e6c..9e82251b90 100644 --- a/src/botPage/view/blockly/blocks/tools/webhook_payload.js +++ b/src/botPage/view/blockly/blocks/tools/webhook_payload.js @@ -16,25 +16,20 @@ Blockly.Blocks.webhook_payload = { name: 'WEBHOOK_VALUE', }, ], - colour : '#dedede', - previousStatement: null, - nextStatement : null, - tooltip : translate('Payload for webhook'), + colour : '#dedede', + output : null, + tooltip: translate('Payload for webhook'), }); }, }; Blockly.JavaScript.webhook_payload = block => { const key = block.getFieldValue('WEBHOOK_KEY') || ''; - let value = expectValue(block, 'WEBHOOK_VALUE'); + const value = expectValue(block, 'WEBHOOK_VALUE'); if (!key || !value) { return ''; } - if (typeof value !== 'string') { - value = value.toString(); - } - - return `'${key}':${value},`; + return [`{"${key}":${value}}`, Blockly.JavaScript.ORDER_ATOMIC]; }; From a7b5822ee9be14a1cd6e0b080c5dbb402d151cd0 Mon Sep 17 00:00:00 2001 From: McSam Date: Mon, 24 Jun 2019 17:42:53 +0800 Subject: [PATCH 06/20] eslint --- .../view/blockly/blocks/tools/webhook.js | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/src/botPage/view/blockly/blocks/tools/webhook.js b/src/botPage/view/blockly/blocks/tools/webhook.js index 638174b9f5..38e29d4835 100644 --- a/src/botPage/view/blockly/blocks/tools/webhook.js +++ b/src/botPage/view/blockly/blocks/tools/webhook.js @@ -1,3 +1,4 @@ +/* eslint-disable no-underscore-dangle */ import { translate } from '../../../../../common/i18n'; import { expectValue } from '../shared'; @@ -37,6 +38,7 @@ Blockly.Blocks.webhook = { * @this Blockly.Block */ domToMutation(xmlElement) { + // eslint-disable-next-line radix this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10); this.updateShape_(); }, @@ -49,6 +51,7 @@ Blockly.Blocks.webhook = { decompose(workspace) { const containerBlock = workspace.newBlock('lists_create_with_container'); containerBlock.initSvg(); + // eslint-disable-next-line prefer-destructuring let connection = containerBlock.getInput('STACK').connection; for (let i = 0; i < this.itemCount_; i++) { const itemBlock = workspace.newBlock('lists_create_with_item'); @@ -72,17 +75,17 @@ Blockly.Blocks.webhook = { itemBlock = itemBlock.nextConnection && itemBlock.nextConnection.targetBlock(); } // Disconnect any children that don't belong. - for (var i = 0; i < this.itemCount_; i++) { - const connection = this.getInput(`ADD${ i}`).connection.targetConnection; - if (connection && connections.indexOf(connection) == -1) { + for (let i = 0; i < this.itemCount_; i++) { + const connection = this.getInput(`ADD${i}`).connection.targetConnection; + if (connection && connections.indexOf(connection) === -1) { connection.disconnect(); } } this.itemCount_ = connections.length; this.updateShape_(); // Reconnect any child blocks. - for (var i = 0; i < this.itemCount_; i++) { - Blockly.Mutator.reconnect(connections[i], this, `ADD${ i}`); + for (let i = 0; i < this.itemCount_; i++) { + Blockly.Mutator.reconnect(connections[i], this, `ADD${i}`); } }, /** @@ -94,7 +97,7 @@ Blockly.Blocks.webhook = { let itemBlock = containerBlock.getInputTargetBlock('STACK'); let i = 0; while (itemBlock) { - const input = this.getInput(`ADD${ i}`); + const input = this.getInput(`ADD${i}`); itemBlock.valueConnection_ = input && input.connection.targetConnection; i++; itemBlock = itemBlock.nextConnection && itemBlock.nextConnection.targetBlock(); @@ -111,18 +114,18 @@ Blockly.Blocks.webhook = { } else if (!this.itemCount_ && !this.getInput('EMPTY')) { this.appendDummyInput('EMPTY').appendField(Blockly.Msg.LISTS_CREATE_EMPTY_TITLE); } - // Add new inputs. - for (var i = 0; i < this.itemCount_; i++) { - if (!this.getInput(`ADD${ i}`)) { - const input = this.appendValueInput(`ADD${ i}`); - if (i == 0) { + let i; + for (i = 0; i < this.itemCount_; i++) { + if (!this.getInput(`ADD${i}`)) { + const input = this.appendValueInput(`ADD${i}`); + if (i === 0) { input.appendField(translate('Payload:')); } } } // Remove deleted inputs. - while (this.getInput(`ADD${ i}`)) { - this.removeInput(`ADD${ i}`); + while (this.getInput(`ADD${i}`)) { + this.removeInput(`ADD${i}`); i++; } }, @@ -146,7 +149,7 @@ Blockly.JavaScript.webhook = block => { const url = expectValue(block, 'WEBHOOK_URL'); const payloads = new Array(block.itemCount_); for (let i = 0; i < block.itemCount_; i++) { - payloads[i] = Blockly.JavaScript.valueToCode(block, `ADD${ i}`, Blockly.JavaScript.ORDER_ATOMIC) || null; + payloads[i] = Blockly.JavaScript.valueToCode(block, `ADD${i}`, Blockly.JavaScript.ORDER_ATOMIC) || null; } if (!url || !payloads) { From 8ab65345c318e83178119796090c094c12f5fe2c Mon Sep 17 00:00:00 2001 From: McSam Date: Tue, 25 Jun 2019 13:01:57 +0800 Subject: [PATCH 07/20] empty payload string --- src/botPage/view/blockly/blocks/tools/webhook.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/botPage/view/blockly/blocks/tools/webhook.js b/src/botPage/view/blockly/blocks/tools/webhook.js index 38e29d4835..6d6286f249 100644 --- a/src/botPage/view/blockly/blocks/tools/webhook.js +++ b/src/botPage/view/blockly/blocks/tools/webhook.js @@ -112,7 +112,7 @@ Blockly.Blocks.webhook = { if (this.itemCount_ && this.getInput('EMPTY')) { this.removeInput('EMPTY'); } else if (!this.itemCount_ && !this.getInput('EMPTY')) { - this.appendDummyInput('EMPTY').appendField(Blockly.Msg.LISTS_CREATE_EMPTY_TITLE); + this.appendDummyInput('EMPTY').appendField(translate('Empty payload')); } let i; for (i = 0; i < this.itemCount_; i++) { From 7cdff4fd92b3bc3da1b20b05aebb5c156fa932ec Mon Sep 17 00:00:00 2001 From: McSam Date: Wed, 26 Jun 2019 15:32:04 +0800 Subject: [PATCH 08/20] copywriters --- src/botPage/bot/Interface/WebhookInterface.js | 2 +- src/botPage/view/blockly/blocks/tools/webhook.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/botPage/bot/Interface/WebhookInterface.js b/src/botPage/bot/Interface/WebhookInterface.js index 3ebac2933f..655a155a93 100644 --- a/src/botPage/bot/Interface/WebhookInterface.js +++ b/src/botPage/bot/Interface/WebhookInterface.js @@ -5,7 +5,7 @@ export default Interface => class extends Interface { // eslint-disable-next-line class-methods-use-this sendWebhook(url, payload) { - const onError = () => notify('warn', translate('The webhook could not be sent')); + const onError = () => notify('warn', translate('Unable to send webhook')); fetch(`${url}`, { method : 'POST', diff --git a/src/botPage/view/blockly/blocks/tools/webhook.js b/src/botPage/view/blockly/blocks/tools/webhook.js index 6d6286f249..fec8be9667 100644 --- a/src/botPage/view/blockly/blocks/tools/webhook.js +++ b/src/botPage/view/blockly/blocks/tools/webhook.js @@ -15,7 +15,7 @@ Blockly.Blocks.webhook = { colour : '#dedede', previousStatement: null, nextStatement : null, - tooltip : translate('Send payload to URL'), + tooltip : translate('Sends real-time information to your app'), }); this.itemCount_ = 3; From 3cd3afaf41930957ce64eca0383676a01ce4be0a Mon Sep 17 00:00:00 2001 From: McSam Date: Thu, 27 Jun 2019 13:49:25 +0800 Subject: [PATCH 09/20] modify tooltip --- src/botPage/view/blockly/blocks/tools/webhook.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/botPage/view/blockly/blocks/tools/webhook.js b/src/botPage/view/blockly/blocks/tools/webhook.js index fec8be9667..a5857a68df 100644 --- a/src/botPage/view/blockly/blocks/tools/webhook.js +++ b/src/botPage/view/blockly/blocks/tools/webhook.js @@ -15,7 +15,7 @@ Blockly.Blocks.webhook = { colour : '#dedede', previousStatement: null, nextStatement : null, - tooltip : translate('Sends real-time information to your app'), + tooltip : translate('Sends a POST request to a URL'), }); this.itemCount_ = 3; From 86e52f214bbf0aebd12f33388f806817b7cc3125 Mon Sep 17 00:00:00 2001 From: McSam Date: Fri, 28 Jun 2019 11:07:36 +0800 Subject: [PATCH 10/20] resolve changes --- src/botPage/bot/Interface/WebhookInterface.js | 2 +- .../view/blockly/blocks/tools/index.js | 2 +- .../{webhook_payload.js => key_value_pair.js} | 12 +++++----- .../view/blockly/blocks/tools/webhook.js | 22 +++++++++---------- static/xml/toolbox.xml | 13 +++++++---- 5 files changed, 28 insertions(+), 23 deletions(-) rename src/botPage/view/blockly/blocks/tools/{webhook_payload.js => key_value_pair.js} (70%) diff --git a/src/botPage/bot/Interface/WebhookInterface.js b/src/botPage/bot/Interface/WebhookInterface.js index 655a155a93..bd8c737792 100644 --- a/src/botPage/bot/Interface/WebhookInterface.js +++ b/src/botPage/bot/Interface/WebhookInterface.js @@ -7,7 +7,7 @@ export default Interface => sendWebhook(url, payload) { const onError = () => notify('warn', translate('Unable to send webhook')); - fetch(`${url}`, { + fetch(url, { method : 'POST', mode : 'cors', headers: { 'Content-Type': 'application/json' }, diff --git a/src/botPage/view/blockly/blocks/tools/index.js b/src/botPage/view/blockly/blocks/tools/index.js index 1703cb9829..7f13bb1768 100644 --- a/src/botPage/view/blockly/blocks/tools/index.js +++ b/src/botPage/view/blockly/blocks/tools/index.js @@ -8,4 +8,4 @@ import './loader'; import './candle'; import './time'; import './webhook'; -import './webhook_payload'; +import './key_value_pair'; diff --git a/src/botPage/view/blockly/blocks/tools/webhook_payload.js b/src/botPage/view/blockly/blocks/tools/key_value_pair.js similarity index 70% rename from src/botPage/view/blockly/blocks/tools/webhook_payload.js rename to src/botPage/view/blockly/blocks/tools/key_value_pair.js index 9e82251b90..8dc92d826a 100644 --- a/src/botPage/view/blockly/blocks/tools/webhook_payload.js +++ b/src/botPage/view/blockly/blocks/tools/key_value_pair.js @@ -1,19 +1,19 @@ import { translate } from '../../../../../common/i18n'; import { expectValue } from '../shared'; -Blockly.Blocks.webhook_payload = { +Blockly.Blocks.key_value_pair = { init() { this.jsonInit({ message0: translate('Key: %1 Value: %2'), args0 : [ { type: 'field_input', - name: 'WEBHOOK_KEY', + name: 'KEY', text: 'default', }, { type: 'input_value', - name: 'WEBHOOK_VALUE', + name: 'VALUE', }, ], colour : '#dedede', @@ -23,9 +23,9 @@ Blockly.Blocks.webhook_payload = { }, }; -Blockly.JavaScript.webhook_payload = block => { - const key = block.getFieldValue('WEBHOOK_KEY') || ''; - const value = expectValue(block, 'WEBHOOK_VALUE'); +Blockly.JavaScript.key_value_pair = block => { + const key = block.getFieldValue('KEY') || ''; + const value = expectValue(block, 'VALUE'); if (!key || !value) { return ''; diff --git a/src/botPage/view/blockly/blocks/tools/webhook.js b/src/botPage/view/blockly/blocks/tools/webhook.js index a5857a68df..bb14aa3743 100644 --- a/src/botPage/view/blockly/blocks/tools/webhook.js +++ b/src/botPage/view/blockly/blocks/tools/webhook.js @@ -18,7 +18,7 @@ Blockly.Blocks.webhook = { tooltip : translate('Sends a POST request to a URL'), }); - this.itemCount_ = 3; + this.itemCount_ = 1; this.updateShape_(); this.setMutator(new Blockly.Mutator(['lists_create_with_item'])); }, @@ -51,8 +51,8 @@ Blockly.Blocks.webhook = { decompose(workspace) { const containerBlock = workspace.newBlock('lists_create_with_container'); containerBlock.initSvg(); - // eslint-disable-next-line prefer-destructuring - let connection = containerBlock.getInput('STACK').connection; + + let { connection } = containerBlock.getInput('STACK'); for (let i = 0; i < this.itemCount_; i++) { const itemBlock = workspace.newBlock('lists_create_with_item'); itemBlock.initSvg(); @@ -137,7 +137,7 @@ Blockly.Blocks.webhook = { if (ev.type === Blockly.Events.MOVE) { for (let i = 0; i < this.itemCount_; i++) { const currentBlock = this.getInputTargetBlock(`ADD${i}`); - if (currentBlock && currentBlock.type !== 'webhook_payload') { + if (currentBlock && currentBlock.type !== 'key_value_pair') { currentBlock.unplug(true); } } @@ -147,20 +147,20 @@ Blockly.Blocks.webhook = { Blockly.JavaScript.webhook = block => { const url = expectValue(block, 'WEBHOOK_URL'); - const payloads = new Array(block.itemCount_); + const payload = new Array(block.itemCount_); for (let i = 0; i < block.itemCount_; i++) { - payloads[i] = Blockly.JavaScript.valueToCode(block, `ADD${i}`, Blockly.JavaScript.ORDER_ATOMIC) || null; + payload[i] = Blockly.JavaScript.valueToCode(block, `ADD${i}`, Blockly.JavaScript.ORDER_ATOMIC) || null; } - if (!url || !payloads) { + if (!url || !payload) { return ''; } - const params = payloads - .filter(p => p !== null) - .map(payload => { + const params = payload + .filter(item => item !== null) + .map(item => { const regExp = /^{(.*?)}$/; - return payload && payload.match(regExp)[1]; + return item && item.match(regExp)[1]; }); const code = `Bot.sendWebhook(${url}, {${params}});\n`; diff --git a/static/xml/toolbox.xml b/static/xml/toolbox.xml index 459dc5d9ba..fd01757e55 100644 --- a/static/xml/toolbox.xml +++ b/static/xml/toolbox.xml @@ -451,20 +451,25 @@ - + + https://example.com + + + + - - + + abc - + From a7c0cb91660e09c2954e5704b2d1d6033fc8915f Mon Sep 17 00:00:00 2001 From: McSam Date: Fri, 28 Jun 2019 11:16:41 +0800 Subject: [PATCH 11/20] radix eslint --- src/botPage/view/blockly/blocks/tools/webhook.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/botPage/view/blockly/blocks/tools/webhook.js b/src/botPage/view/blockly/blocks/tools/webhook.js index bb14aa3743..fc8f9220d5 100644 --- a/src/botPage/view/blockly/blocks/tools/webhook.js +++ b/src/botPage/view/blockly/blocks/tools/webhook.js @@ -38,8 +38,7 @@ Blockly.Blocks.webhook = { * @this Blockly.Block */ domToMutation(xmlElement) { - // eslint-disable-next-line radix - this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10); + this.itemCount_ = parseInt(xmlElement.getAttribute('items')); this.updateShape_(); }, /** From 815aaee6311d26d024210aab2a799eba4b7071de Mon Sep 17 00:00:00 2001 From: McSam Date: Sat, 29 Jun 2019 18:15:30 +0800 Subject: [PATCH 12/20] handle empty & add shadow --- src/botPage/bot/Interface/WebhookInterface.js | 14 +++++--- .../blockly/blocks/tools/key_value_pair.js | 6 ++-- .../view/blockly/blocks/tools/webhook.js | 35 ++++++++++++------- static/xml/toolbox.xml | 9 ----- 4 files changed, 35 insertions(+), 29 deletions(-) diff --git a/src/botPage/bot/Interface/WebhookInterface.js b/src/botPage/bot/Interface/WebhookInterface.js index bd8c737792..9d0a8ae4d2 100644 --- a/src/botPage/bot/Interface/WebhookInterface.js +++ b/src/botPage/bot/Interface/WebhookInterface.js @@ -5,14 +5,18 @@ export default Interface => class extends Interface { // eslint-disable-next-line class-methods-use-this sendWebhook(url, payload) { - const onError = () => notify('warn', translate('Unable to send webhook')); - - fetch(url, { + const onError = e => notify('warn', translate('Unable to send webhook')); + const fetchOption = { method : 'POST', mode : 'cors', headers: { 'Content-Type': 'application/json' }, - body : JSON.stringify(payload), - }) + }; + + if (payload) { + fetchOption.body = JSON.stringify(payload); + } + + fetch(url, fetchOption) .then(response => { if (!response.ok) { onError(); diff --git a/src/botPage/view/blockly/blocks/tools/key_value_pair.js b/src/botPage/view/blockly/blocks/tools/key_value_pair.js index 8dc92d826a..bdfe576b12 100644 --- a/src/botPage/view/blockly/blocks/tools/key_value_pair.js +++ b/src/botPage/view/blockly/blocks/tools/key_value_pair.js @@ -18,16 +18,16 @@ Blockly.Blocks.key_value_pair = { ], colour : '#dedede', output : null, - tooltip: translate('Payload for webhook'), + tooltip: translate('Returns a string representation of a key value pair'), }); }, }; Blockly.JavaScript.key_value_pair = block => { const key = block.getFieldValue('KEY') || ''; - const value = expectValue(block, 'VALUE'); + const value = Blockly.JavaScript.valueToCode(block, 'VALUE', Blockly.JavaScript.ORDER_ATOMIC) || null; - if (!key || !value) { + if (!key) { return ''; } diff --git a/src/botPage/view/blockly/blocks/tools/webhook.js b/src/botPage/view/blockly/blocks/tools/webhook.js index fc8f9220d5..cd2fa8c41a 100644 --- a/src/botPage/view/blockly/blocks/tools/webhook.js +++ b/src/botPage/view/blockly/blocks/tools/webhook.js @@ -19,7 +19,7 @@ Blockly.Blocks.webhook = { }); this.itemCount_ = 1; - this.updateShape_(); + this.updateShape_(false); this.setMutator(new Blockly.Mutator(['lists_create_with_item'])); }, /** @@ -39,7 +39,7 @@ Blockly.Blocks.webhook = { */ domToMutation(xmlElement) { this.itemCount_ = parseInt(xmlElement.getAttribute('items')); - this.updateShape_(); + this.updateShape_(true); }, /** * Populate the mutator's dialog with this block's components. @@ -77,11 +77,14 @@ Blockly.Blocks.webhook = { for (let i = 0; i < this.itemCount_; i++) { const connection = this.getInput(`ADD${i}`).connection.targetConnection; if (connection && connections.indexOf(connection) === -1) { + const targetBlock = connection.getSourceBlock(); + connection.disconnect(); + targetBlock.isShadow() && targetBlock.dispose(false); } } this.itemCount_ = connections.length; - this.updateShape_(); + this.updateShape_(true); // Reconnect any child blocks. for (let i = 0; i < this.itemCount_; i++) { Blockly.Mutator.reconnect(connections[i], this, `ADD${i}`); @@ -107,7 +110,7 @@ Blockly.Blocks.webhook = { * @private * @this Blockly.Block */ - updateShape_() { + updateShape_(render) { if (this.itemCount_ && this.getInput('EMPTY')) { this.removeInput('EMPTY'); } else if (!this.itemCount_ && !this.getInput('EMPTY')) { @@ -117,9 +120,17 @@ Blockly.Blocks.webhook = { for (i = 0; i < this.itemCount_; i++) { if (!this.getInput(`ADD${i}`)) { const input = this.appendValueInput(`ADD${i}`); + if (i === 0) { input.appendField(translate('Payload:')); } + + const { connection } = input; + const keypair = this.workspace.newBlock('key_value_pair', `keyvalue${i}`); + keypair.setShadow(true); + keypair.initSvg(); + render && keypair.render(); + keypair.outputConnection.connect(connection); } } // Remove deleted inputs. @@ -146,22 +157,22 @@ Blockly.Blocks.webhook = { Blockly.JavaScript.webhook = block => { const url = expectValue(block, 'WEBHOOK_URL'); - const payload = new Array(block.itemCount_); - for (let i = 0; i < block.itemCount_; i++) { - payload[i] = Blockly.JavaScript.valueToCode(block, `ADD${i}`, Blockly.JavaScript.ORDER_ATOMIC) || null; + + if (!block.itemCount_) { + return `Bot.sendWebhook(${url}, null);\n`; } - if (!url || !payload) { - return ''; + const keypairs = new Array(block.itemCount_); + for (let i = 0; i < block.itemCount_; i++) { + keypairs[i] = Blockly.JavaScript.valueToCode(block, `ADD${i}`, Blockly.JavaScript.ORDER_ATOMIC) || null; } - const params = payload + const params = keypairs .filter(item => item !== null) .map(item => { const regExp = /^{(.*?)}$/; return item && item.match(regExp)[1]; }); - const code = `Bot.sendWebhook(${url}, {${params}});\n`; - return code; + return `Bot.sendWebhook(${url}, {${params}});\n`; }; diff --git a/static/xml/toolbox.xml b/static/xml/toolbox.xml index fd01757e55..a2ee82fa75 100644 --- a/static/xml/toolbox.xml +++ b/static/xml/toolbox.xml @@ -458,17 +458,8 @@ https://example.com - - - - - - - abc - - From fd090727efcad597efa3049a7b4d56bb788ce300 Mon Sep 17 00:00:00 2001 From: McSam Date: Sat, 29 Jun 2019 18:19:45 +0800 Subject: [PATCH 13/20] eslint --- src/botPage/bot/Interface/WebhookInterface.js | 2 +- src/botPage/view/blockly/blocks/tools/key_value_pair.js | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/botPage/bot/Interface/WebhookInterface.js b/src/botPage/bot/Interface/WebhookInterface.js index 9d0a8ae4d2..b7002445f7 100644 --- a/src/botPage/bot/Interface/WebhookInterface.js +++ b/src/botPage/bot/Interface/WebhookInterface.js @@ -5,7 +5,7 @@ export default Interface => class extends Interface { // eslint-disable-next-line class-methods-use-this sendWebhook(url, payload) { - const onError = e => notify('warn', translate('Unable to send webhook')); + const onError = () => notify('warn', translate('Unable to send webhook')); const fetchOption = { method : 'POST', mode : 'cors', diff --git a/src/botPage/view/blockly/blocks/tools/key_value_pair.js b/src/botPage/view/blockly/blocks/tools/key_value_pair.js index bdfe576b12..d7b5cdb484 100644 --- a/src/botPage/view/blockly/blocks/tools/key_value_pair.js +++ b/src/botPage/view/blockly/blocks/tools/key_value_pair.js @@ -1,5 +1,4 @@ import { translate } from '../../../../../common/i18n'; -import { expectValue } from '../shared'; Blockly.Blocks.key_value_pair = { init() { From 4d884029a1dd711fd45e02dce8988d2fb252cf1f Mon Sep 17 00:00:00 2001 From: McSam Date: Sat, 29 Jun 2019 18:21:31 +0800 Subject: [PATCH 14/20] eslint --- src/botPage/view/blockly/blocks/tools/webhook.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/botPage/view/blockly/blocks/tools/webhook.js b/src/botPage/view/blockly/blocks/tools/webhook.js index cd2fa8c41a..57bd514a68 100644 --- a/src/botPage/view/blockly/blocks/tools/webhook.js +++ b/src/botPage/view/blockly/blocks/tools/webhook.js @@ -80,7 +80,9 @@ Blockly.Blocks.webhook = { const targetBlock = connection.getSourceBlock(); connection.disconnect(); - targetBlock.isShadow() && targetBlock.dispose(false); + if (targetBlock.isShadow()) { + targetBlock.dispose(false); + } } } this.itemCount_ = connections.length; From aaacb6e01ab5caf2646c390108329d4970816412 Mon Sep 17 00:00:00 2001 From: McSam Date: Mon, 1 Jul 2019 09:52:46 +0800 Subject: [PATCH 15/20] eslint --- src/botPage/view/blockly/blocks/tools/webhook.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/botPage/view/blockly/blocks/tools/webhook.js b/src/botPage/view/blockly/blocks/tools/webhook.js index 57bd514a68..ba69f1a41b 100644 --- a/src/botPage/view/blockly/blocks/tools/webhook.js +++ b/src/botPage/view/blockly/blocks/tools/webhook.js @@ -131,7 +131,9 @@ Blockly.Blocks.webhook = { const keypair = this.workspace.newBlock('key_value_pair', `keyvalue${i}`); keypair.setShadow(true); keypair.initSvg(); - render && keypair.render(); + if (render) { + keypair.render(); + } keypair.outputConnection.connect(connection); } } From ccab76cd773a489e5e2dde3786d1c777d8757321 Mon Sep 17 00:00:00 2001 From: McSam Date: Mon, 1 Jul 2019 18:09:17 +0800 Subject: [PATCH 16/20] resolve changes --- .../view/blockly/blocks/tools/webhook.js | 43 +++---------------- static/xml/toolbox.xml | 4 ++ 2 files changed, 10 insertions(+), 37 deletions(-) diff --git a/src/botPage/view/blockly/blocks/tools/webhook.js b/src/botPage/view/blockly/blocks/tools/webhook.js index ba69f1a41b..f50fd2da72 100644 --- a/src/botPage/view/blockly/blocks/tools/webhook.js +++ b/src/botPage/view/blockly/blocks/tools/webhook.js @@ -39,7 +39,7 @@ Blockly.Blocks.webhook = { */ domToMutation(xmlElement) { this.itemCount_ = parseInt(xmlElement.getAttribute('items')); - this.updateShape_(true); + this.updateShape_(false); }, /** * Populate the mutator's dialog with this block's components. @@ -73,46 +73,15 @@ Blockly.Blocks.webhook = { connections.push(itemBlock.valueConnection_); itemBlock = itemBlock.nextConnection && itemBlock.nextConnection.targetBlock(); } - // Disconnect any children that don't belong. - for (let i = 0; i < this.itemCount_; i++) { - const connection = this.getInput(`ADD${i}`).connection.targetConnection; - if (connection && connections.indexOf(connection) === -1) { - const targetBlock = connection.getSourceBlock(); - - connection.disconnect(); - if (targetBlock.isShadow()) { - targetBlock.dispose(false); - } - } - } this.itemCount_ = connections.length; this.updateShape_(true); - // Reconnect any child blocks. - for (let i = 0; i < this.itemCount_; i++) { - Blockly.Mutator.reconnect(connections[i], this, `ADD${i}`); - } - }, - /** - * Store pointers to any connected child blocks. - * @param {!Blockly.Block} containerBlock Root block in mutator. - * @this Blockly.Block - */ - saveConnections(containerBlock) { - let itemBlock = containerBlock.getInputTargetBlock('STACK'); - let i = 0; - while (itemBlock) { - const input = this.getInput(`ADD${i}`); - itemBlock.valueConnection_ = input && input.connection.targetConnection; - i++; - itemBlock = itemBlock.nextConnection && itemBlock.nextConnection.targetBlock(); - } }, /** * Modify this block to have the correct number of inputs. * @private * @this Blockly.Block */ - updateShape_(render) { + updateShape_(attachInput) { if (this.itemCount_ && this.getInput('EMPTY')) { this.removeInput('EMPTY'); } else if (!this.itemCount_ && !this.getInput('EMPTY')) { @@ -127,13 +96,13 @@ Blockly.Blocks.webhook = { input.appendField(translate('Payload:')); } + if (!attachInput) { + return; + } const { connection } = input; const keypair = this.workspace.newBlock('key_value_pair', `keyvalue${i}`); - keypair.setShadow(true); keypair.initSvg(); - if (render) { - keypair.render(); - } + keypair.render(); keypair.outputConnection.connect(connection); } } diff --git a/static/xml/toolbox.xml b/static/xml/toolbox.xml index a2ee82fa75..6d22797ca6 100644 --- a/static/xml/toolbox.xml +++ b/static/xml/toolbox.xml @@ -458,6 +458,10 @@ https://example.com + + + + From 7b006a1092510897d0517f5e30b888a555c595d3 Mon Sep 17 00:00:00 2001 From: Aaron Imming Date: Thu, 25 Jul 2019 13:16:22 +0800 Subject: [PATCH 17/20] Double jest timeout for bot --- .jest | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.jest b/.jest index 35ec7d7a44..9c8e79be57 100644 --- a/.jest +++ b/.jest @@ -1,3 +1,3 @@ -jasmine.DEFAULT_TIMEOUT_INTERVAL = 50000 +jasmine.DEFAULT_TIMEOUT_INTERVAL = 120000 process.on('unhandledRejection', e => console.log(e)) From 81a73dd17220c7963c7ff9168c3c487c8444f9af Mon Sep 17 00:00:00 2001 From: Aaron Imming Date: Thu, 25 Jul 2019 13:17:35 +0800 Subject: [PATCH 18/20] Only subscribe to balance in browser --- src/botPage/bot/TradeEngine/index.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/botPage/bot/TradeEngine/index.js b/src/botPage/bot/TradeEngine/index.js index 8ad3f62180..f93ffbd8ce 100644 --- a/src/botPage/bot/TradeEngine/index.js +++ b/src/botPage/bot/TradeEngine/index.js @@ -115,10 +115,16 @@ export default class TradeEngine extends Balance(Purchase(Sell(OpenContract(Prop this.listen('authorize', ({ authorize }) => { this.accountInfo = authorize; this.token = token; - this.api.subscribeToBalance().then(r => { - this.balance = Number(r.balance.balance); + + // Only subscribe to balance in browser, not for tests. + if (document) { + this.api.subscribeToBalance().then(r => { + this.balance = Number(r.balance.balance); + resolve(); + }); + } else { resolve(); - }); + } }) ); } From 0ee3cef9792db794b1bb3e76ede95f9a55b7a52d Mon Sep 17 00:00:00 2001 From: Aaron Imming Date: Thu, 25 Jul 2019 13:18:20 +0800 Subject: [PATCH 19/20] Reduce amount of jest workers to 1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index aa9f7a5dc1..42cdfb3bcb 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ }, "scripts": { "start": "gulp watch", - "test": "eslint src/ && jest -w 10 --coverage && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage", + "test": "eslint src/ && jest -w 1 --coverage && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage", "release": "d() { test -z $1 && echo 'Please specify branch.' && exit 1; (git show-branch $1) || exit 1; git stash; git checkout $1; npm i; rm -rf branch/$1; mkdir -p branch/$1 ; gulp build-min; cp -r www/ branch/$1; gulp release-branch --branch $1;}; d", "release-production": "d() { git stash; git checkout master; npm i;gulp build-min;gulp release-master;}; d", "build": "webpack --config webpack.config.cli.js" From d829a9f724aa9543be43d6a8b8cb6670f691ae50 Mon Sep 17 00:00:00 2001 From: Aaron Imming Date: Fri, 2 Aug 2019 11:23:03 +0800 Subject: [PATCH 20/20] Update packages --- package-lock.json | 305 ++++++++++++++++++++++++++++------------------ package.json | 2 +- 2 files changed, 187 insertions(+), 120 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7c6d902708..4b1ebc2a7f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4095,24 +4095,24 @@ } }, "es6-plato": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/es6-plato/-/es6-plato-1.1.6.tgz", - "integrity": "sha512-r9fuOEEOtAlgup1Aaot5dRmYG77dhMPwQfPcZf/YThNI3DTOpiJGEEZhEYt0w74vGDMYUXOFO5OUEJ1iDEYeqQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/es6-plato/-/es6-plato-1.2.2.tgz", + "integrity": "sha512-g0wns2AyEUnPavLIJ3Hy7wu5d+EUBfU/rJLwZJ3R8UmmQ4e3O3GgWSE4xeaQDCErPndzB+GYgHBnbCg9Uo9zhQ==", "dev": true, "requires": { - "eslint": "5.14.0", - "eslint-plugin-react": "7.7.0", - "fs-extra": "7.0.1", - "globby": "9.0.0", - "lodash": "4.17.11", + "eslint": "6.1.0", + "eslint-plugin-react": "7.14.3", + "fs-extra": "8.1.0", + "globby": "9.2.0", + "lodash": "4.17.15", "posix-getopt": "^1.2.0", "typhonjs-escomplex": "0.0.12" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "debug": { @@ -4125,59 +4125,65 @@ } }, "eslint": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.14.0.tgz", - "integrity": "sha512-jrOhiYyENRrRnWlMYANlGZTqb89r2FuRT+615AabBoajhNjeh9ywDNlh2LU9vTqf0WYN+L3xdXuIi7xuj/tK9w==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.1.0.tgz", + "integrity": "sha512-QhrbdRD7ofuV09IuE2ySWBz0FyXCq0rriLTZXZqaWSI79CVtHVRdkFuFTViiqzZhkCgfOh9USpriuGN2gIpZDQ==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "ajv": "^6.9.1", + "ajv": "^6.10.0", "chalk": "^2.1.0", "cross-spawn": "^6.0.5", "debug": "^4.0.1", "doctrine": "^3.0.0", - "eslint-scope": "^4.0.0", + "eslint-scope": "^5.0.0", "eslint-utils": "^1.3.1", "eslint-visitor-keys": "^1.0.0", - "espree": "^5.0.1", + "espree": "^6.0.0", "esquery": "^1.0.1", "esutils": "^2.0.2", "file-entry-cache": "^5.0.1", "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", + "glob-parent": "^5.0.0", "globals": "^11.7.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^6.2.2", - "js-yaml": "^3.12.0", + "inquirer": "^6.4.1", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", - "lodash": "^4.17.11", + "lodash": "^4.17.14", "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", "progress": "^2.0.0", "regexpp": "^2.0.1", - "semver": "^5.5.1", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", "table": "^5.2.3", - "text-table": "^0.2.0" + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" } }, "eslint-plugin-react": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.7.0.tgz", - "integrity": "sha512-KC7Snr4YsWZD5flu6A5c0AcIZidzW3Exbqp7OT67OaD2AppJtlBr/GuPrW/vaQM/yfZotEvKAdrxrO+v8vwYJA==", - "dev": true, - "requires": { - "doctrine": "^2.0.2", - "has": "^1.0.1", - "jsx-ast-utils": "^2.0.1", - "prop-types": "^15.6.0" + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.14.3.tgz", + "integrity": "sha512-EzdyyBWC4Uz2hPYBiEJrKCUi2Fn+BJ9B/pJQcjw5X+x/H2Nm59S4MJIvL4O5NEE0+WbnQwEBxWY03oUk+Bc3FA==", + "dev": true, + "requires": { + "array-includes": "^3.0.3", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.1.0", + "object.entries": "^1.1.0", + "object.fromentries": "^2.0.0", + "object.values": "^1.1.0", + "prop-types": "^15.7.2", + "resolve": "^1.10.1" }, "dependencies": { "doctrine": { @@ -4192,23 +4198,44 @@ } }, "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", + "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", "dev": true, "requires": { "esrecurse": "^4.1.0", "estraverse": "^4.1.1" } }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "glob-parent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz", + "integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, "globby": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-9.0.0.tgz", - "integrity": "sha512-q0qiO/p1w/yJ0hk8V9x1UXlgsXUxlGd0AHUOXZVXBO6aznDtpx7M8D1kBrCAItoPm+4l8r6ATXV1JpjY2SBQOw==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", + "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", "dev": true, "requires": { + "@types/glob": "^7.1.1", "array-union": "^1.0.2", - "dir-glob": "^2.2.1", + "dir-glob": "^2.2.2", "fast-glob": "^2.2.6", "glob": "^7.1.3", "ignore": "^4.0.3", @@ -4216,10 +4243,16 @@ "slash": "^2.0.0" } }, + "graceful-fs": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", + "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==", + "dev": true + }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "pify": { @@ -4228,14 +4261,26 @@ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^4.1.0" } + }, + "strip-json-comments": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "dev": true } } }, @@ -4927,10 +4972,13 @@ } }, "eslint-utils": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", - "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", - "dev": true + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.0.tgz", + "integrity": "sha512-7ehnzPaP5IIEh1r1tkjuIrxqhNkzUJa9z3R92tLJdZIVdWaczEhr3EbhGtsMrVxi1KeR8qA7Off6SWc5WNQqyQ==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.0.0" + } }, "eslint-visitor-keys": { "version": "1.0.0", @@ -4939,9 +4987,9 @@ "dev": true }, "espree": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", - "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.0.0.tgz", + "integrity": "sha512-lJvCS6YbCn3ImT3yKkPe0+tJ+mH6ljhGNjHQH9mRtiO6gjhVAOhVXW1yjnwqGwTkK3bGbye+hb00nFNmu0l/1Q==", "dev": true, "requires": { "acorn": "^6.0.7", @@ -4950,9 +4998,9 @@ }, "dependencies": { "acorn": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", - "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.2.1.tgz", + "integrity": "sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q==", "dev": true } } @@ -5213,9 +5261,9 @@ } }, "external-editor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", - "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, "requires": { "chardet": "^0.7.0", @@ -5565,9 +5613,9 @@ } }, "flatted": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz", - "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", "dev": true }, "flush-write-stream": { @@ -8041,9 +8089,9 @@ "dev": true }, "import-fresh": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", - "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz", + "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==", "dev": true, "requires": { "parent-module": "^1.0.0", @@ -8114,9 +8162,9 @@ "dev": true }, "inquirer": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.3.1.tgz", - "integrity": "sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.0.tgz", + "integrity": "sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA==", "dev": true, "requires": { "ansi-escapes": "^3.2.0", @@ -8125,7 +8173,7 @@ "cli-width": "^2.0.0", "external-editor": "^3.0.3", "figures": "^2.0.0", - "lodash": "^4.17.11", + "lodash": "^4.17.12", "mute-stream": "0.0.7", "run-async": "^2.2.0", "rxjs": "^6.4.0", @@ -9918,9 +9966,9 @@ } }, "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, "lodash._baseassign": { "version": "3.2.0", @@ -10137,9 +10185,9 @@ "dev": true }, "lodash.merge": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", - "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, "lodash.pick": { @@ -10731,9 +10779,9 @@ } }, "merge2": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", - "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.4.tgz", + "integrity": "sha512-FYE8xI+6pjFOhokZu0We3S5NKCirLbCzSh2Usf3qEyr4X8U+0jNg9P8RZ4qz+V2UoECLVwSyzU3LxXBaLGtD3A==", "dev": true }, "messageformat": { @@ -10863,9 +10911,9 @@ "dev": true }, "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, "requires": { "for-in": "^1.0.2", @@ -11402,6 +11450,18 @@ "isobject": "^3.0.0" } }, + "object.entries": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.0.tgz", + "integrity": "sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, "object.fromentries": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.0.tgz", @@ -11474,6 +11534,18 @@ "make-iterator": "^1.0.0" } }, + "object.values": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", + "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -13578,9 +13650,9 @@ "dev": true }, "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dev": true, "requires": { "extend-shallow": "^2.0.1", @@ -14393,17 +14465,29 @@ "dev": true }, "table": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/table/-/table-5.3.3.tgz", - "integrity": "sha512-3wUNCgdWX6PNpOe3amTTPWPuF6VGvgzjKCaO1snFj0z7Y3mUPWf5+zDtxUVGispJkDECPmR29wbzh6bVMOHbcw==", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.5.tgz", + "integrity": "sha512-oGa2Hl7CQjfoaogtrOHEJroOcYILTx7BZWLGsJIlzoWmB2zmguhNfPJZsWPKYek/MgCxfco54gEi31d1uN2hFA==", "dev": true, "requires": { - "ajv": "^6.9.1", - "lodash": "^4.17.11", + "ajv": "^6.10.2", + "lodash": "^4.17.14", "slice-ansi": "^2.1.0", "string-width": "^3.0.0" }, "dependencies": { + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", @@ -15046,38 +15130,15 @@ "dev": true }, "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "dev": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } + "set-value": "^2.0.1" } }, "unique-stream": { @@ -15234,6 +15295,12 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" }, + "v8-compile-cache": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz", + "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==", + "dev": true + }, "v8flags": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.3.tgz", diff --git a/package.json b/package.json index 42cdfb3bcb..77bb14d196 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "coveralls": "^3.0.3", "deep-diff": "^1.0.2", "del": "^4.1.1", - "es6-plato": "^1.1.6", + "es6-plato": "^1.2.2", "eslint": "^4.14.0", "eslint-config-airbnb": "^16.1.0", "eslint-config-binary": "^1.0.2",