scanning for elrs network devices with crsf msp frame capability
only setup port and connect if its valid and ready change mdsn detection and made remove ports working for tcp ports used the bonjour package and made it event based removed unused constant chore: code quality fix self reference for mdns handler functions adding port removal on not reachable fix tcpcheck for resolved addresses fixing mdns and polling fixed mdns browser init (thanks to CapnBry), events not getting registered before the discovery starts tcp polling was to fast and now doesnt check if the gui is connected to reduce ESP stress. chore: remove commented code added mdns requery interval added andoird zeroconf for mdns discovery fixed mobile detection and fixed squash/merge errors fixing yarn install error and code smells fixes cordova connect10.9-maintenance
parent
ea02d9a7a8
commit
4b47dab653
|
@ -7,6 +7,7 @@
|
|||
<access origin="*"/>
|
||||
<allow-intent href="http://*/*"/>
|
||||
<allow-intent href="https://*/*"/>
|
||||
<allow-intent href="tcp://*/*"/>
|
||||
<allow-intent href="tel:*"/>
|
||||
<allow-intent href="sms:*"/>
|
||||
<allow-intent href="mailto:*"/>
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
"cordova-plugin-whitelist": "^1.3.4",
|
||||
"cordova-plugin-theme-detection": "^1.2.1",
|
||||
"cordova-chrome-sockets-tcp": "^1.4.0",
|
||||
"cordova-plugin-zeroconf": "^1.4.2",
|
||||
"bf-cordovarduino": "^1.0.0",
|
||||
"@ionic-native/core": "^5.1.0",
|
||||
"@ionic-native/ionic-webview": "^5.36.0",
|
||||
|
@ -56,7 +57,8 @@
|
|||
"cordova-plugin-theme-detection": {},
|
||||
"bf-cordova-plugin-appavailability": {},
|
||||
"cordova-chrome-sockets-tcp": {},
|
||||
"cordova-plugin-ionic-webview": {}
|
||||
"cordova-plugin-ionic-webview": {},
|
||||
"cordova-plugin-zeroconf": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -54,6 +54,7 @@
|
|||
"@fortawesome/fontawesome-free": "^5.13.0",
|
||||
"@panter/vue-i18next": "^0.15.2",
|
||||
"bluebird": "^3.7.2",
|
||||
"bonjour": "^3.5.0",
|
||||
"djv": "^2.1.4",
|
||||
"dompurify": "^2.3.6",
|
||||
"i18next": "^19.0.0",
|
||||
|
@ -66,6 +67,7 @@
|
|||
"jquery-ui-npm": "^1.12.0",
|
||||
"lru_map": "^0.3.3",
|
||||
"marked": "^4.0.17",
|
||||
"multicast-dns": "^7.2.4",
|
||||
"multiple-select": "^1.5.2",
|
||||
"nw-vue-devtools-prebuilt": "^0.0.10",
|
||||
"object-hash": "^3.0.0",
|
||||
|
@ -75,7 +77,7 @@
|
|||
"switchery-latest": "^0.8.2",
|
||||
"three": "~0.97.0",
|
||||
"universal-ga": "^1.2.0",
|
||||
"vue": "2.6.12"
|
||||
"vue": "^2.6.14"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.18.5",
|
||||
|
@ -139,7 +141,7 @@
|
|||
"through2": "^4.0.2",
|
||||
"vinyl-source-stream": "^2.0.0",
|
||||
"vue-loader": "^15.9.8",
|
||||
"vue-template-compiler": "^2.6.12",
|
||||
"vue-template-compiler": "^2.6.14",
|
||||
"yarn": "^1.22.17"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
function GUI_checkOperatingSystem() {
|
||||
if (navigator.appVersion.indexOf("Win") !== -1) {
|
||||
return "Windows";
|
||||
} else if (navigator.appVersion.indexOf("Mac") !== -1) {
|
||||
return "MacOS";
|
||||
} else if (navigator.appVersion.indexOf("Android") !== -1) {
|
||||
return "Android";
|
||||
} else if (navigator.appVersion.indexOf("Linux") !== -1) {
|
||||
return "Linux";
|
||||
} else if (navigator.appVersion.indexOf("X11") !== -1) {
|
||||
return "UNIX";
|
||||
} else {
|
||||
return "Unknown";
|
||||
}
|
||||
}
|
|
@ -1,6 +1,9 @@
|
|||
'use strict';
|
||||
|
||||
const TIMEOUT_CHECK = 500 ; // With 250 it seems that it produces a memory leak and slowdown in some versions, reason unknown
|
||||
const MDNS_INTERVAL = 10000;
|
||||
const TCP_CHECK_INTERVAL = 5000;
|
||||
const TCP_TIMEOUT = 2000;
|
||||
|
||||
const usbDevices = { filters: [
|
||||
{'vendorId': 1155, 'productId': 57105}, // STM Device in DFU Mode || Digital Radio in USB mode
|
||||
|
@ -29,6 +32,93 @@ PortHandler.initialize = function () {
|
|||
// fill dropdown with version numbers
|
||||
generateVirtualApiVersions();
|
||||
|
||||
const self = this;
|
||||
|
||||
self.mdnsBrowser = {
|
||||
services: [],
|
||||
init: false,
|
||||
};
|
||||
|
||||
let bonjour = {};
|
||||
|
||||
if (!self.mdnsBrowser.init) {
|
||||
if (GUI.isCordova()) {
|
||||
const zeroconf = cordova.plugins.zeroconf;
|
||||
zeroconf.registerAddressFamily = 'ipv4'; // or 'ipv6' ('any' by default)
|
||||
zeroconf.watchAddressFamily = 'ipv4'; // or 'ipv6' ('any' by default)
|
||||
zeroconf.watch("_http._tcp.", "local.", (result) => {
|
||||
const action = result.action;
|
||||
const service = result.service;
|
||||
if (['added', 'resolved'].includes(action)) {
|
||||
console.log("Zeroconf Service Changed", service);
|
||||
self.mdnsBrowser.services.push({
|
||||
addresses: service.ipv4Addresses,
|
||||
txt: service.txtRecord,
|
||||
fqdn: service.hostname,
|
||||
});
|
||||
} else {
|
||||
console.log("Zeroconf Service Removed", service);
|
||||
self.mdnsBrowser.services = mdnsBrowser.services.filter(s => s.fqdn !== service.hostname);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
bonjour = require('bonjour')();
|
||||
bonjour.find({ type: 'http' }, function(service) {
|
||||
console.log("Found HTTP service", service);
|
||||
self.mdnsBrowser.services.push({
|
||||
addresses: service.addresses,
|
||||
txt: service.txt,
|
||||
fqdn: service.host,
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
self.mdnsBrowser.init = true;
|
||||
}
|
||||
|
||||
const tcpCheck = function() {
|
||||
if (!self.tcpCheckLock) {
|
||||
self.tcpCheckLock = true;
|
||||
if (self.initialPorts?.length > 0) {
|
||||
const tcpPorts = self.initialPorts.filter(p => p.path.startsWith('tcp://'));
|
||||
tcpPorts.forEach(function (port) {
|
||||
const removePort = () => {
|
||||
self.mdnsBrowser.services = self.mdnsBrowser.services.filter(s => s.fqdn !== port.fqdn);
|
||||
};
|
||||
$.get({
|
||||
host: port.path.split('//').pop(),
|
||||
port: 80,
|
||||
timeout: TCP_TIMEOUT,
|
||||
}, (res) => res.destroy())
|
||||
.fail(removePort);
|
||||
});
|
||||
|
||||
//timeout is 2000ms for every found port, so wait that time before checking again
|
||||
setTimeout(() => {
|
||||
self.tcpCheckLock = false;
|
||||
}, Math.min(tcpPorts.length, 1) * (TCP_TIMEOUT + 1));
|
||||
} else {
|
||||
self.tcpCheckLock = false;
|
||||
}
|
||||
}
|
||||
|
||||
setTimeout(() => {
|
||||
tcpCheck();
|
||||
}, TCP_CHECK_INTERVAL);
|
||||
};
|
||||
|
||||
tcpCheck();
|
||||
|
||||
if (self.mdns_timer) {
|
||||
clearInterval(self.mdns_timer);
|
||||
}
|
||||
|
||||
self.mdns_timer = setInterval(() => {
|
||||
if (!GUI.connected_to && !GUI.isCordova()) {
|
||||
bonjour.update();
|
||||
}
|
||||
}, MDNS_INTERVAL);
|
||||
|
||||
// start listening, check after TIMEOUT_CHECK ms
|
||||
this.check();
|
||||
};
|
||||
|
@ -52,7 +142,19 @@ PortHandler.check = function () {
|
|||
PortHandler.check_serial_devices = function () {
|
||||
const self = this;
|
||||
|
||||
serial.getDevices(function(currentPorts) {
|
||||
serial.getDevices(function(cp) {
|
||||
|
||||
let currentPorts = [
|
||||
...cp,
|
||||
...(self.mdnsBrowser?.services?.filter(s => s.txt.vendor === 'elrs' && s.txt.type === 'rx')
|
||||
.map(s => s.addresses.map(a => ({
|
||||
path: `tcp://${a}`,
|
||||
displayName: `${s.txt.target} - ${s.txt.version}`,
|
||||
fqdn: s.fqdn,
|
||||
vendorId: 0,
|
||||
productId: 0,
|
||||
}))).flat() ?? []),
|
||||
].filter(Boolean);
|
||||
|
||||
// auto-select port (only during initialization)
|
||||
if (!self.initialPorts) {
|
||||
|
@ -128,7 +230,7 @@ PortHandler.removePort = function(currentPorts) {
|
|||
// disconnect "UI" - routine can't fire during atmega32u4 reboot procedure !!!
|
||||
if (GUI.connected_to) {
|
||||
for (let i = 0; i < removePorts.length; i++) {
|
||||
if (removePorts[i] === GUI.connected_to) {
|
||||
if (removePorts[i].path === GUI.connected_to) {
|
||||
$('div#header_btns a.connect').click();
|
||||
}
|
||||
}
|
||||
|
@ -162,19 +264,13 @@ PortHandler.detectPort = function(currentPorts) {
|
|||
const newPorts = self.array_difference(currentPorts, self.initialPorts);
|
||||
|
||||
if (newPorts.length) {
|
||||
// pick last_used_port for manual tcp auto-connect or detect and select new port for serial
|
||||
currentPorts = self.updatePortSelect(currentPorts);
|
||||
console.log(`PortHandler - Found: ${JSON.stringify(newPorts)}`);
|
||||
|
||||
const result = ConfigStorage.get('last_used_port');
|
||||
if (result.last_used_port) {
|
||||
if (result.last_used_port.includes('tcp')) {
|
||||
self.portPickerElement.val('manual');
|
||||
} else if (newPorts.length === 1) {
|
||||
self.portPickerElement.val(newPorts[0].path);
|
||||
} else if (newPorts.length > 1) {
|
||||
self.selectPort(currentPorts);
|
||||
}
|
||||
if (newPorts.length === 1) {
|
||||
self.portPickerElement.val(newPorts[0].path);
|
||||
} else if (newPorts.length > 1) {
|
||||
self.selectPort(currentPorts);
|
||||
}
|
||||
|
||||
self.port_available = true;
|
||||
|
|
|
@ -91,7 +91,7 @@ function initializeSerialBackend() {
|
|||
finishClose(toggleStatus);
|
||||
}
|
||||
|
||||
mspHelper.setArmingEnabled(true, false, onFinishCallback);
|
||||
mspHelper?.setArmingEnabled(true, false, onFinishCallback);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -84,6 +84,7 @@
|
|||
<script type="text/javascript" src="./js/utils/VtxDeviceStatus/TrampDeviceStatus.js"></script>
|
||||
<script type="text/javascript" src="./js/utils/VtxDeviceStatus/SmartAudioDeviceStatus.js"></script>
|
||||
<script type="text/javascript" src="./js/utils/VtxDeviceStatus/Rtc6705DeviceStatus.js"></script>
|
||||
<script type="text/javascript" src="./js/helper.js"></script>
|
||||
<script type="text/javascript" src="./js/ConfigStorage.js"></script>
|
||||
<script type="text/javascript" src="./js/SessionStorage.js"></script>
|
||||
<script type="text/javascript" src="./js/data_storage.js"></script>
|
||||
|
@ -159,9 +160,9 @@
|
|||
</div>
|
||||
<betaflight-logo
|
||||
:configurator-version="CONFIGURATOR.getDisplayVersion()"
|
||||
:firmware-version="FC.CONFIG.flightControllerVersion"
|
||||
:firmware-id="FC.CONFIG.flightControllerIdentifier"
|
||||
:hardware-id="FC.CONFIG.hardwareName"
|
||||
:firmware-version="FC.CONFIG.flightControllerVersion"
|
||||
:firmware-id="FC.CONFIG.flightControllerIdentifier"
|
||||
:hardware-id="FC.CONFIG.hardwareName"
|
||||
></betaflight-logo>
|
||||
<div id="port-picker">
|
||||
<div id="port-override-option">
|
||||
|
@ -218,7 +219,7 @@
|
|||
<div class="battery-status"></div>
|
||||
</div>
|
||||
</div>
|
||||
<battery-legend
|
||||
<battery-legend
|
||||
:voltage="FC.ANALOG.voltage"
|
||||
:vbatmaxcellvoltage="FC.BATTERY_CONFIG.vbatmaxcellvoltage"
|
||||
></battery-legend>
|
||||
|
@ -294,9 +295,9 @@
|
|||
<div class="tab_container">
|
||||
<betaflight-logo
|
||||
:configurator-version="CONFIGURATOR.getDisplayVersion()"
|
||||
:firmware-version="FC.CONFIG.flightControllerVersion"
|
||||
:firmware-id="FC.CONFIG.flightControllerIdentifier"
|
||||
:hardware-id="FC.CONFIG.hardwareName"
|
||||
:firmware-version="FC.CONFIG.flightControllerVersion"
|
||||
:firmware-id="FC.CONFIG.flightControllerIdentifier"
|
||||
:hardware-id="FC.CONFIG.hardwareName"
|
||||
></betaflight-logo>
|
||||
<div id="tabs">
|
||||
<ul class="mode-disconnected">
|
||||
|
@ -373,9 +374,9 @@
|
|||
:cpu-load="FC.CONFIG.cpuload"
|
||||
|
||||
:configurator-version="CONFIGURATOR.getDisplayVersion()"
|
||||
:firmware-version="FC.CONFIG.flightControllerVersion"
|
||||
:firmware-id="FC.CONFIG.flightControllerIdentifier"
|
||||
:hardware-id="FC.CONFIG.hardwareName"
|
||||
:firmware-version="FC.CONFIG.flightControllerVersion"
|
||||
:firmware-id="FC.CONFIG.flightControllerIdentifier"
|
||||
:hardware-id="FC.CONFIG.hardwareName"
|
||||
></status-bar>
|
||||
<div id="cache">
|
||||
<div class="data-loading">
|
||||
|
|
|
@ -14,6 +14,7 @@ module.exports = function(config) {
|
|||
'./node_modules/jquery-textcomplete/dist/jquery.textcomplete.min.js',
|
||||
'./node_modules/bluebird/js/browser/bluebird.min.js',
|
||||
'./node_modules/jbox/dist/jBox.min.js',
|
||||
'./src/js/helper.js',
|
||||
'./src/js/serial.js',
|
||||
'./src/js/data_storage.js',
|
||||
{ pattern: './src/js/localization.js', type: 'module', watched: false },
|
||||
|
|
123
yarn.lock
123
yarn.lock
|
@ -1439,6 +1439,11 @@
|
|||
resolved "https://registry.yarnpkg.com/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz#8ace5259254426ccef57f3175bc64ed7095ed919"
|
||||
integrity sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==
|
||||
|
||||
"@leichtgewicht/ip-codec@^2.0.1":
|
||||
version "2.0.4"
|
||||
resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b"
|
||||
integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==
|
||||
|
||||
"@malept/cross-spawn-promise@^1.1.0":
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz#504af200af6b98e198bce768bc1730c6936ae01d"
|
||||
|
@ -3669,6 +3674,11 @@ array-flatten@1.1.1:
|
|||
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
|
||||
integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
|
||||
|
||||
array-flatten@^2.1.0:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099"
|
||||
integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==
|
||||
|
||||
array-includes@^3.0.3:
|
||||
version "3.1.4"
|
||||
resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9"
|
||||
|
@ -4220,6 +4230,18 @@ body-parser@^1.19.0:
|
|||
raw-body "2.4.2"
|
||||
type-is "~1.6.18"
|
||||
|
||||
bonjour@^3.5.0:
|
||||
version "3.5.0"
|
||||
resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5"
|
||||
integrity sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==
|
||||
dependencies:
|
||||
array-flatten "^2.1.0"
|
||||
deep-equal "^1.0.1"
|
||||
dns-equal "^1.0.0"
|
||||
dns-txt "^2.0.2"
|
||||
multicast-dns "^6.0.1"
|
||||
multicast-dns-service-types "^1.1.0"
|
||||
|
||||
boolbase@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
|
||||
|
@ -4503,6 +4525,11 @@ buffer-from@^1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
|
||||
integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
|
||||
|
||||
buffer-indexof@^1.0.0:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c"
|
||||
integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==
|
||||
|
||||
buffer-xor@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
|
||||
|
@ -5851,6 +5878,18 @@ deep-eql@^3.0.1:
|
|||
dependencies:
|
||||
type-detect "^4.0.0"
|
||||
|
||||
deep-equal@^1.0.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a"
|
||||
integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==
|
||||
dependencies:
|
||||
is-arguments "^1.0.4"
|
||||
is-date-object "^1.0.1"
|
||||
is-regex "^1.0.4"
|
||||
object-is "^1.0.1"
|
||||
object-keys "^1.1.1"
|
||||
regexp.prototype.flags "^1.2.0"
|
||||
|
||||
deep-extend@^0.6.0:
|
||||
version "0.6.0"
|
||||
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
|
||||
|
@ -6111,6 +6150,33 @@ djv@^2.1.4:
|
|||
optionalDependencies:
|
||||
"@korzio/djv-draft-04" "^2.0.1"
|
||||
|
||||
dns-equal@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
|
||||
integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==
|
||||
|
||||
dns-packet@^1.3.1:
|
||||
version "1.3.4"
|
||||
resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.4.tgz#e3455065824a2507ba886c55a89963bb107dec6f"
|
||||
integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==
|
||||
dependencies:
|
||||
ip "^1.1.0"
|
||||
safe-buffer "^5.0.1"
|
||||
|
||||
dns-packet@^5.2.2:
|
||||
version "5.4.0"
|
||||
resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.4.0.tgz#1f88477cf9f27e78a213fb6d118ae38e759a879b"
|
||||
integrity sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==
|
||||
dependencies:
|
||||
"@leichtgewicht/ip-codec" "^2.0.1"
|
||||
|
||||
dns-txt@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6"
|
||||
integrity sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ==
|
||||
dependencies:
|
||||
buffer-indexof "^1.0.0"
|
||||
|
||||
doctrine@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
|
||||
|
@ -8937,6 +9003,11 @@ invert-kv@^1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
|
||||
integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY=
|
||||
|
||||
ip@^1.1.0:
|
||||
version "1.1.8"
|
||||
resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48"
|
||||
integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==
|
||||
|
||||
ip@^1.1.5:
|
||||
version "1.1.5"
|
||||
resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
|
||||
|
@ -11230,6 +11301,27 @@ ms@2.1.3, ms@^2.0.0:
|
|||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
|
||||
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
|
||||
|
||||
multicast-dns-service-types@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901"
|
||||
integrity sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==
|
||||
|
||||
multicast-dns@^6.0.1:
|
||||
version "6.2.3"
|
||||
resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229"
|
||||
integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==
|
||||
dependencies:
|
||||
dns-packet "^1.3.1"
|
||||
thunky "^1.0.2"
|
||||
|
||||
multicast-dns@^7.2.4:
|
||||
version "7.2.5"
|
||||
resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced"
|
||||
integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==
|
||||
dependencies:
|
||||
dns-packet "^5.2.2"
|
||||
thunky "^1.0.2"
|
||||
|
||||
multipipe@^0.1.2:
|
||||
version "0.1.2"
|
||||
resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b"
|
||||
|
@ -11764,6 +11856,14 @@ object-inspect@^1.8.0:
|
|||
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0"
|
||||
integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==
|
||||
|
||||
object-is@^1.0.1:
|
||||
version "1.1.5"
|
||||
resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac"
|
||||
integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==
|
||||
dependencies:
|
||||
call-bind "^1.0.2"
|
||||
define-properties "^1.1.3"
|
||||
|
||||
object-keys@^1.0.12, object-keys@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
|
||||
|
@ -13510,7 +13610,7 @@ regex-not@^1.0.0, regex-not@^1.0.2:
|
|||
extend-shallow "^3.0.2"
|
||||
safe-regex "^1.1.0"
|
||||
|
||||
regexp.prototype.flags@^1.4.1:
|
||||
regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.4.1:
|
||||
version "1.4.3"
|
||||
resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac"
|
||||
integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==
|
||||
|
@ -15390,6 +15490,11 @@ through@2, "through@>=2.2.7 <3", through@^2.3.6, through@~2.3, through@~2.3.1:
|
|||
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
|
||||
integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
|
||||
|
||||
thunky@^1.0.2:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"
|
||||
integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==
|
||||
|
||||
time-stamp@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3"
|
||||
|
@ -16393,10 +16498,10 @@ vue-style-loader@^4.1.0:
|
|||
hash-sum "^1.0.2"
|
||||
loader-utils "^1.0.2"
|
||||
|
||||
vue-template-compiler@^2.6.12:
|
||||
version "2.6.12"
|
||||
resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.12.tgz#947ed7196744c8a5285ebe1233fe960437fcc57e"
|
||||
integrity sha512-OzzZ52zS41YUbkCBfdXShQTe69j1gQDZ9HIX8miuC9C3rBCk9wIRjLiZZLrmX9V+Ftq/YEyv1JaVr5Y/hNtByg==
|
||||
vue-template-compiler@^2.6.14:
|
||||
version "2.6.14"
|
||||
resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.14.tgz#a2f0e7d985670d42c9c9ee0d044fed7690f4f763"
|
||||
integrity sha512-ODQS1SyMbjKoO1JBJZojSw6FE4qnh9rIpUZn2EUT86FKizx9uH5z6uXiIrm4/Nb/gwxTi/o17ZDEGWAXHvtC7g==
|
||||
dependencies:
|
||||
de-indent "^1.0.2"
|
||||
he "^1.1.0"
|
||||
|
@ -16406,10 +16511,10 @@ vue-template-es2015-compiler@^1.9.0:
|
|||
resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825"
|
||||
integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==
|
||||
|
||||
vue@2.6.12:
|
||||
version "2.6.12"
|
||||
resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.12.tgz#f5ebd4fa6bd2869403e29a896aed4904456c9123"
|
||||
integrity sha512-uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg==
|
||||
vue@^2.6.14:
|
||||
version "2.6.14"
|
||||
resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.14.tgz#e51aa5250250d569a3fbad3a8a5a687d6036e235"
|
||||
integrity sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ==
|
||||
|
||||
walker@^1.0.7, walker@~1.0.5:
|
||||
version "1.0.8"
|
||||
|
|
Loading…
Reference in New Issue