From 59a40d4d7dab53457ba76304ab1446aff7ca8ff6 Mon Sep 17 00:00:00 2001 From: Matteo Suppo Date: Thu, 24 Jan 2019 12:45:43 +0100 Subject: [PATCH 01/13] Add separate v2 component --- demo/app.jsx | 3 +++ demo/v2/v2.jsx | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 demo/v2/v2.jsx diff --git a/demo/app.jsx b/demo/app.jsx index 536b016f..9e693f41 100644 --- a/demo/app.jsx +++ b/demo/app.jsx @@ -22,6 +22,7 @@ import React from 'react'; import Daemon from '../src'; import { HEX } from './serial_mirror'; +import V2 from './v2/v2.jsx' const chromeExtensionID = 'hfejhkbipnickajaidoppbadcomekkde'; @@ -213,6 +214,8 @@ class App extends React.Component { return (
+ +

Arduino Create Plugin Client Demo

diff --git a/demo/v2/v2.jsx b/demo/v2/v2.jsx new file mode 100644 index 00000000..eb5dea9a --- /dev/null +++ b/demo/v2/v2.jsx @@ -0,0 +1,19 @@ +import React from 'react'; + +class V2 extends React.Component { + render() { + return ( +
+

V2

+
+

Indexes

+
    + +
+
+
+ ) + } +} + +export default V2; From e7dd7b662a222955da683ac7a2e75611b1b26d17 Mon Sep 17 00:00:00 2001 From: Matteo Suppo Date: Thu, 24 Jan 2019 13:08:03 +0100 Subject: [PATCH 02/13] Pass daemon as a property --- demo/app.jsx | 2 +- demo/v2/v2.jsx | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/demo/app.jsx b/demo/app.jsx index 9e693f41..e97a260b 100644 --- a/demo/app.jsx +++ b/demo/app.jsx @@ -214,7 +214,7 @@ class App extends React.Component { return (
- +

Arduino Create Plugin Client Demo

diff --git a/demo/v2/v2.jsx b/demo/v2/v2.jsx index eb5dea9a..84606d42 100644 --- a/demo/v2/v2.jsx +++ b/demo/v2/v2.jsx @@ -1,14 +1,27 @@ import React from 'react'; class V2 extends React.Component { + constructor() { + super(); + this.state = { + indexes: [] + }; + + console.debug(this) + } render() { + const indexes = this.state.indexes.map((index, i) => +
  • + {index} +
  • ); + return (

    V2

    Indexes

      - + { indexes }
    From 9bd32a29a1c10442b6acfc59ae54c18f79ad109e Mon Sep 17 00:00:00 2001 From: Matteo Suppo Date: Fri, 1 Mar 2019 12:03:57 +0100 Subject: [PATCH 03/13] Show installed tools table --- demo/index.html | 25 +++++++++++++--- demo/v2/v2.jsx | 71 +++++++++++++++++++++++++++++--------------- src/socket-daemon.js | 7 ++++- src/v2.js | 34 +++++++++++++++++++++ 4 files changed, 108 insertions(+), 29 deletions(-) create mode 100644 src/v2.js diff --git a/demo/index.html b/demo/index.html index 4be0a5b2..60cd0bd1 100644 --- a/demo/index.html +++ b/demo/index.html @@ -18,6 +18,7 @@ --> + @@ -26,15 +27,20 @@ +
    - + + \ No newline at end of file diff --git a/demo/v2/v2.jsx b/demo/v2/v2.jsx index 84606d42..12d886cb 100644 --- a/demo/v2/v2.jsx +++ b/demo/v2/v2.jsx @@ -1,32 +1,55 @@ import React from 'react'; class V2 extends React.Component { - constructor() { - super(); - this.state = { - indexes: [] - }; + constructor() { + super(); + this.state = { + tools: [] + }; - console.debug(this) - } - render() { - const indexes = this.state.indexes.map((index, i) => -
  • - {index} -
  • ); + } - return ( -
    -

    V2

    -
    -

    Indexes

    -
      - { indexes } -
    -
    -
    - ) - } + componentDidMount() { + this.daemon = this.props.daemon; + + this.daemon.agentV2Found.subscribe(daemonV2 => { + if (!daemonV2) { + return; + } + this.daemonV2 = daemonV2; + this.daemonV2.installedTools().then(res => { + this.setState({ + tools: res + }); + }); + }) + } + + render() { + const tools = this.state.tools.map((tool, i) => + + {tool.packager} + {tool.name} + {tool.version} + ); + + return ( +
    +

    V2

    +
    +

    Installed tools

    + + + + + + + {tools} +
    PackagerNameVersion
    +
    +
    + ) + } } export default V2; diff --git a/src/socket-daemon.js b/src/socket-daemon.js index 281c00ad..cf1a1261 100644 --- a/src/socket-daemon.js +++ b/src/socket-daemon.js @@ -22,10 +22,11 @@ import io from 'socket.io-client'; import semVerCompare from 'semver-compare'; import { detect } from 'detect-browser'; -import { timer } from 'rxjs'; +import { timer, BehaviorSubject } from 'rxjs'; import { filter, takeUntil, first } from 'rxjs/operators'; import Daemon from './daemon'; +import V2 from './v2'; // Required agent version const browser = detect(); @@ -62,10 +63,14 @@ export default class SocketDaemon extends Daemon { this.openChannel(() => this.socket.emit('command', 'list')); + this.agentV2Found = new BehaviorSubject(null); + this.agentFound .subscribe(agentFound => { if (agentFound) { this._wsConnect(); + this.v2 = new V2(this.pluginURL); + this.agentV2Found.next(this.v2); } else { this.findAgent(); diff --git a/src/v2.js b/src/v2.js new file mode 100644 index 00000000..9baf184a --- /dev/null +++ b/src/v2.js @@ -0,0 +1,34 @@ +export default class SocketDaemonV2 { + constructor(daemonURL) { + this.daemonURL = daemonURL + '/v2/'; + } + + // installedTools uses the new v2 apis to ask the daemon a list of the tools already present in the system + installedTools() { + return fetch(`${this.daemonURL}/pkgs/tools/installed`, { + method: 'GET', + }).then(res => { + return res.json(); + }) + } + + // installTool uses the new v2 apis to ask the daemon to download a specific tool on the system + // The expected payload is + // { + // "name": "avrdude", + // "version": "6.3.0-arduino9", + // "packager": "arduino", + // "url": "https://downloads.arduino.cc/...", // system-specific package containing the tool + // "signature": "e7Gh8309...", // proof that the url comes from a trusted source + // "checksum": "SHA256:90384nhfoso8..." // proof that the package wasn't tampered with + // } + installTool(payload) { + fetch(`${this.daemonURL}/pkgs/tools/installed`, { + method: 'POST', + body: JSON.stringify(payload) + }) + .catch(error => { + console.error(error); + }); + } +} \ No newline at end of file From abf36115ded9f1165451189e5c957c7ba0dcf45f Mon Sep 17 00:00:00 2001 From: Matteo Suppo Date: Fri, 1 Mar 2019 17:48:40 +0100 Subject: [PATCH 04/13] Install tool on separate package --- demo/app.jsx | 45 ++++++++++--------- demo/v2/install_tool.jsx | 97 ++++++++++++++++++++++++++++++++++++++++ demo/v2/v2.jsx | 27 ++++++----- src/v2.js | 24 +++++++--- 4 files changed, 155 insertions(+), 38 deletions(-) create mode 100644 demo/v2/install_tool.jsx diff --git a/demo/app.jsx b/demo/app.jsx index e97a260b..fb3dcbd5 100644 --- a/demo/app.jsx +++ b/demo/app.jsx @@ -174,11 +174,11 @@ class App extends React.Component { {device.Name} - IsOpen: {device.IsOpen ? 'true' : 'false'} - this.handleOpen(e, device.Name)}> - open + open - this.handleClose(e, device.Name)}> - close + close - handleBootloaderMode(e, device.Name)}> - bootloader mode + bootloader mode ); @@ -186,9 +186,10 @@ class App extends React.Component { {device.Name} ); - const supportedBoards = this.state.supportedBoards.map((board, i) =>
  • - { board } -
  • ); + const supportedBoards = this.state.supportedBoards.map((board, i) => +
  • + {board} +
  • ); let uploadClass; if (this.state.uploadStatus === daemon.UPLOAD_DONE) { @@ -222,18 +223,18 @@ class App extends React.Component {

    Plugin info

    - Agent status: - { this.state.agentStatus ? 'Found' : 'Not found' } + Agent status: + {this.state.agentStatus ? 'Found' : 'Not found'}

    - Channel status: - { this.state.channelStatus ? 'Connected' : 'Not connected' } + Channel status: + {this.state.channelStatus ? 'Connected' : 'Not connected'}

    -            { this.state.agentInfo }
    +            {this.state.agentInfo}
               
    @@ -242,12 +243,12 @@ class App extends React.Component { serial:
      - { listSerialDevices } + {listSerialDevices}
    network:
      - { listNetworkDevices } + {listNetworkDevices}

    @@ -269,20 +270,20 @@ class App extends React.Component {

    Serial Monitor

    - +
    - + + ) + } +} \ No newline at end of file diff --git a/demo/v2/v2.jsx b/demo/v2/v2.jsx index 12d886cb..caa275d7 100644 --- a/demo/v2/v2.jsx +++ b/demo/v2/v2.jsx @@ -1,4 +1,5 @@ import React from 'react'; +import { V2InstallTool } from './install_tool.jsx'; class V2 extends React.Component { constructor() { @@ -6,7 +7,6 @@ class V2 extends React.Component { this.state = { tools: [] }; - } componentDidMount() { @@ -24,10 +24,9 @@ class V2 extends React.Component { }); }) } - render() { const tools = this.state.tools.map((tool, i) => - + {tool.packager} {tool.name} {tool.version} @@ -38,14 +37,20 @@ class V2 extends React.Component {

    V2

    Installed tools

    - - - - - - - {tools} -
    PackagerNameVersion
    +
    + + + + + + + + + {tools} +
    PackagerNameVersion
    +
    + +
    ) diff --git a/src/v2.js b/src/v2.js index 9baf184a..679e0949 100644 --- a/src/v2.js +++ b/src/v2.js @@ -1,6 +1,6 @@ export default class SocketDaemonV2 { constructor(daemonURL) { - this.daemonURL = daemonURL + '/v2/'; + this.daemonURL = daemonURL + '/v2'; } // installedTools uses the new v2 apis to ask the daemon a list of the tools already present in the system @@ -23,12 +23,26 @@ export default class SocketDaemonV2 { // "checksum": "SHA256:90384nhfoso8..." // proof that the package wasn't tampered with // } installTool(payload) { - fetch(`${this.daemonURL}/pkgs/tools/installed`, { - method: 'POST', + return fetch(`${this.daemonURL}/pkgs/tools/installed`, { + method: 'PUT', body: JSON.stringify(payload) }) - .catch(error => { - console.error(error); + .then(this.handleResponse); + } + + handleResponse(response) { + return response.json() + .then((json) => { + if (!response.ok) { + const error = Object.assign({}, json, { + status: response.status, + statusText: response.statusText, + }); + + return Promise.reject(error); + } + return json; }); } + } \ No newline at end of file From 1a6b3fc747545bfe0e1f7e6f07bb61a68fe6d04c Mon Sep 17 00:00:00 2001 From: Matteo Suppo Date: Fri, 29 Mar 2019 12:25:52 +0100 Subject: [PATCH 05/13] Add default testing values for v2.upload --- demo/v2/install_tool.jsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/demo/v2/install_tool.jsx b/demo/v2/install_tool.jsx index 30d8a804..c6d4bc08 100644 --- a/demo/v2/install_tool.jsx +++ b/demo/v2/install_tool.jsx @@ -5,12 +5,12 @@ export class V2InstallTool extends React.Component { constructor() { super(); this.state = { - name: "", - version: "", - packager: "", - url: "", - checksum: "", - signature: "", + name: "avrdude", + version: "6.3.0-arduino9", + packager: "arduino", + url: "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino9-i686-w64-mingw32.zip", + checksum: "SHA-256:f3c5cfa8d0b3b0caee81c5b35fb6acff89c342ef609bf4266734c6266a256d4f", + signature: "7628b488c7ffd21ae1ca657245751a4043c419fbab5c256a020fb53f17eb88686439f54f18e78a80b40fc2de742f79b78ed4338c959216dc8ae8279e482d2d4117eeaf34a281ce2369d1dc4356f782c0940d82610f1c892e913b637391c39e95d4d4dfe82d8dbc5350b833186a70a62c7952917481bad798a9c8b4905df91bd914fbdfd6e98ef75c8f7fb06284278da449ce05b27741d6eda156bbdb906d519ff7d7d5042379fdfc55962b3777fb9240b368552182758c297e39c72943d75d177f2dbb584b2210301250796dbe8af11f0cf06d762fe4f912294f4cdc8aff26715354cfb33010a81342fbbc438912eb424a39fc0c52a9b2bf722051a6f3b024bd", res: "" }; From 2166c4605790db734b6fcc51eea10d49d7a47eb2 Mon Sep 17 00:00:00 2001 From: Matteo Suppo Date: Fri, 29 Mar 2019 17:21:21 +0100 Subject: [PATCH 06/13] Make linter happier --- demo/app.jsx | 9 ++++---- demo/v2/install_tool.jsx | 34 ++++++++++++++---------------- demo/v2/v2.jsx | 16 +++++++------- src/socket-daemon.js | 2 +- src/{v2.js => socket-daemon.v2.js} | 24 +++++++-------------- 5 files changed, 37 insertions(+), 48 deletions(-) rename src/{v2.js => socket-daemon.v2.js} (77%) diff --git a/demo/app.jsx b/demo/app.jsx index fb3dcbd5..ed82eaaa 100644 --- a/demo/app.jsx +++ b/demo/app.jsx @@ -22,7 +22,7 @@ import React from 'react'; import Daemon from '../src'; import { HEX } from './serial_mirror'; -import V2 from './v2/v2.jsx' +import V2 from './v2/v2.jsx'; const chromeExtensionID = 'hfejhkbipnickajaidoppbadcomekkde'; @@ -186,10 +186,9 @@ class App extends React.Component { {device.Name} ); - const supportedBoards = this.state.supportedBoards.map((board, i) => -
  • - {board} -
  • ); + const supportedBoards = this.state.supportedBoards.map((board, i) =>
  • + {board} +
  • ); let uploadClass; if (this.state.uploadStatus === daemon.UPLOAD_DONE) { diff --git a/demo/v2/install_tool.jsx b/demo/v2/install_tool.jsx index c6d4bc08..618bc9c7 100644 --- a/demo/v2/install_tool.jsx +++ b/demo/v2/install_tool.jsx @@ -5,13 +5,13 @@ export class V2InstallTool extends React.Component { constructor() { super(); this.state = { - name: "avrdude", - version: "6.3.0-arduino9", - packager: "arduino", - url: "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino9-i686-w64-mingw32.zip", - checksum: "SHA-256:f3c5cfa8d0b3b0caee81c5b35fb6acff89c342ef609bf4266734c6266a256d4f", - signature: "7628b488c7ffd21ae1ca657245751a4043c419fbab5c256a020fb53f17eb88686439f54f18e78a80b40fc2de742f79b78ed4338c959216dc8ae8279e482d2d4117eeaf34a281ce2369d1dc4356f782c0940d82610f1c892e913b637391c39e95d4d4dfe82d8dbc5350b833186a70a62c7952917481bad798a9c8b4905df91bd914fbdfd6e98ef75c8f7fb06284278da449ce05b27741d6eda156bbdb906d519ff7d7d5042379fdfc55962b3777fb9240b368552182758c297e39c72943d75d177f2dbb584b2210301250796dbe8af11f0cf06d762fe4f912294f4cdc8aff26715354cfb33010a81342fbbc438912eb424a39fc0c52a9b2bf722051a6f3b024bd", - res: "" + name: 'avrdude', + version: '6.3.0-arduino9', + packager: 'arduino', + url: 'http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino9-i686-w64-mingw32.zip', + checksum: 'SHA-256:f3c5cfa8d0b3b0caee81c5b35fb6acff89c342ef609bf4266734c6266a256d4f', + signature: '7628b488c7ffd21ae1ca657245751a4043c419fbab5c256a020fb53f17eb88686439f54f18e78a80b40fc2de742f79b78ed4338c959216dc8ae8279e482d2d4117eeaf34a281ce2369d1dc4356f782c0940d82610f1c892e913b637391c39e95d4d4dfe82d8dbc5350b833186a70a62c7952917481bad798a9c8b4905df91bd914fbdfd6e98ef75c8f7fb06284278da449ce05b27741d6eda156bbdb906d519ff7d7d5042379fdfc55962b3777fb9240b368552182758c297e39c72943d75d177f2dbb584b2210301250796dbe8af11f0cf06d762fe4f912294f4cdc8aff26715354cfb33010a81342fbbc438912eb424a39fc0c52a9b2bf722051a6f3b024bd', + res: '' }; this.handleChange = this.handleChange.bind(this); @@ -26,7 +26,7 @@ export class V2InstallTool extends React.Component { return; } this.daemonV2 = daemonV2; - }) + }); } handleChange(event) { @@ -36,8 +36,6 @@ export class V2InstallTool extends React.Component { handleSubmit(event) { event.preventDefault(); - console.debug(this.state) - this.daemonV2.installTool({ name: this.state.name, version: this.state.version, @@ -66,32 +64,32 @@ export class V2InstallTool extends React.Component {






    - ) + ); } -} \ No newline at end of file +} diff --git a/demo/v2/v2.jsx b/demo/v2/v2.jsx index caa275d7..1c20a662 100644 --- a/demo/v2/v2.jsx +++ b/demo/v2/v2.jsx @@ -22,15 +22,15 @@ class V2 extends React.Component { tools: res }); }); - }) + }); } + render() { - const tools = this.state.tools.map((tool, i) => - - {tool.packager} - {tool.name} - {tool.version} - ); + const tools = this.state.tools.map((tool, i) => + {tool.packager} + {tool.name} + {tool.version} + ); return (
    @@ -53,7 +53,7 @@ class V2 extends React.Component {
    - ) + ); } } diff --git a/src/socket-daemon.js b/src/socket-daemon.js index cf1a1261..62d505b9 100644 --- a/src/socket-daemon.js +++ b/src/socket-daemon.js @@ -26,7 +26,7 @@ import { timer, BehaviorSubject } from 'rxjs'; import { filter, takeUntil, first } from 'rxjs/operators'; import Daemon from './daemon'; -import V2 from './v2'; +import V2 from './socket-daemon.v2'; // Required agent version const browser = detect(); diff --git a/src/v2.js b/src/socket-daemon.v2.js similarity index 77% rename from src/v2.js rename to src/socket-daemon.v2.js index 679e0949..326f6337 100644 --- a/src/v2.js +++ b/src/socket-daemon.v2.js @@ -1,15 +1,13 @@ export default class SocketDaemonV2 { constructor(daemonURL) { - this.daemonURL = daemonURL + '/v2'; + this.daemonURL = `${daemonURL}/v2`; } // installedTools uses the new v2 apis to ask the daemon a list of the tools already present in the system installedTools() { return fetch(`${this.daemonURL}/pkgs/tools/installed`, { method: 'GET', - }).then(res => { - return res.json(); - }) + }).then(res => res.json()); } // installTool uses the new v2 apis to ask the daemon to download a specific tool on the system @@ -26,23 +24,17 @@ export default class SocketDaemonV2 { return fetch(`${this.daemonURL}/pkgs/tools/installed`, { method: 'PUT', body: JSON.stringify(payload) - }) - .then(this.handleResponse); - } - - handleResponse(response) { - return response.json() + }).then(res => res.json() .then((json) => { - if (!response.ok) { + if (!res.ok) { const error = Object.assign({}, json, { - status: response.status, - statusText: response.statusText, + status: res.status, + statusText: res.statusText, }); return Promise.reject(error); } return json; - }); + })); } - -} \ No newline at end of file +} From cffeef19be6006592e8f3ce4398e71bc7b43f678 Mon Sep 17 00:00:00 2001 From: Matteo Suppo Date: Fri, 29 Mar 2019 17:36:13 +0100 Subject: [PATCH 07/13] Add documentation --- README.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/README.md b/README.md index fa470405..c959a7e3 100644 --- a/README.md +++ b/README.md @@ -70,6 +70,34 @@ daemon.downloading.subscribe(download => { ``` +## Version 2 + +Version 2 of the arduino-create-agent aims to provide a cleaner api based on promises. +It will remain confined to a v2 property on the daemon object until it will be stable. +At the moment it only supports tool management. + +```js +daemon.agentV2Found.subscribe(daemonV2 => { + if (!daemonV2) { + // Your Agent doesn't support v2 + } + // Your Agent supports v2 +}); + +daemon.v2.installedTools() + .then(tools => console.debug(tools)) // [{"name":"avrdude","version":"6.3.0-arduino9","packager":"arduino"}] + +let payload = { + name: 'avrdude', + version: '6.3.0-arduino9', + packager: 'arduino', + url: 'http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino9-i686-w64-mingw32.zip', + checksum: 'SHA-256:f3c5cfa8d0b3b0caee81c5b35fb6acff89c342ef609bf4266734c6266a256d4f', + signature: '7628b488c7ffd21ae1ca657245751a4043c419fbab5c256a020fb53f17eb88686439f54f18e78a80b40fc2de742f79b78ed4338c959216dc8ae8279e482d2d4117eeaf34a281ce2369d1dc4356f782c0940d82610f1c892e913b637391c39e95d4d4dfe82d8dbc5350b833186a70a62c7952917481bad798a9c8b4905df91bd914fbdfd6e98ef75c8f7fb06284278da449ce05b27741d6eda156bbdb906d519ff7d7d5042379fdfc55962b3777fb9240b368552182758c297e39c72943d75d177f2dbb584b2210301250796dbe8af11f0cf06d762fe4f912294f4cdc8aff26715354cfb33010a81342fbbc438912eb424a39fc0c52a9b2bf722051a6f3b024bd' +} +daemon.v2.installTool(payload) // Will install the tool in the system +``` + ## Development and test features Just run `npm run dev` and open your browser on http://localhost:8000 From a43744a8734f762ca2e1b37c02cf85a156f1f945 Mon Sep 17 00:00:00 2001 From: Matteo Suppo Date: Tue, 2 Apr 2019 12:27:16 +0200 Subject: [PATCH 08/13] Make sure to use v2 when enabled to download required tools --- src/socket-daemon.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/socket-daemon.js b/src/socket-daemon.js index 62d505b9..861a9976 100644 --- a/src/socket-daemon.js +++ b/src/socket-daemon.js @@ -463,7 +463,15 @@ export default class SocketDaemon extends Daemon { _upload(uploadPayload, uploadCommandInfo) { if (Array.isArray(uploadCommandInfo.tools)) { uploadCommandInfo.tools.forEach(tool => { - this.downloadTool(tool.name, tool.version, tool.packager); + if (this.v2) { + this.downloading.next({ status: this.DOWNLOAD_IN_PROGRESS }); + this.v2.installTool(tool).then(() => { + this.downloading.next({ status: this.DOWNLOAD_DONE }); + }); + } + else { + this.downloadTool(tool.name, tool.version, tool.packager); + } }); } From 6f73ce9375847d8c3ca392f9aa42b1c803e38680 Mon Sep 17 00:00:00 2001 From: Matteo Suppo Date: Wed, 3 Apr 2019 12:39:38 +0200 Subject: [PATCH 09/13] Don't use v2 if it's not available --- src/socket-daemon.js | 7 +++++-- src/socket-daemon.v2.js | 12 ++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/socket-daemon.js b/src/socket-daemon.js index 861a9976..d10329a6 100644 --- a/src/socket-daemon.js +++ b/src/socket-daemon.js @@ -69,8 +69,11 @@ export default class SocketDaemon extends Daemon { .subscribe(agentFound => { if (agentFound) { this._wsConnect(); - this.v2 = new V2(this.pluginURL); - this.agentV2Found.next(this.v2); + const v2 = new V2(this.pluginURL); + v2.init().then(() => { + this.v2 = v2; + this.agentV2Found.next(this.v2); + }); } else { this.findAgent(); diff --git a/src/socket-daemon.v2.js b/src/socket-daemon.v2.js index 326f6337..04f88f6d 100644 --- a/src/socket-daemon.v2.js +++ b/src/socket-daemon.v2.js @@ -3,6 +3,18 @@ export default class SocketDaemonV2 { this.daemonURL = `${daemonURL}/v2`; } + // init tries an HEAD + init() { + return fetch(`${this.daemonURL}/pkgs/tools/installed`, { + method: 'HEAD', + }).then(res => { + if (res.status !== 200) { + throw Error('v2 not available'); + } + return res; + }); + } + // installedTools uses the new v2 apis to ask the daemon a list of the tools already present in the system installedTools() { return fetch(`${this.daemonURL}/pkgs/tools/installed`, { From c7097cddcbdba5aafb7d41a7a9b27d9230a43234 Mon Sep 17 00:00:00 2001 From: Alberto Iannaccone Date: Thu, 4 Apr 2019 17:56:47 +0200 Subject: [PATCH 10/13] make install tool ui a little nicer --- demo/index.html | 12 ++++++++++ demo/v2/install_tool.jsx | 50 +++++++++++++++++++++++++--------------- 2 files changed, 43 insertions(+), 19 deletions(-) diff --git a/demo/index.html b/demo/index.html index 60cd0bd1..b4c38cb4 100644 --- a/demo/index.html +++ b/demo/index.html @@ -59,6 +59,18 @@ .section { margin: 20px; } + .install-tool-container .tool-input { + display: flex; + margin: 10px 0; + } + + .install-tool-container .tool-input label { + flex: 0 1 200px; + } + + .install-tool-container .tool-input input { + flex: 0 1 500px; + } table { border-collapse: collapse; diff --git a/demo/v2/install_tool.jsx b/demo/v2/install_tool.jsx index 618bc9c7..02beea70 100644 --- a/demo/v2/install_tool.jsx +++ b/demo/v2/install_tool.jsx @@ -59,33 +59,45 @@ export class V2InstallTool extends React.Component { render() { return ( -
    +

    Install a new tool

    -
    @@ -242,12 +242,12 @@ class App extends React.Component { serial: network:

    @@ -269,20 +269,20 @@ class App extends React.Component {

    Serial Monitor

    - +
    - + ); } diff --git a/package-lock.json b/package-lock.json index 1d3b8913..c64579d1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -244,9 +244,9 @@ "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" }, "ajv": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz", - "integrity": "sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1", @@ -2653,9 +2653,9 @@ } }, "eslint": { - "version": "5.14.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.14.1.tgz", - "integrity": "sha512-CyUMbmsjxedx8B0mr79mNOqetvkbij/zrXnFeK2zc3pGRn3/tibjiNAv/3UxFEyfMDjh+ZqTrJrEGBFiGfD5Og==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", + "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -2664,7 +2664,7 @@ "cross-spawn": "^6.0.5", "debug": "^4.0.1", "doctrine": "^3.0.0", - "eslint-scope": "^4.0.0", + "eslint-scope": "^4.0.3", "eslint-utils": "^1.3.1", "eslint-visitor-keys": "^1.0.0", "espree": "^5.0.1", @@ -2678,7 +2678,7 @@ "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "inquirer": "^6.2.2", - "js-yaml": "^3.12.0", + "js-yaml": "^3.13.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", "lodash": "^4.17.11", @@ -2745,9 +2745,9 @@ } }, "eslint-scope": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", - "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", "dev": true, "requires": { "esrecurse": "^4.1.0", @@ -2773,9 +2773,9 @@ "dev": true }, "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", "dev": true }, "strip-ansi": { @@ -2966,9 +2966,9 @@ }, "dependencies": { "acorn": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.0.tgz", - "integrity": "sha512-MW/FjM+IvU9CgBzjO3UIPCE2pyEwUsoFl+VGdczOPEdxfGFjuKny/gN54mOuX7Qxmb9Rg9MCn2oKiSUeW+pjrw==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", + "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", "dev": true } } @@ -3755,12 +3755,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -3775,17 +3777,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -3902,7 +3907,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -3914,6 +3920,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -3928,6 +3935,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -4039,7 +4047,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -4051,6 +4060,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -4172,6 +4182,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -4888,9 +4899,9 @@ }, "dependencies": { "ansi-regex": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", - "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "ansi-styles": { @@ -4920,12 +4931,12 @@ "dev": true }, "strip-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", - "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", + "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": "^4.0.0" + "ansi-regex": "^4.1.0" } }, "supports-color": { @@ -5260,9 +5271,9 @@ "dev": true }, "js-yaml": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz", - "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.0.tgz", + "integrity": "sha512-pZZoSxcCYco+DIKBTimr67J6Hy+EYGZDY/HCWC+iAEA9h1ByhMXAIVUXMcMFpOCxQ/xjXmPI2MkDL5HRm5eFrQ==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -6269,9 +6280,9 @@ } }, "parent-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz", - "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "requires": { "callsites": "^3.0.0" @@ -6699,33 +6710,33 @@ } }, "react": { - "version": "16.8.2", - "resolved": "https://registry.npmjs.org/react/-/react-16.8.2.tgz", - "integrity": "sha512-aB2ctx9uQ9vo09HVknqv3DGRpI7OIGJhCx3Bt0QqoRluEjHSaObJl+nG12GDdYH6sTgE7YiPJ6ZUyMx9kICdXw==", + "version": "16.8.6", + "resolved": "https://registry.npmjs.org/react/-/react-16.8.6.tgz", + "integrity": "sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw==", "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.13.2" + "scheduler": "^0.13.6" } }, "react-dom": { - "version": "16.8.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.2.tgz", - "integrity": "sha512-cPGfgFfwi+VCZjk73buu14pYkYBR1b/SRMSYqkLDdhSEHnSwcuYTPu6/Bh6ZphJFIk80XLvbSe2azfcRzNF+Xg==", + "version": "16.8.6", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.6.tgz", + "integrity": "sha512-1nL7PIq9LTL3fthPqwkvr2zY7phIPjYrT0jp4HjyEQrEROnw4dG41VVwi/wfoCneoleqrNX7iAD+pXebJZwrwA==", "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.13.2" + "scheduler": "^0.13.6" } }, "react-is": { - "version": "16.8.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.2.tgz", - "integrity": "sha512-D+NxhSR2HUCjYky1q1DwpNUD44cDpUXzSmmFyC3ug1bClcU/iDNy0YNn1iwme28fn+NFhpA13IndOd42CrFb+Q==", + "version": "16.8.6", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", + "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==", "dev": true }, "read-pkg": { @@ -7157,39 +7168,312 @@ } }, "rollup-plugin-replace": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-replace/-/rollup-plugin-replace-2.1.0.tgz", - "integrity": "sha512-SxrAIgpH/B5/W4SeULgreOemxcpEgKs2gcD42zXw50bhqGWmcnlXneVInQpAqzA/cIly4bJrOpeelmB9p4YXSQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-replace/-/rollup-plugin-replace-2.1.1.tgz", + "integrity": "sha512-IS5ZYBb3px0UfbDCYzKaKxelLd5dbPHhfplEXbymfvGlz9Ok44At4AjTOWe2qEax73bE8+pnMZN9C7PcVpFNlw==", "dev": true, "requires": { - "magic-string": "^0.25.1", - "minimatch": "^3.0.2", - "rollup-pluginutils": "^2.0.1" + "magic-string": "^0.25.2", + "rollup-pluginutils": "^2.4.1" }, "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "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" + } + } + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "estree-walker": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", - "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.0.tgz", + "integrity": "sha512-peq1RfVAVzr3PU/jL31RaOjUKLoZJpObQWJJ+LgfcxDUifyLZ1RjPQZTl0pzj2uJ45b7A7XpyppXvxdEqzo4rw==", "dev": true }, - "magic-string": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.2.tgz", - "integrity": "sha512-iLs9mPjh9IuTtRsqqhNGYcZXGei0Nh/A4xirrsqW7c+QhKVFL2vm7U09ru6cHRD22azaP/wMDgI+HCqbETMTtg==", + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "sourcemap-codec": "^1.4.4" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "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" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "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" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "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" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } }, "rollup-pluginutils": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz", - "integrity": "sha512-2XZwja7b6P5q4RZ5FhyX1+f46xi1Z3qBKigLRZ6VTZjwbN0K1IFGMlwm06Uu0Emcre2Z63l77nq/pzn+KxIEoA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.6.0.tgz", + "integrity": "sha512-aGQwspEF8oPKvg37u3p7h0cYNwmJR1sCBMZGZ5b9qy8HGtETknqjzcxrDRrcAnJNXN18lBH4Q9vZYth/p4n8jQ==", "dev": true, "requires": { - "estree-walker": "^0.5.2", - "micromatch": "^2.3.11" + "estree-walker": "^0.6.0", + "micromatch": "^3.1.10" } } } @@ -7281,9 +7565,9 @@ "dev": true }, "scheduler": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.2.tgz", - "integrity": "sha512-qK5P8tHS7vdEMCW5IPyt8v9MJOHqTrOUgPXib7tqm9vh834ibBX5BNhwkplX/0iOzHW5sXyluehYfS9yrkz9+w==", + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz", + "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==", "dev": true, "requires": { "loose-envify": "^1.1.0", @@ -7976,9 +8260,9 @@ }, "dependencies": { "ansi-regex": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", - "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "lodash": { @@ -7988,23 +8272,23 @@ "dev": true }, "string-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.0.0.tgz", - "integrity": "sha512-rr8CUxBbvOZDUvc5lNIJ+OC1nPVpz+Siw9VBtUjB9b6jZehZLFt0JMCZzShFHIsI8cbhm0EsNIfWJMFV3cu3Ew==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.0.0" + "strip-ansi": "^5.1.0" } }, "strip-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", - "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", + "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": "^4.0.0" + "ansi-regex": "^4.1.0" } } } diff --git a/package.json b/package.json index 2a78beff..cef37af1 100644 --- a/package.json +++ b/package.json @@ -31,18 +31,18 @@ "babel-preset-react": "^6.24.1", "clean-webpack-plugin": "^1.0.1", "cross-env": "^5.2.0", - "eslint": "^5.14.1", + "eslint": "^5.16.0", "eslint-config-airbnb-base": "^13.1.0", "eslint-plugin-import": "^2.16.0", "html-webpack-plugin": "^3.2.0", - "react": "^16.8.2", - "react-dom": "^16.8.2", + "react": "^16.8.6", + "react-dom": "^16.8.6", "rimraf": "^2.6.3", "rollup": "^0.68.2", "rollup-plugin-babel": "^3.0.7", "rollup-plugin-commonjs": "^9.2.0", "rollup-plugin-node-resolve": "^3.4.0", - "rollup-plugin-replace": "^2.1.0", + "rollup-plugin-replace": "^2.1.1", "rollup-plugin-uglify-es": "^0.0.1", "rollup-watch": "^4.3.1", "webpack": "^3.11.0", From c554839899aadf0711442d8ef47758000d666f20 Mon Sep 17 00:00:00 2001 From: Stefania Date: Fri, 5 Apr 2019 17:00:03 +0200 Subject: [PATCH 13/13] 2.2.0 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index c64579d1..0addac2c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "arduino-create-agent-js-client", - "version": "2.1.11", + "version": "2.2.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index cef37af1..f7349d45 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "arduino-create-agent-js-client", - "version": "2.1.11", + "version": "2.2.0", "description": "JS module providing discovery of the Arduino Create Plugin and communication with it", "main": "lib/index.js", "module": "es/index.js",