diff --git a/CHANGELOG.md b/CHANGELOG.md index cac9cf3..9265665 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,17 @@ +# Version 1.0.3 - 2020/08/25 + +- Update to buttplug-js 0.13.2 (Android workaround) + +# Version 1.0.2 - 2019/10/05 + +- Update to buttplug-js 0.12.1 (Motorbunny support) +- Fix bug with intiface desktop websocket loading + +# Version 1.0.1 - 2019/07/27 + +- Update to buttplug-js 0.12.0 +- Try loading device config from web CDN by default + # Version 1.0.0 - 2019/06/10 - Rebuild component from the ground up, using vue-cli diff --git a/README.md b/README.md index 78c9ee7..ca5a1aa 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,6 @@ features like: - Connecting to Websocket and Local (In-Browser) servers - Device listing and management - Log display -- Buttplug crash/exception handling ## Table Of Contents diff --git a/manual/intiface1.png b/manual/intiface1.png new file mode 100755 index 0000000..bccc286 Binary files /dev/null and b/manual/intiface1.png differ diff --git a/manual/manual.md b/manual/manual.md new file mode 100644 index 0000000..75335e6 --- /dev/null +++ b/manual/manual.md @@ -0,0 +1,144 @@ +## Connecting to Hardware + +Using this app will require connecting to hardware of some kind. This +may be a bluetooth sex toy, a fucking machine controlled over serial +port, or some other type of device. + +The steps are as follows: + +- Decide whether you using Intiface Desktop or the browser itself (not + all browsers support this) to talk to hardware. +- Scan for devices +- Once devices are found, make them "active" so the application can + use them. + +### Connection Interface + +Connections will begin by using the Connection portion of the +interface. + +![](manual1.png) + +You have two options for connections: + +* [Intiface Desktop](https://intiface.com/desktop), a cross platform + application for connecting to Bluetooth/Serial/etc... devices. +* In Browser Connection, which allows you to connect to bluetooth + devices if you are using [Google Chrome](https://chrome.google.com) + derived web browsers. + +#### Via Intiface Desktop + +For Intiface Desktop, you will need to use either Insecure or Secure +Websockets. + +![](intiface1.png) + +This application will, by default, try to connect to all of the +default address/ports on localhost. This should work for most +installations. + +If you are using **Google Chrome** and connecting to a copy of +Intiface Desktop on the same machine as your browser, you can use +_Insecure Websockets_ and do not need to worry about secure +certificates. + +If you are using **Firefox** or **Safari**, you will need to use +Secure Websockets and go through the secure certificate +generation/acceptance steps in Intiface Desktop. + +#### Via the Browser + +If you are using **[Google Chrome](https://chrome.google.com)** on +Windows, Mac, Linux, ChromeOS, or Android, or +**[WebBLE](https://apps.apple.com/us/app/webble/id1193531073)** on +iPhone/iPad (iOS), you can also use your hardware in the browser +without using an outside program. Click the "Connect In Browser" +button. + +If you are not using a browser that has the proper requirements (in +this case, WebBluetooth), the button will be disabled and will read +_"Requires WebBluetooth"_. + +#### Advanced Settings + +_Advanced Settings_ allows you to change how certain portions of +connecting work. + +![](manual2.png) + +- By default, we will scan for devices on connect. This can be turned + off here. +- If you need to connect to Intiface Desktop on another machine or + port, that can also be set up here. All interfaces and ports that + are listed will be tried, and the first successful connection will + proceed. You can also choose whether _insecure_ (ws://) or _secure_ + (wss://) connections will be used. + +### Discovering and Using Hardware + +Once you have connected, either via Intiface Desktop or In Browser, +you can then _scan for devices_. By default, this will happen +automatically when you connect. + +![](manual3.png) + +When devices are found, they will show up in the _Devices_ portion of +the dialog, as shown above. + +To use a device in the application, click on the checkbox next to the +device. This will mark is as "active", so that the application can +access and use it. + +Unchecking the box should stop the hardware from whatever it is doing, +and no longer allow it to take commands from the application. + +### Disconnecting + +To disconnect, hit the _Disconnect_ button. This will disconnect and +should cause all toys to stop whatever commands they were taking (i.e. +vibrations should stop running, etc...) + +### Troubleshooting + +#### Why can't I connect to Intiface Desktop? + +Here's a few things to check and try if you can't connect to Intiface +Desktop. + +- Is the server running? Check the _Server Status_ page on Intiface + desktop and make sure it's running. +- Do you have either _Insecure Websockets_, _Secure Websockets_ or + both selected on Intiface Desktop? IPC won't work for web. +- If you are using _Firefox_ or _Safari_, you will have to use _Secure + Websockets_. Have you accepted the cert in your browser yet? This + can be done in Intiface Desktop in _Settings -> Other Settings -> + Run Certificate Setup_. + +#### Why does the browser button show _Requires WebBluetooth_? + +If your browser does not support WebBluetooth, you will see a +_Requires Bluetooth_ button where _Connect In Browser_ would normally +be. This is because your browser cannot connect to Bluetooth hardware, +and therefore won't be able to provide hardware access to the +application. + +Currently, browsers supporting WebBluetooth are: + +- [Google Chrome](https://chrome.google.com) +- [WebBLE](https://apps.apple.com/us/app/webble/id1193531073) + +#### I've connected, why can't I see my hardware listed? + +- Did you scan for hardware? +- Is your hardware on and close to your computer or phone? +- Assuming you are using Bluetooth hardware, is your bluetooth on? +- If your hardware is not being listed, and you are using Intiface + Desktop, did Intiface Desktop show any errors in its log panel? + +#### None of this answers my question, how can I ask for help? + +Here's a few places you can ask questions and get help in real time: + +- [Metafetish Forums](https://metafetish.club) +- [Metafetish Discord Chat Server](https://discord.buttplug.io) diff --git a/manual/manual1.png b/manual/manual1.png new file mode 100644 index 0000000..868cc59 Binary files /dev/null and b/manual/manual1.png differ diff --git a/manual/manual2.png b/manual/manual2.png new file mode 100644 index 0000000..2385d5b Binary files /dev/null and b/manual/manual2.png differ diff --git a/manual/manual3.png b/manual/manual3.png new file mode 100644 index 0000000..b87bef8 Binary files /dev/null and b/manual/manual3.png differ diff --git a/package.json b/package.json index bffa09a..59132f1 100644 --- a/package.json +++ b/package.json @@ -1,37 +1,48 @@ { "name": "vue-buttplug-material-component", - "version": "1.0.0", - "private": true, + "version": "1.0.3", + "main": "dist/index.js", "scripts": { "serve": "vue-cli-service serve", - "build": "vue-cli-service build", + "build:vue-cli": "vue-cli-service build", + "build:vue-cli:lib": "vue-cli-service build --target lib --name vue-buttplug-material-component src/ButtplugPanel.vue", + "build:main": "tsc -p tsconfig.json", + "build:dev": "yarn build:main && webpack --progress --hide-modules --config=build/webpack.base.js", + "build:webpack": "yarn build:main && webpack --progress --hide-modules --config=build/webpack.production.js", + "build:analyze": "webpack --hide-modules --config=build/webpack.analyzer.js", + "build:example:dev": "yarn build:main && webpack --progress --hide-modules --config=build/webpack.example.js", "lint": "vue-cli-service lint", "test:unit": "vue-cli-service test:unit" }, "peerDependencies": { - "buttplug": ">=0.11.6" + "buttplug": ">=0.12.1", + "vue": "^2.6.10", + "vuetify": "^1.5.16" }, "dependencies": { - "vue": "^2.6.10", "vue-class-component": "^7.1.0", - "vue-property-decorator": "^8.1.1", - "vuetify": "^1.5.14" + "vue-cookies": "^1.5.13", + "vue-property-decorator": "^8.2.1" }, "devDependencies": { - "@mdi/font": "^3.6.95", - "@types/jest": "^24.0.13", - "@vue/cli-plugin-typescript": "^3.8.1", - "@vue/cli-plugin-unit-jest": "^3.8.0", - "@vue/cli-service": "^3.8.0", + "@mdi/font": "^3.8.95", + "@types/jest": "^24.0.15", + "@vue/cli-plugin-typescript": "^3.9.0", + "@vue/cli-plugin-unit-jest": "^3.9.0", + "@vue/cli-service": "^3.9.3", "@vue/test-utils": "1.0.0-beta.29", - "buttplug": "^0.11.6", + "buttplug": "^0.13.2", + "style-loader": "^0.23.1", "stylus": "^0.54.5", "stylus-loader": "^3.0.2", "ts-jest": "^24.0.2", - "ts-loader": "^6.0.2", - "typescript": "^3.5.1", - "vue-cli-plugin-vuetify": "^0.5.0", + "ts-loader": "^6.0.4", + "typescript": "^4.0.2", + "vue": "^2.6.10", + "vue-cli-plugin-vuetify": "^0.6.1", "vue-template-compiler": "^2.6.10", - "vuetify-loader": "^1.2.2" + "vuetify": "^1.5.16", + "vuetify-loader": "^1.3.0", + "webpack-cli": "^3.3.6" } } diff --git a/src/App.ts b/src/App.ts index ab8afae..f50e8d0 100644 --- a/src/App.ts +++ b/src/App.ts @@ -1,11 +1,11 @@ import Vue from "vue"; import { Component } from "vue-property-decorator"; -import ConnectionPanel from "./ConnectionPanel"; +import ButtplugPanel from "./ButtplugPanel"; import { ButtplugClient } from "buttplug"; @Component({ components: { - ConnectionPanel, + ButtplugPanel, }, }) export default class App extends Vue { diff --git a/src/App.vue b/src/App.vue index 3de806c..f4aca9d 100644 --- a/src/App.vue +++ b/src/App.vue @@ -32,9 +32,9 @@ - - + diff --git a/src/ButtplugPanel.ts b/src/ButtplugPanel.ts new file mode 100644 index 0000000..2b56d20 --- /dev/null +++ b/src/ButtplugPanel.ts @@ -0,0 +1,250 @@ +import Vue from "vue"; +import { Component, Prop } from "vue-property-decorator"; +import { ButtplugClient, IButtplugClientConnector, ButtplugBrowserWebsocketClientConnector, + ButtplugEmbeddedClientConnector, + ButtplugClientDevice, + DeviceConfigurationManager} from "buttplug"; +Vue.use(require("vue-cookies")); + +class ConnectionAddress { + public static FromObject(aObj: any): ConnectionAddress { + return new ConnectionAddress(aObj.Host, aObj.Port, aObj.Insecure, aObj.Secure); + } + + private static sIdNumber: number = 0; + public Id: number; + + public constructor(public Host: string, + public Port: number, + public Insecure: boolean, + public Secure: boolean) { + this.Id = ConnectionAddress.sIdNumber; + ConnectionAddress.sIdNumber += 1; + } + + public AsObject(): object { + return { + Host: this.Host, + Port: this.Port, + Insecure: this.Insecure, + Secure: this.Secure, + }; + } + + public get IsValidURL(): boolean { + try { + const url = new URL(`ws://${this.Host}:${this.Port}`); + return true; + } catch (e) { + return false; + } + } +} + +enum UiMessageType { + Error, + Status, +} + +@Component({}) +export default class ButtplugPanel extends Vue { + + @Prop() + private client: ButtplugClient; + private isScanning: boolean = false; + private isConnecting: boolean = false; + // 30 second scanning limit + private scanTime: number = 30000; + private scanOnConnect: boolean = true; + private selectedDevices: number[] = []; + // Blank array when disconnected. Mirrors ButtplugClient device array + // otherwise. Takes some extra logic to get vue to keep up with it. + private clientDevices: ButtplugClientDevice[] = []; + private desktopAddresses = [new ConnectionAddress("localhost", 12345, true, true), + new ConnectionAddress("localhost", 12346, true, true)]; + private uiMessage: [UiMessageType, string] | null = null; + private cookies: any = (window as any).$cookies; + + public mounted() { + this.cookies.config("999d"); + try { + const addresses = JSON.parse(this.cookies.get("intiface-addresses")); + if (addresses && Array.isArray(addresses) && addresses.length > 0) { + this.RetrieveAddressCookie(addresses); + } else { + console.log("Don't have config addresses available in cookie!"); + this.StoreAddressCookie(); + } + } catch { + console.log("Can't load cookie!"); + this.StoreAddressCookie(); + } + + DeviceConfigurationManager.LoadFromWebConfig().then(() => { + console.log("Config loaded from web"); + }).catch((e) => { + console.log(`Config not loaded from web: ${e}`); + }); + } + + public async ConnectToIntifaceDesktop(): Promise { + this.CloseUiMessage(); + this.isConnecting = true; + const connectPromises: Array> = []; + let isConnected = false; + const urls: string[] = []; + for (const address of this.desktopAddresses) { + const baseUrl = `${address.Host}:${address.Port}`; + if (address.Insecure) { + urls.push(`ws://${baseUrl}`); + } + if (address.Secure) { + urls.push(`wss://${baseUrl}`); + } + } + + for (const url of urls) { + try { + await this.Connect(new ButtplugBrowserWebsocketClientConnector(`${url}`)); + isConnected = true; + break; + } catch (e) { + continue; + } + } + + if (!isConnected) { + this.SetErrorMessage("Cannot connect to Intiface Desktop. Is the application up, and is the server running?"); + } + this.isConnecting = false; + } + + private StoreAddressCookie() { + const addrs: object[] = []; + for (const addr of this.desktopAddresses) { + addrs.push(addr.AsObject()); + } + this.cookies.set("intiface-addresses", JSON.stringify(addrs)); + } + + private RetrieveAddressCookie(aAddrs: object[]) { + this.desktopAddresses = []; + for (const addr of aAddrs) { + this.desktopAddresses.push(ConnectionAddress.FromObject(addr)); + } + } + + private SetErrorMessage(aMsg: string) { + this.uiMessage = [UiMessageType.Error, aMsg]; + } + + private SetStatusMessage(aMsg: string) { + this.uiMessage = [UiMessageType.Status, aMsg]; + } + + private get HasWebBluetooth(): boolean { + return typeof(window) !== "undefined" && + typeof(window.navigator) !== "undefined" && + (navigator as any).bluetooth !== undefined; + } + + private OnDeviceListChanged(aDevice: ButtplugClientDevice) { + // Just reset our internal device array. + this.clientDevices = this.client.Devices; + } + + private async ConnectInBrowser(): Promise { + await this.Connect(new ButtplugEmbeddedClientConnector()); + } + + private async Connect(aConnector: IButtplugClientConnector): Promise { + this.client.addListener("deviceadded", this.OnDeviceListChanged); + this.client.addListener("deviceremoved", this.OnDeviceListChanged); + this.client.addListener("scanningfinished", this.OnScanningFinished); + this.client.addListener("disconnect", this.RemoveListeners); + try { + await this.client.Connect(aConnector).catch((e) => { return; }); + } catch (e) { + this.RemoveListeners(); + return Promise.reject("test"); + } + // If we don't connect successfully, the above line will throw. Assume that + // we're connected if we get this far. + this.clientDevices = this.client.Devices; + await this.StartScanning(); + } + + private RemoveListeners() { + this.client.removeListener("deviceremoveed", this.OnDeviceListChanged); + this.client.removeListener("deviceremoved", this.OnDeviceListChanged); + this.client.removeListener("scanningfinished", this.OnScanningFinished); + this.client.removeListener("disconnect", this.RemoveListeners); + this.clientDevices = []; + this.selectedDevices = []; + } + + private get Connected() { + return this.client.Connected; + } + + private async StartScanning() { + await this.client.StartScanning(); + setTimeout(async () => await this.StopScanning(), this.scanTime); + this.isScanning = true; + } + + private async StopScanning() { + // The setTimeout to call this may fire after disconnect. If so, just drop + // it. + if (!this.client.Connected) { + return; + } + await this.client.StopScanning(); + this.isScanning = false; + } + + private OnScanningFinished() { + this.isScanning = false; + } + + private async ToggleScanning() { + if (this.isScanning) { + await this.StopScanning(); + return; + } + await this.StartScanning(); + } + + private async Disconnect() { + await this.client.Disconnect(); + this.RemoveListeners(); + this.SetStatusMessage("Client disconnected."); + + } + + private RemoveAddress(index: number) { + this.desktopAddresses = this.desktopAddresses.filter((x) => x.Id !== index); + this.StoreAddressCookie(); + } + + private AddAddress() { + this.desktopAddresses.push(new ConnectionAddress("", 0, true, true)); + this.StoreAddressCookie(); + } + + private ResetAddresses() { + this.desktopAddresses = [new ConnectionAddress("localhost", 12345, true, true), + new ConnectionAddress("localhost", 12346, true, true)]; + this.StoreAddressCookie(); + } + + private FireChange() { + const devices = this.clientDevices.filter((x: ButtplugClientDevice) => + this.selectedDevices.indexOf(x.Index) !== -1); + this.$emit("selecteddeviceschange", devices); + } + + private CloseUiMessage() { + this.uiMessage = null; + } +} diff --git a/src/ConnectionPanel.vue b/src/ButtplugPanel.vue similarity index 72% rename from src/ConnectionPanel.vue rename to src/ButtplugPanel.vue index 82641b0..8d33531 100644 --- a/src/ConnectionPanel.vue +++ b/src/ButtplugPanel.vue @@ -5,6 +5,7 @@ color="red lighten-2" @click="ConnectToIntifaceDesktop" class="white--text" + :disabled="isConnecting" > Connect To Intiface Desktop @@ -16,7 +17,30 @@ > {{ HasWebBluetooth ? "Connect In Browser" : "Requires WebBluetooth" }} - + + + + + close + + + + Error: + {{ uiMessage[1] }} + + + + + + + Trying to connect to Intiface Desktop... + + + + - diff --git a/src/ConnectionPanel.ts b/src/ConnectionPanel.ts deleted file mode 100644 index 6050506..0000000 --- a/src/ConnectionPanel.ts +++ /dev/null @@ -1,141 +0,0 @@ -import Vue from "vue"; -import { Component, Prop } from "vue-property-decorator"; -import { ButtplugClient, IButtplugClientConnector, ButtplugBrowserWebsocketClientConnector, - ButtplugEmbeddedClientConnector, - ButtplugClientDevice} from "buttplug"; - -class ConnectionAddress { - private static sIdNumber: number = 0; - public Id: number; - - public constructor(public Host: string, - public Port: number, - public Insecure: boolean, - public Secure: boolean) { - this.Id = ConnectionAddress.sIdNumber; - ConnectionAddress.sIdNumber += 1; - } - - public get IsValidURL(): boolean { - try { - const url = new URL(`ws://${this.Host}:${this.Port}`); - return true; - } catch (e) { - return false; - } - } -} - -@Component({}) -export default class ConnectionPanel extends Vue { - @Prop() - private client: ButtplugClient; - private isScanning: boolean = false; - // 30 second scanning limit - private scanTime: number = 30000; - private scanOnConnect: boolean = true; - private selectedDevices: ButtplugClientDevice[] = []; - // Blank array when disconnected. Mirrors ButtplugClient device array - // otherwise. Takes some extra logic to get vue to keep up with it. - private clientDevices: ButtplugClientDevice[] = []; - private desktopAddresses = [new ConnectionAddress("localhost", 12345, true, true), - new ConnectionAddress("localhost", 12346, true, true)]; - - public async ConnectToIntifaceDesktop() { - const connectPromises: Array> = []; - for (const address of this.desktopAddresses) { - const baseUrl = `${address.Host}:${address.Port}`; - const urls: string[] = []; - if (address.Insecure) { - urls.push(`ws://${baseUrl}`); - } - if (address.Secure) { - urls.push(`wss://${baseUrl}`); - } - for (const url of urls) { - connectPromises.push(this.Connect(new ButtplugBrowserWebsocketClientConnector(`${url}`)) - .then(() => Promise.resolve(true), (e) => Promise.resolve(false))); - } - } - const connectReturns = await Promise.all(connectPromises); - if (connectReturns.indexOf(true) === -1) { - console.log("No valid connection!"); - return; - } - } - - private get HasWebBluetooth(): boolean { - console.log(typeof(window) !== "undefined" && - typeof(window.navigator) !== "undefined" && - (navigator as any).bluetooth !== undefined); - return typeof(window) !== "undefined" && - typeof(window.navigator) !== "undefined" && - (navigator as any).bluetooth !== undefined; - } - - private OnDeviceListChanged(aDevice: ButtplugClientDevice) { - // Just reset our internal device array. - this.clientDevices = this.client.Devices; - } - - private async ConnectInBrowser(): Promise { - await this.Connect(new ButtplugEmbeddedClientConnector()); - } - - private async Connect(aConnector: IButtplugClientConnector): Promise { - this.client.addListener("deviceadded", this.OnDeviceListChanged); - this.client.addListener("deviceremoved", this.OnDeviceListChanged); - this.client.addListener("scanningfinished", this.OnScanningFinished); - await this.client.Connect(aConnector); - // If we don't connect successfully, the above line will throw. Assume that - // we're connected if we get this far. - this.clientDevices = this.client.Devices; - await this.StartScanning(); - } - - private get Connected() { - return this.client.Connected; - } - - private async StartScanning() { - await this.client.StartScanning(); - setTimeout(async () => await this.StopScanning(), this.scanTime); - console.log("Starting scanning"); - this.isScanning = true; - } - - private async StopScanning() { - await this.client.StopScanning(); - console.log("Stopping scanning"); - this.isScanning = false; - } - - private OnScanningFinished() { - this.isScanning = false; - } - - private async ToggleScanning() { - if (this.isScanning) { - await this.StopScanning(); - return; - } - await this.StartScanning(); - } - - private async Disconnect() { - await this.client.Disconnect(); - } - - private RemoveAddress(index: number) { - this.desktopAddresses = this.desktopAddresses.filter((x) => x.Id !== index); - } - - private AddAddress() { - this.desktopAddresses.push(new ConnectionAddress("", 0, true, true)); - } - - private ResetAddresses() { - this.desktopAddresses = [new ConnectionAddress("localhost", 12345, true, true), - new ConnectionAddress("localhost", 12346, true, true)]; - } -} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..9f289e3 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,12 @@ +import Vue from "vue"; + +import ButtplugPanelComponent from "./ButtplugPanel.vue"; + +const ButtplugPanel = ButtplugPanelComponent; + +export default ButtplugPanel; + +export function install(vue: typeof Vue, options = { prefix: "buttplug" }) { + const { prefix } = options; + vue.component(`${prefix}-panel`, ButtplugPanelComponent); +} diff --git a/yarn.lock b/yarn.lock index 4560b27..16ba83c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -53,10 +53,10 @@ cssnano-preset-default "^4.0.0" postcss "^7.0.0" -"@mdi/font@^3.6.95": - version "3.6.95" - resolved "https://registry.yarnpkg.com/@mdi/font/-/font-3.6.95.tgz#0bbde766ca2d94cfa0e469f25523b23d3112bdd3" - integrity sha512-wUbkF/RRCIh51TPzAL9qUeRSUFla9I3x1nGq62HkfWzIebRHbDY5HPaYCQuZO7398dWaLHTu4BwnBA58YbhfEA== +"@mdi/font@^3.8.95": + version "3.8.95" + resolved "https://registry.yarnpkg.com/@mdi/font/-/font-3.8.95.tgz#772094ed7046b126457b1f3b8c82e26b209e71e8" + integrity sha512-KR6TBdVYV3p1ZOM+Ge45Kk3P8yHfSGt3YOryVlkEKdO3vMiPjRaaDcQsdogGxVl8FcXsAt/Gz8MoXObbOF1Pzg== "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" @@ -99,10 +99,10 @@ resolved "https://registry.yarnpkg.com/@types/jest-diff/-/jest-diff-20.0.1.tgz#35cc15b9c4f30a18ef21852e255fdb02f6d59b89" integrity sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA== -"@types/jest@^24.0.13": - version "24.0.13" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.13.tgz#10f50b64cb05fb02411fbba49e9042a3a11da3f9" - integrity sha512-3m6RPnO35r7Dg+uMLj1+xfZaOgIHHHut61djNjzwExXN4/Pm9has9C6I1KMYSfz7mahDhWUOVg4HW/nZdv5Pww== +"@types/jest@^24.0.15": + version "24.0.15" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.15.tgz#6c42d5af7fe3b44ffff7cc65de7bf741e8fa427f" + integrity sha512-MU1HIvWUme74stAoc3mgAi+aMlgKOudgEvQDIm1v4RkrDudBh1T+NFp5sftpBAdXdx1J0PbdpJ+M2EsSOi1djA== dependencies: "@types/jest-diff" "*" @@ -141,30 +141,31 @@ resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.13.9.tgz#a67287861c928ebf4159a908d1fb1a2a34d4097a" integrity sha512-p8zp5xqkly3g4cCmo2mKOHI9+Z/kObmDj0BmjbDDJQlgDTiEGTbm17MEwTAusV6XceCy+bNw9q/ZHXHyKo3zkg== -"@vue/cli-overlay@^3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@vue/cli-overlay/-/cli-overlay-3.8.0.tgz#e4e8e2fa92b06fc282916df9c924f1dba50eeabb" - integrity sha512-4hY/+r9OwpMb7BPFnQGKftMC8CrfbV00REEFOij52+L4swQw+m879+5zX3Z0xHfPftw6JyaqJB0rmQ0ILI6Ovw== +"@vue/cli-overlay@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@vue/cli-overlay/-/cli-overlay-3.9.0.tgz#11f513d1fa11b0135fb8ba8b88d228df0dc542e0" + integrity sha512-QfyvpJl2ChehBT2qzb5EvW921JxW94uFL3+lHa6VT42ImH8awrvkTGZmxTQWhHvATa7r0LKy7M7ZRMyo547esg== -"@vue/cli-plugin-typescript@^3.8.1": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-typescript/-/cli-plugin-typescript-3.8.1.tgz#fbe1298710ed0f6feecba61640c3aab29bcc35b2" - integrity sha512-CAD19+Z46OtUHYkZaLFeDJPuQWVLFJ+1rSL3PdESVQ9Pm0ZVVsCCZYGeQAGyAbHNWtvY7Gt0CbxsZTj+5ChSpw== +"@vue/cli-plugin-typescript@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-typescript/-/cli-plugin-typescript-3.9.0.tgz#8969f2df898a68b4c1d49f5a928ec9ba35a0c0fe" + integrity sha512-QXL98MLM2gdqcrLkEG3bjwyQDIhzKdJqUdVghH/ZAttSj5G3hDKklI5HPqz3TJV7FVDOocFr1szP2BcXCCLh8Q== dependencies: "@types/webpack-env" "^1.13.9" - "@vue/cli-shared-utils" "^3.8.0" + "@vue/cli-shared-utils" "^3.9.0" fork-ts-checker-webpack-plugin "^0.5.2" globby "^9.2.0" ts-loader "^5.3.3" tslint "^5.15.0" webpack ">=4 < 4.29" + yorkie "^2.0.0" -"@vue/cli-plugin-unit-jest@^3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-unit-jest/-/cli-plugin-unit-jest-3.8.0.tgz#13cd3b4f5d1c9e0ef1982cbaea19b73f7df947d6" - integrity sha512-8kvoh6NZYY7FjuqRorqo47VTi62a3u69+oAxqBiIOkc28OGaju/FrL0Vm95vRB8tMkU6EPXKVRtCjPz8R2QeZA== +"@vue/cli-plugin-unit-jest@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-unit-jest/-/cli-plugin-unit-jest-3.9.0.tgz#0662adee9467006381b9cddc7fb3b0a21ccbbd07" + integrity sha512-FzUeTXXM7VUbjNDrqbj/AoUXZd0FZVrW936VO0W57r7uDgv+bh5hcEyzZnOaqFUOHYNFhl0RYD528/Uq5Dgm0A== dependencies: - "@vue/cli-shared-utils" "^3.8.0" + "@vue/cli-shared-utils" "^3.9.0" babel-jest "^23.6.0" babel-plugin-transform-es2015-modules-commonjs "^6.26.2" jest "^23.6.0" @@ -173,15 +174,15 @@ jest-watch-typeahead "0.2.1" vue-jest "^3.0.4" -"@vue/cli-service@^3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@vue/cli-service/-/cli-service-3.8.0.tgz#47eaa169a7bd96522c1a0df89214f1afee843cd6" - integrity sha512-ipJF4RHjyLyLC4oLx+JM1Jk6tiIG0KjCFAqfOscQ44K4CdyS03oFMAUR+SZYy/UXKccMnoeY6Ld4YrGXSytQsg== +"@vue/cli-service@^3.9.3": + version "3.9.3" + resolved "https://registry.yarnpkg.com/@vue/cli-service/-/cli-service-3.9.3.tgz#4bd5786465afb8b608c5c7fc9661390e747ea756" + integrity sha512-CZE9PP4HH9bK4qAaLbTUB3tubggI+aRSbgB/QYSZrVlhtMpuVFZPj2QHbIvJQZTI2cG6LFQtLTZWXKeqo5lbAQ== dependencies: "@intervolga/optimize-cssnano-plugin" "^1.0.5" "@soda/friendly-errors-webpack-plugin" "^1.7.1" - "@vue/cli-overlay" "^3.8.0" - "@vue/cli-shared-utils" "^3.8.0" + "@vue/cli-overlay" "^3.9.0" + "@vue/cli-shared-utils" "^3.9.0" "@vue/component-compiler-utils" "^2.6.0" "@vue/preload-webpack-plugin" "^1.1.0" "@vue/web-component-wrapper" "^1.2.0" @@ -201,6 +202,7 @@ cssnano "^4.1.10" current-script-polyfill "^1.0.0" debug "^4.1.1" + default-gateway "^5.0.2" dotenv "^7.0.0" dotenv-expand "^5.1.0" escape-string-regexp "^1.0.5" @@ -210,7 +212,7 @@ hash-sum "^1.0.2" html-webpack-plugin "^3.2.0" launch-editor-middleware "^2.2.1" - lodash.defaultsdeep "^4.6.0" + lodash.defaultsdeep "^4.6.1" lodash.mapvalues "^4.6.0" lodash.transform "^4.6.0" mini-css-extract-plugin "^0.6.0" @@ -233,12 +235,11 @@ webpack-chain "^4.11.0" webpack-dev-server "^3.4.1" webpack-merge "^4.2.1" - yorkie "^2.0.0" -"@vue/cli-shared-utils@^3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@vue/cli-shared-utils/-/cli-shared-utils-3.8.0.tgz#e7e728164eb92bd9e205fcd08dae896ee79cba5a" - integrity sha512-wn1L8pmQnotfftHOYm0VeXs2+cQTySd73uhWXwyO6pT0ehjqlY5c2RTipClmFF3Q+YCYjwlNpsV650F3l1tV8w== +"@vue/cli-shared-utils@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@vue/cli-shared-utils/-/cli-shared-utils-3.9.0.tgz#cb56a443bf763a873849a11d07e9e7638aa16cc2" + integrity sha512-wumeMZTz5aQ+1Y6uxTKegIsgOXEWT3hT8f9sW2mj5SwNDVyQ+AHZTgSynYExTUJg3dH81uKgFDUpPdAvGxzh8g== dependencies: "@hapi/joi" "^15.0.1" chalk "^2.4.1" @@ -502,7 +503,7 @@ ajv-keywords@^3.1.0: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.0.tgz#4b831e7b531415a7cc518cd404e73f6193c6349d" integrity sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw== -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.5.5: +ajv@^6.1.0, ajv@^6.5.5: version "6.10.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== @@ -512,6 +513,16 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.5.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^6.12.0: + version "6.12.4" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.4.tgz#0614facc4522127fa713445c6bfd3ebd376e2234" + integrity sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + alphanum-sort@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" @@ -1237,14 +1248,13 @@ builtin-status-codes@^3.0.0: resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= -buttplug@^0.11.6: - version "0.11.6" - resolved "https://registry.yarnpkg.com/buttplug/-/buttplug-0.11.6.tgz#4ac85e92fdd46bf17b08b33c3266e8eb8b005fc5" - integrity sha512-UOFL+GHEcU78Xh4fJ8i6HGcP1egoYh/9iWhHOUcbTY4OhqdMnxvoQT8D2X0tM9gjr9rNTZRweR7/N8oSYR8ftQ== +buttplug@^0.13.2: + version "0.13.2" + resolved "https://registry.yarnpkg.com/buttplug/-/buttplug-0.13.2.tgz#11953d12513cc280547c47d46ac08c118c42af69" + integrity sha512-eR3/zMUXTRR2MtzWa74VfsxsbnsobYSu2eS2/gqMEz07vHLr0/Sdi1IHTMMayXJ+vR8Gv44cwc/Sztd7WL5STA== dependencies: - ajv "^6.10.0" + ajv "^6.12.0" class-transformer "^0.2.3" - js-yaml "^3.13.1" reflect-metadata "^0.1.13" bytes@3.0.0: @@ -1396,6 +1406,15 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= +chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -1407,15 +1426,6 @@ chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - check-types@^7.3.0: version "7.4.0" resolved "https://registry.yarnpkg.com/check-types/-/check-types-7.4.0.tgz#0378ec1b9616ec71f774931a3c6516fad8c152f4" @@ -1840,16 +1850,7 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" -cross-spawn@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^6.0.0: +cross-spawn@6.0.5, cross-spawn@^6.0.0: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== @@ -1860,6 +1861,15 @@ cross-spawn@^6.0.0: shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" @@ -2180,6 +2190,14 @@ default-gateway@^4.2.0: execa "^1.0.0" ip-regex "^2.1.0" +default-gateway@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-5.0.2.tgz#d2d8a13d6fee406d9365d19ec9adccb8a60b82b3" + integrity sha512-wXuT0q8T5vxQNecrTgz/KbU2lPUMRc98I9Y5dnH3yhFB3BGYqtADK4lhivLlG0OfjhmfKx1PGILG2jR4zjI+WA== + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + default-require-extensions@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" @@ -2264,6 +2282,11 @@ destroy@~1.0.4: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= +detect-file@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= + detect-indent@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" @@ -2492,7 +2515,7 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0: +enhanced-resolve@4.1.0, enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng== @@ -2615,10 +2638,10 @@ event-pubsub@4.3.0: resolved "https://registry.yarnpkg.com/event-pubsub/-/event-pubsub-4.3.0.tgz#f68d816bc29f1ec02c539dc58c8dd40ce72cb36e" integrity sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ== -eventemitter3@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" - integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== events@^3.0.0: version "3.0.0" @@ -2718,6 +2741,13 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= + dependencies: + homedir-polyfill "^1.0.1" + expect@^23.6.0: version "23.6.0" resolved "https://registry.yarnpkg.com/expect/-/expect-23.6.0.tgz#1e0c8d3ba9a581c87bd71fb9bc8862d443425f98" @@ -2829,6 +2859,11 @@ fast-deep-equal@^2.0.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + fast-glob@^2.2.6: version "2.2.7" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" @@ -2997,6 +3032,16 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" +findup-sync@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" + integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== + dependencies: + detect-file "^1.0.0" + is-glob "^4.0.0" + micromatch "^3.0.4" + resolve-dir "^1.0.1" + flush-write-stream@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" @@ -3006,11 +3051,9 @@ flush-write-stream@^1.0.0: readable-stream "^2.3.6" follow-redirects@^1.0.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.7.0.tgz#489ebc198dc0e7f64167bd23b03c4c19b5784c76" - integrity sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ== - dependencies: - debug "^3.2.6" + version "1.13.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db" + integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA== for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" @@ -3219,6 +3262,42 @@ glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" +global-modules@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" @@ -3426,6 +3505,13 @@ home-or-tmp@^2.0.0: os-homedir "^1.0.0" os-tmpdir "^1.0.1" +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + parse-passwd "^1.0.0" + hoopy@^0.1.2: version "0.1.4" resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" @@ -3553,11 +3639,11 @@ http-proxy-middleware@^0.19.1: micromatch "^3.1.10" http-proxy@^1.17.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a" - integrity sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g== + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== dependencies: - eventemitter3 "^3.0.0" + eventemitter3 "^4.0.0" follow-redirects "^1.0.0" requires-port "^1.0.0" @@ -3643,6 +3729,14 @@ import-from@^2.1.0: dependencies: resolve-from "^3.0.0" +import-local@2.0.0, import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + import-local@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" @@ -3651,14 +3745,6 @@ import-local@^1.0.0: pkg-dir "^2.0.0" resolve-cwd "^2.0.0" -import-local@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" - integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== - dependencies: - pkg-dir "^3.0.0" - resolve-cwd "^2.0.0" - imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -3692,7 +3778,7 @@ inherits@2.0.1: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= -ini@^1.3.4, ini@~1.3.0: +ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== @@ -3705,6 +3791,11 @@ internal-ip@^4.3.0: default-gateway "^4.2.0" ipaddr.js "^1.9.0" +interpret@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" + integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== + invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" @@ -4039,7 +4130,7 @@ is-whitespace@^0.3.0: resolved "https://registry.yarnpkg.com/is-whitespace/-/is-whitespace-0.3.0.tgz#1639ecb1be036aec69a54cbb401cfbed7114ab7f" integrity sha1-Fjnssb4DauxppUy7QBz77XEUq38= -is-windows@^1.0.2: +is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== @@ -4743,6 +4834,15 @@ loader-runner@^2.3.0, loader-runner@^2.3.1: resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== +loader-utils@1.2.3, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.0, loader-utils@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" + integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== + dependencies: + big.js "^5.2.2" + emojis-list "^2.0.0" + json5 "^1.0.1" + loader-utils@^0.2.16: version "0.2.17" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" @@ -4753,15 +4853,6 @@ loader-utils@^0.2.16: json5 "^0.5.0" object-assign "^4.0.1" -loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" - integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== - dependencies: - big.js "^5.2.2" - emojis-list "^2.0.0" - json5 "^1.0.1" - locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" @@ -4783,10 +4874,10 @@ lodash.clonedeep@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= -lodash.defaultsdeep@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.0.tgz#bec1024f85b1bd96cbea405b23c14ad6443a6f81" - integrity sha1-vsECT4WxvZbL6kBbI8FK1kQ6b4E= +lodash.defaultsdeep@^4.6.1: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6" + integrity sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA== lodash.mapvalues@^4.6.0: version "4.6.0" @@ -5004,7 +5095,7 @@ micromatch@^2.3.11: parse-glob "^3.0.4" regex-cache "^0.4.2" -micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: +micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -5795,6 +5886,11 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= + parse5@4.0.0, parse5@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" @@ -6761,6 +6857,14 @@ resolve-cwd@^2.0.0: dependencies: resolve-from "^3.0.0" +resolve-dir@^1.0.0, resolve-dir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" @@ -7458,6 +7562,14 @@ strip-json-comments@^2.0.0, strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= +style-loader@^0.23.1: + version "0.23.1" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925" + integrity sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg== + dependencies: + loader-utils "^1.1.0" + schema-utils "^1.0.0" + stylehacks@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" @@ -7488,6 +7600,13 @@ stylus@^0.54.5: sax "0.5.x" source-map "0.1.x" +supports-color@6.1.0, supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + 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" @@ -7507,13 +7626,6 @@ supports-color@^5.3.0, supports-color@^5.4.0: dependencies: has-flag "^3.0.0" -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - svgo@^1.0.0: version "1.2.2" resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.2.2.tgz#0253d34eccf2aed4ad4f283e11ee75198f9d7316" @@ -7762,10 +7874,10 @@ ts-loader@^5.3.3: micromatch "^3.1.4" semver "^5.0.1" -ts-loader@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-6.0.2.tgz#cbd46a1495668ed9d59813f5c66f4bb49ff0c14c" - integrity sha512-kkF3sGf3oBUehlvXI9fkbItbFTnNgGkYAz91vtWnsKAU4m+LAmQjuby7uTZNo3As+/zHLuyB052SkQDY6vLXtg== +ts-loader@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-6.0.4.tgz#bc331ad91a887a60632d94c9f79448666f2c4b63" + integrity sha512-p2zJYe7OtwR+49kv4gs7v4dMrfYD1IPpOtqiSPCbe8oR+4zEBtdHwzM7A7M91F+suReqgzZrlClk4LRSSp882g== dependencies: chalk "^2.3.0" enhanced-resolve "^4.0.0" @@ -7856,10 +7968,10 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.1.tgz#ba72a6a600b2158139c5dd8850f700e231464202" - integrity sha512-64HkdiRv1yYZsSe4xC1WVgamNigVYjlssIoaH2HcZF0+ijsk5YK2g0G34w9wJkze8+5ow4STd22AynfO6ZYYLw== +typescript@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.2.tgz#7ea7c88777c723c681e33bf7988be5d008d05ac2" + integrity sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ== uglify-js@3.4.x: version "3.4.10" @@ -8028,6 +8140,11 @@ uuid@^3.0.1, uuid@^3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== +v8-compile-cache@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe" + integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w== + validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -8067,10 +8184,15 @@ vue-class-component@^7.0.1, vue-class-component@^7.1.0: resolved "https://registry.yarnpkg.com/vue-class-component/-/vue-class-component-7.1.0.tgz#b33efcb10e17236d684f70b1e96f1946ec793e87" integrity sha512-G9152NzUkz0i0xTfhk0Afc8vzdXxDR1pfN4dTwE72cskkgJtdXfrKBkMfGvDuxUh35U500g5Ve4xL8PEGdWeHg== -vue-cli-plugin-vuetify@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/vue-cli-plugin-vuetify/-/vue-cli-plugin-vuetify-0.5.0.tgz#14c9a61884da58cf6aaf8ff3309044931907f184" - integrity sha512-TigfiZUs7SN3Z6uxKilqJUtYxte8vp0F4QxabCli6hkKPqU97JzAZc3P7AL6omkRAd2DMI26fOrIGjuALTvXww== +vue-cli-plugin-vuetify@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/vue-cli-plugin-vuetify/-/vue-cli-plugin-vuetify-0.6.1.tgz#4fe0b7322a90a9c9f0aff2e18fd9249088b33080" + integrity sha512-WZzXXTdFOXWXVhSL4zXs1nJvC/6Py9kXm4S+bdh+W0xucwXlIAr19cgqCjV9ahR4cznQ/SBDv8x4RFCpPgGAHQ== + +vue-cookies@^1.5.13: + version "1.5.13" + resolved "https://registry.yarnpkg.com/vue-cookies/-/vue-cookies-1.5.13.tgz#b1ca79a2663bf9a4f36982557011cab5ee2196c0" + integrity sha512-8pjpXnvbNWx1Lft0t3MJnW+ylv0Wa2Tb6Ch617u/pQah3+SfXUZZdkh3EL3bSpe/Sw2Wdw3+DhycgQsKANSxXg== vue-hot-reload-api@^2.3.0: version "2.3.3" @@ -8104,11 +8226,12 @@ vue-loader@^15.7.0: vue-hot-reload-api "^2.3.0" vue-style-loader "^4.1.0" -vue-property-decorator@^8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/vue-property-decorator/-/vue-property-decorator-8.1.1.tgz#80dadbe5ffa0e7eb6a0ba0a07036365471a7d5ee" - integrity sha512-K+PUT17ZEMWyhrKZnl4Fc9qMyFpMcjVbZJBwx4BpA8BXfaspaTeFdoHuk1aywC/+4G86sxIr/5n4IQUQLecSWw== +vue-property-decorator@^8.2.1: + version "8.2.1" + resolved "https://registry.yarnpkg.com/vue-property-decorator/-/vue-property-decorator-8.2.1.tgz#3791662033b20d20d098cb20e86fd23842982508" + integrity sha512-zgtcvzGB2JpDqnIxVhTK+6m+dv3uyhYs+tL8elL+DWiXj9kDonKcPY7f1DHYX1NlnWPCj7ht0nL/i8+S1gg76Q== dependencies: + vue "^2.6.10" vue-class-component "^7.0.1" vue-style-loader@^4.1.0: @@ -8137,17 +8260,17 @@ vue@^2.6.10: resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.10.tgz#a72b1a42a4d82a721ea438d1b6bf55e66195c637" integrity sha512-ImThpeNU9HbdZL3utgMCq0oiMzAkt1mcgy3/E6zWC/G6AaQoeuFdsl9nDhTDU3X1R6FK7nsIUuRACVcjI+A2GQ== -vuetify-loader@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/vuetify-loader/-/vuetify-loader-1.2.2.tgz#7c221dcfd8482344518818d598f9cef8ddd85b6b" - integrity sha512-j6KWPuwQ4xTxPDksbFwbSJle7+3oSjNvJ/CViTEgbPLFPqnNsR8JUtRldURIQ0cmAmr0/CoLSZkj0B8JKqOBMA== +vuetify-loader@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/vuetify-loader/-/vuetify-loader-1.3.0.tgz#759f1d16f3f211eddbeeffc5c0b24105f2582b07" + integrity sha512-emKS3GWpx+0kWRHfoxpDpLR4HaXvhDn9bYNQf+IaaD5iU5S3xktDyS0egG7dp/oHLQr1U/Ui9g2ElhZUkdgRqw== dependencies: - loader-utils "^1.1.0" + loader-utils "^1.2.0" -vuetify@^1.5.14: - version "1.5.14" - resolved "https://registry.yarnpkg.com/vuetify/-/vuetify-1.5.14.tgz#ff67d0b8a398be5297da159b6cd1b31f4d2898b8" - integrity sha512-7iM+TfghR/wu/Gl+k37lKr0N8Ddr6SxzqHtoK1dIyHgCH6SJRkpaXPw2MC5/FsAg9aUDJbYNWrzSeu5eHw+Q/w== +vuetify@^1.5.16: + version "1.5.16" + resolved "https://registry.yarnpkg.com/vuetify/-/vuetify-1.5.16.tgz#cc9d0199c389d64d15787ddc85ca47a28225eeee" + integrity sha512-yBgOsfurKQkeS+l+rrTQZ2bFk0D9ezjHhkuVM5A/yVzcg62sY2nfYaq/H++uezBWC9WYFrp/5OmSocJQcWn9Qw== w3c-hr-time@^1.0.1: version "1.0.1" @@ -8226,6 +8349,23 @@ webpack-chain@^4.11.0: deepmerge "^1.5.2" javascript-stringify "^1.6.0" +webpack-cli@^3.3.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.6.tgz#2c8c399a2642133f8d736a359007a052e060032c" + integrity sha512-0vEa83M7kJtxK/jUhlpZ27WHIOndz5mghWL2O53kiDoA9DIxSKnfqB92LoqEn77cT4f3H2cZm1BMEat/6AZz3A== + dependencies: + chalk "2.4.2" + cross-spawn "6.0.5" + enhanced-resolve "4.1.0" + findup-sync "3.0.0" + global-modules "2.0.0" + import-local "2.0.0" + interpret "1.2.0" + loader-utils "1.2.3" + supports-color "6.1.0" + v8-compile-cache "2.0.3" + yargs "13.2.4" + webpack-dev-middleware@^3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.0.tgz#ef751d25f4e9a5c8a35da600c5fda3582b5c6cff" @@ -8379,7 +8519,7 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@^1.2.12, which@^1.2.9, which@^1.3.0: +which@^1.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -8533,6 +8673,23 @@ yargs@12.0.5: y18n "^3.2.1 || ^4.0.0" yargs-parser "^11.1.1" +yargs@13.2.4, yargs@^13.0.0: + version "13.2.4" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" + integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + os-locale "^3.1.0" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.0" + yargs@^11.0.0: version "11.1.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" @@ -8551,23 +8708,6 @@ yargs@^11.0.0: y18n "^3.2.1" yargs-parser "^9.0.2" -yargs@^13.0.0: - version "13.2.4" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" - integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - os-locale "^3.1.0" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.0" - yorkie@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/yorkie/-/yorkie-2.0.0.tgz#92411912d435214e12c51c2ae1093e54b6bb83d9"