diff --git a/.eslintrc.json b/.eslintrc.json
index 22c23e5..48cf0f4 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -1,32 +1,34 @@
{
- "env": {
- "browser": false,
- "node": true,
- "es6": false
- },
- "extends": "eslint:recommended",
- "parserOptions": {
- "ecmaVersion": 2017,
- "sourceType": "module"
- },
- "rules": {
- "indent": [
- "error",
- "tab"
- ],
- "linebreak-style": [
- "error",
- "unix"
- ],
- "quotes": [
- "error",
- "double"
- ],
- "semi": [
- "error",
- "always"
- ],
- "no-console":"off",
- "no-unused-vars":"error"
- }
+ "parser": "@typescript-eslint/parser",
+ "extends": [
+ "eslint:recommended",
+ "plugin:@typescript-eslint/eslint-recommended",
+ "plugin:@typescript-eslint/recommended" // uses the recommended rules from the @typescript-eslint/eslint-plugin
+ ],
+ "parserOptions": {
+ "ecmaVersion": 2018,
+ "sourceType": "module"
+ },
+ "ignorePatterns": ["dist", "src/streamingDelegate.ts"],
+ "rules": {
+ "quotes": ["warn", "double"],
+ "indent": ["warn", 2, { "SwitchCase": 1 }],
+ "linebreak-style": ["warn", "unix"],
+ "semi": ["warn", "always"],
+ "comma-dangle": ["off", "always-multiline"],
+ "dot-notation": "warn",
+ "eqeqeq": "warn",
+ "curly": ["warn", "all"],
+ "brace-style": ["warn"],
+ "prefer-arrow-callback": ["warn"],
+ "max-len": ["warn", 140],
+ "no-console": ["warn"], // use the provided Homebridge log method instead
+ "lines-between-class-members": [
+ "warn",
+ "always",
+ { "exceptAfterSingleLine": true }
+ ],
+ "@typescript-eslint/explicit-function-return-type": "off",
+ "@typescript-eslint/no-non-null-assertion": "off"
+ }
}
diff --git a/.gitignore b/.gitignore
index 01b9f03..b8dd556 100644
--- a/.gitignore
+++ b/.gitignore
@@ -80,3 +80,5 @@ typings/
# End of https://www.gitignore.io/api/node
persist
+
+dist
\ No newline at end of file
diff --git a/.jshintrc b/.jshintrc
deleted file mode 100644
index af28da2..0000000
--- a/.jshintrc
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "esversion": 6,
- "node": true
- }
diff --git a/.npmignore b/.npmignore
index ef77972..7ce7abe 100644
--- a/.npmignore
+++ b/.npmignore
@@ -1,5 +1,6 @@
local-only/
*.jpg
+*.jpeg
package-lock.json
.git/
@@ -34,3 +35,11 @@ tslint.json
npm-debug.log
snapshot-error.txt
persist/
+
+src/
+testing-config/
+*.code-workspace
+.eslintrc
+.jshintrc
+.travis.yml
+.eslintignore
diff --git a/.travis.yml b/.travis.yml
index 8ac3be6..ad5d04f 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,22 +1,26 @@
language: node_js
+
node_js:
- - 6.14.4
- - 8.11.1
- - 8.12.0
- - 10.13.0
- - 11.1.0
-before_install:
-- curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
-- echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
-- sudo apt-get update && sudo apt-get install yarn
-- yarn global add jshint tslint typescript homebridge eslint
-- homebridge --version
+ - node
+ - 10
+ - 11
+
+env:
+ - workerCount=3
+
+matrix:
+ fast_finish: true
+
+install:
+ - npm install
+
+cache:
+ directories:
+ - node_modules
+
+git:
+ depth: 1
+
script:
-- tslint -c ./tslint.json --project .
-- tsc
-- eslint -c .eslintrc.json *.js
-- jshint -c .jshintrc *.js
-- npm --verbose test
-- node --version | grep -v v6.*.* && npm --dry-run publish || echo Skipping publish dry-run for node 6.x
-- DEBUG=* timeout -k 20s -s SIGINT 15s homebridge -Q -P ./ -U ./testing-config ; test $? == 124
-- timeout -k 20s -s SIGINT 15s node standalone.js ; test $? == 124
+ - npm run lint
+ # - npm run build
diff --git a/README.md b/README.md
index 60534c2..74d40b1 100644
--- a/README.md
+++ b/README.md
@@ -19,13 +19,12 @@ If you have a newer version, you can help me out with the support.
## Installation
-1. Install `ffmpeg` on your computer with *libx264* or (*h264_omx* for Raspberry Pi)
+1. Install `ffmpeg` on your computer with _libx264_ or (_h264_omx_ for Raspberry Pi)
1. Make sure your homebridge setup is current.
1. Follow the official [homebridge installation instructions](https://github.com/nfarina/homebridge#installation) if you haven't done so yet
1. Install this plugin using: `npm install -g homebridge-bloomsky`
1. Edit `config.json` and add the platform.
1. Run/Restart Homebridge
-1. _Optionally_ `npm install -g sharp` on modern platforms for improved performance when generating snapshot images
### Configuration Example
@@ -36,25 +35,22 @@ Add this configuration information to your homebridge `config.json` in the
{
"platform": "Bloomsky",
"apiKey": "your-api-key-here==",
- "apiUrl": "https://api.bloomsky.com/api/skydata/",
- "vcodec": "libx264",
- "debug": false
+ "apiUrl": "https://api.bloomsky.com/api/skydata/"
}
```
-Property Name | Value | Required
-------------- | ----- | --------
-`platform` | Must be `Bloomsky` | yes
-`apiKey` | Your personal [Bloomsky API](#bloomsky-api) authorization key | yes
-`apiUrl` | Use default value for official public Bloomsky API: `https://api.bloomsky.com/api/skydata/` | no
-`vcodec` | `libx264` by default, use `h264_omx` for Raspberry Pi | no
-`debug` | If set to `true`, will log more information during runtime and try to update camera preview more often, defaults to `false` | no
+| Property Name | Value | Required |
+| ------------- | ------------------------------------------------------------------------------------------- | -------- |
+| `platform` | Must be `Bloomsky` | yes |
+| `apiKey` | Your personal [Bloomsky API](#bloomsky-api) authorization key | yes |
+| `apiUrl` | Use default value for official public Bloomsky API: `https://api.bloomsky.com/api/skydata/` | no |
## Bloomsky API
The BloomSky API provides the most recent
data from your own devices!
Follow these steps to obtain your own personal Bloomsky API key:
+
1. Sign in to your Bloomsky account at: https://dashboard.bloomsky.com
1. In the left hand menu, select [Developers](https://dashboard.bloomsky.com/user#api)
1. The pop-up will show your personal API key
@@ -62,6 +58,7 @@ Follow these steps to obtain your own personal Bloomsky API key:
## Donations
Donations are very welcome and accepted at the following addresses:
+
- BTC: `3QTxu56V2gNdq1VznL7ftw3B4megXq5bix`
- LTC: `MFDLN62hMNYDLMAWx4W6Z45nhDDLDjDUV7`
@@ -70,13 +67,13 @@ Donations are very welcome and accepted at the following addresses:
> Copyright 2018 Michael Henke
>
> Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
+> you may not use this file except in compliance with the License.
+> You may obtain a copy of the License at
>
-> http://www.apache.org/licenses/LICENSE-2.0
+> http://www.apache.org/licenses/LICENSE-2.0
>
> Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
+> distributed under the License is distributed on an "AS IS" BASIS,
+> WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+> See the License for the specific language governing permissions and
+> limitations under the License.
diff --git a/config.schema.json b/config.schema.json
new file mode 100644
index 0000000..3975213
--- /dev/null
+++ b/config.schema.json
@@ -0,0 +1,16 @@
+{
+ "pluginAlias": "Homebridge-Bloomsky",
+ "pluginType": "platform",
+ "singular": true,
+ "schema": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "title": "Name",
+ "type": "string",
+ "required": true,
+ "default": "Homebridge Bloomsky Platform"
+ }
+ }
+ }
+}
diff --git a/index.js b/index.js
deleted file mode 100644
index 90ab7e5..0000000
--- a/index.js
+++ /dev/null
@@ -1,20 +0,0 @@
-"use strict";
-
-var Bloomsky = require("./lib/Bloomsky").Bloomsky;
-
-module.exports = function(homebridge) {
- console.log("homebridge API version: " + homebridge.version);
-
- // Accessory must be created from PlatformAccessory Constructor
- Bloomsky.Accessory = homebridge.platformAccessory;
-
- // Service and Characteristic are from hap-nodejs
- Bloomsky.Service = homebridge.hap.Service;
- Bloomsky.Characteristic = homebridge.hap.Characteristic;
- Bloomsky.Hap = homebridge.hap;
- Bloomsky.UUIDGen = homebridge.hap.uuid;
-
- // For platform plugin to be considered as dynamic platform plugin,
- // registerPlatform(pluginName, platformName, constructor, dynamic), dynamic must be true
- homebridge.registerPlatform("homebridge-bloomsky", "Bloomsky", Bloomsky, true);
-};
diff --git a/lib/AddressResponse.d.ts b/lib/AddressResponse.d.ts
deleted file mode 100644
index 26355f2..0000000
--- a/lib/AddressResponse.d.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-declare class AddressResponse {
- address: string;
- type: string;
-}
-export { AddressResponse };
diff --git a/lib/AddressResponse.js b/lib/AddressResponse.js
deleted file mode 100644
index c8ad2e5..0000000
--- a/lib/AddressResponse.js
+++ /dev/null
@@ -1,2 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
diff --git a/lib/Bloomsky.d.ts b/lib/Bloomsky.d.ts
deleted file mode 100644
index 022da7b..0000000
--- a/lib/Bloomsky.d.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-///
-import { FFMPEG } from "./Ffmpeg";
-import { API } from "./homebridge";
-import { PlatformAccessory } from "./PlatformAccessory";
-import { IStation } from "./Station";
-export { Bloomsky };
-export default class Bloomsky {
- static Accessory: PlatformAccessory;
- static Service: HAPNodeJS.Service;
- static Characteristic: HAPNodeJS.Characteristic;
- static Hap: HAPNodeJS.HAPNodeJS;
- static UUIDGen: HAPNodeJS.uuid;
- timeout: NodeJS.Timeout | undefined;
- accessories: PlatformAccessory[];
- log: (text: string) => void;
- private apiKey;
- private apiUrl;
- private vcodec;
- private api;
- private latestData;
- private debug;
- constructor(log: (text: string) => void, config: any, api: API);
- configureAccessory(accessory: PlatformAccessory): void;
- addAccessory(station: IStation): void;
- updateAccessory(station: IStation): void;
- removeAccessory(): void;
- temporaryFilenameForStationUuid(uuid: string): string;
- getFfmpegForStationWithUuid(uuid: string): FFMPEG;
- private updateData;
- private stationNeedsToBeRegistered;
- private updateExistingAccessories;
- private registerNewAccessories;
- private updateAccessoriesReachability;
-}
diff --git a/lib/Bloomsky.js b/lib/Bloomsky.js
deleted file mode 100644
index d0775f1..0000000
--- a/lib/Bloomsky.js
+++ /dev/null
@@ -1,411 +0,0 @@
-"use strict";
-var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
-};
-var __generator = (this && this.__generator) || function (thisArg, body) {
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
- function verb(n) { return function (v) { return step([n, v]); }; }
- function step(op) {
- if (f) throw new TypeError("Generator is already executing.");
- while (_) try {
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
- if (y = 0, t) op = [op[0] & 2, t.value];
- switch (op[0]) {
- case 0: case 1: t = op; break;
- case 4: _.label++; return { value: op[1], done: false };
- case 5: _.label++; y = op[1]; op = [0]; continue;
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
- default:
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
- if (t[2]) _.ops.pop();
- _.trys.pop(); continue;
- }
- op = body.call(thisArg, _);
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
- }
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-var fs = require("fs");
-var http = require("http");
-var Client = require("typed-rest-client");
-var Ffmpeg_1 = require("./Ffmpeg");
-var Bloomsky = /** @class */ (function () {
- // Platform constructor
- // config may be null
- // api may be null if launched from old homebridge version
- function Bloomsky(log, config, api) {
- if (Bloomsky.Accessory === undefined) {
- throw Error("Accessory undefined");
- }
- if (Bloomsky.Service === undefined) {
- throw Error("Service undefined");
- }
- if (Bloomsky.Characteristic === undefined) {
- throw Error("Characteristic undefined");
- }
- if (Bloomsky.Hap === undefined) {
- throw Error("Hap undefined");
- }
- if (Bloomsky.UUIDGen === undefined) {
- throw Error("UUIDGen undefined");
- }
- this.log = log;
- this.accessories = [];
- this.apiKey = config.apiKey;
- this.apiUrl = config.apiUrl || "https://api.bloomsky.com/api/skydata/";
- this.vcodec = config.vcodec || "libx264";
- this.latestData = [];
- this.debug = config.debug;
- this.log("Bloomsky Init");
- var platform = this;
- if (api) {
- // Save the API object as plugin needs to register new accessory via this object
- platform.api = api;
- // Listen to event "didFinishLaunching", this means homebridge already finished loading cached accessories.
- // Platform Plugin should only register new accessory that doesn't exist in homebridge after this event.
- // Or start discover new accessories.
- platform.api.on("didFinishLaunching", function () {
- platform.log("didFinishLaunching");
- platform.updateData().catch(function (clientError) { platform.log(clientError); });
- }.bind(this));
- platform.api.on("publishCameraAccessories", function () {
- platform.log("publishCameraAccessories");
- });
- }
- else {
- platform.updateData().catch(function (clientError) { platform.log(clientError); });
- }
- }
- // Function invoked when homebridge tries to restore cached accessory.
- // Developer can configure accessory here (like setup event handler).
- // Update current value.
- Bloomsky.prototype.configureAccessory = function (accessory) {
- if (this.debug) {
- this.log("configuring accessory... " + accessory.displayName);
- }
- var platform = this;
- var ffmpeg = this.getFfmpegForStationWithUuid(accessory.UUID);
- try {
- accessory.configureCameraSource(ffmpeg);
- }
- catch (_a) {
- accessory.cameraSource = ffmpeg;
- }
- for (var index in ffmpeg.services) {
- if (ffmpeg.hasOwnProperty(index)) {
- var service = ffmpeg.services[index];
- try {
- accessory.removeService(service);
- }
- catch (_b) {
- if (this.debug) {
- this.log("unable to remove existing camera service");
- }
- }
- finally {
- accessory.addService(service);
- if (this.debug) {
- this.log("added camera service: " + service.displayName);
- }
- }
- }
- }
- // Do not add any existing services... but this is a good place to add services to earlier registered accessories
- this.accessories.push(accessory);
- // Set the accessory to reachable if plugin can currently process the accessory,
- // otherwise set to false and update the reachability later by invoking
- // accessory.updateReachability()
- if (this.latestData != null && this.latestData.length > 0) {
- if (this.debug) {
- this.log("Configure Accessory " + accessory.displayName);
- }
- var stations = platform.latestData
- .filter(function (station) { return accessory.UUID === Bloomsky.UUIDGen.generate(station.DeviceID); });
- accessory.reachable = stations.length === 1 && stations[0] !== undefined;
- if (accessory.reachable) {
- this.updateAccessory(stations[0]);
- }
- }
- else {
- if (this.debug) {
- this.log("Can't Configure Accessory " + accessory.displayName);
- }
- accessory.reachable = false;
- }
- };
- // add accessory dynamically from outside event
- Bloomsky.prototype.addAccessory = function (station) {
- if (this.debug) {
- this.log("Add Accessory: " + station.DeviceID);
- }
- var uuid = Bloomsky.UUIDGen.generate(station.DeviceID);
- var newAccessory = new Bloomsky.Accessory(station.DeviceName, uuid, Bloomsky.Accessory.Categories.CAMERA);
- var cameraSource = this.getFfmpegForStationWithUuid(uuid);
- var countBefore = newAccessory.services.length;
- newAccessory.configureCameraSource(cameraSource);
- if (cameraSource.services.length === 0) {
- throw Error("Camera Control came without services...");
- }
- else {
- for (var _i = 0, _a = newAccessory.services; _i < _a.length; _i++) {
- var service = _a[_i];
- if (this.debug) {
- this.log(service.UUID + (service.subtype !== undefined ? "." + service.subtype : ""));
- }
- }
- }
- if (newAccessory.services.length <= countBefore
- || newAccessory.cameraSource !== cameraSource
- || newAccessory.services.length < cameraSource.services.length) {
- throw Error("Camera Control Service Registration failed... +" + (cameraSource.services.length - countBefore));
- }
- else {
- if (this.debug) {
- this.log("Registered " +
- (cameraSource.services.length - countBefore) +
- " Camera Control Services");
- }
- }
- newAccessory.addService(Bloomsky.Service.TemperatureSensor, "Temperature")
- .getCharacteristic(Bloomsky.Characteristic.CurrentTemperature).updateValue(station.Data.Temperature);
- newAccessory.addService(Bloomsky.Service.LightSensor, "Luminance")
- .getCharacteristic(Bloomsky.Characteristic.CurrentAmbientLightLevel).updateValue(station.Data.Luminance);
- newAccessory.addService(Bloomsky.Service.HumiditySensor, "Humidity")
- .getCharacteristic(Bloomsky.Characteristic.CurrentRelativeHumidity).updateValue(station.Data.Humidity);
- newAccessory.addService(Bloomsky.Service.MotionSensor, "Rain")
- .getCharacteristic(Bloomsky.Characteristic.MotionDetected).updateValue(station.Data.Rain);
- newAccessory.addService(Bloomsky.Service.OccupancySensor, "Night")
- .getCharacteristic(Bloomsky.Characteristic.OccupancyDetected).updateValue(station.Data.Night);
- // I only have a Sky 1 model so I can only make a guess about the battery level
- // for this specific model.
- if (station.Data.DeviceType === "SKY1") {
- // clamp battery level between 0 and 100
- var batteryLevel = Math.max(0, Math.min(100, (100 / 2600) * station.Data.Voltage));
- var batteryService = newAccessory.addService(Bloomsky.Service.BatteryService, "Battery");
- batteryService.getCharacteristic(Bloomsky.Characteristic.BatteryLevel).updateValue(batteryLevel);
- batteryService.getCharacteristic(Bloomsky.Characteristic.ChargingState).updateValue(2);
- batteryService.getCharacteristic(Bloomsky.Characteristic.StatusLowBattery).updateValue(batteryLevel < 20);
- }
- var informationService = newAccessory.getService(Bloomsky.Service.AccessoryInformation);
- if (!informationService) {
- informationService = newAccessory.addService(Bloomsky.Service.AccessoryInformation, station.DeviceName);
- }
- informationService.getCharacteristic(Bloomsky.Characteristic.Manufacturer).updateValue("Bloomsky");
- informationService.getCharacteristic(Bloomsky.Characteristic.Model).updateValue(station.Data.DeviceType);
- informationService.getCharacteristic(Bloomsky.Characteristic.SerialNumber).updateValue(station.DeviceID);
- informationService.getCharacteristic(Bloomsky.Characteristic.Identify).updateValue(false);
- informationService.getCharacteristic(Bloomsky.Characteristic.Name).updateValue(station.DeviceName);
- informationService.getCharacteristic(Bloomsky.Characteristic.FirmwareRevision).updateValue(station.Data.DeviceType);
- if (this.debug) {
- this.accessories.push(newAccessory);
- }
- this.log("new accessory pushed...");
- if (this.api !== undefined) {
- // https://github.com/nfarina/homebridge/wiki/Supporting-IP-Camera
- this.api.publishCameraAccessories("homebridge-bloomsky", this.accessories);
- }
- else {
- throw TypeError("this.api UNDEFINED!!!");
- }
- if (this.debug) {
- this.log("new accessory registered...");
- }
- if (this.debug) {
- var output = "";
- for (var property in newAccessory) {
- if (newAccessory.hasOwnProperty(property)) {
- output += property + ": " + newAccessory[property] + "; ";
- }
- }
- this.log(output);
- }
- };
- // add accessory dynamically from outside event
- Bloomsky.prototype.updateAccessory = function (station) {
- if (this.debug) {
- this.log("Update Accessory");
- }
- var platform = this;
- var stationUuid = Bloomsky.UUIDGen.generate(station.DeviceID);
- var accessory = platform.accessories
- .filter(function (anyAccessory) { return anyAccessory.UUID === stationUuid; })[0];
- accessory.getService(Bloomsky.Service.TemperatureSensor)
- .getCharacteristic(Bloomsky.Characteristic.CurrentTemperature).updateValue(station.Data.Temperature);
- accessory.getService(Bloomsky.Service.LightSensor)
- .getCharacteristic(Bloomsky.Characteristic.CurrentAmbientLightLevel).updateValue(station.Data.Luminance);
- accessory.getService(Bloomsky.Service.HumiditySensor)
- .getCharacteristic(Bloomsky.Characteristic.CurrentRelativeHumidity).updateValue(station.Data.Humidity);
- accessory.getService(Bloomsky.Service.MotionSensor)
- .getCharacteristic(Bloomsky.Characteristic.MotionDetected).updateValue(station.Data.Rain);
- accessory.getService(Bloomsky.Service.OccupancySensor)
- .getCharacteristic(Bloomsky.Characteristic.OccupancyDetected).updateValue(station.Data.Night);
- var informationService = accessory.getService(Bloomsky.Service.AccessoryInformation);
- informationService.getCharacteristic(Bloomsky.Characteristic.Manufacturer).updateValue("Bloomsky");
- informationService.getCharacteristic(Bloomsky.Characteristic.Model).updateValue(station.Data.DeviceType);
- informationService.getCharacteristic(Bloomsky.Characteristic.SerialNumber).updateValue(station.DeviceID);
- informationService.getCharacteristic(Bloomsky.Characteristic.Identify).updateValue(false);
- informationService.getCharacteristic(Bloomsky.Characteristic.Name).updateValue(station.DeviceName);
- informationService.getCharacteristic(Bloomsky.Characteristic.FirmwareRevision).updateValue(station.Data.DeviceType);
- // I only have a Sky 1 model so I can only make a guess about the battery level
- // for this specific model.
- if (station.Data.DeviceType === "SKY1") {
- // clamp battery level between 0 and 100
- var batteryLevel = Math.max(0, Math.min(100, (100 / 2600) * station.Data.Voltage));
- var batteryService = accessory.getService(Bloomsky.Service.BatteryService);
- batteryService.getCharacteristic(Bloomsky.Characteristic.BatteryLevel).updateValue(batteryLevel);
- batteryService.getCharacteristic(Bloomsky.Characteristic.ChargingState).updateValue(2);
- batteryService.getCharacteristic(Bloomsky.Characteristic.StatusLowBattery).updateValue(batteryLevel < 20);
- }
- var file = fs.createWriteStream(this.temporaryFilenameForStationUuid(accessory.UUID));
- file.on("finish", function () {
- file.close();
- if (platform.debug) {
- platform.log("temporary file updated...");
- }
- });
- http.get(station.Data.ImageURL, function (response) {
- response.pipe(file);
- platform.log("temporary file written");
- });
- };
- // remove accessory dynamically from outside event
- Bloomsky.prototype.removeAccessory = function () {
- if (this.debug) {
- this.log("Remove Accessory");
- }
- if (this.api !== undefined) {
- this.api.unregisterPlatformAccessories("homebridge-bloomsky", "Bloomsky", this.accessories);
- }
- this.accessories = [];
- };
- Bloomsky.prototype.temporaryFilenameForStationUuid = function (uuid) {
- return uuid + ".jpg";
- };
- Bloomsky.prototype.getFfmpegForStationWithUuid = function (uuid) {
- var filename = this.temporaryFilenameForStationUuid(uuid);
- var ffmpeg = new Ffmpeg_1.FFMPEG(Bloomsky.UUIDGen, Bloomsky.Hap, {
- name: uuid,
- videoConfig: {
- debug: this.debug,
- maxHeight: 640,
- maxStreams: 1,
- maxWidth: 640,
- source: "-loop 1 -i " + filename,
- vcodec: this.vcodec,
- },
- }, this.log, "ffmpeg", filename);
- return ffmpeg;
- };
- Bloomsky.prototype.updateData = function () {
- return __awaiter(this, void 0, void 0, function () {
- var platform_1, requestOptions, client, response, error;
- return __generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- if (!(this.apiKey === undefined)) return [3 /*break*/, 1];
- if (this.debug) {
- this.log("Skipping updating data...");
- }
- return [3 /*break*/, 3];
- case 1:
- platform_1 = this;
- requestOptions = {
- additionalHeaders: { Authorization: this.apiKey },
- };
- client = new Client.RestClient("NodeJS");
- if (platform_1.debug) {
- this.log("updateData");
- }
- return [4 /*yield*/, client.get(this.apiUrl + "?unit=intl", requestOptions).catch(function (clientError) {
- if (platform_1.debug) {
- platform_1.log(clientError);
- }
- })];
- case 2:
- response = _a.sent();
- error = response;
- if (error !== undefined && error.detail) {
- platform_1.log(error.detail);
- }
- else if (response != null) {
- if (response.result != null) {
- platform_1.latestData = response.result;
- }
- if (response != null && platform_1.latestData.length > 0) {
- if (platform_1.accessories.length > 0) {
- platform_1.updateExistingAccessories();
- }
- platform_1.registerNewAccessories();
- platform_1.updateAccessoriesReachability();
- }
- }
- platform_1.timeout = setTimeout(function () {
- platform_1.updateData().catch(function (clientError) { platform_1.log(clientError); });
- }.bind(platform_1), platform_1.debug ? 30000 : 150000); // 2.5 minutes, 10 seconds for debugging
- platform_1.timeout.unref();
- _a.label = 3;
- case 3: return [2 /*return*/];
- }
- });
- });
- };
- Bloomsky.prototype.stationNeedsToBeRegistered = function (station) {
- if (this.debug) {
- this.log("stationNeedsToBeRegistered: " + station);
- }
- var stationUuid = Bloomsky.UUIDGen.generate(station.DeviceID).valueOf();
- return this.accessories.filter(function (accessory) { return accessory.UUID.valueOf() === stationUuid; }).length === 0;
- };
- Bloomsky.prototype.updateExistingAccessories = function () {
- var _this = this;
- if (this.debug) {
- this.log("updateExistingAccessories");
- }
- var platform = this;
- if (this.debug) {
- this.log(platform.latestData.toString());
- }
- var registeredAccessories = platform.latestData.filter(function (station) { return !_this.stationNeedsToBeRegistered(station); });
- for (var i = 0, len = registeredAccessories.length; i < len; i++) {
- var station = registeredAccessories[i];
- platform.updateAccessory(station);
- }
- };
- Bloomsky.prototype.registerNewAccessories = function () {
- var _this = this;
- if (this.debug) {
- this.log("registerNewAccessories");
- }
- var platform = this;
- if (platform.latestData.length === 0) {
- return;
- }
- var unregisteredAccessories = platform.latestData.filter(function (station) { return _this.stationNeedsToBeRegistered(station); });
- for (var i = 0, len = unregisteredAccessories.length; i < len; i++) {
- platform.addAccessory(unregisteredAccessories[i]);
- }
- };
- Bloomsky.prototype.updateAccessoriesReachability = function () {
- if (this.debug) {
- this.log("Update Reachability");
- }
- for (var _i = 0, _a = this.accessories; _i < _a.length; _i++) {
- var accessory = _a[_i];
- // accessory.updateReachability(this.latestData != null); // Reachability update is no longer being supported
- accessory.reachable = this.latestData != null;
- }
- };
- return Bloomsky;
-}());
-exports.Bloomsky = Bloomsky;
-exports.default = Bloomsky;
diff --git a/lib/Ffmpeg.d.ts b/lib/Ffmpeg.d.ts
deleted file mode 100644
index ff7fe46..0000000
--- a/lib/Ffmpeg.d.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import { SessionInfo } from "./Session";
-import { SnapshotRequest } from "./SnapshotRequest";
-import { StreamController } from "./StreamController";
-import { StreamRequest } from "./StreamRequest";
-import { StreamResponse } from "./StreamResponse";
-export default class FFMPEG implements HAPNodeJS.CameraSource {
- streamController: any;
- streamControllers: StreamController[];
- cameraControllers: any[];
- pendingSessions: SessionInfo[];
- ongoingSessions: SessionInfo[];
- services: HAPNodeJS.Service[];
- name: string;
- uuid: HAPNodeJS.uuid;
- service: any;
- private log;
- private vcodec;
- private videoProcessor;
- private fps;
- private maxBitrate;
- private debug;
- private ffmpegSource;
- private ffmpegImageSource;
- private stillImageFilename;
- private sharp;
- constructor(uuidfunc: HAPNodeJS.uuid, hap: any, cameraConfig: any, log: (text: string) => void, videoProcessor: string, stillImageFilename: string);
- handleCloseConnection(connectionID: any): void;
- handleSnapshotRequest(request: SnapshotRequest, callback: (error: any, Buffer: any) => any): void;
- prepareStream(request: StreamRequest, callback: (response: StreamResponse) => void): void;
- handleStreamRequest(request: StreamRequest): void;
- createCameraControlService(): void;
- private _createStreamControllers;
-}
-export { FFMPEG };
diff --git a/lib/Ffmpeg.js b/lib/Ffmpeg.js
deleted file mode 100644
index e3e36d6..0000000
--- a/lib/Ffmpeg.js
+++ /dev/null
@@ -1,368 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-var child_process_1 = require("child_process");
-var crypto = require("crypto");
-var ip = require("ip");
-var Jimp = require("jimp");
-var optional = require("optional");
-var FFMPEG = /** @class */ (function () {
- function FFMPEG(uuidfunc, hap, cameraConfig, log, videoProcessor, stillImageFilename) {
- this.streamControllers = [];
- this.cameraControllers = [];
- this.pendingSessions = [];
- this.ongoingSessions = [];
- this.services = [];
- if (uuidfunc === undefined) {
- throw Error("UUIDGen undefined");
- }
- if (hap.Service === undefined) {
- throw Error("Service undefined");
- }
- if (log === undefined) {
- throw Error("Log undefined");
- }
- if (hap.StreamController === undefined) {
- throw Error("StreamController undefined");
- }
- if (cameraConfig.videoConfig.debug) {
- log("FFMPEG constructor");
- }
- this.sharp = optional("sharp");
- this.uuid = uuidfunc;
- this.service = hap.Service;
- this.log = log;
- this.streamController = hap.StreamController;
- var ffmpegOpt = cameraConfig.videoConfig;
- this.name = cameraConfig.name;
- this.vcodec = ffmpegOpt.vcodec;
- this.videoProcessor = videoProcessor || "ffmpeg";
- this.fps = ffmpegOpt.maxFPS || 10;
- this.maxBitrate = ffmpegOpt.maxBitrate || 300;
- this.debug = ffmpegOpt.debug || false;
- if (this.debug) {
- log("Debug loggin enabled...");
- }
- if (!ffmpegOpt.source) {
- throw new Error("Missing source for camera.");
- }
- this.ffmpegSource = ffmpegOpt.source;
- this.ffmpegImageSource = ffmpegOpt.stillImageSource;
- this.stillImageFilename = stillImageFilename;
- var numberOfStreams = ffmpegOpt.maxStreams || 2;
- var options = {
- audio: {
- codecs: [
- {
- samplerate: 24,
- type: "OPUS",
- },
- {
- samplerate: 16,
- type: "AAC-eld",
- },
- ],
- comfort_noise: false,
- },
- disable_audio_proxy: false,
- proxy: false,
- srtp: true,
- video: {
- codec: {
- levels: [0, 1, 2],
- profiles: [0, 1, 2],
- },
- resolutions: [
- [640, 640, 30],
- [640, 640, 15],
- [640, 480, 30],
- [640, 480, 15],
- [640, 360, 30],
- [640, 360, 15],
- [480, 360, 30],
- [480, 360, 15],
- [480, 270, 30],
- [480, 270, 15],
- [320, 240, 30],
- [320, 240, 15],
- [320, 180, 30],
- [320, 180, 15],
- ],
- },
- };
- this.createCameraControlService();
- if (this.cameraControllers.length < 1) {
- throw Error("Did not push camera controller...");
- }
- this._createStreamControllers(numberOfStreams, options);
- }
- FFMPEG.prototype.handleCloseConnection = function (connectionID) {
- if (this.debug) {
- this.log("closing connection for " + this.streamControllers.length + " stream(s)...");
- }
- this.streamControllers.forEach(function (controller) {
- controller.handleCloseConnection(connectionID);
- });
- };
- // Image request: {width: number, height: number}
- // Please override this and invoke callback(error, image buffer) when the snapshot is ready
- FFMPEG.prototype.handleSnapshotRequest = function (request, callback) {
- var _this = this;
- var dir = __dirname;
- if (dir.endsWith("/lib")) {
- dir = dir.replace("/lib", "");
- }
- var path = dir + "/" + this.stillImageFilename;
- if (this.debug) {
- this.log("Delivering snapshot at path: " + path);
- }
- if (this.sharp == null) {
- if (this.debug) {
- this.log("... using Jimp");
- }
- Jimp.read(path)
- .then(function (image) {
- image
- .resize(request.width, Jimp.AUTO)
- .crop(0, (image.bitmap.height - request.height) / 2, request.width, request.height)
- .quality(90)
- .getBuffer(Jimp.MIME_JPEG, function (error, buffer) {
- if (error !== null) {
- if (_this.debug) {
- _this.log("Error getting buffer for snapshot: " + error);
- }
- callback(error, undefined);
- }
- else {
- callback(undefined, buffer);
- }
- });
- })
- .catch(function (error) {
- if (_this.debug) {
- _this.log("Error reading snapshot at path: " + error);
- }
- callback(error, undefined);
- });
- }
- else {
- if (this.debug) {
- this.log("... using Sharp");
- }
- this.sharp(path)
- .resize(request.width, request.height)
- .toBuffer()
- .then(function (data) { return callback(undefined, data); })
- .catch(function (error) { return callback(error, undefined); });
- }
- };
- FFMPEG.prototype.prepareStream = function (request, callback) {
- if (this.debug) {
- this.log("prepareStream");
- }
- var sessionInfo = {};
- var sessionID = request.sessionID;
- var targetAddress = request.targetAddress;
- sessionInfo.address = targetAddress;
- var response = {};
- var videoInfo = request.video;
- if (videoInfo) {
- var targetPort = videoInfo.port;
- var srtpKey = videoInfo.srtp_key;
- var srtpSalt = videoInfo.srtp_salt;
- if (this.debug) {
- this.log("srtpKey.length=" + srtpKey.length + ", srtpSalt.length=" + srtpSalt.length);
- }
- // SSRC is a 32 bit integer that is unique per stream
- var ssrcSource = crypto.randomBytes(4);
- ssrcSource[0] = 0;
- var ssrc = ssrcSource.readInt32BE(0, true);
- this.fps = videoInfo.fps || this.fps;
- var videoResp = {
- fps: videoInfo.fps,
- height: videoInfo.height,
- max_bit_rate: videoInfo.max_bit_rate,
- port: targetPort,
- srtp_key: srtpKey,
- srtp_salt: srtpSalt,
- ssrc: ssrc,
- width: videoInfo.width,
- };
- response.video = videoResp;
- sessionInfo.video_port = targetPort;
- sessionInfo.video_srtp = Buffer.concat([srtpKey, srtpSalt]);
- sessionInfo.video_ssrc = ssrc;
- }
- var audioInfo = request.audio;
- if (audioInfo) {
- var targetPort = audioInfo.port;
- var srtpKey = audioInfo.srtp_key;
- var srtpSalt = audioInfo.srtp_salt;
- // SSRC is a 32 bit integer that is unique per stream
- var ssrcSource = crypto.randomBytes(4);
- ssrcSource[0] = 0;
- var ssrc = ssrcSource.readInt32BE(0, true);
- var audioResp = {
- port: targetPort,
- srtp_key: srtpKey,
- srtp_salt: srtpSalt,
- ssrc: ssrc,
- };
- response.audio = audioResp;
- sessionInfo.audio_port = targetPort;
- sessionInfo.audio_port = Buffer.concat([srtpKey, srtpSalt]);
- sessionInfo.audio_ssrc = ssrc;
- }
- var currentAddress = ip.address();
- var addressResp = {
- address: currentAddress,
- type: "v6",
- };
- if (ip.isV4Format(currentAddress)) {
- addressResp.type = "v4";
- }
- response.address = addressResp;
- this.pendingSessions[this.uuid.unparse(sessionID, 0)] = sessionInfo;
- callback(response);
- };
- FFMPEG.prototype.handleStreamRequest = function (request) {
- var _this = this;
- if (this.debug) {
- this.log("handleStreamRequest");
- }
- var platform = this;
- var sessionID = request.sessionID;
- var requestType = request.type;
- if (sessionID) {
- var sessionIdentifier = this.uuid.unparse(sessionID, 0);
- var sessionInfo = this.pendingSessions[sessionIdentifier];
- if (requestType === "start" && sessionInfo) {
- var width = 640;
- var height = 640;
- var fps = this.fps || 15;
- var vbitrate = this.maxBitrate;
- var vcodec = this.vcodec || "libx264";
- var packetsize = 1316; // 188 376
- var videoInfo = request.video;
- if (videoInfo) {
- width = videoInfo.width;
- height = videoInfo.height;
- var expectedFPS = videoInfo.fps;
- if (expectedFPS < fps) {
- fps = expectedFPS;
- }
- if (videoInfo.max_bit_rate < vbitrate) {
- vbitrate = videoInfo.max_bit_rate;
- }
- }
- var targetAddress = sessionInfo.address;
- var targetVideoPort = sessionInfo.video_port;
- var videoKey = sessionInfo.video_srtp;
- var videoSsrc = sessionInfo.video_ssrc;
- var ffmpegCommand = "-threads 0 -an -re -r 1" +
- " " + this.ffmpegSource +
- " -vf fps=" + fps +
- " -map 0:0" +
- " -f mp4 -vcodec " + vcodec +
- " -preset faster" +
- " -pix_fmt yuv420p -an" +
- " -r " + fps +
- " -g " + (fps * 2) +
- " -movflags frag_keyframe+empty_moov -tune stillimage" +
- " -b:v " + vbitrate + "k" +
- " -bufsize " + vbitrate + "k" +
- " -maxrate " + vbitrate + "k" +
- " -payload_type 99" +
- " -ssrc " + videoSsrc +
- " -f rtp" +
- " -srtp_out_suite AES_CM_128_HMAC_SHA1_80" +
- " -srtp_out_params " + videoKey.toString("base64") +
- " srtp://" + targetAddress + ":" + targetVideoPort +
- "?rtcpport=" + targetVideoPort +
- "&localrtcpport=" + targetVideoPort +
- "&pkt_size=" + packetsize;
- var ffmpeg = child_process_1.spawn(this.videoProcessor, ffmpegCommand.split(" "), { env: process.env });
- this.log("Start streaming video from " + this.name + " with " + width + "x" + height + "@" + vbitrate + "kBit");
- if (this.debug) {
- this.log("ffmpeg " + ffmpegCommand);
- }
- ffmpeg.stdout.on("data", function (data) {
- // Do not log to the console if debugging is turned off
- if (platform.debug) {
- platform.log(data.toString());
- }
- });
- // Always setup hook on stderr.
- // Without this streaming stops within one to two minutes.
- ffmpeg.stderr.on("data", function (data) {
- // Do not log to the console if debugging is turned off
- if (platform.debug) {
- platform.log(data.toString());
- }
- });
- ffmpeg.on("error", function (error) {
- platform.log("An error occurs while making stream request");
- if (platform.debug) {
- platform.log(error);
- }
- });
- ffmpeg.on("close", function (code) {
- if (code == null || code === 0 || code === 255) {
- platform.log("Stopped streaming");
- }
- else {
- platform.log("ERROR: FFmpeg exited with code " + code);
- for (var _i = 0, _a = _this.streamControllers; _i < _a.length; _i++) {
- var controller = _a[_i];
- if (controller.sessionIdentifier === sessionID) {
- controller.forceStop();
- }
- }
- }
- });
- this.ongoingSessions[sessionIdentifier] = ffmpeg;
- delete this.pendingSessions[sessionIdentifier];
- }
- else if (requestType === "stop") {
- var ffmpegProcess = this.ongoingSessions[sessionIdentifier];
- if (ffmpegProcess) {
- ffmpegProcess.kill("SIGTERM");
- }
- delete this.ongoingSessions[sessionIdentifier];
- }
- }
- };
- FFMPEG.prototype.createCameraControlService = function () {
- if (this.service.CameraControl === undefined) {
- throw Error("CameraControl undefined");
- }
- if (this.debug) {
- this.log("createCameraControlService");
- }
- var controlService = new this.service.CameraControl();
- this.services.push(controlService);
- this.cameraControllers.push(controlService);
- if (this.services.filter(function (s) { return s === controlService; }).length < 1) {
- throw Error("Failed to register Camera Control Service...");
- }
- };
- // Private
- FFMPEG.prototype._createStreamControllers = function (maxStreams, options) {
- if (this.debug) {
- this.log("_createStreamControllers");
- }
- for (var i = 0; i < maxStreams; i++) {
- if (this.debug) {
- this.log("adding StreamController #" + (i + 1) + "/" + maxStreams);
- }
- var streamController = new this.streamController(i, options, this);
- this.services.push(streamController.service);
- this.streamControllers.push(streamController);
- }
- if (this.debug) {
- this.log(this.streamControllers.length + "/" + maxStreams + " stream controllers registered");
- }
- };
- return FFMPEG;
-}());
-exports.FFMPEG = FFMPEG;
-exports.default = FFMPEG;
diff --git a/lib/PlatformAccessory.d.ts b/lib/PlatformAccessory.d.ts
deleted file mode 100644
index d1ac970..0000000
--- a/lib/PlatformAccessory.d.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-declare interface PlatformAccessory extends HAPNodeJS.Accessory {
- displayName: string;
- username: string;
- pincode: string;
- UUID: string;
- aid: string;
- bridged: boolean;
- bridgedAccessories: HAPNodeJS.Accessory[];
- reachable: boolean;
- category: HAPNodeJS.Accessory.Categories;
- services: HAPNodeJS.Service[];
- cameraSource: HAPNodeJS.CameraSource;
- Categories: typeof HAPNodeJS.Accessory.Categories;
- new (displayName: string, category: string): PlatformAccessory;
- new (displayName: string, uuid: string, subtype: number): PlatformAccessory;
- addService(service: HAPNodeJS.Service | Function): HAPNodeJS.Service;
- addService(service: HAPNodeJS.Service, displayName: string): HAPNodeJS.Service;
- removeService(service: HAPNodeJS.Service): HAPNodeJS.Service;
- removeService(service: HAPNodeJS.Service, displayName: string): HAPNodeJS.Service;
- getService(service: HAPNodeJS.Service): HAPNodeJS.Service;
- getService(name: string): HAPNodeJS.Service;
- updateReachability(reachable: boolean): void;
- addBridgedAccessory(accessory: HAPNodeJS.Accessory, deferUpdate: boolean): HAPNodeJS.Accessory;
- addBridgedAccessories(accessories: HAPNodeJS.Accessory[]): void;
- removeBridgedAccessory(accessory: HAPNodeJS.Accessory, deferUpdate: boolean): void;
- removeBridgedAccessories(accessories: HAPNodeJS.Accessory[]): void;
- getCharacteristicByIID(iid: string): HAPNodeJS.Characteristic;
- getBridgedAccessoryByAID(aid: string): HAPNodeJS.Accessory;
- findCharacteristic(aid: string, iid: string): HAPNodeJS.Accessory;
- configureCameraSource(cameraSource: HAPNodeJS.CameraSource): void;
- toHAP(opt: any): JSON;
- publish(info: HAPNodeJS.PublishInfo, allowInsecureRequest: boolean): void;
- destroy(): void;
- setupURI(): string;
-}
-export { PlatformAccessory };
diff --git a/lib/PlatformAccessory.js b/lib/PlatformAccessory.js
deleted file mode 100644
index c8ad2e5..0000000
--- a/lib/PlatformAccessory.js
+++ /dev/null
@@ -1,2 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
diff --git a/lib/Session.d.ts b/lib/Session.d.ts
deleted file mode 100644
index 8d165cb..0000000
--- a/lib/Session.d.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-///
-declare class SessionInfo {
- address: any;
- video_port: any;
- video_srtp: Buffer;
- video_ssrc: number;
- audio_port: any;
- audio_ssrc: number;
-}
-export { SessionInfo };
diff --git a/lib/Session.js b/lib/Session.js
deleted file mode 100644
index c8ad2e5..0000000
--- a/lib/Session.js
+++ /dev/null
@@ -1,2 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
diff --git a/lib/SnapshotRequest.d.ts b/lib/SnapshotRequest.d.ts
deleted file mode 100644
index fb89aba..0000000
--- a/lib/SnapshotRequest.d.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-declare class SnapshotRequest {
- width: number;
- height: number;
-}
-export { SnapshotRequest };
diff --git a/lib/SnapshotRequest.js b/lib/SnapshotRequest.js
deleted file mode 100644
index c8ad2e5..0000000
--- a/lib/SnapshotRequest.js
+++ /dev/null
@@ -1,2 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
diff --git a/lib/Station.d.ts b/lib/Station.d.ts
deleted file mode 100644
index f94605e..0000000
--- a/lib/Station.d.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-///
-import { URL } from "url";
-export declare interface IStation {
- DeviceID: string;
- DeviceName: string;
- Data: IStationData;
-}
-export declare interface IStationData {
- Temperature: number;
- Luminance: number;
- Humidity: number;
- Rain: boolean;
- Night: boolean;
- Voltage: number;
- DeviceType: string;
- ImageURL: URL;
-}
diff --git a/lib/Station.js b/lib/Station.js
deleted file mode 100644
index c8ad2e5..0000000
--- a/lib/Station.js
+++ /dev/null
@@ -1,2 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
diff --git a/lib/StreamController.d.ts b/lib/StreamController.d.ts
deleted file mode 100644
index e5606c9..0000000
--- a/lib/StreamController.d.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-declare class StreamController {
- service: HAPNodeJS.Service;
- sessionIdentifier: any;
- constructor(identifier: any, options: any, cameraSource: HAPNodeJS.CameraSource);
- forceStop(): void;
- handleCloseConnection(connectionID: any): void;
-}
-export { StreamController };
diff --git a/lib/StreamController.js b/lib/StreamController.js
deleted file mode 100644
index c8ad2e5..0000000
--- a/lib/StreamController.js
+++ /dev/null
@@ -1,2 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
diff --git a/lib/StreamRequest.d.ts b/lib/StreamRequest.d.ts
deleted file mode 100644
index 237fe0b..0000000
--- a/lib/StreamRequest.d.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { AudioResponse } from "./AudioResponse";
-import { VideoResponse } from "./VideoResponse";
-declare class StreamRequest {
- sessionID: any;
- type: any;
- video: VideoResponse;
- targetAddress: string;
- audio: AudioResponse | undefined;
-}
-export { StreamRequest };
diff --git a/lib/StreamRequest.js b/lib/StreamRequest.js
deleted file mode 100644
index c8ad2e5..0000000
--- a/lib/StreamRequest.js
+++ /dev/null
@@ -1,2 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
diff --git a/lib/StreamResponse.d.ts b/lib/StreamResponse.d.ts
deleted file mode 100644
index 5929628..0000000
--- a/lib/StreamResponse.d.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { AddressResponse } from "./AddressResponse";
-import { AudioResponse } from "./AudioResponse";
-import { VideoResponse } from "./VideoResponse";
-declare class StreamResponse {
- video: VideoResponse;
- audio: AudioResponse;
- address: AddressResponse;
-}
-export { StreamResponse };
diff --git a/lib/StreamResponse.js b/lib/StreamResponse.js
deleted file mode 100644
index c8ad2e5..0000000
--- a/lib/StreamResponse.js
+++ /dev/null
@@ -1,2 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
diff --git a/nodemon.json b/nodemon.json
new file mode 100644
index 0000000..43d9a23
--- /dev/null
+++ b/nodemon.json
@@ -0,0 +1,9 @@
+{
+ "watch": [
+ "src"
+ ],
+ "ext": "ts",
+ "ignore": [],
+ "exec": "tsc && homebridge -I -D",
+ "signal": "SIGTERM"
+}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index cfffe47..f66ab12 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,362 +1,266 @@
{
"name": "homebridge-bloomsky",
- "version": "1.1.10",
+ "version": "1.2.0-alpha.1",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
- "@babel/polyfill": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.0.0.tgz",
- "integrity": "sha512-dnrMRkyyr74CRelJwvgnnSUDh2ge2NCTyHVwpOdvRMHtJUyxLtMAfhBN3s64pY41zdw0kgiLPh6S20eb1NcX6Q==",
- "requires": {
- "core-js": "^2.5.7",
- "regenerator-runtime": "^0.11.1"
- }
- },
- "@jimp/bmp": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.5.4.tgz",
- "integrity": "sha512-P/ezH1FuoM3FwS0Dm2ZGkph4x5/rPBzFLEZor7KQkmGUnYEIEG4o0BUcAWFmJOp2HgzbT6O2SfrpJNBOcVACzQ==",
+ "@babel/code-frame": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
+ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
+ "dev": true,
"requires": {
- "@jimp/utils": "^0.5.0",
- "bmp-js": "^0.1.0",
- "core-js": "^2.5.7"
+ "@babel/highlight": "^7.8.3"
}
},
- "@jimp/core": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.5.4.tgz",
- "integrity": "sha512-n3uvHy2ndUKItmbhnRO8xmU8J6KR+v6CQxO9sbeUDpSc3VXc1PkqrA8ZsCVFCjnDFcGBXL+MJeCTyQzq5W9Crw==",
- "requires": {
- "@jimp/utils": "^0.5.0",
- "any-base": "^1.1.0",
- "buffer": "^5.2.0",
- "core-js": "^2.5.7",
- "exif-parser": "^0.1.12",
- "file-type": "^9.0.0",
- "load-bmfont": "^1.3.1",
- "mkdirp": "0.5.1",
- "phin": "^2.9.1",
- "pixelmatch": "^4.0.2",
- "tinycolor2": "^1.4.1"
- }
+ "@babel/helper-validator-identifier": {
+ "version": "7.9.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz",
+ "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==",
+ "dev": true
},
- "@jimp/custom": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.5.4.tgz",
- "integrity": "sha512-tLfyJoyouDl2J3RPFGfDzTtE+4S8ljqJUmLzy/cmx1n7+xS5TpLPdPskp7UaeAfNTqdF4CNAm94KYoxTZdj2mg==",
+ "@babel/highlight": {
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz",
+ "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==",
+ "dev": true,
"requires": {
- "@jimp/core": "^0.5.4",
- "core-js": "^2.5.7"
+ "@babel/helper-validator-identifier": "^7.9.0",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
}
},
- "@jimp/gif": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.5.0.tgz",
- "integrity": "sha512-HVB4c7b8r/yCpjhCjVNPRFLuujTav5UPmcQcFJjU6aIxmne6e29rAjRJEv3UMamHDGSu/96PzOsPZBO5U+ZGww==",
- "requires": {
- "@jimp/utils": "^0.5.0",
- "core-js": "^2.5.7",
- "omggif": "^1.0.9"
- }
+ "@sindresorhus/is": {
+ "version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
+ "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==",
+ "dev": true
},
- "@jimp/jpeg": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.5.4.tgz",
- "integrity": "sha512-YaPWm+YSGCThNE/jLMckM3Qs6uaMxd/VsHOnEaqu5tGA4GFbfVaWHjKqkNGAFuiNV+HdgKlNcCOF3of+elvzqQ==",
+ "@szmarczak/http-timer": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
+ "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==",
+ "dev": true,
"requires": {
- "@jimp/utils": "^0.5.0",
- "core-js": "^2.5.7",
- "jpeg-js": "^0.3.4"
+ "defer-to-connect": "^1.0.1"
}
},
- "@jimp/plugin-blit": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.5.4.tgz",
- "integrity": "sha512-WqDYOugv76hF1wnKy7+xPGf9PUbcm9vPW28/jHWn1hjbb2GnusJ2fVEFad76J/1SPfhrQ2Uebf2QCWJuLmOqZg==",
- "requires": {
- "@jimp/utils": "^0.5.0",
- "core-js": "^2.5.7"
- }
+ "@types/chai": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.11.tgz",
+ "integrity": "sha512-t7uW6eFafjO+qJ3BIV2gGUyZs27egcNRkUdalkud+Qa3+kg//f129iuOFivHDXQ+vnU3fDXuwgv0cqMCbcE8sw==",
+ "dev": true
},
- "@jimp/plugin-blur": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.5.0.tgz",
- "integrity": "sha512-5k0PXCA1RTJdITL7yMAyZ5tGQjKLHqFvwdXj/PCoBo5PuMyr0x6qfxmQEySixGk/ZHdDxMi80vYxHdKHjNNgjg==",
- "requires": {
- "@jimp/utils": "^0.5.0",
- "core-js": "^2.5.7"
- }
+ "@types/color-name": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
+ "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
+ "dev": true
},
- "@jimp/plugin-color": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.5.5.tgz",
- "integrity": "sha512-hWeOqNCmLguGYLhSvBrpfCvlijsMEVaLZAOod62s1rzWnujozyKOzm2eZe+W3To6mHbp5RGJNVrIwHBWMab4ug==",
- "requires": {
- "@jimp/utils": "^0.5.0",
- "core-js": "^2.5.7",
- "tinycolor2": "^1.4.1"
- }
+ "@types/debug": {
+ "version": "0.0.31",
+ "resolved": "https://registry.npmjs.org/@types/debug/-/debug-0.0.31.tgz",
+ "integrity": "sha512-LS1MCPaQKqspg7FvexuhmDbWUhE2yIJ+4AgVIyObfc06/UKZ8REgxGNjZc82wPLWmbeOm7S+gSsLgo75TanG4A==",
+ "dev": true
},
- "@jimp/plugin-contain": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.5.4.tgz",
- "integrity": "sha512-8YJh4FI3S69unri0nJsWeqVLeVGA77N2R0Ws16iSuCCD/5UnWd9FeWRrSbKuidBG6TdMBaG2KUqSYZeHeH9GOQ==",
- "requires": {
- "@jimp/utils": "^0.5.0",
- "core-js": "^2.5.7"
- }
+ "@types/eslint-visitor-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
+ "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==",
+ "dev": true
},
- "@jimp/plugin-cover": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.5.4.tgz",
- "integrity": "sha512-2Rur7b44WiDDgizUI2M2uYWc1RmfhU5KjKS1xXruobjQ0tXkf5xlrPXSushq0hB6Ne0Ss6wv0+/6eQ8WeGHU2w==",
+ "@types/ip": {
+ "version": "0.0.31",
+ "resolved": "https://registry.npmjs.org/@types/ip/-/ip-0.0.31.tgz",
+ "integrity": "sha512-oYk8aalgfCt7XfEu66Sjwz/aQjfRtQkjNSXwrUGqyRoQbOymAc156fUNTwn1cSCEEwuPPzMy7fGPmKcFLoaIkA==",
+ "dev": true,
"requires": {
- "@jimp/utils": "^0.5.0",
- "core-js": "^2.5.7"
+ "@types/node": "*"
}
},
- "@jimp/plugin-crop": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.5.4.tgz",
- "integrity": "sha512-6t0rqn4VazquGk48tO6hFBrQ+nkvC+A1RnR6UM/m8ZtG2/yjpwF0MXcpgJI1Fb+a4Ug7BY1fu2GPcZOhnAVK/g==",
- "requires": {
- "@jimp/utils": "^0.5.0",
- "core-js": "^2.5.7"
- }
+ "@types/json-schema": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz",
+ "integrity": "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==",
+ "dev": true
},
- "@jimp/plugin-displace": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.5.0.tgz",
- "integrity": "sha512-Bec7SQvnmKia4hOXEDjeNVx7vo/1bWqjuV6NO8xbNQcAO3gaCl91c9FjMDhsfAVb0Ou6imhbIuFPrLxorXsecQ==",
- "requires": {
- "@jimp/utils": "^0.5.0",
- "core-js": "^2.5.7"
- }
+ "@types/node": {
+ "version": "14.0.1",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.1.tgz",
+ "integrity": "sha512-FAYBGwC+W6F9+huFIDtn43cpy7+SzG+atzRiTfdp3inUKL2hXnd4rG8hylJLIh4+hqrQy1P17kvJByE/z825hA==",
+ "dev": true
},
- "@jimp/plugin-dither": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.5.0.tgz",
- "integrity": "sha512-We2WJQsD/Lm8oqBFp/vUv9/5r2avyenL+wNNu/s2b1HqA5O4sPGrjHy9K6vIov0NroQGCQ3bNznLkTmjiHKBcg==",
+ "@typescript-eslint/eslint-plugin": {
+ "version": "2.34.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz",
+ "integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==",
+ "dev": true,
"requires": {
- "@jimp/utils": "^0.5.0",
- "core-js": "^2.5.7"
+ "@typescript-eslint/experimental-utils": "2.34.0",
+ "functional-red-black-tree": "^1.0.1",
+ "regexpp": "^3.0.0",
+ "tsutils": "^3.17.1"
}
},
- "@jimp/plugin-flip": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.5.0.tgz",
- "integrity": "sha512-D/ehBQxLMNR7oNd80KXo4tnSET5zEm5mR70khYOTtTlfti/DlLp3qOdjPOzfLyAdqO7Ly4qCaXrIsnia+pfPrA==",
+ "@typescript-eslint/experimental-utils": {
+ "version": "2.34.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz",
+ "integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==",
+ "dev": true,
"requires": {
- "@jimp/utils": "^0.5.0",
- "core-js": "^2.5.7"
+ "@types/json-schema": "^7.0.3",
+ "@typescript-eslint/typescript-estree": "2.34.0",
+ "eslint-scope": "^5.0.0",
+ "eslint-utils": "^2.0.0"
}
},
- "@jimp/plugin-gaussian": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.5.0.tgz",
- "integrity": "sha512-Ln4kgxblv0/YzLBDb/J8DYPLhDzKH87Y8yHh5UKv3H+LPKnLaEG3L4iKTE9ivvdocnjmrtTFMYcWv2ERSPeHcg==",
+ "@typescript-eslint/parser": {
+ "version": "2.34.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz",
+ "integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==",
+ "dev": true,
"requires": {
- "@jimp/utils": "^0.5.0",
- "core-js": "^2.5.7"
+ "@types/eslint-visitor-keys": "^1.0.0",
+ "@typescript-eslint/experimental-utils": "2.34.0",
+ "@typescript-eslint/typescript-estree": "2.34.0",
+ "eslint-visitor-keys": "^1.1.0"
}
},
- "@jimp/plugin-invert": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.5.0.tgz",
- "integrity": "sha512-/vyKeIi3T7puf+8ruWovTjzDC585EnTwJ+lGOOUYiNPsdn4JDFe1B3xd+Ayv9aCQbXDIlPElZaM9vd/+wqDiIQ==",
+ "@typescript-eslint/typescript-estree": {
+ "version": "2.34.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz",
+ "integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==",
+ "dev": true,
"requires": {
- "@jimp/utils": "^0.5.0",
- "core-js": "^2.5.7"
+ "debug": "^4.1.1",
+ "eslint-visitor-keys": "^1.1.0",
+ "glob": "^7.1.6",
+ "is-glob": "^4.0.1",
+ "lodash": "^4.17.15",
+ "semver": "^7.3.2",
+ "tsutils": "^3.17.1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.3.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
+ "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
+ "dev": true
+ }
}
},
- "@jimp/plugin-mask": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.5.4.tgz",
- "integrity": "sha512-mUJ04pCrUWaJGXPjgoVbzhIQB8cVobj2ZEFlGO3BEAjyylYMrdJlNlsER8dd7UuJ2L/a4ocWtFDdsnuicnBghQ==",
- "requires": {
- "@jimp/utils": "^0.5.0",
- "core-js": "^2.5.7"
- }
+ "abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+ "dev": true
},
- "@jimp/plugin-normalize": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.5.4.tgz",
- "integrity": "sha512-Q5W0oEz9wxsjuhvHAJynI/OqXZcmqEAuRONQId7Aw5ulCXSOg9C4y2a67EO7aZAt55T+zMVxI9UpVUpzVvO6hw==",
- "requires": {
- "@jimp/utils": "^0.5.0",
- "core-js": "^2.5.7"
- }
+ "acorn": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.2.0.tgz",
+ "integrity": "sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ==",
+ "dev": true
},
- "@jimp/plugin-print": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.5.4.tgz",
- "integrity": "sha512-DOZr5TY9WyMWFBD37oz7KpTEBVioFIHQF/gH5b3O5jjFyj4JPMkw7k3kVBve9lIrzIYrvLqe0wH59vyAwpeEFg==",
- "requires": {
- "@jimp/utils": "^0.5.0",
- "core-js": "^2.5.7",
- "load-bmfont": "^1.4.0"
- }
+ "acorn-jsx": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz",
+ "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==",
+ "dev": true
},
- "@jimp/plugin-resize": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.5.4.tgz",
- "integrity": "sha512-lXNprNAT0QY1D1vG/1x6urUTlWuZe2dfL29P81ApW2Yfcio471+oqo45moX5FLS0q24xU600g7cHGf2/TzqSfA==",
+ "ajv": {
+ "version": "6.12.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
+ "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==",
+ "dev": true,
"requires": {
- "@jimp/utils": "^0.5.0",
- "core-js": "^2.5.7"
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
}
},
- "@jimp/plugin-rotate": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.5.4.tgz",
- "integrity": "sha512-SIdUpMc8clObMchy8TnjgHgcXEQM992z5KavgiuOnCuBlsmSHtE3MrXTOyMW0Dn3gqapV9Y5vygrLm/BVtCCsg==",
+ "ansi-align": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz",
+ "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==",
+ "dev": true,
"requires": {
- "@jimp/utils": "^0.5.0",
- "core-js": "^2.5.7"
+ "string-width": "^3.0.0"
+ },
+ "dependencies": {
+ "emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "string-width": {
+ "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.1.0"
+ }
+ }
}
},
- "@jimp/plugin-scale": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.5.0.tgz",
- "integrity": "sha512-5InIOr3cNtrS5aQ/uaosNf28qLLc0InpNGKFmGFTv8oqZqLch6PtDTjDBZ1GGWsPdA/ljy4Qyy7mJO1QBmgQeQ==",
+ "ansi-escapes": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz",
+ "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==",
+ "dev": true,
"requires": {
- "@jimp/utils": "^0.5.0",
- "core-js": "^2.5.7"
- }
- },
- "@jimp/plugins": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.5.5.tgz",
- "integrity": "sha512-9oF6LbSM/K7YkFCcxaPaD8NUkL/ZY8vT8NIGfQ/NpX+tKQtcsLHcRavHpUC+M1xXShv/QGx9OdBV/jgiu82QYg==",
- "requires": {
- "@jimp/plugin-blit": "^0.5.4",
- "@jimp/plugin-blur": "^0.5.0",
- "@jimp/plugin-color": "^0.5.5",
- "@jimp/plugin-contain": "^0.5.4",
- "@jimp/plugin-cover": "^0.5.4",
- "@jimp/plugin-crop": "^0.5.4",
- "@jimp/plugin-displace": "^0.5.0",
- "@jimp/plugin-dither": "^0.5.0",
- "@jimp/plugin-flip": "^0.5.0",
- "@jimp/plugin-gaussian": "^0.5.0",
- "@jimp/plugin-invert": "^0.5.0",
- "@jimp/plugin-mask": "^0.5.4",
- "@jimp/plugin-normalize": "^0.5.4",
- "@jimp/plugin-print": "^0.5.4",
- "@jimp/plugin-resize": "^0.5.4",
- "@jimp/plugin-rotate": "^0.5.4",
- "@jimp/plugin-scale": "^0.5.0",
- "core-js": "^2.5.7",
- "timm": "^1.6.1"
- }
- },
- "@jimp/png": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.5.4.tgz",
- "integrity": "sha512-J2NU7368zihF1HUZdmpXsL/Hhyf+I3ubmK+6Uz3Uoyvtk1VS7dO3L0io6fJQutfWmPZ4bvu6Ry022oHjbi6QCA==",
- "requires": {
- "@jimp/utils": "^0.5.0",
- "core-js": "^2.5.7",
- "pngjs": "^3.3.3"
- }
- },
- "@jimp/tiff": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.5.4.tgz",
- "integrity": "sha512-hr7Zq3eWjAZ+itSwuAObIWMRNv7oHVM3xuEDC2ouP7HfE7woBtyhCyfA7u12KlgtM57gKWeogXqTlewRGVzx6g==",
- "requires": {
- "core-js": "^2.5.7",
- "utif": "^2.0.1"
- }
- },
- "@jimp/types": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.5.4.tgz",
- "integrity": "sha512-nbZXM6TsdpnYHIBd8ZuoxGpvmxc2SqiggY30/bhOP/VJQoDBzm2v/20Ywz5M0snpIK2SdYG52eZPNjfjqUP39w==",
- "requires": {
- "@jimp/bmp": "^0.5.4",
- "@jimp/gif": "^0.5.0",
- "@jimp/jpeg": "^0.5.4",
- "@jimp/png": "^0.5.4",
- "@jimp/tiff": "^0.5.4",
- "core-js": "^2.5.7",
- "timm": "^1.6.1"
- }
- },
- "@jimp/utils": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.5.0.tgz",
- "integrity": "sha512-7H9RFVU+Li2XmEko0GGyzy7m7JjSc7qa+m8l3fUzYg2GtwASApjKF/LSG2AUQCUmDKFLdfIEVjxvKvZUJFEmpw==",
- "requires": {
- "core-js": "^2.5.7"
+ "type-fest": "^0.11.0"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz",
+ "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==",
+ "dev": true
+ }
}
},
- "@types/chai": {
- "version": "4.1.7",
- "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.7.tgz",
- "integrity": "sha512-2Y8uPt0/jwjhQ6EiluT0XCri1Dbplr0ZxfFXUz+ye13gaqE8u5gL5ppao1JrUYr9cIip5S6MvQzBS7Kke7U9VA==",
- "dev": true
- },
- "@types/debug": {
- "version": "0.0.31",
- "resolved": "https://registry.npmjs.org/@types/debug/-/debug-0.0.31.tgz",
- "integrity": "sha512-LS1MCPaQKqspg7FvexuhmDbWUhE2yIJ+4AgVIyObfc06/UKZ8REgxGNjZc82wPLWmbeOm7S+gSsLgo75TanG4A==",
+ "ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
"dev": true
},
- "@types/ip": {
- "version": "0.0.31",
- "resolved": "https://registry.npmjs.org/@types/ip/-/ip-0.0.31.tgz",
- "integrity": "sha512-oYk8aalgfCt7XfEu66Sjwz/aQjfRtQkjNSXwrUGqyRoQbOymAc156fUNTwn1cSCEEwuPPzMy7fGPmKcFLoaIkA==",
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
- "@types/node": "*"
+ "color-convert": "^1.9.0"
}
},
- "@types/mocha": {
- "version": "5.2.5",
- "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.5.tgz",
- "integrity": "sha512-lAVp+Kj54ui/vLUFxsJTMtWvZraZxum3w3Nwkble2dNuV5VnPA+Mi2oGX9XYJAaIvZi3tn3cbjS/qcJXRb6Bww==",
- "dev": true
- },
- "@types/node": {
- "version": "10.12.4",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.4.tgz",
- "integrity": "sha512-0aFZiYCvoxyKP/Mg6PvqBb2UtWGIPf63r6rOAvRBrgyJOfanbL60yUH2U4FSpg+Yn6FW+JVYWtzn6hLTy745Fg==",
- "dev": true
- },
- "@types/sharp": {
- "version": "0.21.0",
- "resolved": "https://registry.npmjs.org/@types/sharp/-/sharp-0.21.0.tgz",
- "integrity": "sha512-BmsCha5/lx2Afz2zwNo9F2txlkZ9HQf49N94lzSFmj5Oc7NfRMZguwVIhytb65qdY2zNF+azovzDNso6JUZpOw==",
+ "anymatch": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
+ "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
"dev": true,
"requires": {
- "@types/node": "*"
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
}
},
- "acorn": {
- "version": "5.7.3",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
- "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
- "dev": true
- },
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
- },
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "arg": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
+ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
"dev": true
},
- "any-base": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz",
- "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg=="
- },
"argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
@@ -366,22 +270,22 @@
"sprintf-js": "~1.0.2"
}
},
- "array-flatten": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz",
- "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=",
+ "array-filter": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz",
+ "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=",
"dev": true
},
- "arrify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
- "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "array-flatten": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
+ "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==",
"dev": true
},
- "assertion-error": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
- "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
+ "astral-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
+ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
"dev": true
},
"async-wait-until": {
@@ -390,15 +294,13 @@
"integrity": "sha512-H7ZR3cu1THxrJiDgevu+PgbyT0o5P/9nsCZj70ckruJCMWt/UOQmGo65wKWvEQN69MJk140x5/Z01ZQjzfwyOw==",
"dev": true
},
- "babel-code-frame": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
- "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "available-typed-arrays": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz",
+ "integrity": "sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==",
"dev": true,
"requires": {
- "chalk": "^1.1.3",
- "esutils": "^2.0.2",
- "js-tokens": "^3.0.2"
+ "array-filter": "^1.0.0"
}
},
"balanced-match": {
@@ -407,36 +309,93 @@
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"dev": true
},
- "base64-js": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
- "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw=="
- },
- "bindings": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.0.tgz",
- "integrity": "sha512-DpLh5EzMR2kzvX1KIlVC0VkC3iZtHKTgdtZ0a3pglBZdaQFjt5S9g9xd1lE+YvXyfd6mtCeRnrUfOLYiTMlNSw==",
+ "binary-extensions": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz",
+ "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==",
"dev": true
},
- "bmp-js": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz",
- "integrity": "sha1-4Fpj95amwf8l9Hcex62twUjAcjM="
- },
"bonjour-hap": {
- "version": "3.5.1",
- "resolved": "https://registry.npmjs.org/bonjour-hap/-/bonjour-hap-3.5.1.tgz",
- "integrity": "sha512-JqJXX5+i1NRGt8GyIPb+nBNjwrHbWe5Pb+HSuRMG/B62tPRHQ4Jyv3yX7hy1pHfRrV2OhnWpd+ljBtMb24R5rA==",
+ "version": "3.5.10",
+ "resolved": "https://registry.npmjs.org/bonjour-hap/-/bonjour-hap-3.5.10.tgz",
+ "integrity": "sha512-vaqa4uUST8K5rj9QGe6GaSJ+6rQ24KzgkjdyZvoTpbKBti5xL/m8H9Dp9VmPdo434OAetqU5PKAn5izucrKEBA==",
"dev": true,
"requires": {
- "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",
+ "array-flatten": "^2.1.2",
+ "deep-equal": "^2.0.2",
+ "ip": "^1.1.5",
+ "multicast-dns": "^7.2.2",
"multicast-dns-service-types": "^1.1.0"
}
},
+ "boxen": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz",
+ "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==",
+ "dev": true,
+ "requires": {
+ "ansi-align": "^3.0.0",
+ "camelcase": "^5.3.1",
+ "chalk": "^3.0.0",
+ "cli-boxes": "^2.2.0",
+ "string-width": "^4.1.0",
+ "term-size": "^2.1.0",
+ "type-fest": "^0.8.1",
+ "widest-line": "^3.1.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
+ "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
+ "dev": true,
+ "requires": {
+ "@types/color-name": "^1.1.1",
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
+ "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
+ "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -447,87 +406,138 @@
"concat-map": "0.0.1"
}
},
- "browser-stdout": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
- "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
- "dev": true
- },
- "buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz",
- "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==",
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
"requires": {
- "base64-js": "^1.0.2",
- "ieee754": "^1.1.4"
+ "fill-range": "^7.0.1"
}
},
- "buffer-equal": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz",
- "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs="
- },
"buffer-from": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
"dev": true
},
- "buffer-indexof": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz",
- "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==",
+ "cacheable-request": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
+ "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==",
+ "dev": true,
+ "requires": {
+ "clone-response": "^1.0.2",
+ "get-stream": "^5.1.0",
+ "http-cache-semantics": "^4.0.0",
+ "keyv": "^3.0.0",
+ "lowercase-keys": "^2.0.0",
+ "normalize-url": "^4.1.0",
+ "responselike": "^1.0.2"
+ },
+ "dependencies": {
+ "get-stream": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz",
+ "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "lowercase-keys": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
+ "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
+ "dev": true
+ }
+ }
+ },
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
"dev": true
},
- "buffer-shims": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz",
- "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=",
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true
},
- "builtin-modules": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
- "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "chardet": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
"dev": true
},
- "chai": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz",
- "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==",
+ "child_process": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/child_process/-/child_process-1.0.2.tgz",
+ "integrity": "sha1-sffn/HPSXn/R1FWtyU4UODAYK1o="
+ },
+ "chokidar": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz",
+ "integrity": "sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==",
"dev": true,
"requires": {
- "assertion-error": "^1.1.0",
- "check-error": "^1.0.2",
- "deep-eql": "^3.0.1",
- "get-func-name": "^2.0.0",
- "pathval": "^1.1.0",
- "type-detect": "^4.0.5"
+ "anymatch": "~3.1.1",
+ "braces": "~3.0.2",
+ "fsevents": "~2.1.2",
+ "glob-parent": "~5.1.0",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.4.0"
}
},
- "chalk": {
- "version": "1.1.3",
- "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "ci-info": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
+ "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
+ "dev": true
+ },
+ "cli-boxes": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.0.tgz",
+ "integrity": "sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w==",
+ "dev": true
+ },
+ "cli-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+ "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
"dev": true,
"requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
+ "restore-cursor": "^3.1.0"
}
},
- "check-error": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
- "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
+ "cli-width": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz",
+ "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==",
"dev": true
},
- "child_process": {
+ "clone-response": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/child_process/-/child_process-1.0.2.tgz",
- "integrity": "sha1-sffn/HPSXn/R1FWtyU4UODAYK1o="
+ "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
+ "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
+ "dev": true,
+ "requires": {
+ "mimic-response": "^1.0.0"
+ }
},
"color-convert": {
"version": "1.9.3",
@@ -545,13 +555,10 @@
"dev": true
},
"commander": {
- "version": "2.8.1",
- "resolved": "http://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
- "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
- "dev": true,
- "requires": {
- "graceful-readlink": ">= 1.0.0"
- }
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-5.0.0.tgz",
+ "integrity": "sha512-JrDGPAKjMGSP1G0DUoaceEJ3DZgAfr/q6X7FVk4+U5KxUSKviYGM2k6zWkfyyBHy5rAtzgYJFa1ro2O9PtoxwQ==",
+ "dev": true
},
"concat-map": {
"version": "0.0.1",
@@ -559,182 +566,514 @@
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
},
- "core-js": {
- "version": "2.5.7",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
- "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw=="
- },
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
- "dev": true
+ "configstore": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz",
+ "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==",
+ "dev": true,
+ "requires": {
+ "dot-prop": "^5.2.0",
+ "graceful-fs": "^4.1.2",
+ "make-dir": "^3.0.0",
+ "unique-string": "^2.0.0",
+ "write-file-atomic": "^3.0.0",
+ "xdg-basedir": "^4.0.0"
+ }
},
- "curve25519-n": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/curve25519-n/-/curve25519-n-1.4.0.tgz",
- "integrity": "sha512-ihQ3M/Aj9PVbsNwuul1/PNnyFurl9ejZGJWw/361+SS9hEFLiM2ttde+BXiu3ooc4AQiIx2y1gEcGLTpLRAjKg==",
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
"dev": true,
"requires": {
- "bindings": "~1.3.0",
- "nan": "^2.10.0"
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ }
}
},
+ "crypto-random-string": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
+ "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==",
+ "dev": true
+ },
"debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"dev": true,
"requires": {
- "ms": "2.0.0"
+ "ms": "^2.1.1"
}
},
"decimal.js": {
- "version": "7.5.1",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-7.5.1.tgz",
- "integrity": "sha512-1K5Y6MykxQYfHBcFfAj2uBaLmwreq4MsjsvrlgcEOvg+X82IeeXlIVIVkBMiypksu+yo9vcYP6lfU3qTedofSQ==",
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.0.tgz",
+ "integrity": "sha512-vDPw+rDgn3bZe1+F/pyEwb1oMG2XTlRVgAa6B4KccTEpYgF8w6eQllVbQcfIJnZyvzFtFpxnpGtx8dd7DJp/Rw==",
"dev": true
},
- "deep-eql": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
- "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
+ "decompress-response": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
+ "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
"dev": true,
"requires": {
- "type-detect": "^4.0.0"
+ "mimic-response": "^1.0.0"
}
},
"deep-equal": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
- "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.3.tgz",
+ "integrity": "sha512-Spqdl4H+ky45I9ByyJtXteOm9CaIrPmnIPmOhrkKGNYWeDgCvJ8jNYVCTjChxW4FqGuZnLHADc8EKRMX6+CgvA==",
+ "dev": true,
+ "requires": {
+ "es-abstract": "^1.17.5",
+ "es-get-iterator": "^1.1.0",
+ "is-arguments": "^1.0.4",
+ "is-date-object": "^1.0.2",
+ "is-regex": "^1.0.5",
+ "isarray": "^2.0.5",
+ "object-is": "^1.1.2",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.0",
+ "regexp.prototype.flags": "^1.3.0",
+ "side-channel": "^1.0.2",
+ "which-boxed-primitive": "^1.0.1",
+ "which-collection": "^1.0.1",
+ "which-typed-array": "^1.1.2"
+ }
+ },
+ "deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
"dev": true
},
- "diff": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
- "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
"dev": true
},
- "dns-equal": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
- "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=",
+ "defer-to-connect": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
+ "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==",
"dev": true
},
- "dns-packet": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz",
- "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==",
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
"dev": true,
"requires": {
- "ip": "^1.1.0",
- "safe-buffer": "^5.0.1"
+ "object-keys": "^1.0.12"
}
},
- "dns-txt": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz",
- "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
+ "diff": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+ "dev": true
+ },
+ "dns-packet": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-4.2.0.tgz",
+ "integrity": "sha512-bn1AKpfkFbm0MIioOMHZ5qJzl2uypdBwI4nYNsqvhjsegBhcKJUlCrMPWLx6JEezRjxZmxhtIz/FkBEur2l8Cw==",
"dev": true,
"requires": {
- "buffer-indexof": "^1.0.0"
+ "ip": "^1.1.5",
+ "safe-buffer": "^5.1.1"
}
},
- "dom-walk": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz",
- "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg="
- },
- "ed25519-hap": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/ed25519-hap/-/ed25519-hap-0.0.5.tgz",
- "integrity": "sha512-6RPUW9BdnUjYz5lGjRfM0sOMa8d43sjWFFchGJhGKkevoZvB0oVp1ES9oDUK+QJoJO8EoJlgawNsxG2yvlMbYg==",
+ "doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
"dev": true,
"requires": {
- "bindings": "^1.2.1",
- "nan": "^2.10.0"
+ "esutils": "^2.0.2"
}
},
- "enhanced-resolve": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-2.3.0.tgz",
- "integrity": "sha1-oRXDJQS2MC6Fp2Jp16V8zdli41k=",
+ "dot-prop": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz",
+ "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==",
"dev": true,
"requires": {
- "graceful-fs": "^4.1.2",
- "memory-fs": "^0.3.0",
- "object-assign": "^4.0.1",
- "tapable": "^0.2.3"
+ "is-obj": "^2.0.0"
+ }
+ },
+ "duplexer3": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
+ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "dev": true,
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
+ "es-abstract": {
+ "version": "1.17.5",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
+ "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.1.5",
+ "is-regex": "^1.0.5",
+ "object-inspect": "^1.7.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.0",
+ "string.prototype.trimleft": "^2.1.1",
+ "string.prototype.trimright": "^2.1.1"
}
},
- "errno": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
- "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
+ "es-get-iterator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.0.tgz",
+ "integrity": "sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ==",
+ "dev": true,
+ "requires": {
+ "es-abstract": "^1.17.4",
+ "has-symbols": "^1.0.1",
+ "is-arguments": "^1.0.4",
+ "is-map": "^2.0.1",
+ "is-set": "^2.0.1",
+ "is-string": "^1.0.5",
+ "isarray": "^2.0.5"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
"dev": true,
"requires": {
- "prr": "~1.0.1"
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
}
},
+ "escape-goat": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz",
+ "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==",
+ "dev": true
+ },
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
"dev": true
},
+ "eslint": {
+ "version": "6.8.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz",
+ "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "ajv": "^6.10.0",
+ "chalk": "^2.1.0",
+ "cross-spawn": "^6.0.5",
+ "debug": "^4.0.1",
+ "doctrine": "^3.0.0",
+ "eslint-scope": "^5.0.0",
+ "eslint-utils": "^1.4.3",
+ "eslint-visitor-keys": "^1.1.0",
+ "espree": "^6.1.2",
+ "esquery": "^1.0.1",
+ "esutils": "^2.0.2",
+ "file-entry-cache": "^5.0.1",
+ "functional-red-black-tree": "^1.0.1",
+ "glob-parent": "^5.0.0",
+ "globals": "^12.1.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "inquirer": "^7.0.0",
+ "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.14",
+ "minimatch": "^3.0.4",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.8.3",
+ "progress": "^2.0.0",
+ "regexpp": "^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",
+ "v8-compile-cache": "^2.0.3"
+ },
+ "dependencies": {
+ "eslint-utils": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
+ "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^1.1.0"
+ }
+ },
+ "regexpp": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
+ "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-scope": {
+ "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"
+ }
+ },
+ "eslint-utils": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.0.0.tgz",
+ "integrity": "sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^1.1.0"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
+ "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==",
+ "dev": true
+ },
+ "espree": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz",
+ "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
+ "dev": true,
+ "requires": {
+ "acorn": "^7.1.1",
+ "acorn-jsx": "^5.2.0",
+ "eslint-visitor-keys": "^1.1.0"
+ }
+ },
"esprima": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
"dev": true
},
+ "esquery": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz",
+ "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.1.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz",
+ "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==",
+ "dev": true
+ }
+ }
+ },
+ "esrecurse": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^4.1.0"
+ }
+ },
+ "estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true
+ },
"esutils": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
- "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true
+ },
+ "external-editor": {
+ "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",
+ "iconv-lite": "^0.4.24",
+ "tmp": "^0.0.33"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
+ "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==",
+ "dev": true
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
"dev": true
},
- "exif-parser": {
- "version": "0.1.12",
- "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz",
- "integrity": "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI="
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
},
"fast-srp-hap": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/fast-srp-hap/-/fast-srp-hap-1.0.1.tgz",
- "integrity": "sha1-N3Ek0Za8alFXquWze/X6NbtK0tk=",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-srp-hap/-/fast-srp-hap-2.0.1.tgz",
+ "integrity": "sha512-dClwnyfRd3BZxu3KAdhvAayozq7fLazXGlDc4HAHJV1M+olqGKAT52pygXQu5UiDSHxz/WB3KRvsojqQ5zmXOA==",
"dev": true
},
- "file-type": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz",
- "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw=="
+ "figures": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
+ "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ }
+ },
+ "file-entry-cache": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
+ "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^2.0.1"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
},
- "for-each": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
- "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+ "flat-cache": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
+ "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
+ "dev": true,
"requires": {
- "is-callable": "^1.1.3"
+ "flatted": "^2.0.0",
+ "rimraf": "2.6.3",
+ "write": "1.0.3"
+ },
+ "dependencies": {
+ "rimraf": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ }
}
},
+ "flatted": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz",
+ "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==",
+ "dev": true
+ },
+ "foreach": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
+ "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=",
+ "dev": true
+ },
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true
},
- "get-func-name": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
- "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
+ "fsevents": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
+ "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
+ "dev": true,
+ "optional": true
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
"dev": true
},
+ "futoin-hkdf": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/futoin-hkdf/-/futoin-hkdf-1.3.2.tgz",
+ "integrity": "sha512-3EVi3ETTyJg5PSXlxLCaUVVn0pSbDf62L3Gwxne7Uq+d8adOSNWQAad4gg7WToHkcgnCJb3Wlb1P8r4Evj4GPw==",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
"glob": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
"dev": true,
"requires": {
"fs.realpath": "^1.0.0",
@@ -745,57 +1084,81 @@
"path-is-absolute": "^1.0.0"
}
},
- "global": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz",
- "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=",
+ "glob-parent": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
+ "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
+ "dev": true,
"requires": {
- "min-document": "^2.19.0",
- "process": "~0.5.1"
+ "is-glob": "^4.0.1"
}
},
- "graceful-fs": {
- "version": "4.1.15",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
- "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
- "dev": true
+ "global-dirs": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.0.1.tgz",
+ "integrity": "sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A==",
+ "dev": true,
+ "requires": {
+ "ini": "^1.3.5"
+ }
},
- "graceful-readlink": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
- "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
- "dev": true
+ "globals": {
+ "version": "12.4.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
+ "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.8.1"
+ }
+ },
+ "got": {
+ "version": "9.6.0",
+ "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
+ "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
+ "dev": true,
+ "requires": {
+ "@sindresorhus/is": "^0.14.0",
+ "@szmarczak/http-timer": "^1.1.2",
+ "cacheable-request": "^6.0.0",
+ "decompress-response": "^3.3.0",
+ "duplexer3": "^0.1.4",
+ "get-stream": "^4.1.0",
+ "lowercase-keys": "^1.0.1",
+ "mimic-response": "^1.0.1",
+ "p-cancelable": "^1.0.0",
+ "to-readable-stream": "^1.0.0",
+ "url-parse-lax": "^3.0.0"
+ }
},
- "growl": {
- "version": "1.10.5",
- "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
- "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
+ "graceful-fs": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
+ "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
"dev": true
},
"hap-nodejs": {
- "version": "0.4.47",
- "resolved": "https://registry.npmjs.org/hap-nodejs/-/hap-nodejs-0.4.47.tgz",
- "integrity": "sha512-R+wybsxAP/R/NT3WazdY7ErAgyee1zRqvpHgTUkR5mkQHp88z46hcm50kVkFEYRHlpLclBBCqioP6EksHIOsbw==",
- "dev": true,
- "requires": {
- "bonjour-hap": "^3.5.1",
- "buffer-shims": "^1.0.0",
- "curve25519-n": "^1.2.0",
- "debug": "^2.2.0",
- "decimal.js": "^7.2.3",
- "ed25519-hap": "^0.0.5",
- "fast-srp-hap": "^1.0.1",
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/hap-nodejs/-/hap-nodejs-0.7.3.tgz",
+ "integrity": "sha512-kCPwdRizCPJk43eTSMtW2LtCh+it8rTYW7aGkhW8qFKPS4z5JQilpggvVJvdfmSy5l+L5F0/UyKwkeM/KsdrHA==",
+ "dev": true,
+ "requires": {
+ "bonjour-hap": "~3.5.8",
+ "debug": "^4.1.1",
+ "decimal.js": "^10.2.0",
+ "fast-srp-hap": "2.0.1",
+ "futoin-hkdf": "~1.3.2",
"ip": "^1.1.3",
- "node-persist": "^0.0.11"
+ "node-persist": "^0.0.11",
+ "tweetnacl": "^1.0.3"
}
},
- "has-ansi": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
- "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
"dev": true,
"requires": {
- "ansi-regex": "^2.0.0"
+ "function-bind": "^1.1.1"
}
},
"has-flag": {
@@ -804,48 +1167,139 @@
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
- "he": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
- "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
+ "dev": true
+ },
+ "has-yarn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz",
+ "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==",
"dev": true
},
"homebridge": {
- "version": "0.4.45",
- "resolved": "https://registry.npmjs.org/homebridge/-/homebridge-0.4.45.tgz",
- "integrity": "sha512-zcyI0r4qF2hPmqrP5y45bz7sar3EdQSiqydXFuuTHeXmE4qnGZaxo+/4n3GYK22Yvp/wWBH3yxmm0ZGr+JyChQ==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/homebridge/-/homebridge-1.1.0.tgz",
+ "integrity": "sha512-OMs+1A2G6lkMOrAk0o1nmj8S3XkhwrInVwRDiyLB3aHRQS02KQ/Egv1stV9vDhjib86v3y3MLHIYYzbxKHLjPA==",
"dev": true,
"requires": {
- "chalk": "^1.1.1",
- "commander": "2.8.1",
- "hap-nodejs": "0.4.47",
- "node-persist": "^0.0.8",
- "qrcode-terminal": "^0.11.0",
- "semver": "5.0.3"
+ "chalk": "^3.0.0",
+ "commander": "5.0.0",
+ "hap-nodejs": "^0.7.3",
+ "node-persist": "^0.0.11",
+ "qrcode-terminal": "^0.12.0",
+ "semver": "^7.3.2",
+ "source-map-support": "^0.5.19"
},
"dependencies": {
- "mkdirp": {
- "version": "0.3.5",
- "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz",
- "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=",
+ "ansi-styles": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
+ "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
+ "dev": true,
+ "requires": {
+ "@types/color-name": "^1.1.1",
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
+ "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
- "node-persist": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/node-persist/-/node-persist-0.0.8.tgz",
- "integrity": "sha1-pWxzm8b/2c7vGcDo2JWXkX8Ikkk=",
+ "semver": {
+ "version": "7.3.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
+ "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
+ "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
"dev": true,
"requires": {
- "mkdirp": "~0.3.5",
- "q": "~1.1.1"
+ "has-flag": "^4.0.0"
}
}
}
},
- "ieee754": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz",
- "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA=="
+ "http-cache-semantics": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
+ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==",
+ "dev": true
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "dev": true
+ },
+ "ignore-by-default": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
+ "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=",
+ "dev": true
+ },
+ "import-fresh": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz",
+ "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==",
+ "dev": true,
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ }
+ },
+ "import-lazy": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
+ "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
+ "dev": true
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
},
"inflight": {
"version": "1.0.6",
@@ -858,122 +1312,399 @@
}
},
"inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
+ "ini": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+ "dev": true
+ },
+ "inquirer": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz",
+ "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^3.0.0",
+ "cli-cursor": "^3.1.0",
+ "cli-width": "^2.0.0",
+ "external-editor": "^3.0.3",
+ "figures": "^3.0.0",
+ "lodash": "^4.17.15",
+ "mute-stream": "0.0.8",
+ "run-async": "^2.4.0",
+ "rxjs": "^6.5.3",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0",
+ "through": "^2.3.6"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
+ "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
+ "dev": true,
+ "requires": {
+ "@types/color-name": "^1.1.1",
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
+ "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
+ "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
"ip": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
"integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo="
},
- "is-callable": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
- "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA=="
- },
- "is-function": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz",
- "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU="
+ "is-arguments": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz",
+ "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==",
+ "dev": true
},
- "isarray": {
+ "is-bigint": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.0.tgz",
+ "integrity": "sha512-t5mGUXC/xRheCK431ylNiSkGGpBp8bHENBcENTkDT6ppwPzEVxNGZRvgvmOEfbWkFhA7D2GEuE2mmQTr78sl2g==",
"dev": true
},
- "jimp": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.5.6.tgz",
- "integrity": "sha512-H0nHTu6KgAgQzDxa38ew2dXbnRzKm1w5uEyhMIxqwCQVjwgarOjjkV/avbNLxfxRHAFaNp4rGIc/qm8P+uhX9A==",
+ "is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
"requires": {
- "@babel/polyfill": "^7.0.0",
- "@jimp/custom": "^0.5.4",
- "@jimp/plugins": "^0.5.5",
- "@jimp/types": "^0.5.4",
- "core-js": "^2.5.7"
+ "binary-extensions": "^2.0.0"
}
},
- "jpeg-js": {
- "version": "0.3.4",
- "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.3.4.tgz",
- "integrity": "sha512-6IzjQxvnlT8UlklNmDXIJMWxijULjqGrzgqc0OG7YadZdvm7KPQ1j0ehmQQHckgEWOfgpptzcnWgESovxudpTA=="
+ "is-boolean-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.1.tgz",
+ "integrity": "sha512-TqZuVwa/sppcrhUCAYkGBk7w0yxfQQnxq28fjkO53tnK9FQXmdwz2JS5+GjsWQ6RByES1K40nI+yDic5c9/aAQ==",
+ "dev": true
},
- "js-tokens": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
- "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "is-callable": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
+ "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==",
"dev": true
},
- "js-yaml": {
- "version": "3.12.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
- "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
+ "is-ci": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
+ "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
"dev": true,
"requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
+ "ci-info": "^2.0.0"
}
},
- "json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "is-date-object": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
+ "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==",
"dev": true
},
- "load-bmfont": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.0.tgz",
- "integrity": "sha512-kT63aTAlNhZARowaNYcY29Fn/QYkc52M3l6V1ifRcPewg2lvUZDAj7R6dXjOL9D0sict76op3T5+odumDSF81g==",
- "requires": {
- "buffer-equal": "0.0.1",
- "mime": "^1.3.4",
- "parse-bmfont-ascii": "^1.0.3",
- "parse-bmfont-binary": "^1.0.5",
- "parse-bmfont-xml": "^1.1.4",
- "phin": "^2.9.1",
- "xhr": "^2.0.1",
- "xtend": "^4.0.0"
- }
- },
- "lodash": {
- "version": "4.17.11",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
- "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
"dev": true
},
- "make-error": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz",
- "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==",
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"dev": true
},
- "memory-fs": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.3.0.tgz",
- "integrity": "sha1-e8xrYp46Q+hx1+Kaymrop/FcuyA=",
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
"dev": true,
"requires": {
- "errno": "^0.1.3",
- "readable-stream": "^2.0.1"
+ "is-extglob": "^2.1.1"
}
},
- "mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
- },
- "min-document": {
- "version": "2.19.0",
- "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
- "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=",
+ "is-installed-globally": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz",
+ "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==",
+ "dev": true,
"requires": {
- "dom-walk": "^0.1.0"
+ "global-dirs": "^2.0.1",
+ "is-path-inside": "^3.0.1"
}
},
- "minimatch": {
+ "is-map": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.1.tgz",
+ "integrity": "sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==",
+ "dev": true
+ },
+ "is-npm": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz",
+ "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==",
+ "dev": true
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true
+ },
+ "is-number-object": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz",
+ "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==",
+ "dev": true
+ },
+ "is-obj": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
+ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
+ "dev": true
+ },
+ "is-path-inside": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz",
+ "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
+ "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-set": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.1.tgz",
+ "integrity": "sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA==",
+ "dev": true
+ },
+ "is-string": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz",
+ "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==",
+ "dev": true
+ },
+ "is-symbol": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
+ "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "is-typed-array": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.3.tgz",
+ "integrity": "sha512-BSYUBOK/HJibQ30wWkWold5txYwMUXQct9YHAQJr8fSwvZoiglcqB0pd7vEN23+Tsi9IUEjztdOSzl4qLVYGTQ==",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.0",
+ "es-abstract": "^1.17.4",
+ "foreach": "^2.0.5",
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true
+ },
+ "is-weakmap": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz",
+ "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==",
+ "dev": true
+ },
+ "is-weakset": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.1.tgz",
+ "integrity": "sha512-pi4vhbhVHGLxohUw7PhGsueT4vRGFoXhP7+RGN0jKIv9+8PWYCQTqtADngrxOm2g46hoH0+g8uZZBzMrvVGDmw==",
+ "dev": true
+ },
+ "is-yarn-global": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz",
+ "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "json-buffer": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
+ "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "keyv": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
+ "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
+ "dev": true,
+ "requires": {
+ "json-buffer": "3.0.0"
+ }
+ },
+ "latest-version": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz",
+ "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==",
+ "dev": true,
+ "requires": {
+ "package-json": "^6.3.0"
+ }
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.15",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
+ "dev": true
+ },
+ "lowercase-keys": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
+ "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
+ "dev": true
+ },
+ "make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "dev": true,
+ "requires": {
+ "semver": "^6.0.0"
+ }
+ },
+ "make-error": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
+ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
+ "dev": true
+ },
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true
+ },
+ "mimic-response": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
+ "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
+ "dev": true
+ },
+ "minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
@@ -983,572 +1714,992 @@
}
},
"minimist": {
- "version": "0.0.8",
- "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
+ "dev": true
},
"mkdirp": {
- "version": "0.5.1",
- "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+ "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+ "dev": true,
"requires": {
- "minimist": "0.0.8"
+ "minimist": "^1.2.5"
}
},
- "mocha": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz",
- "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==",
- "dev": true,
- "requires": {
- "browser-stdout": "1.3.1",
- "commander": "2.15.1",
- "debug": "3.1.0",
- "diff": "3.5.0",
- "escape-string-regexp": "1.0.5",
- "glob": "7.1.2",
- "growl": "1.10.5",
- "he": "1.1.1",
- "minimatch": "3.0.4",
- "mkdirp": "0.5.1",
- "supports-color": "5.4.0"
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "multicast-dns": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.2.tgz",
+ "integrity": "sha512-XqSMeO8EWV/nOXOpPV8ztIpNweVfE1dSpz6SQvDPp71HD74lMXjt4m/mWB1YBMG0kHtOodxRWc5WOb/UNN1A5g==",
+ "dev": true,
+ "requires": {
+ "dns-packet": "^4.0.0",
+ "thunky": "^1.0.2"
+ }
+ },
+ "multicast-dns-service-types": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
+ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
+ "dev": true
+ },
+ "mute-stream": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
+ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
+ "dev": true
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+ "dev": true
+ },
+ "node-persist": {
+ "version": "0.0.11",
+ "resolved": "https://registry.npmjs.org/node-persist/-/node-persist-0.0.11.tgz",
+ "integrity": "sha1-1m66Pr72IPB5Uw+nsTB2qQZmWHQ=",
+ "dev": true,
+ "requires": {
+ "mkdirp": "~0.5.1",
+ "q": "~1.1.1"
+ }
+ },
+ "nodemon": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.4.tgz",
+ "integrity": "sha512-Ltced+hIfTmaS28Zjv1BM552oQ3dbwPqI4+zI0SLgq+wpJhSyqgYude/aZa/3i31VCQWMfXJVxvu86abcam3uQ==",
+ "dev": true,
+ "requires": {
+ "chokidar": "^3.2.2",
+ "debug": "^3.2.6",
+ "ignore-by-default": "^1.0.1",
+ "minimatch": "^3.0.4",
+ "pstree.remy": "^1.1.7",
+ "semver": "^5.7.1",
+ "supports-color": "^5.5.0",
+ "touch": "^3.1.0",
+ "undefsafe": "^2.0.2",
+ "update-notifier": "^4.0.0"
},
"dependencies": {
- "commander": {
- "version": "2.15.1",
- "resolved": "http://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
- "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==",
- "dev": true
- },
"debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
"dev": true,
"requires": {
- "ms": "2.0.0"
+ "ms": "^2.1.1"
}
},
- "supports-color": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
- "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
}
}
},
- "mocha-logger": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/mocha-logger/-/mocha-logger-1.0.6.tgz",
- "integrity": "sha512-D7Z3r1RkyaJOnlgokODdzt9p4ut0m3DVzEKp3r3tgeXIpdxp54z049Vc0EEh5hkhudfRN0dfUD10Fcj2WuOO3w==",
+ "nopt": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
+ "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
+ "dev": true,
+ "requires": {
+ "abbrev": "1"
+ }
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true
+ },
+ "normalize-url": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz",
+ "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==",
+ "dev": true
+ },
+ "object-inspect": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
+ "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
+ "dev": true
+ },
+ "object-is": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz",
+ "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
+ }
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ },
+ "object.assign": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
+ "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "function-bind": "^1.1.1",
+ "has-symbols": "^1.0.0",
+ "object-keys": "^1.0.11"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
+ "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^2.1.0"
+ }
+ },
+ "optional": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/optional/-/optional-0.1.4.tgz",
+ "integrity": "sha512-gtvrrCfkE08wKcgXaVwQVgwEQ8vel2dc5DDBn9RLQZ3YtmtkBss6A2HY6BnJH4N/4Ku97Ri/SF8sNWE2225WJw=="
+ },
+ "optionator": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
+ "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+ "dev": true,
+ "requires": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.6",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "word-wrap": "~1.2.3"
+ }
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ },
+ "p-cancelable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
+ "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==",
+ "dev": true
+ },
+ "package-json": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz",
+ "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==",
+ "dev": true,
+ "requires": {
+ "got": "^9.6.0",
+ "registry-auth-token": "^4.0.0",
+ "registry-url": "^5.0.0",
+ "semver": "^6.2.0"
+ }
+ },
+ "parent-module": {
+ "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"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true
+ },
+ "picomatch": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
+ "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "prepend-http": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
+ "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
+ "dev": true
+ },
+ "progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+ "dev": true
+ },
+ "pstree.remy": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.7.tgz",
+ "integrity": "sha512-xsMgrUwRpuGskEzBFkH8NmTimbZ5PcPup0LA8JJkHIm2IMUbQcpo3yeLNWVrufEYjh8YwtSVh0xz6UeWc5Oh5A==",
+ "dev": true
+ },
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true
+ },
+ "pupa": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.0.1.tgz",
+ "integrity": "sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA==",
+ "dev": true,
+ "requires": {
+ "escape-goat": "^2.0.0"
+ }
+ },
+ "q": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.1.2.tgz",
+ "integrity": "sha1-Y1fikSBnAdmfGXq4TlforRlvKok=",
+ "dev": true
+ },
+ "qrcode-terminal": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz",
+ "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.9.4",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz",
+ "integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ=="
+ },
+ "rc": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+ "dev": true,
+ "requires": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "dependencies": {
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true
+ }
+ }
+ },
+ "readdirp": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz",
+ "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==",
+ "dev": true,
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "regexp.prototype.flags": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz",
+ "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0-next.1"
+ }
+ },
+ "regexpp": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
+ "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==",
+ "dev": true
+ },
+ "registry-auth-token": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.1.1.tgz",
+ "integrity": "sha512-9bKS7nTl9+/A1s7tnPeGrUpRcVY+LUh7bfFgzpndALdPfXQBfQV77rQVtqgUV3ti4vc/Ik81Ex8UJDWDQ12zQA==",
+ "dev": true,
+ "requires": {
+ "rc": "^1.2.8"
+ }
+ },
+ "registry-url": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz",
+ "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==",
+ "dev": true,
+ "requires": {
+ "rc": "^1.2.8"
+ }
+ },
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true
+ },
+ "responselike": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
+ "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
+ "dev": true,
+ "requires": {
+ "lowercase-keys": "^1.0.0"
+ }
+ },
+ "restore-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+ "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+ "dev": true,
+ "requires": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "run-async": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
+ "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
+ "dev": true
+ },
+ "rxjs": {
+ "version": "6.5.5",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz",
+ "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.9.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "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
+ },
+ "semver-diff": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz",
+ "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==",
+ "dev": true,
+ "requires": {
+ "semver": "^6.3.0"
+ }
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
"dev": true,
"requires": {
- "mocha": "^5.1.1"
+ "shebang-regex": "^1.0.0"
}
},
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
"dev": true
},
- "multicast-dns": {
- "version": "6.2.3",
- "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",
- "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==",
+ "side-channel": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.2.tgz",
+ "integrity": "sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==",
"dev": true,
"requires": {
- "dns-packet": "^1.3.1",
- "thunky": "^1.0.2"
+ "es-abstract": "^1.17.0-next.1",
+ "object-inspect": "^1.7.0"
}
},
- "multicast-dns-service-types": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
- "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
- "dev": true
- },
- "nan": {
- "version": "2.11.1",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz",
- "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==",
+ "signal-exit": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
+ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
"dev": true
},
- "nock": {
- "version": "9.6.1",
- "resolved": "https://registry.npmjs.org/nock/-/nock-9.6.1.tgz",
- "integrity": "sha512-EDgl/WgNQ0C1BZZlASOQkQdE6tAWXJi8QQlugqzN64JJkvZ7ILijZuG24r4vCC7yOfnm6HKpne5AGExLGCeBWg==",
+ "slice-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
+ "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
"dev": true,
"requires": {
- "chai": "^4.1.2",
- "debug": "^3.1.0",
- "deep-equal": "^1.0.0",
- "json-stringify-safe": "^5.0.1",
- "lodash": "^4.17.5",
- "mkdirp": "^0.5.0",
- "propagate": "^1.0.0",
- "qs": "^6.5.1",
- "semver": "^5.5.0"
+ "ansi-styles": "^3.2.0",
+ "astral-regex": "^1.0.0",
+ "is-fullwidth-code-point": "^2.0.0"
},
"dependencies": {
- "debug": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
- "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "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==",
- "dev": true
- },
- "semver": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
- "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
"dev": true
}
}
},
- "node-persist": {
- "version": "0.0.11",
- "resolved": "https://registry.npmjs.org/node-persist/-/node-persist-0.0.11.tgz",
- "integrity": "sha1-1m66Pr72IPB5Uw+nsTB2qQZmWHQ=",
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "source-map-support": {
+ "version": "0.5.19",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
+ "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
"dev": true,
"requires": {
- "mkdirp": "~0.5.1",
- "q": "~1.1.1"
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
}
},
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
"dev": true
},
- "omggif": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.9.tgz",
- "integrity": "sha1-3LcCTazVDFK00wPwSALJHAV8dl8="
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "string-width": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
+ "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"dev": true,
"requires": {
- "wrappy": "1"
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "dependencies": {
+ "strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.0"
+ }
+ }
}
},
- "optional": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/optional/-/optional-0.1.4.tgz",
- "integrity": "sha512-gtvrrCfkE08wKcgXaVwQVgwEQ8vel2dc5DDBn9RLQZ3YtmtkBss6A2HY6BnJH4N/4Ku97Ri/SF8sNWE2225WJw=="
- },
- "pako": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz",
- "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg=="
- },
- "parse-bmfont-ascii": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz",
- "integrity": "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU="
- },
- "parse-bmfont-binary": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz",
- "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY="
+ "string.prototype.trimend": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz",
+ "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
+ }
},
- "parse-bmfont-xml": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz",
- "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==",
+ "string.prototype.trimleft": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz",
+ "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==",
+ "dev": true,
"requires": {
- "xml-parse-from-string": "^1.0.0",
- "xml2js": "^0.4.5"
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5",
+ "string.prototype.trimstart": "^1.0.0"
}
},
- "parse-headers": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.1.tgz",
- "integrity": "sha1-aug6eqJanZtwCswoaYzR8e1+lTY=",
+ "string.prototype.trimright": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz",
+ "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==",
+ "dev": true,
"requires": {
- "for-each": "^0.3.2",
- "trim": "0.0.1"
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5",
+ "string.prototype.trimend": "^1.0.0"
}
},
- "path-is-absolute": {
+ "string.prototype.trimstart": {
"version": "1.0.1",
- "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
- "dev": true
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz",
+ "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
+ }
},
- "path-parse": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
- "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
- "dev": true
+ "strip-ansi": {
+ "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.1.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true
+ }
+ }
},
- "pathval": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz",
- "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=",
+ "strip-json-comments": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz",
+ "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==",
"dev": true
},
- "phin": {
- "version": "2.9.3",
- "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz",
- "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA=="
- },
- "pixelmatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz",
- "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=",
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
"requires": {
- "pngjs": "^3.0.0"
+ "has-flag": "^3.0.0"
}
},
- "pngjs": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.3.3.tgz",
- "integrity": "sha512-1n3Z4p3IOxArEs1VRXnZ/RXdfEniAUS9jb68g58FIXMNkPJeZd+Qh4Uq7/e0LVxAQGos1eIUrqrt4FpjdnEd+Q=="
- },
- "process": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz",
- "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8="
+ "table": {
+ "version": "5.4.6",
+ "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
+ "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.10.2",
+ "lodash": "^4.17.14",
+ "slice-ansi": "^2.1.0",
+ "string-width": "^3.0.0"
+ },
+ "dependencies": {
+ "emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "string-width": {
+ "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.1.0"
+ }
+ }
+ }
},
- "process-nextick-args": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
- "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "term-size": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.0.tgz",
+ "integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==",
"dev": true
},
- "propagate": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/propagate/-/propagate-1.0.0.tgz",
- "integrity": "sha1-AMLa7t2iDofjeCs0Stuhzd1q1wk=",
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
"dev": true
},
- "prr": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
- "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
"dev": true
},
- "q": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/q/-/q-1.1.2.tgz",
- "integrity": "sha1-Y1fikSBnAdmfGXq4TlforRlvKok=",
+ "thunky": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz",
+ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
"dev": true
},
- "qrcode-terminal": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.11.0.tgz",
- "integrity": "sha1-/8bCii/Av7RwUrR+I/T0RqX7254=",
- "dev": true
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "~1.0.2"
+ }
},
- "qs": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+ "to-readable-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
+ "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==",
"dev": true
},
- "readable-stream": {
- "version": "2.3.6",
- "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
"requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
+ "is-number": "^7.0.0"
}
},
- "regenerator-runtime": {
- "version": "0.11.1",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
- "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
- },
- "resolve": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
- "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
+ "touch": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
+ "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==",
"dev": true,
"requires": {
- "path-parse": "^1.0.5"
+ "nopt": "~1.0.10"
}
},
- "resolve-from": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz",
- "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=",
- "dev": true
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "sax": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
- "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
- },
- "semver": {
- "version": "5.0.3",
- "resolved": "http://registry.npmjs.org/semver/-/semver-5.0.3.tgz",
- "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=",
- "dev": true
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "source-map-support": {
- "version": "0.5.9",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz",
- "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==",
+ "ts-node": {
+ "version": "8.10.1",
+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.1.tgz",
+ "integrity": "sha512-bdNz1L4ekHiJul6SHtZWs1ujEKERJnHs4HxN7rjTyyVOFf3HaJ6sLqe6aPG62XTzAB/63pKRh5jTSWL0D7bsvw==",
"dev": true,
"requires": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
+ "arg": "^4.1.0",
+ "diff": "^4.0.1",
+ "make-error": "^1.1.1",
+ "source-map-support": "^0.5.17",
+ "yn": "3.1.1"
}
},
- "sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "tslib": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
+ "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==",
"dev": true
},
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "tsutils": {
+ "version": "3.17.1",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz",
+ "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==",
"dev": true,
"requires": {
- "safe-buffer": "~5.1.0"
+ "tslib": "^1.8.1"
}
},
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "tunnel": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
+ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="
+ },
+ "tweetnacl": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz",
+ "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
"dev": true,
"requires": {
- "ansi-regex": "^2.0.0"
+ "prelude-ls": "~1.1.2"
}
},
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
"dev": true
},
- "tapable": {
- "version": "0.2.8",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz",
- "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=",
- "dev": true
+ "typed-rest-client": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.7.3.tgz",
+ "integrity": "sha512-CwTpx/TkRHGZoHkJhBcp4X8K3/WtlzSHVQR0OIFnt10j4tgy4ypgq/SrrgVpA1s6tAL49Q6J3R5C0Cgfh2ddqA==",
+ "requires": {
+ "qs": "^6.9.1",
+ "tunnel": "0.0.6",
+ "underscore": "1.8.3"
+ }
},
- "tern": {
- "version": "0.22.3",
- "resolved": "https://registry.npmjs.org/tern/-/tern-0.22.3.tgz",
- "integrity": "sha512-A2C8GbR6uJWjHUwxtxF14oY1g8oJDEhM+n9ugRowX+jr8JHgNUeOLrYTOi/LV/JK9KHpxnYwyuhnal9YDXeeDQ==",
+ "typedarray-to-buffer": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
+ "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
"dev": true,
"requires": {
- "acorn": "^5.4.0",
- "enhanced-resolve": "^2.2.2",
- "glob": "^7.1.1",
- "minimatch": "^3.0.3",
- "resolve-from": "2.0.0"
+ "is-typedarray": "^1.0.0"
}
},
- "thunky": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz",
- "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==",
+ "typescript": {
+ "version": "3.9.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.2.tgz",
+ "integrity": "sha512-q2ktq4n/uLuNNShyayit+DTobV2ApPEo/6so68JaD5ojvc/6GClBipedB9zNWYxRSAlZXAe405Rlijzl6qDiSw==",
"dev": true
},
- "timm": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/timm/-/timm-1.6.1.tgz",
- "integrity": "sha512-hqDTYi/bWuDxL2i6T3v6nrvkAQ/1Bc060GSkVEQZp02zTSTB4CHSKsOkliequCftQaNRcjRqUZmpGWs5FfhrNg=="
- },
- "tinycolor2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz",
- "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g="
- },
- "trim": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz",
- "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0="
- },
- "ts-node": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz",
- "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==",
+ "undefsafe": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz",
+ "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==",
"dev": true,
"requires": {
- "arrify": "^1.0.0",
- "buffer-from": "^1.1.0",
- "diff": "^3.1.0",
- "make-error": "^1.1.1",
- "minimist": "^1.2.0",
- "mkdirp": "^0.5.1",
- "source-map-support": "^0.5.6",
- "yn": "^2.0.0"
+ "debug": "^2.2.0"
},
"dependencies": {
- "minimist": {
- "version": "1.2.0",
- "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "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"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
}
}
},
- "tslib": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
- "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==",
- "dev": true
+ "underscore": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
+ "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI="
},
- "tslint": {
- "version": "5.11.0",
- "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.11.0.tgz",
- "integrity": "sha1-mPMMAurjzecAYgHkwzywi0hYHu0=",
+ "unique-string": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz",
+ "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==",
"dev": true,
"requires": {
- "babel-code-frame": "^6.22.0",
- "builtin-modules": "^1.1.1",
- "chalk": "^2.3.0",
- "commander": "^2.12.1",
- "diff": "^3.2.0",
- "glob": "^7.1.1",
- "js-yaml": "^3.7.0",
- "minimatch": "^3.0.4",
- "resolve": "^1.3.2",
- "semver": "^5.3.0",
- "tslib": "^1.8.0",
- "tsutils": "^2.27.2"
+ "crypto-random-string": "^2.0.0"
+ }
+ },
+ "update-notifier": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.0.tgz",
+ "integrity": "sha512-w3doE1qtI0/ZmgeoDoARmI5fjDoT93IfKgEGqm26dGUOh8oNpaSTsGNdYRN/SjOuo10jcJGwkEL3mroKzktkew==",
+ "dev": true,
+ "requires": {
+ "boxen": "^4.2.0",
+ "chalk": "^3.0.0",
+ "configstore": "^5.0.1",
+ "has-yarn": "^2.1.0",
+ "import-lazy": "^2.1.0",
+ "is-ci": "^2.0.0",
+ "is-installed-globally": "^0.3.1",
+ "is-npm": "^4.0.0",
+ "is-yarn-global": "^0.3.0",
+ "latest-version": "^5.0.0",
+ "pupa": "^2.0.1",
+ "semver-diff": "^3.1.1",
+ "xdg-basedir": "^4.0.0"
},
"dependencies": {
"ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
+ "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
"dev": true,
"requires": {
- "color-convert": "^1.9.0"
+ "@types/color-name": "^1.1.1",
+ "color-convert": "^2.0.1"
}
},
"chalk": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
- "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
+ "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
+ "color-name": "~1.1.4"
}
},
- "commander": {
- "version": "2.19.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
- "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==",
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
- "semver": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
- "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
+ "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
"dev": true,
"requires": {
- "has-flag": "^3.0.0"
+ "has-flag": "^4.0.0"
}
}
}
},
- "tsutils": {
- "version": "2.29.0",
- "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz",
- "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==",
+ "uri-js": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
"dev": true,
"requires": {
- "tslib": "^1.8.1"
+ "punycode": "^2.1.0"
}
},
- "tunnel": {
- "version": "0.0.4",
- "resolved": "http://registry.npmjs.org/tunnel/-/tunnel-0.0.4.tgz",
- "integrity": "sha1-LTeFoVjBdMmhbcLARuxfxfF0IhM=",
- "dev": true
+ "url-parse-lax": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
+ "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
+ "dev": true,
+ "requires": {
+ "prepend-http": "^2.0.0"
+ }
},
- "type-detect": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
- "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
+ "v8-compile-cache": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz",
+ "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==",
"dev": true
},
- "typed-rest-client": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.0.11.tgz",
- "integrity": "sha512-Iz2/p1EkJp8laAIlW/4h+3u+eJqmslosrX2wK1ofM74fCnRpM/EAPM+psjcQKomlNQrInKLPp/JYnsH4ZuzhQQ==",
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
"dev": true,
"requires": {
- "nock": "9.6.1",
- "tunnel": "0.0.4",
- "underscore": "1.8.3"
+ "isexe": "^2.0.0"
}
},
- "typescript": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.1.6.tgz",
- "integrity": "sha512-tDMYfVtvpb96msS1lDX9MEdHrW4yOuZ4Kdc4Him9oU796XldPYF/t2+uKoX0BBa0hXXwDlqYQbXY5Rzjzc5hBA==",
- "dev": true
+ "which-boxed-primitive": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.1.tgz",
+ "integrity": "sha512-7BT4TwISdDGBgaemWU0N0OU7FeAEJ9Oo2P1PHRm/FCWoEi2VLWC9b6xvxAA3C/NMpxg3HXVgi0sMmGbNUbNepQ==",
+ "dev": true,
+ "requires": {
+ "is-bigint": "^1.0.0",
+ "is-boolean-object": "^1.0.0",
+ "is-number-object": "^1.0.3",
+ "is-string": "^1.0.4",
+ "is-symbol": "^1.0.2"
+ }
},
- "underscore": {
- "version": "1.8.3",
- "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
- "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=",
- "dev": true
+ "which-collection": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz",
+ "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==",
+ "dev": true,
+ "requires": {
+ "is-map": "^2.0.1",
+ "is-set": "^2.0.1",
+ "is-weakmap": "^2.0.1",
+ "is-weakset": "^2.0.1"
+ }
},
- "utif": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz",
- "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==",
+ "which-typed-array": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.2.tgz",
+ "integrity": "sha512-KT6okrd1tE6JdZAy3o2VhMoYPh3+J6EMZLyrxBQsZflI1QCZIxMrIYLkosd8Twf+YfknVIHmYQPgJt238p8dnQ==",
+ "dev": true,
"requires": {
- "pako": "^1.0.5"
+ "available-typed-arrays": "^1.0.2",
+ "es-abstract": "^1.17.5",
+ "foreach": "^2.0.5",
+ "function-bind": "^1.1.1",
+ "has-symbols": "^1.0.1",
+ "is-typed-array": "^1.1.3"
}
},
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "widest-line": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
+ "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.0.0"
+ }
+ },
+ "word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
"dev": true
},
"wrappy": {
@@ -1557,45 +2708,37 @@
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true
},
- "xhr": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz",
- "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==",
+ "write": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
+ "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
+ "dev": true,
"requires": {
- "global": "~4.3.0",
- "is-function": "^1.0.1",
- "parse-headers": "^2.0.0",
- "xtend": "^4.0.0"
+ "mkdirp": "^0.5.1"
}
},
- "xml-parse-from-string": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz",
- "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig="
- },
- "xml2js": {
- "version": "0.4.19",
- "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
- "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==",
+ "write-file-atomic": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
+ "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
+ "dev": true,
"requires": {
- "sax": ">=0.6.0",
- "xmlbuilder": "~9.0.1"
+ "imurmurhash": "^0.1.4",
+ "is-typedarray": "^1.0.0",
+ "signal-exit": "^3.0.2",
+ "typedarray-to-buffer": "^3.1.5"
}
},
- "xmlbuilder": {
- "version": "9.0.7",
- "resolved": "http://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
- "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0="
- },
- "xtend": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
- "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
+ "xdg-basedir": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz",
+ "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==",
+ "dev": true
},
"yn": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz",
- "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
+ "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
"dev": true
}
}
diff --git a/package.json b/package.json
index 46c77af..09b6b99 100644
--- a/package.json
+++ b/package.json
@@ -1,54 +1,53 @@
{
+ "displayName": "Homebridge Bloomsky",
"name": "homebridge-bloomsky",
- "version": "1.1.13",
+ "version": "1.2.0-alpha.2",
"description": "Homebridge plugin for Bloomsky weather stations",
- "main": "index.js",
- "devDependencies": {
- "@types/chai": "^4.1.6",
- "@types/debug": "0.0.31",
- "@types/ip": "0.0.31",
- "@types/mocha": "^5.2.5",
- "@types/node": "^10.12.0",
- "@types/sharp": "^0.21.0",
- "async-wait-until": "^1.2.4",
- "chai": "^4.2.0",
- "hap-nodejs": "^0.4.47",
- "homebridge": ">=0.4.42",
- "mocha": "^5.2.0",
- "mocha-logger": "^1.0.6",
- "ts-node": "^7.0.1",
- "tslint": "^5.11.0",
- "typescript": "^3.1.3",
- "tern": "^0.22.3"
- },
- "scripts": {
- "test": "mocha -r ts-node/register src/test/**/*.spec.ts"
- },
+ "author": "Michael Henke",
+ "license": "Apache-2.0",
"repository": {
"type": "git",
"url": "git+https://github.com/aphex3k/homebridge-bloomsky.git"
},
- "keywords": [
- "homebridge-plugin",
- "bloomsky"
- ],
- "author": "Michael Henke",
- "license": "Apache-2.0",
"bugs": {
"url": "https://github.com/aphex3k/homebridge-bloomsky/issues"
},
"homepage": "https://github.com/aphex3k/homebridge-bloomsky#readme",
+ "engines": {
+ "node": ">=10.17.0",
+ "homebridge": ">0.4.53",
+ "npm": ">=6.4.1"
+ },
+ "main": "dist/index.js",
+ "scripts": {
+ "lint": "eslint src/**.ts",
+ "watch": "npm run build && npm link && nodemon",
+ "build": "rimraf ./dist && tsc --build tsconfig.json",
+ "prepublishOnly": "npm run lint && npm run build"
+ },
+ "keywords": [
+ "homebridge-plugin",
+ "bloomsky"
+ ],
"dependencies": {
"child_process": "^1.0.2",
"ip": "^1.1.5",
- "jimp": "^0.5.6",
"optional": "^0.1.4",
"typed-rest-client": "^1.0.9"
},
- "engines": {
- "node": ">=6.2.2",
- "homebridge": ">=0.4.42",
- "npm" : ">=6.4.1"
- },
- "optionalDependencies": {}
+ "devDependencies": {
+ "@types/chai": "^4.1.6",
+ "@types/debug": "0.0.31",
+ "@types/ip": "0.0.31",
+ "@types/node": "^14.0.1",
+ "@typescript-eslint/eslint-plugin": "^2.34.0",
+ "@typescript-eslint/parser": "^2.34.0",
+ "async-wait-until": "^1.2.4",
+ "eslint": "^6.8.0",
+ "homebridge": "^1.1.0",
+ "nodemon": "^2.0.4",
+ "rimraf": "^3.0.2",
+ "ts-node": "^8.10.1",
+ "typescript": "^3.9.2"
+ }
}
diff --git a/preview.jpeg b/preview.jpeg
deleted file mode 100644
index 5c295ba..0000000
Binary files a/preview.jpeg and /dev/null differ
diff --git a/src/AddressResponse.ts b/src/AddressResponse.ts
deleted file mode 100644
index 7c6f238..0000000
--- a/src/AddressResponse.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-declare class AddressResponse {
- public address: string;
- public type: string;
-}
-
-export { AddressResponse};
diff --git a/src/AudioResponse.d.ts b/src/AudioResponse.d.ts
deleted file mode 100644
index 3e37913..0000000
--- a/src/AudioResponse.d.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { BaseResponse } from "./BaseResponse";
-
-declare class AudioResponse extends BaseResponse {
-
-}
-
-export { AudioResponse };
diff --git a/src/BaseResponse.d.ts b/src/BaseResponse.d.ts
deleted file mode 100644
index 981dd58..0000000
--- a/src/BaseResponse.d.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-declare class BaseResponse {
- public port: number;
- // tslint:disable-next-line:variable-name
- public srtp_key: Uint8Array;
- // tslint:disable-next-line:variable-name
- public srtp_salt: Uint8Array;
- public ssrc: number;
-}
-
-export { BaseResponse };
diff --git a/src/Bloomsky.ts b/src/Bloomsky.ts
deleted file mode 100644
index 7837346..0000000
--- a/src/Bloomsky.ts
+++ /dev/null
@@ -1,401 +0,0 @@
-import * as fs from "fs";
-import * as http from "http";
-import * as Client from "typed-rest-client";
-import { IHeaders } from "typed-rest-client/Interfaces";
-import { FFMPEG } from "./Ffmpeg";
-import { API } from "./homebridge";
-import { PlatformAccessory } from "./PlatformAccessory";
-import { IStation } from "./Station";
-
-export { Bloomsky };
-
-export default class Bloomsky {
-
- public static Accessory: PlatformAccessory;
- public static Service: HAPNodeJS.Service;
- public static Characteristic: HAPNodeJS.Characteristic;
- public static Hap: HAPNodeJS.HAPNodeJS;
- public static UUIDGen: HAPNodeJS.uuid;
-
- public timeout: NodeJS.Timeout | undefined;
- public accessories: PlatformAccessory[];
-
- public log: (text: string) => void;
-
- private apiKey: string;
- private apiUrl: string;
- private vcodec: string;
- private api: API | undefined;
- private latestData: IStation[];
- private debug: boolean;
-
- // Platform constructor
- // config may be null
- // api may be null if launched from old homebridge version
- constructor(log: (text: string) => void, config: any, api: API) {
-
- if (Bloomsky.Accessory === undefined) { throw Error("Accessory undefined"); }
- if (Bloomsky.Service === undefined) { throw Error("Service undefined"); }
- if (Bloomsky.Characteristic === undefined) { throw Error("Characteristic undefined"); }
- if (Bloomsky.Hap === undefined) { throw Error("Hap undefined"); }
- if (Bloomsky.UUIDGen === undefined) { throw Error("UUIDGen undefined"); }
-
- this.log = log;
- this.accessories = [] as PlatformAccessory[];
- this.apiKey = config.apiKey;
- this.apiUrl = config.apiUrl || "https://api.bloomsky.com/api/skydata/";
- this.vcodec = config.vcodec || "libx264";
- this.latestData = [] as IStation[];
- this.debug = config.debug;
-
- this.log("Bloomsky Init");
-
- const platform = this;
-
- if (api) {
- // Save the API object as plugin needs to register new accessory via this object
- platform.api = api;
-
- // Listen to event "didFinishLaunching", this means homebridge already finished loading cached accessories.
- // Platform Plugin should only register new accessory that doesn't exist in homebridge after this event.
- // Or start discover new accessories.
-
- platform.api.on("didFinishLaunching", function() {
- platform.log("didFinishLaunching");
-
- platform.updateData().catch((clientError) => { platform.log(clientError); });
-
- }.bind(this));
-
- platform.api.on("publishCameraAccessories", function() {
- platform.log("publishCameraAccessories");
- });
-
- } else {
- platform.updateData().catch((clientError) => { platform.log(clientError); });
- }
- }
-
- // Function invoked when homebridge tries to restore cached accessory.
- // Developer can configure accessory here (like setup event handler).
- // Update current value.
- public configureAccessory(accessory: PlatformAccessory) {
-
- if (this.debug) { this.log("configuring accessory... " + accessory.displayName); }
-
- const platform = this;
- const ffmpeg = this.getFfmpegForStationWithUuid(accessory.UUID);
-
- try {
- accessory.configureCameraSource(ffmpeg);
- } catch {
- accessory.cameraSource = ffmpeg;
- }
-
- for (const index in ffmpeg.services) {
- if (ffmpeg.hasOwnProperty(index)) {
- const service = ffmpeg.services[index];
- try {
- accessory.removeService(service);
- } catch {
- if (this.debug) { this.log("unable to remove existing camera service"); }
- } finally {
- accessory.addService(service);
- if (this.debug) { this.log("added camera service: " + service.displayName); }
- }
- }
- }
-
- // Do not add any existing services... but this is a good place to add services to earlier registered accessories
-
- this.accessories.push(accessory);
- // Set the accessory to reachable if plugin can currently process the accessory,
- // otherwise set to false and update the reachability later by invoking
- // accessory.updateReachability()
- if (this.latestData != null && this.latestData.length > 0) {
- if (this.debug) { this.log("Configure Accessory " + accessory.displayName); }
- const stations = platform.latestData
- .filter((station) => accessory.UUID === Bloomsky.UUIDGen.generate(station.DeviceID));
-
- accessory.reachable = stations.length === 1 && stations[0] !== undefined;
-
- if (accessory.reachable) {
- this.updateAccessory(stations[0]);
- }
- } else {
- if (this.debug) { this.log("Can't Configure Accessory " + accessory.displayName); }
- accessory.reachable = false;
- }
- }
-
- // add accessory dynamically from outside event
- public addAccessory(station: IStation) {
-
- if (this.debug) { this.log("Add Accessory: " + station.DeviceID); }
-
- const uuid = Bloomsky.UUIDGen.generate(station.DeviceID);
- const newAccessory = new Bloomsky.Accessory(station.DeviceName, uuid, Bloomsky.Accessory.Categories.CAMERA);
- const cameraSource = this.getFfmpegForStationWithUuid(uuid);
- const countBefore = newAccessory.services.length;
-
- newAccessory.configureCameraSource(cameraSource);
-
- if (cameraSource.services.length === 0) {
- throw Error ("Camera Control came without services...");
- } else {
- for (const service of newAccessory.services) {
- if (this.debug) { this.log(service.UUID + (service.subtype !== undefined ? "." + service.subtype : "")); }
- }
- }
-
- if (newAccessory.services.length <= countBefore
- || newAccessory.cameraSource !== cameraSource
- || newAccessory.services.length < cameraSource.services.length
- ) {
- throw Error ("Camera Control Service Registration failed... +" + (cameraSource.services.length - countBefore));
- } else {
- if (this.debug) {
- this.log("Registered " +
- (cameraSource.services.length - countBefore) +
- " Camera Control Services");
- }
- }
-
- newAccessory.addService(Bloomsky.Service.TemperatureSensor, "Temperature")
- .getCharacteristic(Bloomsky.Characteristic.CurrentTemperature).updateValue(station.Data.Temperature);
-
- newAccessory.addService(Bloomsky.Service.LightSensor, "Luminance")
- .getCharacteristic(Bloomsky.Characteristic.CurrentAmbientLightLevel).updateValue(station.Data.Luminance);
-
- newAccessory.addService(Bloomsky.Service.HumiditySensor, "Humidity")
- .getCharacteristic(Bloomsky.Characteristic.CurrentRelativeHumidity).updateValue(station.Data.Humidity);
-
- newAccessory.addService(Bloomsky.Service.MotionSensor, "Rain")
- .getCharacteristic(Bloomsky.Characteristic.MotionDetected).updateValue(station.Data.Rain);
-
- newAccessory.addService(Bloomsky.Service.OccupancySensor, "Night")
- .getCharacteristic(Bloomsky.Characteristic.OccupancyDetected).updateValue(station.Data.Night);
-
- // I only have a Sky 1 model so I can only make a guess about the battery level
- // for this specific model.
- if (station.Data.DeviceType === "SKY1") {
- // clamp battery level between 0 and 100
- const batteryLevel = Math.max(0, Math.min(100, (100 / 2600) * station.Data.Voltage));
-
- const batteryService = newAccessory.addService(Bloomsky.Service.BatteryService, "Battery");
- batteryService.getCharacteristic(Bloomsky.Characteristic.BatteryLevel).updateValue(batteryLevel);
- batteryService.getCharacteristic(Bloomsky.Characteristic.ChargingState).updateValue(2);
- batteryService.getCharacteristic(Bloomsky.Characteristic.StatusLowBattery).updateValue(batteryLevel < 20);
- }
-
- let informationService = newAccessory.getService(Bloomsky.Service.AccessoryInformation);
-
- if (!informationService) {
- informationService = newAccessory.addService(Bloomsky.Service.AccessoryInformation, station.DeviceName);
- }
- informationService.getCharacteristic(Bloomsky.Characteristic.Manufacturer).updateValue("Bloomsky");
- informationService.getCharacteristic(Bloomsky.Characteristic.Model).updateValue( station.Data.DeviceType);
- informationService.getCharacteristic(Bloomsky.Characteristic.SerialNumber).updateValue(station.DeviceID);
- informationService.getCharacteristic(Bloomsky.Characteristic.Identify).updateValue(false);
- informationService.getCharacteristic(Bloomsky.Characteristic.Name).updateValue(station.DeviceName);
- informationService.getCharacteristic(Bloomsky.Characteristic.FirmwareRevision).updateValue(station.Data.DeviceType);
-
- if (this.debug) { this.accessories.push(newAccessory); }
-
- this.log("new accessory pushed...");
-
- if (this.api !== undefined ) {
- // https://github.com/nfarina/homebridge/wiki/Supporting-IP-Camera
- this.api.publishCameraAccessories("homebridge-bloomsky", this.accessories);
- } else {
- throw TypeError("this.api UNDEFINED!!!");
- }
-
- if (this.debug) { this.log("new accessory registered..."); }
-
- if (this.debug) {
- let output = "";
- for (const property in newAccessory) {
- if (newAccessory.hasOwnProperty(property)) {
- output += property + ": " + newAccessory[property] + "; ";
- }
- }
- this.log(output);
- }
- }
-
- // add accessory dynamically from outside event
- public updateAccessory(station: IStation) {
- if (this.debug) { this.log("Update Accessory"); }
-
- const platform = this;
- const stationUuid = Bloomsky.UUIDGen.generate(station.DeviceID);
- const accessory = platform.accessories
- .filter((anyAccessory) => anyAccessory.UUID === stationUuid)[0] as PlatformAccessory;
-
- accessory.getService(Bloomsky.Service.TemperatureSensor)
- .getCharacteristic(Bloomsky.Characteristic.CurrentTemperature).updateValue(station.Data.Temperature);
-
- accessory.getService(Bloomsky.Service.LightSensor)
- .getCharacteristic(Bloomsky.Characteristic.CurrentAmbientLightLevel).updateValue(station.Data.Luminance);
-
- accessory.getService(Bloomsky.Service.HumiditySensor)
- .getCharacteristic(Bloomsky.Characteristic.CurrentRelativeHumidity).updateValue(station.Data.Humidity);
-
- accessory.getService(Bloomsky.Service.MotionSensor)
- .getCharacteristic(Bloomsky.Characteristic.MotionDetected).updateValue(station.Data.Rain);
-
- accessory.getService(Bloomsky.Service.OccupancySensor)
- .getCharacteristic(Bloomsky.Characteristic.OccupancyDetected).updateValue(station.Data.Night);
-
- const informationService = accessory.getService(Bloomsky.Service.AccessoryInformation);
- informationService.getCharacteristic(Bloomsky.Characteristic.Manufacturer).updateValue("Bloomsky");
- informationService.getCharacteristic(Bloomsky.Characteristic.Model).updateValue( station.Data.DeviceType);
- informationService.getCharacteristic(Bloomsky.Characteristic.SerialNumber).updateValue(station.DeviceID);
- informationService.getCharacteristic(Bloomsky.Characteristic.Identify).updateValue(false);
- informationService.getCharacteristic(Bloomsky.Characteristic.Name).updateValue(station.DeviceName);
- informationService.getCharacteristic(Bloomsky.Characteristic.FirmwareRevision).updateValue(station.Data.DeviceType);
-
- // I only have a Sky 1 model so I can only make a guess about the battery level
- // for this specific model.
- if (station.Data.DeviceType === "SKY1") {
- // clamp battery level between 0 and 100
- const batteryLevel = Math.max(0, Math.min(100, (100 / 2600) * station.Data.Voltage));
-
- const batteryService = accessory.getService(Bloomsky.Service.BatteryService);
- batteryService.getCharacteristic(Bloomsky.Characteristic.BatteryLevel).updateValue(batteryLevel);
- batteryService.getCharacteristic(Bloomsky.Characteristic.ChargingState).updateValue(2);
- batteryService.getCharacteristic(Bloomsky.Characteristic.StatusLowBattery).updateValue(batteryLevel < 20);
- }
-
- const file = fs.createWriteStream(this.temporaryFilenameForStationUuid(accessory.UUID));
- file.on("finish", function() {
- file.close();
- if (platform.debug) { platform.log("temporary file updated..."); }
- });
- http.get(station.Data.ImageURL, function(response) {
- response.pipe(file);
- platform.log("temporary file written");
- });
- }
-
- // remove accessory dynamically from outside event
- public removeAccessory() {
- if (this.debug) { this.log("Remove Accessory"); }
-
- if (this.api !== undefined) {
- this.api.unregisterPlatformAccessories("homebridge-bloomsky", "Bloomsky", this.accessories);
- }
- this.accessories = [] as PlatformAccessory[];
- }
-
- public temporaryFilenameForStationUuid(uuid: string): string {
- return uuid + ".jpg";
- }
-
- public getFfmpegForStationWithUuid(uuid: string): FFMPEG {
- const filename = this.temporaryFilenameForStationUuid(uuid);
-
- const ffmpeg = new FFMPEG(Bloomsky.UUIDGen, Bloomsky.Hap, {
- name: uuid,
- videoConfig: {
- debug : this.debug,
- maxHeight: 640,
- maxStreams: 1,
- maxWidth: 640,
- source: "-loop 1 -i " + filename,
- vcodec : this.vcodec,
- },
- }, this.log, "ffmpeg", filename);
-
- return ffmpeg;
- }
-
- private async updateData() {
- if (this.apiKey === undefined) {
- if (this.debug) { this.log("Skipping updating data..."); }
- } else {
- const platform = this;
-
- const requestOptions: Client.IRequestOptions = {
- additionalHeaders: { Authorization: this.apiKey } as IHeaders,
- };
-
- const client = new Client.RestClient("NodeJS");
-
- if (platform.debug) { this.log("updateData"); }
-
- const response = await client.get(this.apiUrl + "?unit=intl", requestOptions).catch((clientError) => {
- if (platform.debug) { platform.log(clientError); }
- });
-
- const error: any = response as any;
- if (error !== undefined && error.detail) {
- platform.log(error.detail);
- } else if (response != null) {
- if (response.result != null) {
- platform.latestData = response.result;
- }
-
- if (response != null && platform.latestData.length > 0) {
-
- if (platform.accessories.length > 0) {
- platform.updateExistingAccessories();
- }
- platform.registerNewAccessories();
- platform.updateAccessoriesReachability();
- }
- }
-
- platform.timeout = setTimeout(function() {
- platform.updateData().catch((clientError) => { platform.log(clientError); });
- }.bind(platform),
- platform.debug ? 30000 : 150000); // 2.5 minutes, 10 seconds for debugging
- platform.timeout.unref();
- }
- }
-
- private stationNeedsToBeRegistered(station: IStation) {
- if (this.debug) { this.log ("stationNeedsToBeRegistered: " + station); }
- const stationUuid = Bloomsky.UUIDGen.generate(station.DeviceID).valueOf();
- return this.accessories.filter((accessory) => accessory.UUID.valueOf() === stationUuid).length === 0;
- }
-
- private updateExistingAccessories() {
- if (this.debug) { this.log("updateExistingAccessories"); }
- const platform = this;
-
- if (this.debug) {
- this.log(platform.latestData.toString());
- }
-
- const registeredAccessories = platform.latestData.filter((station) => !this.stationNeedsToBeRegistered(station));
-
- for (let i = 0, len = registeredAccessories.length; i < len; i++) {
- const station = registeredAccessories[i];
- platform.updateAccessory(station);
- }
- }
-
- private registerNewAccessories() {
- if (this.debug) { this.log("registerNewAccessories"); }
- const platform = this;
-
- if (platform.latestData.length === 0) {
- return;
- }
- const unregisteredAccessories = platform.latestData.filter((station) => this.stationNeedsToBeRegistered(station));
-
- for (let i = 0, len = unregisteredAccessories.length; i < len; i++) {
- platform.addAccessory(unregisteredAccessories[i]);
- }
- }
-
- private updateAccessoriesReachability() {
- if (this.debug) { this.log("Update Reachability"); }
- for (const accessory of this.accessories) {
- // accessory.updateReachability(this.latestData != null); // Reachability update is no longer being supported
- accessory.reachable = this.latestData != null;
- }
- }
-}
diff --git a/src/Ffmpeg.ts b/src/Ffmpeg.ts
deleted file mode 100644
index 63f3b88..0000000
--- a/src/Ffmpeg.ts
+++ /dev/null
@@ -1,414 +0,0 @@
-import { spawn } from "child_process";
-import * as crypto from "crypto";
-import hapnodejs = require("hap-nodejs");
-import * as ip from "ip";
-import Jimp = require("jimp");
-import optional = require("optional");
-import { AddressResponse } from "./AddressResponse";
-import { AudioResponse } from "./AudioResponse";
-import { SessionInfo } from "./Session";
-import { SnapshotRequest } from "./SnapshotRequest";
-import { StreamController } from "./StreamController";
-import { StreamRequest } from "./StreamRequest";
-import { StreamResponse } from "./StreamResponse";
-import { VideoResponse } from "./VideoResponse";
-
-export default class FFMPEG implements HAPNodeJS.CameraSource {
- public streamController: any;
- public streamControllers: StreamController[] = [];
- public cameraControllers: any[] = [];
- public pendingSessions: SessionInfo[] = [];
- public ongoingSessions: SessionInfo[] = [];
- public services: HAPNodeJS.Service[] = [];
- public name: string;
- public uuid: HAPNodeJS.uuid;
- public service: any;
-
- private log: (text: string) => void;
- private vcodec: string;
- private videoProcessor: string;
- private fps: number;
- private maxBitrate: number;
- private debug: boolean;
- private ffmpegSource: string;
- private ffmpegImageSource: string;
- private stillImageFilename: string;
- private sharp: any;
-
- constructor(
- uuidfunc: HAPNodeJS.uuid,
- hap: any,
- cameraConfig: any,
- log: (text: string) => void,
- videoProcessor: string,
- stillImageFilename: string) {
-
- if (uuidfunc === undefined) { throw Error("UUIDGen undefined"); }
- if (hap.Service === undefined) { throw Error("Service undefined"); }
- if (log === undefined) { throw Error("Log undefined"); }
- if (hap.StreamController === undefined) { throw Error("StreamController undefined"); }
-
- if (cameraConfig.videoConfig.debug) { log("FFMPEG constructor"); }
-
- this.sharp = optional("sharp");
-
- this.uuid = uuidfunc;
- this.service = hap.Service;
- this.log = log;
- this.streamController = hap.StreamController;
-
- const ffmpegOpt = cameraConfig.videoConfig;
- this.name = cameraConfig.name;
- this.vcodec = ffmpegOpt.vcodec;
- this.videoProcessor = videoProcessor || "ffmpeg";
- this.fps = ffmpegOpt.maxFPS || 10;
- this.maxBitrate = ffmpegOpt.maxBitrate || 300;
- this.debug = ffmpegOpt.debug || false;
-
- if (this.debug) { log("Debug loggin enabled..."); }
-
- if (!ffmpegOpt.source) {
- throw new Error("Missing source for camera.");
- }
-
- this.ffmpegSource = ffmpegOpt.source;
- this.ffmpegImageSource = ffmpegOpt.stillImageSource;
- this.stillImageFilename = stillImageFilename;
-
- const numberOfStreams: number = ffmpegOpt.maxStreams || 2;
-
- const options = {
- audio: {
- codecs: [
- {
- samplerate: 24, // 8, 16, 24 KHz
- type: "OPUS", // Audio Codec
- },
- {
- samplerate: 16,
- type: "AAC-eld",
- },
- ],
- comfort_noise: false,
- },
- disable_audio_proxy: false, // If proxy = true, you can opt out audio proxy via this
- proxy: false, // Requires RTP/RTCP MUX Proxy
- srtp: true, // Supports SRTP AES_CM_128_HMAC_SHA1_80 encryption
- video: {
- codec: {
- levels: [0, 1, 2], // Enum, please refer StreamController.VideoCodecParamLevelTypes
- profiles: [0, 1, 2], // Enum, please refer StreamController.VideoCodecParamProfileIDTypes
- },
- resolutions: [
- [640, 640, 30],
- [640, 640, 15],
- [640, 480, 30],
- [640, 480, 15],
- [640, 360, 30],
- [640, 360, 15],
- [480, 360, 30],
- [480, 360, 15],
- [480, 270, 30],
- [480, 270, 15],
- [320, 240, 30],
- [320, 240, 15], // Apple Watch requires this configuration
- [320, 180, 30],
- [320, 180, 15],
- ],
- },
- };
-
- this.createCameraControlService();
-
- if (this.cameraControllers.length < 1) {
- throw Error("Did not push camera controller...");
- }
-
- this._createStreamControllers(numberOfStreams, options);
- }
-
- public handleCloseConnection(connectionID: any) {
- if (this.debug) { this.log("closing connection for " + this.streamControllers.length + " stream(s)..."); }
- this.streamControllers.forEach(function(controller: StreamController) {
- controller.handleCloseConnection(connectionID);
- });
- }
-
- // Image request: {width: number, height: number}
- // Please override this and invoke callback(error, image buffer) when the snapshot is ready
- public handleSnapshotRequest(request: SnapshotRequest, callback: (error: any, Buffer) => any) {
-
- let dir = __dirname;
- if (dir.endsWith("/lib")) {
- dir = dir.replace("/lib", "");
- }
- const path = dir + "/" + this.stillImageFilename;
-
- if (this.debug) { this.log("Delivering snapshot at path: " + path); }
-
- if (this.sharp == null) {
- if (this.debug) { this.log("... using Jimp"); }
- Jimp.read(path)
- .then((image) => {
- image
- .resize(request.width, Jimp.AUTO)
- .crop(0, (image.bitmap.height - request.height) / 2, request.width, request.height)
- .quality(90)
- .getBuffer(Jimp.MIME_JPEG, (error, buffer) => {
- if (error !== null) {
- if (this.debug) { this.log("Error getting buffer for snapshot: " + error); }
- callback(error, undefined);
- } else {
- callback(undefined, buffer);
- }
- });
- })
- .catch((error) => {
- if (this.debug) { this.log("Error reading snapshot at path: " + error); }
- callback(error, undefined);
- });
- } else {
- if (this.debug) { this.log("... using Sharp"); }
- this.sharp(path)
- .resize(request.width, request.height)
- .toBuffer()
- .then((data) => callback(undefined, data))
- .catch((error) => callback(error, undefined));
- }
- }
-
- public prepareStream(request: StreamRequest, callback: (response: StreamResponse) => void) {
- if (this.debug) { this.log("prepareStream"); }
-
- const sessionInfo = {} as SessionInfo;
- const sessionID = request.sessionID;
- const targetAddress = request.targetAddress;
-
- sessionInfo.address = targetAddress;
-
- const response = {} as StreamResponse;
- const videoInfo = request.video;
-
- if (videoInfo) {
- const targetPort: number = videoInfo.port;
- const srtpKey: Uint8Array = videoInfo.srtp_key;
- const srtpSalt: Uint8Array = videoInfo.srtp_salt;
-
- if (this.debug) { this.log ("srtpKey.length=" + srtpKey.length + ", srtpSalt.length=" + srtpSalt.length); }
-
- // SSRC is a 32 bit integer that is unique per stream
- const ssrcSource = crypto.randomBytes(4);
- ssrcSource[0] = 0;
- const ssrc = ssrcSource.readInt32BE(0, true);
-
- this.fps = videoInfo.fps || this.fps;
-
- const videoResp: VideoResponse = {
- fps: videoInfo.fps,
- height: videoInfo.height,
- max_bit_rate: videoInfo.max_bit_rate,
- port: targetPort,
- srtp_key: srtpKey,
- srtp_salt: srtpSalt,
- ssrc,
- width: videoInfo.width,
- };
-
- response.video = videoResp;
-
- sessionInfo.video_port = targetPort;
- sessionInfo.video_srtp = Buffer.concat([srtpKey, srtpSalt]);
- sessionInfo.video_ssrc = ssrc;
- }
-
- const audioInfo = request.audio;
-
- if (audioInfo) {
- const targetPort = audioInfo.port;
- const srtpKey = audioInfo.srtp_key;
- const srtpSalt = audioInfo.srtp_salt;
-
- // SSRC is a 32 bit integer that is unique per stream
- const ssrcSource = crypto.randomBytes(4);
- ssrcSource[0] = 0;
- const ssrc = ssrcSource.readInt32BE(0, true);
-
- const audioResp: AudioResponse = {
- port: targetPort,
- srtp_key: srtpKey,
- srtp_salt: srtpSalt,
- ssrc,
- };
-
- response.audio = audioResp;
-
- sessionInfo.audio_port = targetPort;
- sessionInfo.audio_port = Buffer.concat([srtpKey, srtpSalt]);
- sessionInfo.audio_ssrc = ssrc;
- }
-
- const currentAddress = ip.address();
- const addressResp: AddressResponse = {
- address: currentAddress,
- type: "v6",
- };
-
- if (ip.isV4Format(currentAddress)) {
- addressResp.type = "v4";
- }
-
- response.address = addressResp;
- this.pendingSessions[this.uuid.unparse(sessionID, 0)] = sessionInfo;
-
- callback(response);
- }
-
- public handleStreamRequest(request: StreamRequest) {
- if (this.debug) { this.log("handleStreamRequest"); }
- const platform = this;
- const sessionID = request.sessionID;
- const requestType = request.type;
- if (sessionID) {
- const sessionIdentifier = this.uuid.unparse(sessionID, 0);
- const sessionInfo = this.pendingSessions[sessionIdentifier];
-
- if (requestType === "start" && sessionInfo) {
- let width = 640;
- let height = 640;
- let fps = this.fps || 15;
- let vbitrate = this.maxBitrate;
- const vcodec = this.vcodec || "libx264";
- const packetsize = 1316; // 188 376
-
- const videoInfo = request.video;
- if (videoInfo) {
- width = videoInfo.width;
- height = videoInfo.height;
-
- const expectedFPS = videoInfo.fps;
- if (expectedFPS < fps) {
- fps = expectedFPS;
- }
- if (videoInfo.max_bit_rate < vbitrate) {
- vbitrate = videoInfo.max_bit_rate;
- }
- }
-
- const targetAddress = sessionInfo.address;
- const targetVideoPort = sessionInfo.video_port;
- const videoKey = sessionInfo.video_srtp;
- const videoSsrc = sessionInfo.video_ssrc;
-
- const ffmpegCommand =
- "-threads 0 -an -re -r 1" +
- " " + this.ffmpegSource +
- " -vf fps=" + fps +
- " -map 0:0" +
- " -f mp4 -vcodec " + vcodec +
- " -preset faster" +
- " -pix_fmt yuv420p -an" +
- " -r " + fps +
- " -g " + (fps * 2) +
- " -movflags frag_keyframe+empty_moov -tune stillimage" +
- " -b:v " + vbitrate + "k" +
- " -bufsize " + vbitrate + "k" +
- " -maxrate " + vbitrate + "k" +
- " -payload_type 99" +
- " -ssrc " + videoSsrc +
- " -f rtp" +
- " -srtp_out_suite AES_CM_128_HMAC_SHA1_80" +
- " -srtp_out_params " + videoKey.toString("base64") +
- " srtp://" + targetAddress + ":" + targetVideoPort +
- "?rtcpport=" + targetVideoPort +
- "&localrtcpport=" + targetVideoPort +
- "&pkt_size=" + packetsize;
-
- const ffmpeg = spawn(this.videoProcessor, ffmpegCommand.split(" "), {env: process.env});
- this.log(
- "Start streaming video from " + this.name + " with " + width + "x" + height + "@" + vbitrate + "kBit");
-
- if (this.debug) {
- this.log("ffmpeg " + ffmpegCommand);
- }
-
- ffmpeg.stdout.on("data", function(data) {
- // Do not log to the console if debugging is turned off
- if (platform.debug) {
- platform.log(data.toString());
- }
- });
- // Always setup hook on stderr.
- // Without this streaming stops within one to two minutes.
- ffmpeg.stderr.on("data", function(data) {
- // Do not log to the console if debugging is turned off
- if (platform.debug) {
- platform.log(data.toString());
- }
- });
- ffmpeg.on("error", function(error: any) {
- platform.log("An error occurs while making stream request");
- if (platform.debug) {
- platform.log(error);
- }
- });
- ffmpeg.on("close", (code) => {
- if (code == null || code === 0 || code === 255) {
- platform.log("Stopped streaming");
- } else {
- platform.log("ERROR: FFmpeg exited with code " + code);
- for (const controller of this.streamControllers) {
- if (controller.sessionIdentifier === sessionID) {
- controller.forceStop();
- }
- }
- }
- });
- this.ongoingSessions[sessionIdentifier] = ffmpeg;
-
- delete this.pendingSessions[sessionIdentifier];
-
- } else if (requestType === "stop") {
- const ffmpegProcess = this.ongoingSessions[sessionIdentifier];
- if (ffmpegProcess) {
- ffmpegProcess.kill("SIGTERM");
- }
- delete this.ongoingSessions[sessionIdentifier];
- }
- }
- }
-
- public createCameraControlService() {
- if (this.service.CameraControl === undefined) {
- throw Error("CameraControl undefined");
- }
-
- if (this.debug) { this.log("createCameraControlService"); }
-
- const controlService = new this.service.CameraControl();
-
- this.services.push(controlService);
- this.cameraControllers.push(controlService);
-
- if (this.services.filter((s) => s === controlService).length < 1) {
- throw Error ("Failed to register Camera Control Service...");
- }
- }
-
- // Private
- private _createStreamControllers(maxStreams, options) {
-
- if (this.debug) { this.log("_createStreamControllers"); }
-
- for (let i = 0; i < maxStreams; i++) {
- if (this.debug) { this.log("adding StreamController #" + (i + 1) + "/" + maxStreams); }
- const streamController = new this.streamController(i, options, this);
-
- this.services.push(streamController.service);
- this.streamControllers.push(streamController);
- }
-
- if (this.debug) { this.log(this.streamControllers.length + "/" + maxStreams + " stream controllers registered"); }
- }
-}
-
-export { FFMPEG };
diff --git a/src/PlatformAccessory.ts b/src/PlatformAccessory.ts
index b8f3043..704ea74 100644
--- a/src/PlatformAccessory.ts
+++ b/src/PlatformAccessory.ts
@@ -1,49 +1,83 @@
-import { EventEmitter } from "events";
-import * as hap from "hap-nodejs";
-
-// tslint:disable-next-line:interface-name
-declare interface PlatformAccessory extends HAPNodeJS.Accessory {
- displayName: string;
- username: string;
- pincode: string;
- UUID: string;
- aid: string;
- bridged: boolean;
- bridgedAccessories: HAPNodeJS.Accessory[];
- reachable: boolean;
- category: HAPNodeJS.Accessory.Categories;
- services: HAPNodeJS.Service[];
- cameraSource: HAPNodeJS.CameraSource;
- Categories: typeof HAPNodeJS.Accessory.Categories;
-
- // tslint:disable-next-line:no-misused-new
- new (displayName: string, category: string): PlatformAccessory;
- // tslint:disable-next-line:unified-signatures
- new (displayName: string, uuid: string, subtype: number): PlatformAccessory;
- // tslint:disable-next-line:ban-types
- addService(service: HAPNodeJS.Service | Function): HAPNodeJS.Service;
- addService(service: HAPNodeJS.Service, displayName: string): HAPNodeJS.Service;
- // tslint:disable-next-line:unified-signatures
- // addService(category: HAPNodeJS.Accessory.Categories, displayName: string): HAPNodeJS.Service;
- removeService(service: HAPNodeJS.Service): HAPNodeJS.Service;
- // tslint:disable-next-line:unified-signatures
- removeService(service: HAPNodeJS.Service, displayName: string): HAPNodeJS.Service;
- getService(service: HAPNodeJS.Service): HAPNodeJS.Service;
- // tslint:disable-next-line:unified-signatures
- getService(name: string): HAPNodeJS.Service;
- updateReachability(reachable: boolean): void;
- addBridgedAccessory(accessory: HAPNodeJS.Accessory, deferUpdate: boolean): HAPNodeJS.Accessory;
- addBridgedAccessories(accessories: HAPNodeJS.Accessory[]): void;
- removeBridgedAccessory(accessory: HAPNodeJS.Accessory, deferUpdate: boolean): void;
- removeBridgedAccessories(accessories: HAPNodeJS.Accessory[]): void;
- getCharacteristicByIID(iid: string): HAPNodeJS.Characteristic;
- getBridgedAccessoryByAID(aid: string): HAPNodeJS.Accessory;
- findCharacteristic(aid: string, iid: string): HAPNodeJS.Accessory;
- configureCameraSource(cameraSource: HAPNodeJS.CameraSource): void;
- toHAP(opt: any): JSON;
- publish(info: HAPNodeJS.PublishInfo, allowInsecureRequest: boolean): void;
- destroy(): void;
- setupURI(): string;
-}
+import { Bloomsky } from "./platform";
+import { PlatformAccessory } from "homebridge";
+import { Station } from "./Station";
+
+/**
+ * Platform Accessory
+ * An instance of this class is created for each accessory your platform registers
+ * Each accessory may expose multiple services of different service types.
+ */
+export class BloomskyPlatformAccessory {
+ constructor(
+ private readonly platform: Bloomsky,
+ private readonly accessory: PlatformAccessory,
+ station: Station
+ ) {
+ // set accessory information
+ this.accessory
+ .getService(this.platform.Service.AccessoryInformation)!
+ .setCharacteristic(this.platform.Characteristic.Manufacturer, "Bloomsky")
+ .setCharacteristic(
+ this.platform.Characteristic.Model,
+ station.Data.DeviceType
+ )
+ .setCharacteristic(
+ this.platform.Characteristic.SerialNumber,
+ station.DeviceID
+ )
+ .setCharacteristic(this.platform.Characteristic.Name, station.DeviceName);
+
+ // I only have a Sky 1 model so I can only make a guess about the battery level
+ // for this specific model.
+ if (station.Data.DeviceType === "SKY1") {
+ // clamp battery level between 0 and 100
+ const batteryLevel = Math.max(
+ 0,
+ Math.min(100, (100 / 2600) * station.Data.Voltage)
+ );
+
+ const batteryService =
+ this.accessory.getService(this.platform.Service.BatteryService) ||
+ this.accessory.addService(this.platform.Service.BatteryService);
+
+ batteryService
+ .getCharacteristic(this.platform.Characteristic.BatteryLevel)
+ .updateValue(batteryLevel);
+ batteryService
+ .getCharacteristic(this.platform.Characteristic.ChargingState)
+ .updateValue(2);
+ batteryService
+ .getCharacteristic(this.platform.Characteristic.StatusLowBattery)
+ .updateValue(batteryLevel < 20);
+ batteryService.setCharacteristic(
+ this.platform.Characteristic.Name,
+ station.DeviceName
+ );
+ }
-export { PlatformAccessory };
+ this.accessory
+ .addService(this.platform.Service.TemperatureSensor)
+ .getCharacteristic(this.platform.Characteristic.CurrentTemperature)
+ .updateValue(station.Data.Temperature);
+
+ this.accessory
+ .addService(this.platform.Service.LightSensor, "Luminance")
+ .getCharacteristic(this.platform.Characteristic.CurrentAmbientLightLevel)
+ .updateValue(station.Data.Luminance);
+
+ this.accessory
+ .addService(this.platform.Service.HumiditySensor, "Humidity")
+ .getCharacteristic(this.platform.Characteristic.CurrentRelativeHumidity)
+ .updateValue(station.Data.Humidity);
+
+ this.accessory
+ .addService(this.platform.Service.MotionSensor, "Rain")
+ .getCharacteristic(this.platform.Characteristic.MotionDetected)
+ .updateValue(station.Data.Rain);
+
+ this.accessory
+ .addService(this.platform.Service.OccupancySensor, "Night")
+ .getCharacteristic(this.platform.Characteristic.OccupancyDetected)
+ .updateValue(station.Data.Night);
+ }
+}
diff --git a/src/Session.ts b/src/Session.ts
deleted file mode 100644
index 491bdb4..0000000
--- a/src/Session.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-declare class SessionInfo {
- public address: any;
- // tslint:disable-next-line:variable-name
- public video_port: any;
- // tslint:disable-next-line:variable-name
- public video_srtp: Buffer;
- // tslint:disable-next-line:variable-name
- public video_ssrc: number;
- // tslint:disable-next-line:variable-name
- public audio_port: any;
- // tslint:disable-next-line:variable-name
- public audio_ssrc: number;
-}
-
-export { SessionInfo };
diff --git a/src/SnapshotRequest.ts b/src/SnapshotRequest.ts
deleted file mode 100644
index 081c163..0000000
--- a/src/SnapshotRequest.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-declare class SnapshotRequest {
- public width: number;
- public height: number;
-}
-
-export { SnapshotRequest };
diff --git a/src/Station.d.ts b/src/Station.d.ts
new file mode 100644
index 0000000..0d6ff8b
--- /dev/null
+++ b/src/Station.d.ts
@@ -0,0 +1,18 @@
+import { URL } from "url";
+
+declare interface Station {
+ DeviceID: string;
+ DeviceName: string;
+ Data: StationData;
+}
+
+declare interface StationData {
+ Temperature: number;
+ Luminance: number;
+ Humidity: number;
+ Rain: boolean;
+ Night: boolean;
+ Voltage: number;
+ DeviceType: string;
+ ImageURL: URL;
+}
diff --git a/src/Station.ts b/src/Station.ts
deleted file mode 100644
index 829f3df..0000000
--- a/src/Station.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import { URL } from "url";
-
-export declare interface IStation {
- DeviceID: string;
- DeviceName: string;
- Data: IStationData;
-}
-
-export declare interface IStationData {
- Temperature: number;
- Luminance: number;
- Humidity: number;
- Rain: boolean;
- Night: boolean;
- Voltage: number;
- DeviceType: string;
- ImageURL: URL;
-}
diff --git a/src/StreamController.ts b/src/StreamController.ts
deleted file mode 100644
index 5c7a52b..0000000
--- a/src/StreamController.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-declare class StreamController {
- public service: HAPNodeJS.Service;
- public sessionIdentifier: any;
- constructor(identifier: any, options: any, cameraSource: HAPNodeJS.CameraSource);
- public forceStop(): void;
- public handleCloseConnection(connectionID): void;
-}
-
-export { StreamController };
diff --git a/src/StreamRequest.ts b/src/StreamRequest.ts
deleted file mode 100644
index d78ffc7..0000000
--- a/src/StreamRequest.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { AudioResponse } from "./AudioResponse";
-import { VideoResponse } from "./VideoResponse";
-
-declare class StreamRequest {
- public sessionID: any;
- public type: any;
- public video: VideoResponse;
- public targetAddress: string;
- public audio: AudioResponse | undefined;
-}
-
-export { StreamRequest };
diff --git a/src/StreamResponse.ts b/src/StreamResponse.ts
deleted file mode 100644
index f94cffb..0000000
--- a/src/StreamResponse.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { AddressResponse } from "./AddressResponse";
-import { AudioResponse } from "./AudioResponse";
-import { VideoResponse } from "./VideoResponse";
-
-declare class StreamResponse {
- public video: VideoResponse;
- public audio: AudioResponse;
- public address: AddressResponse;
-}
-
-export { StreamResponse };
diff --git a/src/VideoResponse.d.ts b/src/VideoResponse.d.ts
deleted file mode 100644
index 8948e50..0000000
--- a/src/VideoResponse.d.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { BaseResponse } from "./BaseResponse";
-
-declare class VideoResponse extends BaseResponse{
- width: number;
- height: number;
- fps: number;
- max_bit_rate: number;
-}
-
-export { VideoResponse }
diff --git a/src/homebridge.d.ts b/src/homebridge.d.ts
deleted file mode 100644
index c118d9d..0000000
--- a/src/homebridge.d.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import { EventEmitter } from "events";
-
-declare class API extends EventEmitter {
- constructor();
-
- public accessory(name: any): any;
-
- public platform(name: any): any;
-
- public publishCameraAccessories(pluginName: any, accessories: any): void;
-
- public registerAccessory(
- pluginName: any, accessoryName: any, constructor: any, configurationRequestHandler: any): void;
-
- public registerPlatform(pluginName: any, platformName: any, constructor: any, dynamic: any): void;
-
- public registerPlatformAccessories(pluginName: any, platformName: any, accessories: any): void;
-
- public unregisterPlatformAccessories(pluginName: any, platformName: any, accessories: any): void;
-
- public updatePlatformAccessories(accessories: any): void;
-
-}
-
-export { API };
diff --git a/src/index.ts b/src/index.ts
new file mode 100644
index 0000000..1e3916e
--- /dev/null
+++ b/src/index.ts
@@ -0,0 +1,10 @@
+import { API } from "homebridge";
+import { Bloomsky } from "./platform";
+import { PLATFORM_NAME } from "./settings";
+
+/**
+ * This method registers the platform with Homebridge
+ */
+export = (api: API) => {
+ api.registerPlatform(PLATFORM_NAME, Bloomsky);
+};
diff --git a/src/platform.ts b/src/platform.ts
new file mode 100644
index 0000000..b54b122
--- /dev/null
+++ b/src/platform.ts
@@ -0,0 +1,250 @@
+import * as Client from "typed-rest-client";
+
+import {
+ API,
+ APIEvent,
+ CameraControllerOptions,
+ Characteristic,
+ DynamicPlatformPlugin,
+ Logger,
+ PlatformAccessory,
+ PlatformConfig,
+ Service,
+} from "homebridge";
+import { PLATFORM_NAME, PLUGIN_NAME } from "./settings";
+
+import { BloomskyFFMPEGStreamingDelegate } from "./streamingDelegate";
+import { BloomskyPlatformAccessory } from "./platformAccessory";
+import { EventEmitter } from "events";
+import { Station } from "./Station";
+
+/**
+ * HomebridgePlatform
+ * This class is the main constructor for your plugin, this is where you should
+ * parse the user config and discover/register accessories with Homebridge.
+ */
+export class Bloomsky implements DynamicPlatformPlugin {
+ public readonly Service: typeof Service = this.api.hap.Service;
+ public readonly Characteristic: typeof Characteristic = this.api.hap
+ .Characteristic;
+
+ // this is used to track restored cached accessories
+ public readonly accessories: PlatformAccessory[] = [];
+
+ // plugin configuration data
+ private apiKey: string;
+ private apiUrl: string;
+ private vcodec: string;
+ private latestData: Station[];
+ private timeout: NodeJS.Timeout | undefined;
+
+ private emitters: EventEmitter[] = [];
+
+ constructor(
+ public readonly log: Logger,
+ public readonly config: PlatformConfig,
+ public readonly api: API
+ ) {
+ this.log.debug("Finished initializing platform:", this.config.name);
+
+ this.apiKey = config.apiKey;
+ this.apiUrl = config.apiUrl || "https://api.bloomsky.com/api/skydata/";
+ this.vcodec = config.vcodec || "libx264";
+ this.latestData = [] as Station[];
+
+ // When this event is fired it means Homebridge has restored all cached accessories from disk.
+ // Dynamic Platform plugins should only register new accessories after this event was fired,
+ // in order to ensure they weren't added to homebridge already. This event can also be used
+ // to start discovery of new accessories.
+ this.api.on(APIEvent.DID_FINISH_LAUNCHING, () => {
+ log.debug("Executed didFinishLaunching callback");
+ // run the method to discover / register your devices as accessories
+
+ this.discoverDevices();
+ this.updateData();
+ });
+ }
+
+ /**
+ * This function is invoked when homebridge restores cached accessories from disk at startup.
+ * It should be used to setup event handlers for characteristics and update respective values.
+ */
+ configureAccessory(accessory: PlatformAccessory) {
+ this.log.info("Loading accessory from cache:", accessory.displayName);
+
+ const streamingDelegate = new BloomskyFFMPEGStreamingDelegate(this.api.hap);
+ this.emitters[accessory.UUID] = streamingDelegate.bloomskyEvents;
+
+ const options: CameraControllerOptions = {
+ cameraStreamCount: 2, // HomeKit requires at least 2 streams, but 1 is also just fine
+ delegate: streamingDelegate,
+
+ streamingOptions: {
+ // srtp: true, // legacy option which will just enable AES_CM_128_HMAC_SHA1_80 (can still be used though)
+ supportedCryptoSuites: [
+ this.api.hap.SRTPCryptoSuites.NONE,
+ this.api.hap.SRTPCryptoSuites.AES_CM_128_HMAC_SHA1_80,
+ ], // NONE is not supported by iOS just there for testing with Wireshark for example
+ video: {
+ codec: {
+ profiles: [
+ this.api.hap.H264Profile.BASELINE,
+ this.api.hap.H264Profile.MAIN,
+ this.api.hap.H264Profile.HIGH,
+ ],
+ levels: [
+ this.api.hap.H264Level.LEVEL3_1,
+ this.api.hap.H264Level.LEVEL3_2,
+ this.api.hap.H264Level.LEVEL4_0,
+ ],
+ },
+ resolutions: [
+ [1920, 1080, 30], // width, height, framerate
+ [1280, 960, 30],
+ [1280, 720, 30],
+ [1024, 768, 30],
+ [640, 480, 30],
+ [640, 360, 30],
+ [480, 360, 30],
+ [480, 270, 30],
+ [320, 240, 30],
+ [320, 240, 15], // Apple Watch requires this configuration (Apple Watch also seems to required OPUS @16K)
+ [320, 180, 30],
+ ],
+ },
+ /* audio option is omitted, as it is not supported in this example; HAP-NodeJS will fake an appropriate audio codec
+ audio: {
+ comfort_noise: false, // optional, default false
+ codecs: [
+ {
+ type: AudioStreamingCodecType.OPUS,
+ audioChannels: 1, // optional, default 1
+ samplerate: [AudioStreamingSamplerate.KHZ_16, AudioStreamingSamplerate.KHZ_24],
+ // 16 and 24 must be present for AAC-ELD or OPUS
+ },
+ ],
+ },
+ // */
+ },
+ };
+
+ const cameraController = new this.api.hap.CameraController(options);
+ streamingDelegate.controller = cameraController;
+
+ accessory.configureController(cameraController);
+ // add the restored accessory to the accessories cache so we can track if it has already been registered
+ this.accessories.push(accessory);
+ }
+
+ /**
+ * This is an example method showing how to register discovered accessories.
+ * Accessories must only be registered once, previously created accessories
+ * must not be registered again to prevent "duplicate UUID" errors.
+ */
+ discoverDevices() {
+ if (this.latestData.length === 0) {
+ return;
+ }
+
+ // loop over the discovered devices and register each one if it has not already been registered
+ for (const device of this.latestData) {
+ // generate a unique id for the accessory this should be generated from
+ // something globally unique, but constant, for example, the device serial
+ // number or MAC address
+ const uuid = this.api.hap.uuid.generate(device.DeviceID);
+
+ if (this.emitters[uuid]) {
+ const emitter = this.emitters[uuid] as EventEmitter;
+ emitter.emit("ImageURL", device.Data.ImageURL);
+ }
+
+ // see if an accessory with the same uuid has already been registered and restored from
+ // the cached devices we stored in the `configureAccessory` method above
+ const existingAccessory = this.accessories.find(
+ (accessory) => accessory.UUID === uuid
+ );
+
+ if (existingAccessory) {
+ // the accessory already exists
+ this.log.info(
+ "Restoring existing accessory from cache:",
+ existingAccessory.displayName
+ );
+
+ // if you need to update the accessory.context then you should run `api.updatePlatformAccessories`. eg.:
+ existingAccessory.context.device = device;
+
+ this.api.updatePlatformAccessories([existingAccessory]);
+
+ // create the accessory handler for the restored accessory
+ // this is imported from `platformAccessory.ts`
+ new BloomskyPlatformAccessory(this, existingAccessory, device);
+ } else {
+ // the accessory does not yet exist, so we need to create it
+ this.log.info("Adding new accessory:", device.DeviceName);
+
+ // create a new accessory
+ const accessory = new this.api.platformAccessory(
+ device.DeviceName,
+ uuid
+ );
+
+ // store a copy of the device object in the `accessory.context`
+ // the `context` property can be used to store any data about the accessory you may need
+ accessory.context.device = device;
+
+ // create the accessory handler for the newly create accessory
+ // this is imported from `platformAccessory.ts`
+ new BloomskyPlatformAccessory(this, accessory, device);
+
+ this.configureAccessory(accessory);
+
+ // link the accessory to your platform
+ this.api.registerPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, [
+ accessory,
+ ]);
+ }
+ }
+ }
+
+ /**
+ * Fetch data from the API, then
+ * 1. register new devices
+ * 2. update values for existing devices
+ */
+ private async updateData() {
+ const requestOptions: Client.IRequestOptions = {
+ additionalHeaders: { Authorization: this.apiKey },
+ };
+
+ const client = new Client.RestClient("NodeJS");
+
+ const response = await client
+ .get(this.apiUrl + "?unit=intl", requestOptions)
+ .catch((clientError) => {
+ this.log.error(clientError);
+ });
+
+ const error: any = response as any;
+ if (error !== undefined && error.detail) {
+ this.log.error(error.detail);
+ } else if (response !== null) {
+ const r = response as Client.IRestResponse;
+ if (r.result !== null) {
+ this.latestData = r.result;
+ }
+
+ this.discoverDevices();
+
+ this.timeout = setTimeout(
+ (() => {
+ this.updateData().catch((clientError) => {
+ this.log.error(clientError);
+ });
+ }).bind(this),
+ 150000
+ );
+ this.timeout.unref();
+ }
+ }
+}
diff --git a/src/settings.ts b/src/settings.ts
new file mode 100644
index 0000000..ee3aee4
--- /dev/null
+++ b/src/settings.ts
@@ -0,0 +1,9 @@
+/**
+ * This is the name of the platform that users will use to register the plugin in the Homebridge config.json
+ */
+export const PLATFORM_NAME = "Bloomsky";
+
+/**
+ * This must match the name of your plugin as defined the package.json
+ */
+export const PLUGIN_NAME = "homebridge-bloomsky";
diff --git a/src/streamingDelegate.ts b/src/streamingDelegate.ts
new file mode 100644
index 0000000..1595750
--- /dev/null
+++ b/src/streamingDelegate.ts
@@ -0,0 +1,269 @@
+import {
+ CameraController,
+ CameraStreamingDelegate,
+ HAP,
+ PrepareStreamCallback,
+ PrepareStreamRequest,
+ PrepareStreamResponse,
+ SRTPCryptoSuites,
+ SnapshotRequest,
+ SnapshotRequestCallback,
+ StreamRequestCallback,
+ StreamRequestTypes,
+ StreamSessionIdentifier,
+ StreamingRequest,
+ VideoInfo,
+} from 'homebridge';
+import { ChildProcess, spawn } from 'child_process';
+
+import { EventEmitter } from 'events';
+import ip from 'ip';
+
+type SessionInfo = {
+ address: string; // address of the HAP controller
+
+ videoPort: number;
+ videoCryptoSuite: SRTPCryptoSuites; // should be saved if multiple suites are supported
+ videoSRTP: Buffer; // key and salt concatenated
+ videoSSRC: number; // rtp synchronisation source
+
+ /* Won't be save as audio is not supported by this example
+ audioPort: number,
+ audioCryptoSuite: SRTPCryptoSuites,
+ audioSRTP: Buffer,
+ audioSSRC: number,
+ */
+};
+
+const FFMPEGH264ProfileNames = ['baseline', 'main', 'high'];
+const FFMPEGH264LevelNames = ['3.1', '3.2', '4.0'];
+
+export class BloomskyFFMPEGStreamingDelegate
+implements CameraStreamingDelegate {
+ private ffmpegDebugOutput = true;
+
+ public readonly bloomskyEvents = new EventEmitter();
+ private imageUrl: string | undefined;
+ private readonly hap: HAP;
+ controller?: CameraController;
+
+ // keep track of sessions
+ pendingSessions: Record = {};
+ ongoingSessions: Record = {};
+
+ constructor(hap: HAP) {
+ this.hap = hap;
+
+ this.bloomskyEvents.on('ImageURL', (url) => {
+ console.log('ImageURL', url);
+ this.imageUrl = url;
+ });
+ }
+
+ handleSnapshotRequest(
+ request: SnapshotRequest,
+ callback: SnapshotRequestCallback,
+ ): void {
+ const ffmpegCommand = this.imageUrl
+ ? `-loop 1 -i ${this.imageUrl} -vframes 1 -f mjpeg -`
+ : `-f lavfi -i testsrc=s=${request.width}x${request.height} -vframes 1 -f mjpeg -`;
+ const ffmpeg = spawn('ffmpeg', ffmpegCommand.split(' '), {
+ env: process.env,
+ });
+
+ const snapshotBuffers: Buffer[] = [];
+
+ ffmpeg.stdout.on('data', (data) => snapshotBuffers.push(data));
+ ffmpeg.stderr.on('data', (data) => {
+ if (this.ffmpegDebugOutput) {
+ console.log('SNAPSHOT: ' + String(data));
+ }
+ });
+
+ ffmpeg.on('exit', (code, signal) => {
+ if (signal) {
+ console.log('Snapshot process was killed with signal: ' + signal);
+ callback(new Error('killed with signal ' + signal));
+ } else if (code === 0) {
+ console.log(
+ `Successfully captured snapshot at ${request.width}x${request.height}`,
+ );
+ callback(undefined, Buffer.concat(snapshotBuffers));
+ } else {
+ console.log('Snapshot process exited with code ' + code);
+ callback(new Error('Snapshot process exited with code ' + code));
+ }
+ });
+ }
+
+ // called when iOS request rtp setup
+ prepareStream(
+ request: PrepareStreamRequest,
+ callback: PrepareStreamCallback,
+ ): void {
+ const sessionId: StreamSessionIdentifier = request.sessionID;
+ const targetAddress = request.targetAddress;
+
+ const video = request.video;
+ const videoPort = video.port;
+
+ const videoCryptoSuite = video.srtpCryptoSuite; // could be used to support multiple crypto suite (or support no suite for debugging)
+ const videoSrtpKey = video.srtp_key;
+ const videoSrtpSalt = video.srtp_salt;
+
+ const videoSSRC = this.hap.CameraController.generateSynchronisationSource();
+
+ const sessionInfo: SessionInfo = {
+ address: targetAddress,
+
+ videoPort: videoPort,
+ videoCryptoSuite: videoCryptoSuite,
+ videoSRTP: Buffer.concat([videoSrtpKey, videoSrtpSalt]),
+ videoSSRC: videoSSRC,
+ };
+
+ const currentAddress = ip.address('public', request.addressVersion); // ipAddress version must match
+ const response: PrepareStreamResponse = {
+ address: currentAddress,
+ video: {
+ port: videoPort,
+ ssrc: videoSSRC,
+
+ srtp_key: videoSrtpKey,
+ srtp_salt: videoSrtpSalt,
+ },
+ // audio is omitted as we do not support audio in this example
+ };
+
+ this.pendingSessions[sessionId] = sessionInfo;
+ callback(undefined, response);
+ }
+
+ // called when iOS device asks stream to start/stop/reconfigure
+ handleStreamRequest(
+ request: StreamingRequest,
+ callback: StreamRequestCallback,
+ ): void {
+ const sessionId = request.sessionID;
+
+ switch (request.type) {
+ case StreamRequestTypes.START:
+ const sessionInfo = this.pendingSessions[sessionId];
+
+ const video: VideoInfo = request.video;
+
+ const profile = FFMPEGH264ProfileNames[video.profile];
+ const level = FFMPEGH264LevelNames[video.level];
+ const width = video.width;
+ const height = video.height;
+ const fps = video.fps;
+
+ const payloadType = video.pt;
+ const maxBitrate = video.max_bit_rate;
+ const rtcpInterval = video.rtcp_interval; // usually 0.5
+ const mtu = video.mtu; // maximum transmission unit
+
+ const address = sessionInfo.address;
+ const videoPort = sessionInfo.videoPort;
+ const ssrc = sessionInfo.videoSSRC;
+ const cryptoSuite = sessionInfo.videoCryptoSuite;
+ const videoSRTP = sessionInfo.videoSRTP.toString('base64');
+
+ console.log(
+ `Starting video stream (${width}x${height}, ${fps} fps, ${maxBitrate} kbps, ${mtu} mtu)...`,
+ );
+
+ const part1 = this.imageUrl
+ ? `-loop 1 -i ${this.imageUrl} -map 0:0 `
+ : `-f lavfi -i testsrc=size=${width}x${height}:rate=${fps} -map 0:0 `;
+ let videoffmpegCommand =
+ part1 +
+ `-c:v libx264 -pix_fmt yuv420p -r ${fps} -an -sn -dn -b:v ${maxBitrate}k -bufsize ${
+ 2 * maxBitrate
+ }k -maxrate ${maxBitrate}k ` +
+ `-payload_type ${payloadType} -ssrc ${ssrc} -f rtp `; // -profile:v ${profile} -level:v ${level}
+
+ if (cryptoSuite === SRTPCryptoSuites.AES_CM_128_HMAC_SHA1_80) {
+ // actually ffmpeg just supports AES_CM_128_HMAC_SHA1_80
+ videoffmpegCommand += `-srtp_out_suite AES_CM_128_HMAC_SHA1_80 -srtp_out_params ${videoSRTP} s`;
+ }
+
+ videoffmpegCommand += `rtp://${address}:${videoPort}?rtcpport=${videoPort}&localrtcpport=${videoPort}&pkt_size=${mtu}`;
+
+ if (this.ffmpegDebugOutput) {
+ console.log('FFMPEG command: ffmpeg ' + videoffmpegCommand);
+ }
+
+ const ffmpegVideo = spawn('ffmpeg', videoffmpegCommand.split(' '), {
+ env: process.env,
+ });
+
+ let started = false;
+ ffmpegVideo.stderr.on('data', (data) => {
+ if (!started) {
+ started = true;
+ console.log('FFMPEG: received first frame');
+
+ callback(); // do not forget to execute callback once set up
+ }
+
+ if (this.ffmpegDebugOutput) {
+ console.log('VIDEO: ' + String(data));
+ }
+ });
+ ffmpegVideo.on('error', (error) => {
+ console.log('[Video] Failed to start video stream: ' + error.message);
+ callback(new Error('ffmpeg process creation failed!'));
+ });
+ ffmpegVideo.on('exit', (code, signal) => {
+ const message =
+ '[Video] ffmpeg exited with code: ' +
+ code +
+ ' and signal: ' +
+ signal;
+
+ if (code == null || code === 255) {
+ console.log(message + ' (Video stream stopped!)');
+ } else {
+ console.log(message + ' (error)');
+
+ if (!started) {
+ callback(new Error(message));
+ } else {
+ this.controller!.forceStopStreamingSession(sessionId);
+ }
+ }
+ });
+
+ this.ongoingSessions[sessionId] = ffmpegVideo;
+ delete this.pendingSessions[sessionId];
+
+ break;
+ case StreamRequestTypes.RECONFIGURE:
+ // not supported by this example
+ console.log(
+ 'Received (unsupported) request to reconfigure to: ' +
+ JSON.stringify(request.video),
+ );
+ callback();
+ break;
+ case StreamRequestTypes.STOP:
+ const ffmpegProcess = this.ongoingSessions[sessionId];
+
+ try {
+ if (ffmpegProcess) {
+ ffmpegProcess.kill('SIGKILL');
+ }
+ } catch (e) {
+ console.log('Error occurred terminating the video process!');
+ console.log(e);
+ }
+
+ delete this.ongoingSessions[sessionId];
+
+ console.log('Stopped streaming session!');
+ callback();
+ break;
+ }
+ }
+}
diff --git a/src/test/test.spec.ts b/src/test/test.spec.ts
deleted file mode 100644
index 423e70c..0000000
--- a/src/test/test.spec.ts
+++ /dev/null
@@ -1,271 +0,0 @@
-import * as waitUntil from "async-wait-until";
-import { expect } from "chai";
-import { EventEmitter } from "events";
-import * as fs from "fs";
-import * as hap from "hap-nodejs";
-import { API } from "homebridge";
-import * as ip from "ip";
-import "mocha";
-import * as mlog from "mocha-logger";
-import { Bloomsky } from "../Bloomsky";
-import FFMPEG from "../Ffmpeg";
-import { PlatformAccessory } from "../PlatformAccessory";
-import { StreamRequest } from "../StreamRequest";
-
-const mockHomebridge = {
- accessory: {} as PlatformAccessory,
- api: new API(),
- config: {
- apiKey: "this-is-not-a-valid-api-key==",
- // tslint:disable-next-line:max-line-length
- apiUrl : "https://gist.githubusercontent.com/aphex3k/d7d9b6399fc8701a32ff4fb87bdd91dc/raw/40b030a8b6b70f95bae3b38106609dfda47c0c46/api-result.json",
- debug : true,
- useIntl : true,
- },
- hap,
- log(logText: string) { mlog.log(logText); },
- registerPlatform(a: any, b: any, c: any, d: boolean) { return d === true; },
- version: "2.2",
-};
-
-describe("Mock Homebridge", () => {
- it("should provide mock functionality", () => {
-
- expect(mockHomebridge).to.not.be.equal(null);
- expect(mockHomebridge).to.not.be.equal(undefined);
-
- expect(mockHomebridge.version).to.not.be.equal(null);
- expect(mockHomebridge.version).to.not.be.equal(undefined);
-
- expect(mockHomebridge.hap).to.not.be.equal(null);
- expect(mockHomebridge.hap).to.not.be.equal(undefined);
-
- expect(mockHomebridge.registerPlatform).to.not.be.equal(null);
- expect(mockHomebridge.registerPlatform).to.not.be.equal(undefined);
-
- expect(mockHomebridge.log).to.not.be.equal(null);
- expect(mockHomebridge.log).to.not.be.equal(undefined);
-
- expect(mockHomebridge.config).to.not.be.equal(null);
- expect(mockHomebridge.config).to.not.be.equal(undefined);
-
- expect(mockHomebridge.config.apiUrl).to.not.be.equal(null);
- expect(mockHomebridge.config.apiUrl).to.not.be.equal(undefined);
-
- expect(mockHomebridge.config.useIntl).to.be.equal(true);
-
- expect(mockHomebridge.hap.uuid).to.not.be.equal(null);
- expect(mockHomebridge.hap.uuid).to.not.be.equal(undefined);
- });
-});
-
-describe("Bloomsky", () => {
-
- const mock = mockHomebridge;
-
- it("should have a mock instance", function() {
- expect(mock).to.not.be.equal(null);
- expect(mock).to.not.be.equal(undefined);
- });
-
- Bloomsky.Accessory = mock.accessory;
- Bloomsky.Service = hap.Service;
- Bloomsky.Characteristic = hap.Characteristic;
- Bloomsky.UUIDGen = hap.uuid;
- Bloomsky.Hap = hap;
-
- const bloomsky = new Bloomsky(mock.log, mock.config, mock.api);
-
- it("constructor should create a new instance", function() {
- expect(bloomsky).to.not.be.equal(null);
- expect(bloomsky).to.not.be.equal(undefined);
- });
-
- it("should know about no accessories before loading from api", function() {
- expect(bloomsky.accessories.length).to.be.equal(0);
- });
-
- it("should calculate a matching UUID for input", function() {
- expect(Bloomsky.UUIDGen).to.not.be.equal(null);
- expect(Bloomsky.UUIDGen).to.not.be.equal(undefined);
-
- const uuid = Bloomsky.UUIDGen.generate("test"); // a94a8fe5-ccb1-49ba-a1c4-c0873d391e98
- expect(uuid).to.not.be.equal(null);
- expect(uuid).to.be.equal("a94a8fe5-ccb1-49ba-a1c4-c0873d391e98");
- });
-
- // it("should know about exactly one accessory after loading from api", async function() {
- // this.timeout(10000);
-
- // // since we are not testing in a full blown homebridge environment, trigger
- // // didFinishLaunching event manually
- // (mock.api as EventEmitter).emit("didFinishLaunching");
-
- // try {
- // const result = await waitUntil(() => {
- // return bloomsky.accessories.length > 0;
- // }, 10000); // ms
-
- // expect(bloomsky.accessories.length).to.be.equal(1);
- // } catch (error) {
- // expect(bloomsky.accessories.length).to.be.equal(1);
- // }
-
- // const accessory = bloomsky.accessories[0];
-
- // expect(accessory.UUID).to.be.equal("8d993ccd-f628-4e26-a170-a949ee2a3870");
- // });
-
- // it("should only know about exactly one camera accessory", function() {
- // const accessory = bloomsky.accessories[0];
-
- // expect(accessory.category).to.not.be.equal(HAPNodeJS.Accessory.Categories.OTHER);
- // expect(accessory.category).to.be.equal(HAPNodeJS.Accessory.Categories.CAMERA);
- // expect(accessory.reachable).to.be.equal(true);
- // });
-
- // it("should know about an accessory with services attached", function() {
- // const accessory = bloomsky.accessories[0];
-
- // const temp = accessory.getService(Bloomsky.Service.TemperatureSensor);
- // expect(temp).to.not.be.equal(undefined);
- // expect(temp.UUID).to.be.equal(Bloomsky.Service.TemperatureSensor.UUID);
-
- // const light = accessory.getService(Bloomsky.Service.LightSensor);
- // expect(light).to.not.be.equal(undefined);
- // expect(light.UUID).to.be.equal(Bloomsky.Service.LightSensor.UUID);
-
- // const humidity = accessory.getService(Bloomsky.Service.HumiditySensor);
- // expect(humidity).to.not.be.equal(undefined);
- // expect(humidity.UUID).to.be.equal(Bloomsky.Service.HumiditySensor.UUID);
-
- // const motion = accessory.getService(Bloomsky.Service.MotionSensor);
- // expect(motion).to.not.be.equal(undefined);
- // expect(motion.UUID).to.be.equal(Bloomsky.Service.MotionSensor.UUID);
-
- // const night = accessory.getService(Bloomsky.Service.OccupancySensor);
- // expect(night).to.not.be.equal(undefined);
- // expect(night.UUID).to.be.equal(Bloomsky.Service.OccupancySensor.UUID);
-
- // const info = accessory.getService(Bloomsky.Service.AccessoryInformation);
- // expect(info).to.not.be.equal(undefined);
- // expect(info.UUID).to.be.equal(Bloomsky.Service.AccessoryInformation.UUID);
-
- // const battery = accessory.getService(Bloomsky.Service.BatteryService);
- // expect(battery).to.not.be.equal(undefined);
- // expect(battery.UUID).to.be.equal(Bloomsky.Service.BatteryService.UUID);
- // });
-
- // it("should have an accessory with a camera stream controller configured", function() {
- // const accessory = bloomsky.accessories[0];
-
- // expect(accessory.cameraSource).to.not.be.equal(undefined);
-
- // const cameraSource = accessory.cameraSource as FFMPEG;
-
- // expect(cameraSource.createCameraControlService).to.not.be.equal(undefined);
- // expect(cameraSource.handleCloseConnection).to.not.be.equal(undefined);
- // expect(cameraSource.handleSnapshotRequest).to.not.be.equal(undefined);
- // expect(cameraSource.handleStreamRequest).to.not.be.equal(undefined);
- // expect(cameraSource.prepareStream).to.not.be.equal(undefined);
- // });
-
- // it("should have one accessory that can handle snapshot requests", async function() {
-
- // this.timeout(10000);
-
- // try {
- // const result = await waitUntil(() => {
- // const testFilename = "8d993ccd-f628-4e26-a170-a949ee2a3870.jpg";
- // return fs.existsSync(testFilename) && fs.statSync(testFilename).size > 0;
- // }, 3000); // ms
- // } catch (error) {
- // mock.log("the camera image should have been cached by now...");
- // expect(error).to.be.equal(undefined);
- // }
-
- // const accessory = bloomsky.accessories[0];
- // const cameraSource = accessory.cameraSource as FFMPEG;
-
- // expect(cameraSource.createCameraControlService).to.not.be.equal(undefined);
-
- // const createCameraControlService = function() { cameraSource.createCameraControlService(); };
- // expect(createCameraControlService).to.not.throw();
-
- // const handleSnapshotRequest = function() {
- // cameraSource.handleSnapshotRequest({
- // height: 720,
- // width: 1280,
- // },
- // function(error, buffer) {
- // if (error !== undefined) {
- // mock.log(error);
- // }
- // expect(error).to.be.equal(undefined);
- // expect(buffer.length).to.be.greaterThan(0);
- // });
- // };
- // expect(handleSnapshotRequest).to.not.throw();
- // });
-
- // it("should have one accessory that can handle stream requests", async function() {
-
- // this.timeout(10000);
-
- // try {
- // const result = await waitUntil(() => {
- // const testFilename = "8d993ccd-f628-4e26-a170-a949ee2a3870.jpg";
- // return fs.existsSync(testFilename) && fs.statSync(testFilename).size > 0;
- // }, 3000); // ms
- // } catch (error) {
- // mock.log("the camera image should have been cached by now...");
- // expect(error).to.be.equal(undefined);
- // }
-
- // const accessory = bloomsky.accessories[0];
- // const cameraSource = accessory.cameraSource as FFMPEG;
- // const testSessionId = Bloomsky.UUIDGen.generate("testSessionId");
- // const request: StreamRequest = {
- // audio: undefined,
- // sessionID: testSessionId,
- // targetAddress: ip.address(),
- // type: "start",
- // video: {
- // fps: 30,
- // height: 640,
- // max_bit_rate: 600,
- // port: 12345,
- // srtp_key: Uint8Array.from(new Set([1, 2, 3, 4])),
- // srtp_salt: Uint8Array.from(new Set([1, 2, 3, 4])),
- // ssrc: 123,
- // width: 640,
- // },
- // };
-
- // const prepareStream = function() {
- // cameraSource.prepareStream(request, function(response) {
- // mock.log("Stream Prepared");
- // });
- // };
- // expect(prepareStream).to.not.throw();
-
- // const handleStreamRequest = function() {
- // cameraSource.handleStreamRequest(request);
- // };
- // expect(handleStreamRequest).to.not.throw();
-
- // mock.log("waiting for stream...");
- // try {
- // const result = await waitUntil(() => {
- // return false;
- // }, 550); // ms
- // } catch (error) {
- // mock.log("closing stream...");
- // }
-
- // const handleCloseConnection = function() {
- // cameraSource.handleCloseConnection(testSessionId);
- // };
- // expect(handleCloseConnection).to.not.throw();
- // });
-});
diff --git a/standalone.js b/standalone.js
deleted file mode 100644
index 224ff37..0000000
--- a/standalone.js
+++ /dev/null
@@ -1,98 +0,0 @@
-"use strict";
-
-const hap = require("hap-nodejs");
-const FFMPEG = require("./lib/Ffmpeg").FFMPEG;
-
-let conf = {
- "username": "CC:22:3D:E3:CE:FF",
- "pin": "876-54-321"
-};
-
-console.log("HAP-NodeJS starting...");
-
-hap.init();
-
-const station = {
- "UTC": -7,
- "CityName": "Los Angeles",
- "Storm": {},
- "Searchable": false,
- "DeviceName": "Donna Sky",
- "RegisterTime": 1433814467,
- "DST": 1,
- "BoundedPoint": "",
- "LON": -118.6919183,
- "Point": {},
- "VideoList": [
- "http://s3.amazonaws.com/bskytimelapses/eaB1rJytnZSmmZu1_-7_2018-10-23.mp4",
- "http://s3.amazonaws.com/bskytimelapses/eaB1rJytnZSmmZu1_-7_2018-10-24.mp4",
- "http://s3.amazonaws.com/bskytimelapses/eaB1rJytnZSmmZu1_-7_2018-10-25.mp4",
- "http://s3.amazonaws.com/bskytimelapses/eaB1rJytnZSmmZu1_-7_2018-10-26.mp4",
- "http://s3.amazonaws.com/bskytimelapses/eaB1rJytnZSmmZu1_-7_2018-10-27.mp4"
- ],
- "VideoList_C": [
- "http://s3.amazonaws.com/bskytimelapses/eaB1rJytnZSmmZu1_-7_2018-10-23_C.mp4",
- "http://s3.amazonaws.com/bskytimelapses/eaB1rJytnZSmmZu1_-7_2018-10-24_C.mp4",
- "http://s3.amazonaws.com/bskytimelapses/eaB1rJytnZSmmZu1_-7_2018-10-25_C.mp4",
- "http://s3.amazonaws.com/bskytimelapses/eaB1rJytnZSmmZu1_-7_2018-10-26_C.mp4",
- "http://s3.amazonaws.com/bskytimelapses/eaB1rJytnZSmmZu1_-7_2018-10-27_C.mp4"
- ],
- "DeviceID": "123456789012",
- "NumOfFollowers": 1,
- "LAT": 34.0201613,
- "ALT": 142,
- "Data": {
- "Luminance": 21,
- "Temperature": 63.61,
- "ImageURL": "http://s3-us-west-1.amazonaws.com/bskyimgs/eaB1rJytnZSmmZu1qJ1lqpWtnpGmmpo=.jpg",
- "TS": 1540697959,
- "Rain": true,
- "Humidity": 99,
- "Pressure": 295.27,
- "DeviceType": "SKY1",
- "Voltage": 2594,
- "Night": true,
- "UVIndex": "1",
- "ImageTS": 1540690225
- },
- "FullAddress": "Pico Blvd, Los Angeles, CA, US",
- "StreetName": "Pico Blvd",
- "PreviewImageList": [
- "http://s3-us-west-1.amazonaws.com/bskyimgs/eaB1rJytnZSmmZu1qJ1lqpWqmJirn54=.jpg",
- "http://s3-us-west-1.amazonaws.com/bskyimgs/eaB1rJytnZSmmZu1qJ1lqpWrlpamm5s=.jpg",
- "http://s3-us-west-1.amazonaws.com/bskyimgs/eaB1rJytnZSmmZu1qJ1lqpWslZOloJg=.jpg",
- "http://s3-us-west-1.amazonaws.com/bskyimgs/eaB1rJytnZSmmZu1qJ1lqpWsnpKompc=.jpg",
- "http://s3-us-west-1.amazonaws.com/bskyimgs/eaB1rJytnZSmmZu1qJ1lqpWtnJSrnZw=.jpg"
- ]
-};
-
-const uuid = hap.uuid.generate(station.DeviceID);
-const cameraAccessory = new hap.Accessory(station.DeviceName, uuid, hap.Accessory.Categories.CAMERA);
-const filename = uuid + ".jpg";
-
-const cameraSource = new FFMPEG(hap.uuid, hap, {
- name: uuid,
- videoConfig: {
- debug : true,
- maxHeight: 640,
- maxStreams: 2,
- maxWidth: 640,
- source: "-loop 1 -i " + filename,
- stillImageSource: "-loop 1 -i " + filename,
- vcodec : "h264",
- },
-}, console.log, "ffmpeg", filename);
-cameraAccessory.configureCameraSource(cameraSource);
-
-cameraAccessory.publish({
- username: conf.username,
- pincode: conf.pin,
- category: hap.Accessory.Categories.CAMERA
-}, true);
-
-console.log("Scan this code with your HomeKit App on your iOS device to pair with Camera:");
-console.log(" ");
-console.log(" ┌────────────┐ ");
-console.log(` │ ${conf.pin} │ `);
-console.log(" └────────────┘ ");
-console.log(" ");
diff --git a/testing-config/api-result.json b/testing-config/api-result.json
deleted file mode 100644
index efac1d3..0000000
--- a/testing-config/api-result.json
+++ /dev/null
@@ -1,55 +0,0 @@
-[
- {
- "UTC": -7,
- "CityName": "Los Angeles",
- "Storm": {},
- "Searchable": false,
- "DeviceName": "Donna Sky",
- "RegisterTime": 1433814467,
- "DST": 1,
- "BoundedPoint": "",
- "LON": -118.6919183,
- "Point": {},
- "VideoList": [
- "http://s3.amazonaws.com/bskytimelapses/eaB1rJytnZSmmZu1_-7_2018-10-23.mp4",
- "http://s3.amazonaws.com/bskytimelapses/eaB1rJytnZSmmZu1_-7_2018-10-24.mp4",
- "http://s3.amazonaws.com/bskytimelapses/eaB1rJytnZSmmZu1_-7_2018-10-25.mp4",
- "http://s3.amazonaws.com/bskytimelapses/eaB1rJytnZSmmZu1_-7_2018-10-26.mp4",
- "http://s3.amazonaws.com/bskytimelapses/eaB1rJytnZSmmZu1_-7_2018-10-27.mp4"
- ],
- "VideoList_C": [
- "http://s3.amazonaws.com/bskytimelapses/eaB1rJytnZSmmZu1_-7_2018-10-23_C.mp4",
- "http://s3.amazonaws.com/bskytimelapses/eaB1rJytnZSmmZu1_-7_2018-10-24_C.mp4",
- "http://s3.amazonaws.com/bskytimelapses/eaB1rJytnZSmmZu1_-7_2018-10-25_C.mp4",
- "http://s3.amazonaws.com/bskytimelapses/eaB1rJytnZSmmZu1_-7_2018-10-26_C.mp4",
- "http://s3.amazonaws.com/bskytimelapses/eaB1rJytnZSmmZu1_-7_2018-10-27_C.mp4"
- ],
- "DeviceID": "123456789012",
- "NumOfFollowers": 1,
- "LAT": 34.0201613,
- "ALT": 142,
- "Data": {
- "Luminance": 21,
- "Temperature": 63.61,
- "ImageURL": "http://s3-us-west-1.amazonaws.com/bskyimgs/eaB1rJytnZSmmZu1qJ1lqpWtnpGmmpo=.jpg",
- "TS": 1540697959,
- "Rain": true,
- "Humidity": 99,
- "Pressure": 295.27,
- "DeviceType": "SKY1",
- "Voltage": 2594,
- "Night": true,
- "UVIndex": "1",
- "ImageTS": 1540690225
- },
- "FullAddress": "Pico Blvd, Los Angeles, CA, US",
- "StreetName": "Pico Blvd",
- "PreviewImageList": [
- "http://s3-us-west-1.amazonaws.com/bskyimgs/eaB1rJytnZSmmZu1qJ1lqpWqmJirn54=.jpg",
- "http://s3-us-west-1.amazonaws.com/bskyimgs/eaB1rJytnZSmmZu1qJ1lqpWrlpamm5s=.jpg",
- "http://s3-us-west-1.amazonaws.com/bskyimgs/eaB1rJytnZSmmZu1qJ1lqpWslZOloJg=.jpg",
- "http://s3-us-west-1.amazonaws.com/bskyimgs/eaB1rJytnZSmmZu1qJ1lqpWsnpKompc=.jpg",
- "http://s3-us-west-1.amazonaws.com/bskyimgs/eaB1rJytnZSmmZu1qJ1lqpWtnJSrnZw=.jpg"
- ]
- }
-]
\ No newline at end of file
diff --git a/testing-config/config.json b/testing-config/config.json
deleted file mode 100644
index 6599206..0000000
--- a/testing-config/config.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "bridge": {
- "name": "Homebridge",
- "username": "CC:22:3D:E3:CE:FF",
- "pin": "876-54-321"
- },
-
- "description": "Testing configuration for an invalid user",
-
- "accessories": [
- ],
-
- "platforms": [
- {
- "platform": "Bloomsky",
- "apiKey": "this-is-not-a-valid-api-key==",
- "apiUrl": "https://api.bloomsky.com/api/skydata/",
- "debug": false
- }
- ]
-}
diff --git a/tsconfig.json b/tsconfig.json
index 72878f5..83b2885 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,14 +1,22 @@
{
"compilerOptions": {
- "declaration": true, // incompatible with --allowJs
- "outDir": "./lib",
+ "target": "ES2018", // ~node10
+ "module": "commonjs",
+ "moduleResolution": "Node",
+ "lib": ["es2015", "es2016", "es2017", "es2018"],
+ "declaration": true,
+ "declarationMap": true,
+ "sourceMap": true,
+ "outDir": "./dist",
+ "rootDir": "./src",
"strict": true,
+ "esModuleInterop": true,
"noImplicitAny": false,
- "target": "ES5",
- "lib": [ "es2017" ],
"baseUrl": ".",
- "allowJs": false
+ "allowJs": false,
+ "removeComments": true
},
- "include": ["src"],
- "exclude": ["node_modules", "src/test", "test"],
+ "compileOnSave": true,
+ "include": ["src/"],
+ "exclude": ["**/*.spec.ts"]
}
diff --git a/tslint.json b/tslint.json
deleted file mode 100644
index 6ced19f..0000000
--- a/tslint.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "defaultSeverity": "error",
- "extends": [
- "tslint:recommended"
- ],
- "jsRules": {},
- "rules": {
- "max-classes-per-file": [true, 99, "exclude-class-expressions"],
- "only-arrow-functions": [false, "allow-declarations", "allow-named-functions"],
- "no-misused-new": false
- },
- "rulesDirectory": []
-}
diff --git a/yarn.lock b/yarn.lock
deleted file mode 100644
index b8deb1f..0000000
--- a/yarn.lock
+++ /dev/null
@@ -1,1376 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@babel/polyfill@^7.0.0":
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.0.0.tgz#c8ff65c9ec3be6a1ba10113ebd40e8750fb90bff"
- integrity sha512-dnrMRkyyr74CRelJwvgnnSUDh2ge2NCTyHVwpOdvRMHtJUyxLtMAfhBN3s64pY41zdw0kgiLPh6S20eb1NcX6Q==
- dependencies:
- core-js "^2.5.7"
- regenerator-runtime "^0.11.1"
-
-"@jimp/bmp@^0.5.4":
- version "0.5.4"
- resolved "https://registry.yarnpkg.com/@jimp/bmp/-/bmp-0.5.4.tgz#b7b375aa774f26154912569864d5466e71333ef1"
- integrity sha512-P/ezH1FuoM3FwS0Dm2ZGkph4x5/rPBzFLEZor7KQkmGUnYEIEG4o0BUcAWFmJOp2HgzbT6O2SfrpJNBOcVACzQ==
- dependencies:
- "@jimp/utils" "^0.5.0"
- bmp-js "^0.1.0"
- core-js "^2.5.7"
-
-"@jimp/core@^0.5.4":
- version "0.5.4"
- resolved "https://registry.yarnpkg.com/@jimp/core/-/core-0.5.4.tgz#69d2d9eef1a6a9d62127171e2688cf21bc0ee77c"
- integrity sha512-n3uvHy2ndUKItmbhnRO8xmU8J6KR+v6CQxO9sbeUDpSc3VXc1PkqrA8ZsCVFCjnDFcGBXL+MJeCTyQzq5W9Crw==
- dependencies:
- "@jimp/utils" "^0.5.0"
- any-base "^1.1.0"
- buffer "^5.2.0"
- core-js "^2.5.7"
- exif-parser "^0.1.12"
- file-type "^9.0.0"
- load-bmfont "^1.3.1"
- mkdirp "0.5.1"
- phin "^2.9.1"
- pixelmatch "^4.0.2"
- tinycolor2 "^1.4.1"
-
-"@jimp/custom@^0.5.4":
- version "0.5.4"
- resolved "https://registry.yarnpkg.com/@jimp/custom/-/custom-0.5.4.tgz#393338efbf15d158ecf6639cb1b196c70411fddd"
- integrity sha512-tLfyJoyouDl2J3RPFGfDzTtE+4S8ljqJUmLzy/cmx1n7+xS5TpLPdPskp7UaeAfNTqdF4CNAm94KYoxTZdj2mg==
- dependencies:
- "@jimp/core" "^0.5.4"
- core-js "^2.5.7"
-
-"@jimp/gif@^0.5.0":
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/@jimp/gif/-/gif-0.5.0.tgz#7543870b3d744c9758da76ca43fac4ee48fd6a00"
- integrity sha512-HVB4c7b8r/yCpjhCjVNPRFLuujTav5UPmcQcFJjU6aIxmne6e29rAjRJEv3UMamHDGSu/96PzOsPZBO5U+ZGww==
- dependencies:
- "@jimp/utils" "^0.5.0"
- core-js "^2.5.7"
- omggif "^1.0.9"
-
-"@jimp/jpeg@^0.5.4":
- version "0.5.4"
- resolved "https://registry.yarnpkg.com/@jimp/jpeg/-/jpeg-0.5.4.tgz#ff52669f801e9d82041ba6322ee781c344e75241"
- integrity sha512-YaPWm+YSGCThNE/jLMckM3Qs6uaMxd/VsHOnEaqu5tGA4GFbfVaWHjKqkNGAFuiNV+HdgKlNcCOF3of+elvzqQ==
- dependencies:
- "@jimp/utils" "^0.5.0"
- core-js "^2.5.7"
- jpeg-js "^0.3.4"
-
-"@jimp/plugin-blit@^0.5.4":
- version "0.5.4"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-blit/-/plugin-blit-0.5.4.tgz#8c4f46e00c0a4ca9d5c592713de7575528485e59"
- integrity sha512-WqDYOugv76hF1wnKy7+xPGf9PUbcm9vPW28/jHWn1hjbb2GnusJ2fVEFad76J/1SPfhrQ2Uebf2QCWJuLmOqZg==
- dependencies:
- "@jimp/utils" "^0.5.0"
- core-js "^2.5.7"
-
-"@jimp/plugin-blur@^0.5.0":
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-blur/-/plugin-blur-0.5.0.tgz#c8222bdae8eb4cc86613c0adbcb26a92829739a2"
- integrity sha512-5k0PXCA1RTJdITL7yMAyZ5tGQjKLHqFvwdXj/PCoBo5PuMyr0x6qfxmQEySixGk/ZHdDxMi80vYxHdKHjNNgjg==
- dependencies:
- "@jimp/utils" "^0.5.0"
- core-js "^2.5.7"
-
-"@jimp/plugin-color@^0.5.5":
- version "0.5.5"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-color/-/plugin-color-0.5.5.tgz#68f9652d5065d3380a9967911a7e529325d230d6"
- integrity sha512-hWeOqNCmLguGYLhSvBrpfCvlijsMEVaLZAOod62s1rzWnujozyKOzm2eZe+W3To6mHbp5RGJNVrIwHBWMab4ug==
- dependencies:
- "@jimp/utils" "^0.5.0"
- core-js "^2.5.7"
- tinycolor2 "^1.4.1"
-
-"@jimp/plugin-contain@^0.5.4":
- version "0.5.4"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-contain/-/plugin-contain-0.5.4.tgz#1dc258db36d50e23400e0644b7f2694fd74fbf60"
- integrity sha512-8YJh4FI3S69unri0nJsWeqVLeVGA77N2R0Ws16iSuCCD/5UnWd9FeWRrSbKuidBG6TdMBaG2KUqSYZeHeH9GOQ==
- dependencies:
- "@jimp/utils" "^0.5.0"
- core-js "^2.5.7"
-
-"@jimp/plugin-cover@^0.5.4":
- version "0.5.4"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-cover/-/plugin-cover-0.5.4.tgz#a086243b151db9eef09e657fbe8bc3ef8683662e"
- integrity sha512-2Rur7b44WiDDgizUI2M2uYWc1RmfhU5KjKS1xXruobjQ0tXkf5xlrPXSushq0hB6Ne0Ss6wv0+/6eQ8WeGHU2w==
- dependencies:
- "@jimp/utils" "^0.5.0"
- core-js "^2.5.7"
-
-"@jimp/plugin-crop@^0.5.4":
- version "0.5.4"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-crop/-/plugin-crop-0.5.4.tgz#124cf52aa07e36c7a33f39e2e86e78166c300ca7"
- integrity sha512-6t0rqn4VazquGk48tO6hFBrQ+nkvC+A1RnR6UM/m8ZtG2/yjpwF0MXcpgJI1Fb+a4Ug7BY1fu2GPcZOhnAVK/g==
- dependencies:
- "@jimp/utils" "^0.5.0"
- core-js "^2.5.7"
-
-"@jimp/plugin-displace@^0.5.0":
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-displace/-/plugin-displace-0.5.0.tgz#cb75d8588bdee45c1bdb1bec2323705d0e53d060"
- integrity sha512-Bec7SQvnmKia4hOXEDjeNVx7vo/1bWqjuV6NO8xbNQcAO3gaCl91c9FjMDhsfAVb0Ou6imhbIuFPrLxorXsecQ==
- dependencies:
- "@jimp/utils" "^0.5.0"
- core-js "^2.5.7"
-
-"@jimp/plugin-dither@^0.5.0":
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-dither/-/plugin-dither-0.5.0.tgz#0f1f6b7dcd5aba8f908bbd4b60685fc29cc6a3ed"
- integrity sha512-We2WJQsD/Lm8oqBFp/vUv9/5r2avyenL+wNNu/s2b1HqA5O4sPGrjHy9K6vIov0NroQGCQ3bNznLkTmjiHKBcg==
- dependencies:
- "@jimp/utils" "^0.5.0"
- core-js "^2.5.7"
-
-"@jimp/plugin-flip@^0.5.0":
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-flip/-/plugin-flip-0.5.0.tgz#4a973c9c4bdc6dbcc7da66204a2bb2b12feb9381"
- integrity sha512-D/ehBQxLMNR7oNd80KXo4tnSET5zEm5mR70khYOTtTlfti/DlLp3qOdjPOzfLyAdqO7Ly4qCaXrIsnia+pfPrA==
- dependencies:
- "@jimp/utils" "^0.5.0"
- core-js "^2.5.7"
-
-"@jimp/plugin-gaussian@^0.5.0":
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-gaussian/-/plugin-gaussian-0.5.0.tgz#02c9f07516108e01ba0f2938289b08e6e865c2c9"
- integrity sha512-Ln4kgxblv0/YzLBDb/J8DYPLhDzKH87Y8yHh5UKv3H+LPKnLaEG3L4iKTE9ivvdocnjmrtTFMYcWv2ERSPeHcg==
- dependencies:
- "@jimp/utils" "^0.5.0"
- core-js "^2.5.7"
-
-"@jimp/plugin-invert@^0.5.0":
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-invert/-/plugin-invert-0.5.0.tgz#4496d2d67ab498c8fa3e89c4b6dd5892e7f14b9b"
- integrity sha512-/vyKeIi3T7puf+8ruWovTjzDC585EnTwJ+lGOOUYiNPsdn4JDFe1B3xd+Ayv9aCQbXDIlPElZaM9vd/+wqDiIQ==
- dependencies:
- "@jimp/utils" "^0.5.0"
- core-js "^2.5.7"
-
-"@jimp/plugin-mask@^0.5.4":
- version "0.5.4"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-mask/-/plugin-mask-0.5.4.tgz#ac4c2625e328818da1443c92bcb9cabb537c74ba"
- integrity sha512-mUJ04pCrUWaJGXPjgoVbzhIQB8cVobj2ZEFlGO3BEAjyylYMrdJlNlsER8dd7UuJ2L/a4ocWtFDdsnuicnBghQ==
- dependencies:
- "@jimp/utils" "^0.5.0"
- core-js "^2.5.7"
-
-"@jimp/plugin-normalize@^0.5.4":
- version "0.5.4"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-normalize/-/plugin-normalize-0.5.4.tgz#d60aeb637bcaecadf654c9621e291d6eed12fa19"
- integrity sha512-Q5W0oEz9wxsjuhvHAJynI/OqXZcmqEAuRONQId7Aw5ulCXSOg9C4y2a67EO7aZAt55T+zMVxI9UpVUpzVvO6hw==
- dependencies:
- "@jimp/utils" "^0.5.0"
- core-js "^2.5.7"
-
-"@jimp/plugin-print@^0.5.4":
- version "0.5.4"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-print/-/plugin-print-0.5.4.tgz#00524a7424a4e12a17764d349485dd1120a43728"
- integrity sha512-DOZr5TY9WyMWFBD37oz7KpTEBVioFIHQF/gH5b3O5jjFyj4JPMkw7k3kVBve9lIrzIYrvLqe0wH59vyAwpeEFg==
- dependencies:
- "@jimp/utils" "^0.5.0"
- core-js "^2.5.7"
- load-bmfont "^1.4.0"
-
-"@jimp/plugin-resize@^0.5.4":
- version "0.5.4"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-resize/-/plugin-resize-0.5.4.tgz#c9b2c4949ee080df3fa2ca587539e2ce8588b8af"
- integrity sha512-lXNprNAT0QY1D1vG/1x6urUTlWuZe2dfL29P81ApW2Yfcio471+oqo45moX5FLS0q24xU600g7cHGf2/TzqSfA==
- dependencies:
- "@jimp/utils" "^0.5.0"
- core-js "^2.5.7"
-
-"@jimp/plugin-rotate@^0.5.4":
- version "0.5.4"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-rotate/-/plugin-rotate-0.5.4.tgz#6c4c560779bc3ebf291db9a5095158d32a2a4af3"
- integrity sha512-SIdUpMc8clObMchy8TnjgHgcXEQM992z5KavgiuOnCuBlsmSHtE3MrXTOyMW0Dn3gqapV9Y5vygrLm/BVtCCsg==
- dependencies:
- "@jimp/utils" "^0.5.0"
- core-js "^2.5.7"
-
-"@jimp/plugin-scale@^0.5.0":
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-scale/-/plugin-scale-0.5.0.tgz#095f937e5a4887481b3074f5cd6a144d8f4f815e"
- integrity sha512-5InIOr3cNtrS5aQ/uaosNf28qLLc0InpNGKFmGFTv8oqZqLch6PtDTjDBZ1GGWsPdA/ljy4Qyy7mJO1QBmgQeQ==
- dependencies:
- "@jimp/utils" "^0.5.0"
- core-js "^2.5.7"
-
-"@jimp/plugins@^0.5.5":
- version "0.5.5"
- resolved "https://registry.yarnpkg.com/@jimp/plugins/-/plugins-0.5.5.tgz#e97fa368d69ad7718d5a2a9b6ffa8e6cc1e4264d"
- integrity sha512-9oF6LbSM/K7YkFCcxaPaD8NUkL/ZY8vT8NIGfQ/NpX+tKQtcsLHcRavHpUC+M1xXShv/QGx9OdBV/jgiu82QYg==
- dependencies:
- "@jimp/plugin-blit" "^0.5.4"
- "@jimp/plugin-blur" "^0.5.0"
- "@jimp/plugin-color" "^0.5.5"
- "@jimp/plugin-contain" "^0.5.4"
- "@jimp/plugin-cover" "^0.5.4"
- "@jimp/plugin-crop" "^0.5.4"
- "@jimp/plugin-displace" "^0.5.0"
- "@jimp/plugin-dither" "^0.5.0"
- "@jimp/plugin-flip" "^0.5.0"
- "@jimp/plugin-gaussian" "^0.5.0"
- "@jimp/plugin-invert" "^0.5.0"
- "@jimp/plugin-mask" "^0.5.4"
- "@jimp/plugin-normalize" "^0.5.4"
- "@jimp/plugin-print" "^0.5.4"
- "@jimp/plugin-resize" "^0.5.4"
- "@jimp/plugin-rotate" "^0.5.4"
- "@jimp/plugin-scale" "^0.5.0"
- core-js "^2.5.7"
- timm "^1.6.1"
-
-"@jimp/png@^0.5.4":
- version "0.5.4"
- resolved "https://registry.yarnpkg.com/@jimp/png/-/png-0.5.4.tgz#4ed02435ab8ac219b618e9578dfd60626b3b5dd4"
- integrity sha512-J2NU7368zihF1HUZdmpXsL/Hhyf+I3ubmK+6Uz3Uoyvtk1VS7dO3L0io6fJQutfWmPZ4bvu6Ry022oHjbi6QCA==
- dependencies:
- "@jimp/utils" "^0.5.0"
- core-js "^2.5.7"
- pngjs "^3.3.3"
-
-"@jimp/tiff@^0.5.4":
- version "0.5.4"
- resolved "https://registry.yarnpkg.com/@jimp/tiff/-/tiff-0.5.4.tgz#ce5370283eba390ff32b6fd86b9259d7cf3e2315"
- integrity sha512-hr7Zq3eWjAZ+itSwuAObIWMRNv7oHVM3xuEDC2ouP7HfE7woBtyhCyfA7u12KlgtM57gKWeogXqTlewRGVzx6g==
- dependencies:
- core-js "^2.5.7"
- utif "^2.0.1"
-
-"@jimp/types@^0.5.4":
- version "0.5.4"
- resolved "https://registry.yarnpkg.com/@jimp/types/-/types-0.5.4.tgz#c312e415ec9c4a35770e89b9eee424a96be60ab8"
- integrity sha512-nbZXM6TsdpnYHIBd8ZuoxGpvmxc2SqiggY30/bhOP/VJQoDBzm2v/20Ywz5M0snpIK2SdYG52eZPNjfjqUP39w==
- dependencies:
- "@jimp/bmp" "^0.5.4"
- "@jimp/gif" "^0.5.0"
- "@jimp/jpeg" "^0.5.4"
- "@jimp/png" "^0.5.4"
- "@jimp/tiff" "^0.5.4"
- core-js "^2.5.7"
- timm "^1.6.1"
-
-"@jimp/utils@^0.5.0":
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/@jimp/utils/-/utils-0.5.0.tgz#ecb33259c75238053d6c7706a3e91f657dbabf91"
- integrity sha512-7H9RFVU+Li2XmEko0GGyzy7m7JjSc7qa+m8l3fUzYg2GtwASApjKF/LSG2AUQCUmDKFLdfIEVjxvKvZUJFEmpw==
- dependencies:
- core-js "^2.5.7"
-
-"@types/chai@^4.1.6":
- version "4.1.7"
- resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.1.7.tgz#1b8e33b61a8c09cbe1f85133071baa0dbf9fa71a"
- integrity sha512-2Y8uPt0/jwjhQ6EiluT0XCri1Dbplr0ZxfFXUz+ye13gaqE8u5gL5ppao1JrUYr9cIip5S6MvQzBS7Kke7U9VA==
-
-"@types/debug@0.0.31":
- version "0.0.31"
- resolved "https://registry.yarnpkg.com/@types/debug/-/debug-0.0.31.tgz#bac8d8aab6a823e91deb7f79083b2a35fa638f33"
- integrity sha512-LS1MCPaQKqspg7FvexuhmDbWUhE2yIJ+4AgVIyObfc06/UKZ8REgxGNjZc82wPLWmbeOm7S+gSsLgo75TanG4A==
-
-"@types/ip@0.0.31":
- version "0.0.31"
- resolved "https://registry.yarnpkg.com/@types/ip/-/ip-0.0.31.tgz#a363989e72dd11bb21f932d6fe96bd6a85b2b74b"
- integrity sha512-oYk8aalgfCt7XfEu66Sjwz/aQjfRtQkjNSXwrUGqyRoQbOymAc156fUNTwn1cSCEEwuPPzMy7fGPmKcFLoaIkA==
- dependencies:
- "@types/node" "*"
-
-"@types/mocha@^5.2.5":
- version "5.2.5"
- resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-5.2.5.tgz#8a4accfc403c124a0bafe8a9fc61a05ec1032073"
- integrity sha512-lAVp+Kj54ui/vLUFxsJTMtWvZraZxum3w3Nwkble2dNuV5VnPA+Mi2oGX9XYJAaIvZi3tn3cbjS/qcJXRb6Bww==
-
-"@types/node@*", "@types/node@^10.12.0":
- version "10.12.4"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.4.tgz#292a86dcfffac3a9f8073f6e29b71c05bbc65c0d"
- integrity sha512-0aFZiYCvoxyKP/Mg6PvqBb2UtWGIPf63r6rOAvRBrgyJOfanbL60yUH2U4FSpg+Yn6FW+JVYWtzn6hLTy745Fg==
-
-"@types/sharp@^0.21.0":
- version "0.21.0"
- resolved "https://registry.yarnpkg.com/@types/sharp/-/sharp-0.21.0.tgz#e364b345c70e5924a5c626aaccaa236e0cfc2455"
- integrity sha512-BmsCha5/lx2Afz2zwNo9F2txlkZ9HQf49N94lzSFmj5Oc7NfRMZguwVIhytb65qdY2zNF+azovzDNso6JUZpOw==
- dependencies:
- "@types/node" "*"
-
-acorn@^5.4.0:
- version "5.7.3"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279"
- integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==
-
-ansi-regex@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
- integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
-
-ansi-styles@^2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
- integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
-
-ansi-styles@^3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
- integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
- dependencies:
- color-convert "^1.9.0"
-
-any-base@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/any-base/-/any-base-1.1.0.tgz#ae101a62bc08a597b4c9ab5b7089d456630549fe"
- integrity sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==
-
-argparse@^1.0.7:
- version "1.0.10"
- resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
- integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
- dependencies:
- sprintf-js "~1.0.2"
-
-array-flatten@^2.1.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296"
- integrity sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=
-
-arrify@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
- integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
-
-assertion-error@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b"
- integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==
-
-async-wait-until@^1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/async-wait-until/-/async-wait-until-1.2.4.tgz#55a6c29145b8037742a629b0ae0b69b5e2988404"
- integrity sha512-H7ZR3cu1THxrJiDgevu+PgbyT0o5P/9nsCZj70ckruJCMWt/UOQmGo65wKWvEQN69MJk140x5/Z01ZQjzfwyOw==
-
-babel-code-frame@^6.22.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
- integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
- dependencies:
- chalk "^1.1.3"
- esutils "^2.0.2"
- js-tokens "^3.0.2"
-
-balanced-match@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
- integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
-
-base64-js@^1.0.2:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3"
- integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==
-
-bindings@^1.2.1, bindings@~1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.3.0.tgz#b346f6ecf6a95f5a815c5839fc7cdb22502f1ed7"
- integrity sha512-DpLh5EzMR2kzvX1KIlVC0VkC3iZtHKTgdtZ0a3pglBZdaQFjt5S9g9xd1lE+YvXyfd6mtCeRnrUfOLYiTMlNSw==
-
-bmp-js@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/bmp-js/-/bmp-js-0.1.0.tgz#e05a63f796a6c1ff25f4771ec7adadc148c07233"
- integrity sha1-4Fpj95amwf8l9Hcex62twUjAcjM=
-
-bonjour-hap@^3.5.1:
- version "3.5.1"
- resolved "https://registry.yarnpkg.com/bonjour-hap/-/bonjour-hap-3.5.1.tgz#2519201bd0b302e0d399f9d6619015d7d6d6443e"
- integrity sha512-JqJXX5+i1NRGt8GyIPb+nBNjwrHbWe5Pb+HSuRMG/B62tPRHQ4Jyv3yX7hy1pHfRrV2OhnWpd+ljBtMb24R5rA==
- 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"
-
-brace-expansion@^1.1.7:
- version "1.1.11"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
- integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
- dependencies:
- balanced-match "^1.0.0"
- concat-map "0.0.1"
-
-browser-stdout@1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
- integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==
-
-buffer-equal@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-0.0.1.tgz#91bc74b11ea405bc916bc6aa908faafa5b4aac4b"
- integrity sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=
-
-buffer-from@^1.0.0, buffer-from@^1.1.0:
- version "1.1.1"
- 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-shims@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
- integrity sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=
-
-buffer@^5.2.0:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.2.1.tgz#dd57fa0f109ac59c602479044dca7b8b3d0b71d6"
- integrity sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==
- dependencies:
- base64-js "^1.0.2"
- ieee754 "^1.1.4"
-
-builtin-modules@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
- integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=
-
-chai@^4.1.2, chai@^4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/chai/-/chai-4.2.0.tgz#760aa72cf20e3795e84b12877ce0e83737aa29e5"
- integrity sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==
- dependencies:
- assertion-error "^1.1.0"
- check-error "^1.0.2"
- deep-eql "^3.0.1"
- get-func-name "^2.0.0"
- pathval "^1.1.0"
- type-detect "^4.0.5"
-
-chalk@^1.1.1, chalk@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
- integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
- dependencies:
- ansi-styles "^2.2.1"
- escape-string-regexp "^1.0.2"
- has-ansi "^2.0.0"
- strip-ansi "^3.0.0"
- supports-color "^2.0.0"
-
-chalk@^2.3.0:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e"
- integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==
- dependencies:
- ansi-styles "^3.2.1"
- escape-string-regexp "^1.0.5"
- supports-color "^5.3.0"
-
-check-error@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82"
- integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=
-
-child_process@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/child_process/-/child_process-1.0.2.tgz#b1f7e7fc73d25e7fd1d455adc94e143830182b5a"
- integrity sha1-sffn/HPSXn/R1FWtyU4UODAYK1o=
-
-color-convert@^1.9.0:
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
- integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
- dependencies:
- color-name "1.1.3"
-
-color-name@1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
- integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
-
-commander@2.15.1:
- version "2.15.1"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f"
- integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==
-
-commander@2.8.1:
- version "2.8.1"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4"
- integrity sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=
- dependencies:
- graceful-readlink ">= 1.0.0"
-
-commander@^2.12.1:
- version "2.19.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
- integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==
-
-concat-map@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
- integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
-
-core-js@^2.5.7:
- version "2.5.7"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e"
- integrity sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==
-
-core-util-is@~1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
- integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
-
-curve25519-n@^1.2.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/curve25519-n/-/curve25519-n-1.4.0.tgz#b1b419bdb5885f274efe87b2534713332b644172"
- integrity sha512-ihQ3M/Aj9PVbsNwuul1/PNnyFurl9ejZGJWw/361+SS9hEFLiM2ttde+BXiu3ooc4AQiIx2y1gEcGLTpLRAjKg==
- dependencies:
- bindings "~1.3.0"
- nan "^2.10.0"
-
-debug@3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
- integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
- dependencies:
- ms "2.0.0"
-
-debug@^2.2.0:
- version "2.6.9"
- resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
- integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
- dependencies:
- ms "2.0.0"
-
-debug@^3.1.0:
- version "3.2.6"
- resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
- integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
- dependencies:
- ms "^2.1.1"
-
-decimal.js@^7.2.3:
- version "7.5.1"
- resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-7.5.1.tgz#cf4cf5eeb9faa24fc4ee6af361faebb7bfcca2ce"
- integrity sha512-1K5Y6MykxQYfHBcFfAj2uBaLmwreq4MsjsvrlgcEOvg+X82IeeXlIVIVkBMiypksu+yo9vcYP6lfU3qTedofSQ==
-
-deep-eql@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df"
- integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==
- dependencies:
- type-detect "^4.0.0"
-
-deep-equal@^1.0.0, deep-equal@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
- integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=
-
-diff@3.5.0, diff@^3.1.0, diff@^3.2.0:
- version "3.5.0"
- resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
- integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
-
-dns-equal@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
- integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0=
-
-dns-packet@^1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a"
- integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==
- dependencies:
- ip "^1.1.0"
- safe-buffer "^5.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 sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=
- dependencies:
- buffer-indexof "^1.0.0"
-
-dom-walk@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018"
- integrity sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=
-
-ed25519-hap@^0.0.5:
- version "0.0.5"
- resolved "https://registry.yarnpkg.com/ed25519-hap/-/ed25519-hap-0.0.5.tgz#90325fd3d489efcc6a81a7948758a1ca644af0d8"
- integrity sha512-6RPUW9BdnUjYz5lGjRfM0sOMa8d43sjWFFchGJhGKkevoZvB0oVp1ES9oDUK+QJoJO8EoJlgawNsxG2yvlMbYg==
- dependencies:
- bindings "^1.2.1"
- nan "^2.10.0"
-
-enhanced-resolve@^2.2.2:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-2.3.0.tgz#a115c32504b6302e85a76269d7a57ccdd962e359"
- integrity sha1-oRXDJQS2MC6Fp2Jp16V8zdli41k=
- dependencies:
- graceful-fs "^4.1.2"
- memory-fs "^0.3.0"
- object-assign "^4.0.1"
- tapable "^0.2.3"
-
-errno@^0.1.3:
- version "0.1.7"
- resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
- integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==
- dependencies:
- prr "~1.0.1"
-
-escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
- integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
-
-esprima@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
- integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
-
-esutils@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
- integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=
-
-exif-parser@^0.1.12:
- version "0.1.12"
- resolved "https://registry.yarnpkg.com/exif-parser/-/exif-parser-0.1.12.tgz#58a9d2d72c02c1f6f02a0ef4a9166272b7760922"
- integrity sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=
-
-fast-srp-hap@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/fast-srp-hap/-/fast-srp-hap-1.0.1.tgz#377124d196bc6a5157aae5b37bf5fa35bb4ad2d9"
- integrity sha1-N3Ek0Za8alFXquWze/X6NbtK0tk=
-
-file-type@^9.0.0:
- version "9.0.0"
- resolved "https://registry.yarnpkg.com/file-type/-/file-type-9.0.0.tgz#a68d5ad07f486414dfb2c8866f73161946714a18"
- integrity sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==
-
-for-each@^0.3.2:
- version "0.3.3"
- resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e"
- integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==
- dependencies:
- is-callable "^1.1.3"
-
-fs.realpath@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
- integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
-
-get-func-name@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41"
- integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=
-
-glob@7.1.2:
- version "7.1.2"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
- integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.0.4"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-glob@^7.1.1:
- version "7.1.3"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
- integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.0.4"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-global@~4.3.0:
- version "4.3.2"
- resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f"
- integrity sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=
- dependencies:
- min-document "^2.19.0"
- process "~0.5.1"
-
-graceful-fs@^4.1.2:
- version "4.1.15"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
- integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
-
-"graceful-readlink@>= 1.0.0":
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
- integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=
-
-growl@1.10.5:
- version "1.10.5"
- resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e"
- integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==
-
-hap-nodejs@0.4.47, hap-nodejs@^0.4.47:
- version "0.4.47"
- resolved "https://registry.yarnpkg.com/hap-nodejs/-/hap-nodejs-0.4.47.tgz#77004b0e521d373cc20285d610d3ba619e2b7342"
- integrity sha512-R+wybsxAP/R/NT3WazdY7ErAgyee1zRqvpHgTUkR5mkQHp88z46hcm50kVkFEYRHlpLclBBCqioP6EksHIOsbw==
- dependencies:
- bonjour-hap "^3.5.1"
- buffer-shims "^1.0.0"
- curve25519-n "^1.2.0"
- debug "^2.2.0"
- decimal.js "^7.2.3"
- ed25519-hap "^0.0.5"
- fast-srp-hap "^1.0.1"
- ip "^1.1.3"
- node-persist "^0.0.11"
-
-has-ansi@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
- integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
- dependencies:
- ansi-regex "^2.0.0"
-
-has-flag@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
- integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
-
-he@1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
- integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0=
-
-homebridge@>=0.4.42:
- version "0.4.45"
- resolved "https://registry.yarnpkg.com/homebridge/-/homebridge-0.4.45.tgz#d24008d048da573061b8b524f7161d4eb4f84563"
- integrity sha512-zcyI0r4qF2hPmqrP5y45bz7sar3EdQSiqydXFuuTHeXmE4qnGZaxo+/4n3GYK22Yvp/wWBH3yxmm0ZGr+JyChQ==
- dependencies:
- chalk "^1.1.1"
- commander "2.8.1"
- hap-nodejs "0.4.47"
- node-persist "^0.0.8"
- qrcode-terminal "^0.11.0"
- semver "5.0.3"
-
-ieee754@^1.1.4:
- version "1.1.12"
- resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b"
- integrity sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==
-
-inflight@^1.0.4:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
- integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
- dependencies:
- once "^1.3.0"
- wrappy "1"
-
-inherits@2, inherits@~2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
- integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
-
-ip@^1.1.0, ip@^1.1.3, ip@^1.1.5:
- version "1.1.5"
- resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
- integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=
-
-is-callable@^1.1.3:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"
- integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==
-
-is-function@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5"
- integrity sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=
-
-isarray@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
- integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
-
-jimp@^0.5.6:
- version "0.5.6"
- resolved "https://registry.yarnpkg.com/jimp/-/jimp-0.5.6.tgz#dd114decd060927ae439f2e0980df619c179f912"
- integrity sha512-H0nHTu6KgAgQzDxa38ew2dXbnRzKm1w5uEyhMIxqwCQVjwgarOjjkV/avbNLxfxRHAFaNp4rGIc/qm8P+uhX9A==
- dependencies:
- "@babel/polyfill" "^7.0.0"
- "@jimp/custom" "^0.5.4"
- "@jimp/plugins" "^0.5.5"
- "@jimp/types" "^0.5.4"
- core-js "^2.5.7"
-
-jpeg-js@^0.3.4:
- version "0.3.4"
- resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.3.4.tgz#dc2ba501ee3d58b7bb893c5d1fab47294917e7e7"
- integrity sha512-6IzjQxvnlT8UlklNmDXIJMWxijULjqGrzgqc0OG7YadZdvm7KPQ1j0ehmQQHckgEWOfgpptzcnWgESovxudpTA==
-
-js-tokens@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
- integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
-
-js-yaml@^3.7.0:
- version "3.12.0"
- resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1"
- integrity sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==
- dependencies:
- argparse "^1.0.7"
- esprima "^4.0.0"
-
-json-stringify-safe@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
- integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
-
-load-bmfont@^1.3.1, load-bmfont@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/load-bmfont/-/load-bmfont-1.4.0.tgz#75f17070b14a8c785fe7f5bee2e6fd4f98093b6b"
- integrity sha512-kT63aTAlNhZARowaNYcY29Fn/QYkc52M3l6V1ifRcPewg2lvUZDAj7R6dXjOL9D0sict76op3T5+odumDSF81g==
- dependencies:
- buffer-equal "0.0.1"
- mime "^1.3.4"
- parse-bmfont-ascii "^1.0.3"
- parse-bmfont-binary "^1.0.5"
- parse-bmfont-xml "^1.1.4"
- phin "^2.9.1"
- xhr "^2.0.1"
- xtend "^4.0.0"
-
-lodash@^4.17.5:
- version "4.17.11"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
- integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
-
-make-error@^1.1.1:
- version "1.3.5"
- resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8"
- integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==
-
-memory-fs@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.3.0.tgz#7bcc6b629e3a43e871d7e29aca6ae8a7f15cbb20"
- integrity sha1-e8xrYp46Q+hx1+Kaymrop/FcuyA=
- dependencies:
- errno "^0.1.3"
- readable-stream "^2.0.1"
-
-mime@^1.3.4:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
- integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
-
-min-document@^2.19.0:
- version "2.19.0"
- resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685"
- integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=
- dependencies:
- dom-walk "^0.1.0"
-
-minimatch@3.0.4, minimatch@^3.0.3, minimatch@^3.0.4:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
- integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
- dependencies:
- brace-expansion "^1.1.7"
-
-minimist@0.0.8:
- version "0.0.8"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
- integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
-
-minimist@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
- integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
-
-mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
- integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
- dependencies:
- minimist "0.0.8"
-
-mkdirp@~0.3.5:
- version "0.3.5"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.5.tgz#de3e5f8961c88c787ee1368df849ac4413eca8d7"
- integrity sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=
-
-mocha-logger@^1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/mocha-logger/-/mocha-logger-1.0.6.tgz#512217f3b4cd8be036154e655118c5160784154a"
- integrity sha512-D7Z3r1RkyaJOnlgokODdzt9p4ut0m3DVzEKp3r3tgeXIpdxp54z049Vc0EEh5hkhudfRN0dfUD10Fcj2WuOO3w==
- dependencies:
- mocha "^5.1.1"
-
-mocha@^5.1.1, mocha@^5.2.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.2.0.tgz#6d8ae508f59167f940f2b5b3c4a612ae50c90ae6"
- integrity sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==
- dependencies:
- browser-stdout "1.3.1"
- commander "2.15.1"
- debug "3.1.0"
- diff "3.5.0"
- escape-string-regexp "1.0.5"
- glob "7.1.2"
- growl "1.10.5"
- he "1.1.1"
- minimatch "3.0.4"
- mkdirp "0.5.1"
- supports-color "5.4.0"
-
-ms@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
- integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
-
-ms@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
- integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
-
-multicast-dns-service-types@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901"
- integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=
-
-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"
-
-nan@^2.10.0:
- version "2.11.1"
- resolved "https://registry.yarnpkg.com/nan/-/nan-2.11.1.tgz#90e22bccb8ca57ea4cd37cc83d3819b52eea6766"
- integrity sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==
-
-nock@9.6.1:
- version "9.6.1"
- resolved "https://registry.yarnpkg.com/nock/-/nock-9.6.1.tgz#d96e099be9bc1d0189a77f4490bbbb265c381b49"
- integrity sha512-EDgl/WgNQ0C1BZZlASOQkQdE6tAWXJi8QQlugqzN64JJkvZ7ILijZuG24r4vCC7yOfnm6HKpne5AGExLGCeBWg==
- dependencies:
- chai "^4.1.2"
- debug "^3.1.0"
- deep-equal "^1.0.0"
- json-stringify-safe "^5.0.1"
- lodash "^4.17.5"
- mkdirp "^0.5.0"
- propagate "^1.0.0"
- qs "^6.5.1"
- semver "^5.5.0"
-
-node-persist@^0.0.11:
- version "0.0.11"
- resolved "https://registry.yarnpkg.com/node-persist/-/node-persist-0.0.11.tgz#d66eba3ebef620f079530fa7b13076a906665874"
- integrity sha1-1m66Pr72IPB5Uw+nsTB2qQZmWHQ=
- dependencies:
- mkdirp "~0.5.1"
- q "~1.1.1"
-
-node-persist@^0.0.8:
- version "0.0.8"
- resolved "https://registry.yarnpkg.com/node-persist/-/node-persist-0.0.8.tgz#a56c739bc6ffd9ceef19c0e8d89597917f089249"
- integrity sha1-pWxzm8b/2c7vGcDo2JWXkX8Ikkk=
- dependencies:
- mkdirp "~0.3.5"
- q "~1.1.1"
-
-object-assign@^4.0.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
- integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
-
-omggif@^1.0.9:
- version "1.0.9"
- resolved "https://registry.yarnpkg.com/omggif/-/omggif-1.0.9.tgz#dcb7024dacd50c52b4d303f04802c91c057c765f"
- integrity sha1-3LcCTazVDFK00wPwSALJHAV8dl8=
-
-once@^1.3.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
- integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
- dependencies:
- wrappy "1"
-
-optional@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/optional/-/optional-0.1.4.tgz#cdb1a9bedc737d2025f690ceeb50e049444fd5b3"
- integrity sha512-gtvrrCfkE08wKcgXaVwQVgwEQ8vel2dc5DDBn9RLQZ3YtmtkBss6A2HY6BnJH4N/4Ku97Ri/SF8sNWE2225WJw==
-
-pako@^1.0.5:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258"
- integrity sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==
-
-parse-bmfont-ascii@^1.0.3:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz#11ac3c3ff58f7c2020ab22769079108d4dfa0285"
- integrity sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=
-
-parse-bmfont-binary@^1.0.5:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz#d038b476d3e9dd9db1e11a0b0e53a22792b69006"
- integrity sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=
-
-parse-bmfont-xml@^1.1.4:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz#015319797e3e12f9e739c4d513872cd2fa35f389"
- integrity sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==
- dependencies:
- xml-parse-from-string "^1.0.0"
- xml2js "^0.4.5"
-
-parse-headers@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.1.tgz#6ae83a7aa25a9d9b700acc28698cd1f1ed7e9536"
- integrity sha1-aug6eqJanZtwCswoaYzR8e1+lTY=
- dependencies:
- for-each "^0.3.2"
- trim "0.0.1"
-
-path-is-absolute@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
- integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
-
-path-parse@^1.0.5:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
- integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
-
-pathval@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0"
- integrity sha1-uULm1L3mUwBe9rcTYd74cn0GReA=
-
-phin@^2.9.1:
- version "2.9.3"
- resolved "https://registry.yarnpkg.com/phin/-/phin-2.9.3.tgz#f9b6ac10a035636fb65dfc576aaaa17b8743125c"
- integrity sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==
-
-pixelmatch@^4.0.2:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-4.0.2.tgz#8f47dcec5011b477b67db03c243bc1f3085e8854"
- integrity sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=
- dependencies:
- pngjs "^3.0.0"
-
-pngjs@^3.0.0, pngjs@^3.3.3:
- version "3.3.3"
- resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.3.3.tgz#85173703bde3edac8998757b96e5821d0966a21b"
- integrity sha512-1n3Z4p3IOxArEs1VRXnZ/RXdfEniAUS9jb68g58FIXMNkPJeZd+Qh4Uq7/e0LVxAQGos1eIUrqrt4FpjdnEd+Q==
-
-process-nextick-args@~2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
- integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==
-
-process@~0.5.1:
- version "0.5.2"
- resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf"
- integrity sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=
-
-propagate@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/propagate/-/propagate-1.0.0.tgz#00c2daeedda20e87e3782b344adba1cddd6ad709"
- integrity sha1-AMLa7t2iDofjeCs0Stuhzd1q1wk=
-
-prr@~1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
- integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY=
-
-q@~1.1.1:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/q/-/q-1.1.2.tgz#6357e291206701d99f197ab84e57e8ad196f2a89"
- integrity sha1-Y1fikSBnAdmfGXq4TlforRlvKok=
-
-qrcode-terminal@^0.11.0:
- version "0.11.0"
- resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.11.0.tgz#ffc6c28a2fc0bfb47052b47e23f4f446a5fbdb9e"
- integrity sha1-/8bCii/Av7RwUrR+I/T0RqX7254=
-
-qs@^6.5.1:
- version "6.5.2"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
- integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
-
-readable-stream@^2.0.1:
- version "2.3.6"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
- integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.3"
- isarray "~1.0.0"
- process-nextick-args "~2.0.0"
- safe-buffer "~5.1.1"
- string_decoder "~1.1.1"
- util-deprecate "~1.0.1"
-
-regenerator-runtime@^0.11.1:
- version "0.11.1"
- resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
- integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
-
-resolve-from@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57"
- integrity sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=
-
-resolve@^1.3.2:
- version "1.8.1"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26"
- integrity sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==
- dependencies:
- path-parse "^1.0.5"
-
-safe-buffer@^5.0.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
- integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-
-sax@>=0.6.0:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
- integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
-
-semver@5.0.3:
- version "5.0.3"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a"
- integrity sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=
-
-semver@^5.3.0, semver@^5.5.0:
- version "5.6.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
- integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
-
-source-map-support@^0.5.6:
- version "0.5.9"
- resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f"
- integrity sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==
- dependencies:
- buffer-from "^1.0.0"
- source-map "^0.6.0"
-
-source-map@^0.6.0:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
- integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
-
-sprintf-js@~1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
- integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
-
-string_decoder@~1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
- integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
- dependencies:
- safe-buffer "~5.1.0"
-
-strip-ansi@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
- integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
- dependencies:
- ansi-regex "^2.0.0"
-
-supports-color@5.4.0:
- version "5.4.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54"
- integrity sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==
- dependencies:
- has-flag "^3.0.0"
-
-supports-color@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
- integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
-
-supports-color@^5.3.0:
- version "5.5.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
- integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
- dependencies:
- has-flag "^3.0.0"
-
-tapable@^0.2.3:
- version "0.2.8"
- resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22"
- integrity sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=
-
-tern@^0.22.3:
- version "0.22.3"
- resolved "https://registry.yarnpkg.com/tern/-/tern-0.22.3.tgz#43b509c664d93b8e0aa37468b5a1ec2713833299"
- integrity sha512-A2C8GbR6uJWjHUwxtxF14oY1g8oJDEhM+n9ugRowX+jr8JHgNUeOLrYTOi/LV/JK9KHpxnYwyuhnal9YDXeeDQ==
- dependencies:
- acorn "^5.4.0"
- enhanced-resolve "^2.2.2"
- glob "^7.1.1"
- minimatch "^3.0.3"
- resolve-from "2.0.0"
-
-thunky@^1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.0.3.tgz#f5df732453407b09191dae73e2a8cc73f381a826"
- integrity sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==
-
-timm@^1.6.1:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/timm/-/timm-1.6.1.tgz#5f8aafc932248c76caf2c6af60542a32d3c30701"
- integrity sha512-hqDTYi/bWuDxL2i6T3v6nrvkAQ/1Bc060GSkVEQZp02zTSTB4CHSKsOkliequCftQaNRcjRqUZmpGWs5FfhrNg==
-
-tinycolor2@^1.4.1:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8"
- integrity sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=
-
-trim@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd"
- integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0=
-
-ts-node@^7.0.1:
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-7.0.1.tgz#9562dc2d1e6d248d24bc55f773e3f614337d9baf"
- integrity sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==
- dependencies:
- arrify "^1.0.0"
- buffer-from "^1.1.0"
- diff "^3.1.0"
- make-error "^1.1.1"
- minimist "^1.2.0"
- mkdirp "^0.5.1"
- source-map-support "^0.5.6"
- yn "^2.0.0"
-
-tslib@^1.8.0, tslib@^1.8.1:
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
- integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==
-
-tslint@^5.11.0:
- version "5.11.0"
- resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.11.0.tgz#98f30c02eae3cde7006201e4c33cb08b48581eed"
- integrity sha1-mPMMAurjzecAYgHkwzywi0hYHu0=
- dependencies:
- babel-code-frame "^6.22.0"
- builtin-modules "^1.1.1"
- chalk "^2.3.0"
- commander "^2.12.1"
- diff "^3.2.0"
- glob "^7.1.1"
- js-yaml "^3.7.0"
- minimatch "^3.0.4"
- resolve "^1.3.2"
- semver "^5.3.0"
- tslib "^1.8.0"
- tsutils "^2.27.2"
-
-tsutils@^2.27.2:
- version "2.29.0"
- resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99"
- integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==
- dependencies:
- tslib "^1.8.1"
-
-tunnel@0.0.4:
- version "0.0.4"
- resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.4.tgz#2d3785a158c174c9a16dc2c046ec5fc5f1742213"
- integrity sha1-LTeFoVjBdMmhbcLARuxfxfF0IhM=
-
-type-detect@^4.0.0, type-detect@^4.0.5:
- version "4.0.8"
- resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
- integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
-
-typed-rest-client@^1.0.9:
- version "1.0.11"
- resolved "https://registry.yarnpkg.com/typed-rest-client/-/typed-rest-client-1.0.11.tgz#de27fb2437cb0f94c3589b3e509caa3b80dbf24a"
- integrity sha512-Iz2/p1EkJp8laAIlW/4h+3u+eJqmslosrX2wK1ofM74fCnRpM/EAPM+psjcQKomlNQrInKLPp/JYnsH4ZuzhQQ==
- dependencies:
- nock "9.6.1"
- tunnel "0.0.4"
- underscore "1.8.3"
-
-typescript@^3.1.3:
- version "3.1.6"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.1.6.tgz#b6543a83cfc8c2befb3f4c8fba6896f5b0c9be68"
- integrity sha512-tDMYfVtvpb96msS1lDX9MEdHrW4yOuZ4Kdc4Him9oU796XldPYF/t2+uKoX0BBa0hXXwDlqYQbXY5Rzjzc5hBA==
-
-underscore@1.8.3:
- version "1.8.3"
- resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022"
- integrity sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=
-
-utif@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/utif/-/utif-2.0.1.tgz#9e1582d9bbd20011a6588548ed3266298e711759"
- integrity sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==
- dependencies:
- pako "^1.0.5"
-
-util-deprecate@~1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
- integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
-
-wrappy@1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
- integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
-
-xhr@^2.0.1:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.5.0.tgz#bed8d1676d5ca36108667692b74b316c496e49dd"
- integrity sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==
- dependencies:
- global "~4.3.0"
- is-function "^1.0.1"
- parse-headers "^2.0.0"
- xtend "^4.0.0"
-
-xml-parse-from-string@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz#a9029e929d3dbcded169f3c6e28238d95a5d5a28"
- integrity sha1-qQKekp09vN7RafPG4oI42VpdWig=
-
-xml2js@^0.4.5:
- version "0.4.19"
- resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7"
- integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==
- dependencies:
- sax ">=0.6.0"
- xmlbuilder "~9.0.1"
-
-xmlbuilder@~9.0.1:
- version "9.0.7"
- resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d"
- integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=
-
-xtend@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
- integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
-
-yn@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a"
- integrity sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=