diff --git a/extensions/insights-default/yarn.lock b/extensions/insights-default/yarn.lock new file mode 100644 index 0000000000..fb57ccd13a --- /dev/null +++ b/extensions/insights-default/yarn.lock @@ -0,0 +1,4 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + diff --git a/extensions/markdown-basics/yarn.lock b/extensions/markdown-basics/yarn.lock new file mode 100644 index 0000000000..fb57ccd13a --- /dev/null +++ b/extensions/markdown-basics/yarn.lock @@ -0,0 +1,4 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + diff --git a/package.json b/package.json index 75667a433f..14559fa0f9 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "@angular/router": "~4.1.3", "@angular/upgrade": "~4.1.3", "angular2-grid": "2.0.6", - "angular2-slickgrid": "github:Microsoft/angular2-slickgrid#1.4.3", + "angular2-slickgrid": "github:Microsoft/angular2-slickgrid#1.4.4", "applicationinsights": "0.18.0", "chart.js": "^2.6.0", "fast-plist": "0.1.2", diff --git a/src/sql/base/browser/ui/panel/panel.ts b/src/sql/base/browser/ui/panel/panel.ts index 94f3339c4c..4c390a163d 100644 --- a/src/sql/base/browser/ui/panel/panel.ts +++ b/src/sql/base/browser/ui/panel/panel.ts @@ -4,11 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import { IThemable } from 'vs/platform/theme/common/styler'; -import * as objects from 'sql/base/common/objects'; import { Event, Emitter } from 'vs/base/common/event'; -import { Dimension } from 'vs/base/browser/dom'; +import { Dimension, EventType } from 'vs/base/browser/dom'; import { $, Builder } from 'vs/base/browser/builder'; -import { EventType } from 'vs/base/browser/dom'; import { IAction } from 'vs/base/common/actions'; import { IActionOptions, ActionBar } from 'vs/base/browser/ui/actionbar/actionbar'; import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; @@ -17,12 +15,16 @@ import './panelStyles'; import { Disposable } from 'vs/base/common/lifecycle'; export interface IPanelStyles { +} +export interface IPanelOptions { + showHeaderWhenSingleView?: boolean; } export interface IPanelView { render(container: HTMLElement): void; layout(dimension: Dimension): void; + remove?(): void; } export interface IPanelTab { @@ -36,6 +38,10 @@ interface IInternalPanelTab extends IPanelTab { label: Builder; } +const defaultOptions: IPanelOptions = { + showHeaderWhenSingleView: true +}; + export type PanelTabIdentifier = string; export class TabbedPanel extends Disposable implements IThemable { @@ -49,11 +55,12 @@ export class TabbedPanel extends Disposable implements IThemable { private _actionbar: ActionBar; private _currentDimensions: Dimension; private _collapsed = false; + private _headerVisible: boolean; private _onTabChange = new Emitter(); public onTabChange: Event = this._onTabChange.event; - constructor(private container: HTMLElement) { + constructor(private container: HTMLElement, private options: IPanelOptions = defaultOptions) { super(); this.$parent = this._register($('.tabbedPanel')); this.$parent.appendTo(container); @@ -65,7 +72,12 @@ export class TabbedPanel extends Disposable implements IThemable { let actionbarcontainer = $('.title-actions'); this._actionbar = new ActionBar(actionbarcontainer.getHTMLElement()); this.$header.append(actionbarcontainer); - this.$parent.append(this.$header); + if (options.showHeaderWhenSingleView) { + this._headerVisible = true; + this.$parent.append(this.$header); + } else { + this._headerVisible = false; + } this.$body = $('tabBody'); this.$body.attr('role', 'tabpanel'); this.$body.attr('tabindex', '0'); @@ -73,12 +85,16 @@ export class TabbedPanel extends Disposable implements IThemable { } public pushTab(tab: IPanelTab): PanelTabIdentifier { - let internalTab = objects.clone(tab) as IInternalPanelTab; + let internalTab = tab as IInternalPanelTab; this._tabMap.set(tab.identifier, internalTab); this._createTab(internalTab); if (!this._shownTab) { this.showTab(tab.identifier); } + if (this._tabMap.size > 1 && !this._headerVisible) { + this.$parent.append(this.$header, 0); + this._headerVisible = true; + } return tab.identifier as PanelTabIdentifier; } @@ -139,6 +155,11 @@ export class TabbedPanel extends Disposable implements IThemable { } public removeTab(tab: PanelTabIdentifier) { + let actualTab = this._tabMap.get(tab); + actualTab.header.destroy(); + if (actualTab.view.remove) { + actualTab.view.remove(); + } this._tabMap.get(tab).header.destroy(); this._tabMap.delete(tab); } @@ -151,8 +172,9 @@ export class TabbedPanel extends Disposable implements IThemable { this._currentDimensions = dimension; this.$header.style('width', dimension.width + 'px'); this.$body.style('width', dimension.width + 'px'); - this.$body.style('height', (dimension.height - this.headersize) + 'px'); - this._layoutCurrentTab(new Dimension(dimension.width, dimension.height - this.headersize)); + const bodyHeight = dimension.height - (this._headerVisible ? this.headersize : 0); + this.$body.style('height', bodyHeight + 'px'); + this._layoutCurrentTab(new Dimension(dimension.width, bodyHeight)); } private _layoutCurrentTab(dimension: Dimension): void { diff --git a/src/sql/base/browser/ui/scrollableSplitview/heightMap.ts b/src/sql/base/browser/ui/scrollableSplitview/heightMap.ts new file mode 100644 index 0000000000..f78668115d --- /dev/null +++ b/src/sql/base/browser/ui/scrollableSplitview/heightMap.ts @@ -0,0 +1,212 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the Source EULA. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { INextIterator } from 'vs/base/common/iterator'; + +export interface IView { + id: string; +} + +export interface IViewItem { + view: IView; + top: number; + height: number; + width: number; +} + +export class HeightMap { + + private heightMap: IViewItem[]; + private indexes: { [item: string]: number; }; + + constructor() { + this.heightMap = []; + this.indexes = {}; + } + + public getContentHeight(): number { + let last = this.heightMap[this.heightMap.length - 1]; + return !last ? 0 : last.top + last.height; + } + + public onInsertItems(iterator: INextIterator, afterItemId: string = null): number { + let viewItem: IViewItem; + let i: number, j: number; + let totalSize: number; + let sizeDiff = 0; + + if (afterItemId === null) { + i = 0; + totalSize = 0; + } else { + i = this.indexes[afterItemId] + 1; + viewItem = this.heightMap[i - 1]; + + if (!viewItem) { + console.error('view item doesnt exist'); + return undefined; + } + + totalSize = viewItem.top + viewItem.height; + } + + let boundSplice = this.heightMap.splice.bind(this.heightMap, i, 0); + + let itemsToInsert: IViewItem[] = []; + + while (viewItem = iterator.next()) { + viewItem.top = totalSize + sizeDiff; + + this.indexes[viewItem.view.id] = i++; + itemsToInsert.push(viewItem); + sizeDiff += viewItem.height; + } + + boundSplice.apply(this.heightMap, itemsToInsert); + + for (j = i; j < this.heightMap.length; j++) { + viewItem = this.heightMap[j]; + viewItem.top += sizeDiff; + this.indexes[viewItem.view.id] = j; + } + + for (j = itemsToInsert.length - 1; j >= 0; j--) { + this.onInsertItem(itemsToInsert[j]); + } + + for (j = this.heightMap.length - 1; j >= i; j--) { + this.onRefreshItem(this.heightMap[j]); + } + + return sizeDiff; + } + + public onInsertItem(item: IViewItem): void { + // noop + } + + // Contiguous items + public onRemoveItems(iterator: INextIterator): void { + let itemId: string; + let viewItem: IViewItem; + let startIndex: number = null; + let i: number; + let sizeDiff = 0; + + while (itemId = iterator.next()) { + i = this.indexes[itemId]; + viewItem = this.heightMap[i]; + + if (!viewItem) { + console.error('view item doesnt exist'); + return; + } + + sizeDiff -= viewItem.height; + delete this.indexes[itemId]; + this.onRemoveItem(viewItem); + + if (startIndex === null) { + startIndex = i; + } + } + + if (sizeDiff === 0) { + return; + } + + this.heightMap.splice(startIndex, i - startIndex + 1); + + for (i = startIndex; i < this.heightMap.length; i++) { + viewItem = this.heightMap[i]; + viewItem.top += sizeDiff; + this.indexes[viewItem.view.id] = i; + this.onRefreshItem(viewItem); + } + } + + public onRemoveItem(item: IViewItem): void { + // noop + } + + public onRefreshItem(item: IViewItem, needsRender: boolean = false): void { + // noop + } + + protected updateSize(item: string, size: number): void { + let i = this.indexes[item]; + + let viewItem = this.heightMap[i]; + + viewItem.height = size; + } + + protected updateTop(item: string, top: number): void { + let i = this.indexes[item]; + + let viewItem = this.heightMap[i]; + + viewItem.top = top; + } + + public itemsCount(): number { + return this.heightMap.length; + } + + public itemAt(position: number): string { + return this.heightMap[this.indexAt(position)].view.id; + } + + public withItemsInRange(start: number, end: number, fn: (item: string) => void): void { + start = this.indexAt(start); + end = this.indexAt(end); + for (let i = start; i <= end; i++) { + fn(this.heightMap[i].view.id); + } + } + + public indexAt(position: number): number { + let left = 0; + let right = this.heightMap.length; + let center: number; + let item: IViewItem; + + // Binary search + while (left < right) { + center = Math.floor((left + right) / 2); + item = this.heightMap[center]; + + if (position < item.top) { + right = center; + } else if (position >= item.top + item.height) { + if (left === center) { + break; + } + left = center; + } else { + return center; + } + } + + return this.heightMap.length; + } + + public indexAfter(position: number): number { + return Math.min(this.indexAt(position) + 1, this.heightMap.length); + } + + public itemAtIndex(index: number): IViewItem { + return this.heightMap[index]; + } + + public itemAfter(item: IViewItem): IViewItem { + return this.heightMap[this.indexes[item.view.id] + 1] || null; + } + + public dispose(): void { + this.heightMap = null; + this.indexes = null; + } +} diff --git a/src/sql/base/browser/ui/scrollableSplitview/scrollableSplitview.css b/src/sql/base/browser/ui/scrollableSplitview/scrollableSplitview.css new file mode 100644 index 0000000000..58c0de195f --- /dev/null +++ b/src/sql/base/browser/ui/scrollableSplitview/scrollableSplitview.css @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the Source EULA. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + + .monaco-scroll-split-view { + position: relative; +} diff --git a/src/sql/base/browser/ui/scrollableSplitview/scrollableSplitview.ts b/src/sql/base/browser/ui/scrollableSplitview/scrollableSplitview.ts new file mode 100644 index 0000000000..4d398bf43d --- /dev/null +++ b/src/sql/base/browser/ui/scrollableSplitview/scrollableSplitview.ts @@ -0,0 +1,622 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the Source EULA. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +'use strict'; + +import 'vs/css!./scrollableSplitview'; +import { IDisposable, combinedDisposable, toDisposable } from 'vs/base/common/lifecycle'; +import { mapEvent, Emitter, Event, debounceEvent } from 'vs/base/common/event'; +import * as types from 'vs/base/common/types'; +import * as dom from 'vs/base/browser/dom'; +import { clamp } from 'vs/base/common/numbers'; +import { range, firstIndex } from 'vs/base/common/arrays'; +import { Sash, Orientation, ISashEvent as IBaseSashEvent } from 'vs/base/browser/ui/sash/sash'; +import { ScrollableElement } from 'vs/base/browser/ui/scrollbar/scrollableElement'; +import { HeightMap, IView as HeightIView, IViewItem as HeightIViewItem } from './heightMap'; +import { ArrayIterator } from 'vs/base/common/iterator'; +import { mixin } from 'vs/base/common/objects'; +export { Orientation } from 'vs/base/browser/ui/sash/sash'; + +export interface ISplitViewOptions { + orientation?: Orientation; // default Orientation.VERTICAL + enableResizing?: boolean; +} + +const defaultOptions: ISplitViewOptions = { + enableResizing: true +}; + +export interface IView extends HeightIView { + readonly minimumSize: number; + readonly maximumSize: number; + readonly onDidChange: Event; + render(container: HTMLElement, orientation: Orientation): void; + layout(size: number, orientation: Orientation): void; +} + +interface ISashEvent { + sash: Sash; + start: number; + current: number; +} + +interface IViewItem extends HeightIViewItem { + view: IView; + size: number; + container: HTMLElement; + disposable: IDisposable; + layout(): void; +} + +interface ISashItem { + sash: Sash; + disposable: IDisposable; +} + +interface ISashDragState { + index: number; + start: number; + sizes: number[]; +} + +enum State { + Idle, + Busy +} + +function pushToEnd(arr: T[], value: T): T[] { + let didFindValue = false; + + const result = arr.filter(v => { + if (v === value) { + didFindValue = true; + return false; + } + + return true; + }); + + if (didFindValue) { + result.push(value); + } + + return result; +} + +export class ScrollableSplitView extends HeightMap implements IDisposable { + + private orientation: Orientation; + private el: HTMLElement; + private size = 0; + private contentSize = 0; + private viewItems: IViewItem[] = []; + private sashItems: ISashItem[] = []; + private sashDragState: ISashDragState; + private state: State = State.Idle; + private scrollable: ScrollableElement; + + private options: ISplitViewOptions; + + private dirtyState = false; + + private lastRenderTop: number; + private lastRenderHeight: number; + + private _onDidSashChange = new Emitter(); + readonly onDidSashChange = this._onDidSashChange.event; + private _onDidSashReset = new Emitter(); + readonly onDidSashReset = this._onDidSashReset.event; + + get length(): number { + return this.viewItems.length; + } + + constructor(container: HTMLElement, options: ISplitViewOptions = {}) { + super(); + this.orientation = types.isUndefined(options.orientation) ? Orientation.VERTICAL : options.orientation; + + this.options = mixin(options, defaultOptions, false); + + this.el = document.createElement('div'); + this.scrollable = new ScrollableElement(this.el, {}); + debounceEvent(this.scrollable.onScroll, (l, e) => e, 25)(e => { + this.render(e.scrollTop, e.height); + this.relayout(); + }); + let domNode = this.scrollable.getDomNode(); + dom.addClass(this.el, 'monaco-scroll-split-view'); + dom.addClass(domNode, 'monaco-split-view2'); + dom.addClass(domNode, this.orientation === Orientation.VERTICAL ? 'vertical' : 'horizontal'); + container.appendChild(domNode); + } + + addViews(views: IView[], sizes: number[], index = this.viewItems.length): void { + if (this.state !== State.Idle) { + throw new Error('Cant modify splitview'); + } + + this.state = State.Busy; + + for (let i = 0; i < views.length; i++) { + let view = views[i], size = sizes[i]; + + // Add view + const container = dom.$('.split-view-view'); + + const onChangeDisposable = view.onDidChange(size => this.onViewChange(item, size)); + const containerDisposable = toDisposable(() => { + if (container.parentElement) { + this.el.removeChild(container); + } + this.onRemoveItems(new ArrayIterator([item.view.id])); + }); + const disposable = combinedDisposable([onChangeDisposable, containerDisposable]); + + const layoutContainer = this.orientation === Orientation.VERTICAL + ? size => item.container.style.height = `${item.size}px` + : size => item.container.style.width = `${item.size}px`; + + const layout = () => { + layoutContainer(item.size); + item.view.layout(item.size, this.orientation); + }; + + size = Math.round(size); + const item: IViewItem = { view, container, size, layout, disposable, height: size, top: 0, width: 0 }; + this.viewItems.splice(index, 0, item); + + this.onInsertItems(new ArrayIterator([item]), index > 0 ? this.viewItems[index - 1].view.id : undefined); + + // Add sash + if (this.options.enableResizing && this.viewItems.length > 1) { + const orientation = this.orientation === Orientation.VERTICAL ? Orientation.HORIZONTAL : Orientation.VERTICAL; + const layoutProvider = this.orientation === Orientation.VERTICAL ? { getHorizontalSashTop: sash => this.getSashPosition(sash) } : { getVerticalSashLeft: sash => this.getSashPosition(sash) }; + const sash = new Sash(this.el, layoutProvider, { orientation }); + const sashEventMapper = this.orientation === Orientation.VERTICAL + ? (e: IBaseSashEvent) => ({ sash, start: e.startY, current: e.currentY }) + : (e: IBaseSashEvent) => ({ sash, start: e.startX, current: e.currentX }); + + const onStart = mapEvent(sash.onDidStart, sashEventMapper); + const onStartDisposable = onStart(this.onSashStart, this); + const onChange = mapEvent(sash.onDidChange, sashEventMapper); + const onSashChangeDisposable = onChange(this.onSashChange, this); + const onEnd = mapEvent(sash.onDidEnd, () => null); + const onEndDisposable = onEnd(() => this._onDidSashChange.fire()); + const onDidReset = mapEvent(sash.onDidReset, () => null); + const onDidResetDisposable = onDidReset(() => this._onDidSashReset.fire()); + + const disposable = combinedDisposable([onStartDisposable, onSashChangeDisposable, onEndDisposable, onDidResetDisposable, sash]); + const sashItem: ISashItem = { sash, disposable }; + + this.sashItems.splice(index - 1, 0, sashItem); + } + + view.render(container, this.orientation); + } + + this.relayout(index); + this.state = State.Idle; + } + + addView(view: IView, size: number, index = this.viewItems.length): void { + if (this.state !== State.Idle) { + throw new Error('Cant modify splitview'); + } + + this.state = State.Busy; + + // Add view + const container = dom.$('.split-view-view'); + + const onChangeDisposable = view.onDidChange(size => this.onViewChange(item, size)); + const containerDisposable = toDisposable(() => { + if (container.parentElement) { + this.el.removeChild(container); + } + this.onRemoveItems(new ArrayIterator([item.view.id])); + }); + const disposable = combinedDisposable([onChangeDisposable, containerDisposable]); + + const layoutContainer = this.orientation === Orientation.VERTICAL + ? size => item.container.style.height = `${item.size}px` + : size => item.container.style.width = `${item.size}px`; + + const layout = () => { + layoutContainer(item.size); + item.view.layout(item.size, this.orientation); + }; + + size = Math.round(size); + const item: IViewItem = { view, container, size, layout, disposable, height: size, top: 0, width: 0 }; + this.viewItems.splice(index, 0, item); + + this.onInsertItems(new ArrayIterator([item]), index > 0 ? this.viewItems[index - 1].view.id : undefined); + + // Add sash + if (this.options.enableResizing && this.viewItems.length > 1) { + const orientation = this.orientation === Orientation.VERTICAL ? Orientation.HORIZONTAL : Orientation.VERTICAL; + const layoutProvider = this.orientation === Orientation.VERTICAL ? { getHorizontalSashTop: sash => this.getSashPosition(sash) } : { getVerticalSashLeft: sash => this.getSashPosition(sash) }; + const sash = new Sash(this.el, layoutProvider, { orientation }); + const sashEventMapper = this.orientation === Orientation.VERTICAL + ? (e: IBaseSashEvent) => ({ sash, start: e.startY, current: e.currentY }) + : (e: IBaseSashEvent) => ({ sash, start: e.startX, current: e.currentX }); + + const onStart = mapEvent(sash.onDidStart, sashEventMapper); + const onStartDisposable = onStart(this.onSashStart, this); + const onChange = mapEvent(sash.onDidChange, sashEventMapper); + const onSashChangeDisposable = onChange(this.onSashChange, this); + const onEnd = mapEvent(sash.onDidEnd, () => null); + const onEndDisposable = onEnd(() => this._onDidSashChange.fire()); + const onDidReset = mapEvent(sash.onDidReset, () => null); + const onDidResetDisposable = onDidReset(() => this._onDidSashReset.fire()); + + const disposable = combinedDisposable([onStartDisposable, onSashChangeDisposable, onEndDisposable, onDidResetDisposable, sash]); + const sashItem: ISashItem = { sash, disposable }; + + sash.hide(); + this.sashItems.splice(index - 1, 0, sashItem); + } + + view.render(container, this.orientation); + this.relayout(index); + this.state = State.Idle; + } + + removeView(index: number): void { + if (this.state !== State.Idle) { + throw new Error('Cant modify splitview'); + } + + this.state = State.Busy; + + if (index < 0 || index >= this.viewItems.length) { + return; + } + + // Remove view + const viewItem = this.viewItems.splice(index, 1)[0]; + viewItem.disposable.dispose(); + + // Remove sash + if (this.options.enableResizing && this.viewItems.length >= 1) { + const sashIndex = Math.max(index - 1, 0); + const sashItem = this.sashItems.splice(sashIndex, 1)[0]; + sashItem.disposable.dispose(); + } else { + this.lastRenderHeight = NaN, this.lastRenderTop = NaN; + } + + this.relayout(); + this.state = State.Idle; + } + + moveView(from: number, to: number): void { + if (this.state !== State.Idle) { + throw new Error('Cant modify splitview'); + } + + this.state = State.Busy; + + if (from < 0 || from >= this.viewItems.length) { + return; + } + + if (to < 0 || to >= this.viewItems.length) { + return; + } + + if (from === to) { + return; + } + + const viewItem = this.viewItems.splice(from, 1)[0]; + this.viewItems.splice(to, 0, viewItem); + + if (to + 1 < this.viewItems.length) { + this.el.insertBefore(viewItem.container, this.viewItems[to + 1].container); + } else { + this.el.appendChild(viewItem.container); + } + + this.layoutViews(); + this.state = State.Idle; + } + + private relayout(lowPriorityIndex?: number): void { + const contentSize = this.viewItems.reduce((r, i) => r + i.size, 0); + this.resize(this.viewItems.length - 1, this.size - contentSize, undefined, lowPriorityIndex); + } + + layout(size: number): void { + const previousSize = Math.max(this.size, this.contentSize); + this.size = size; + this.resize(this.viewItems.length - 1, size - previousSize); + } + + private render(scrollTop: number, viewHeight: number): void { + let i: number; + let stop: number; + + let renderTop = scrollTop; + let renderBottom = scrollTop + viewHeight; + let thisRenderBottom = this.lastRenderTop + this.lastRenderHeight; + + // when view scrolls down, start rendering from the renderBottom + for (i = this.indexAfter(renderBottom) - 1, stop = this.indexAt(Math.max(thisRenderBottom, renderTop)); i >= stop; i--) { + if (this.insertItemInDOM(this.itemAtIndex(i))) { + this.dirtyState = true; + } + } + + // when view scrolls up, start rendering from either this.renderTop or renderBottom + for (i = Math.min(this.indexAt(this.lastRenderTop), this.indexAfter(renderBottom)) - 1, stop = this.indexAt(renderTop); i >= stop; i--) { + if (this.insertItemInDOM(this.itemAtIndex(i))) { + this.dirtyState = true; + } + } + + // when view scrolls down, start unrendering from renderTop + for (i = this.indexAt(this.lastRenderTop), stop = Math.min(this.indexAt(renderTop), this.indexAfter(thisRenderBottom)); i < stop; i++) { + if (this.removeItemFromDOM(this.itemAtIndex(i))) { + this.dirtyState = true; + } + } + + // when view scrolls up, start unrendering from either renderBottom this.renderTop + for (i = Math.max(this.indexAfter(renderBottom), this.indexAt(this.lastRenderTop)), stop = this.indexAfter(thisRenderBottom); i < stop; i++) { + if (this.removeItemFromDOM(this.itemAtIndex(i))) { + this.dirtyState = true; + } + } + + let topItem = this.itemAtIndex(this.indexAt(renderTop)); + + if (topItem) { + this.el.style.top = (topItem.top - renderTop) + 'px'; + } + + this.lastRenderTop = renderTop; + this.lastRenderHeight = renderBottom - renderTop; + } + + private onSashStart({ sash, start }: ISashEvent): void { + const index = firstIndex(this.sashItems, item => item.sash === sash); + const sizes = this.viewItems.map(i => i.size); + + // const upIndexes = range(index, -1); + // const collapseUp = upIndexes.reduce((r, i) => r + (sizes[i] - this.viewItems[i].view.minimumSize), 0); + // const expandUp = upIndexes.reduce((r, i) => r + (this.viewItems[i].view.maximumSize - sizes[i]), 0); + + // const downIndexes = range(index + 1, this.viewItems.length); + // const collapseDown = downIndexes.reduce((r, i) => r + (sizes[i] - this.viewItems[i].view.minimumSize), 0); + // const expandDown = downIndexes.reduce((r, i) => r + (this.viewItems[i].view.maximumSize - sizes[i]), 0); + + // const minDelta = -Math.min(collapseUp, expandDown); + // const maxDelta = Math.min(collapseDown, expandUp); + + this.sashDragState = { start, index, sizes }; + } + + private onSashChange({ sash, current }: ISashEvent): void { + const { index, start, sizes } = this.sashDragState; + const delta = current - start; + + this.resize(index, delta, sizes); + } + + private onViewChange(item: IViewItem, size: number | undefined): void { + const index = this.viewItems.indexOf(item); + + if (index < 0 || index >= this.viewItems.length) { + return; + } + + size = typeof size === 'number' ? size : item.size; + size = clamp(size, item.view.minimumSize, item.view.maximumSize); + item.size = size; + this.relayout(index); + } + + resizeView(index: number, size: number): void { + if (this.state !== State.Idle) { + throw new Error('Cant modify splitview'); + } + + this.state = State.Busy; + + if (index < 0 || index >= this.viewItems.length) { + return; + } + + const item = this.viewItems[index]; + size = Math.round(size); + size = clamp(size, item.view.minimumSize, item.view.maximumSize); + let delta = size - item.size; + + if (delta !== 0 && index < this.viewItems.length - 1) { + const downIndexes = range(index + 1, this.viewItems.length); + const collapseDown = downIndexes.reduce((r, i) => r + (this.viewItems[i].size - this.viewItems[i].view.minimumSize), 0); + const expandDown = downIndexes.reduce((r, i) => r + (this.viewItems[i].view.maximumSize - this.viewItems[i].size), 0); + const deltaDown = clamp(delta, -expandDown, collapseDown); + + this.resize(index, deltaDown); + delta -= deltaDown; + } + + if (delta !== 0 && index > 0) { + const upIndexes = range(index - 1, -1); + const collapseUp = upIndexes.reduce((r, i) => r + (this.viewItems[i].size - this.viewItems[i].view.minimumSize), 0); + const expandUp = upIndexes.reduce((r, i) => r + (this.viewItems[i].view.maximumSize - this.viewItems[i].size), 0); + const deltaUp = clamp(-delta, -collapseUp, expandUp); + + this.resize(index - 1, deltaUp); + } + + this.state = State.Idle; + } + + // DOM changes + + private insertItemInDOM(item: IViewItem): boolean { + if (item.container.parentElement) { + return false; + } + + let elementAfter: HTMLElement = null; + let itemAfter = this.itemAfter(item); + + if (itemAfter && itemAfter.container) { + elementAfter = itemAfter.container; + } + + if (elementAfter === null) { + this.el.appendChild(item.container); + } else { + try { + this.el.insertBefore(item.container, elementAfter); + } catch (e) { + // console.warn('Failed to locate previous tree element'); + this.el.appendChild(item.container); + } + } + + item.layout(); + return true; + } + + private removeItemFromDOM(item: IViewItem): boolean { + if (!item || !item.container || !item.container.parentElement) { + return false; + } + + this.el.removeChild(item.container); + return true; + } + + getViewSize(index: number): number { + if (index < 0 || index >= this.viewItems.length) { + return -1; + } + + return this.viewItems[index].size; + } + + private resize(index: number, delta: number, sizes = this.viewItems.map(i => i.size), lowPriorityIndex?: number): void { + if (index < 0 || index >= this.viewItems.length) { + return; + } + + if (delta !== 0) { + let upIndexes = range(index, -1); + let downIndexes = range(index + 1, this.viewItems.length); + + if (typeof lowPriorityIndex === 'number') { + upIndexes = pushToEnd(upIndexes, lowPriorityIndex); + downIndexes = pushToEnd(downIndexes, lowPriorityIndex); + } + + const upItems = upIndexes.map(i => this.viewItems[i]); + const upSizes = upIndexes.map(i => sizes[i]); + + const downItems = downIndexes.map(i => this.viewItems[i]); + const downSizes = downIndexes.map(i => sizes[i]); + + for (let i = 0, deltaUp = delta; deltaUp !== 0 && i < upItems.length; i++) { + const item = upItems[i]; + const size = clamp(upSizes[i] + deltaUp, item.view.minimumSize, item.view.maximumSize); + const viewDelta = size - upSizes[i]; + + deltaUp -= viewDelta; + item.size = size; + } + + for (let i = 0, deltaDown = delta; deltaDown !== 0 && i < downItems.length; i++) { + const item = downItems[i]; + const size = clamp(downSizes[i] - deltaDown, item.view.minimumSize, item.view.maximumSize); + const viewDelta = size - downSizes[i]; + + deltaDown += viewDelta; + item.size = size; + } + } + + let contentSize = this.viewItems.reduce((r, i) => r + i.size, 0); + let emptyDelta = this.size - contentSize; + + for (let i = this.viewItems.length - 1; emptyDelta > 0 && i >= 0; i--) { + const item = this.viewItems[i]; + const size = clamp(item.size + emptyDelta, item.view.minimumSize, item.view.maximumSize); + const viewDelta = size - item.size; + + emptyDelta -= viewDelta; + item.size = size; + } + + this.contentSize = this.viewItems.reduce((r, i) => r + i.size, 0); + + this.scrollable.setScrollDimensions({ + scrollHeight: this.contentSize, + height: this.size + }); + + this.layoutViews(); + } + + private layoutViews(): void { + if (this.dirtyState) { + for (let i = this.indexAt(this.lastRenderTop); i <= this.indexAfter(this.lastRenderTop + this.lastRenderHeight) - 1; i++) { + this.viewItems[i].layout(); + if (this.options.enableResizing) { + this.sashItems[i].sash.layout(); + } + } + this.dirtyState = false; + } + + // Update sashes enablement + // let previous = false; + // const collapsesDown = this.viewItems.map(i => previous = (i.size - i.view.minimumSize > 0) || previous); + + // previous = false; + // const expandsDown = this.viewItems.map(i => previous = (i.view.maximumSize - i.size > 0) || previous); + + // const reverseViews = [...this.viewItems].reverse(); + // previous = false; + // const collapsesUp = reverseViews.map(i => previous = (i.size - i.view.minimumSize > 0) || previous).reverse(); + + // previous = false; + // const expandsUp = reverseViews.map(i => previous = (i.view.maximumSize - i.size > 0) || previous).reverse(); + + // this.sashItems.forEach((s, i) => { + // if ((collapsesDown[i] && expandsUp[i + 1]) || (expandsDown[i] && collapsesUp[i + 1])) { + // s.sash.enable(); + // } else { + // s.sash.disable(); + // } + // }); + } + + private getSashPosition(sash: Sash): number { + let position = 0; + + for (let i = 0; i < this.sashItems.length; i++) { + position += this.viewItems[i].size; + + if (this.sashItems[i].sash === sash) { + return position; + } + } + + return 0; + } + + dispose(): void { + this.viewItems.forEach(i => i.disposable.dispose()); + this.viewItems = []; + + this.sashItems.forEach(i => i.disposable.dispose()); + this.sashItems = []; + } +} diff --git a/src/sql/base/browser/ui/table/asyncDataView.ts b/src/sql/base/browser/ui/table/asyncDataView.ts new file mode 100644 index 0000000000..98d1528ae1 --- /dev/null +++ b/src/sql/base/browser/ui/table/asyncDataView.ts @@ -0,0 +1,215 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +export interface IObservableCollection { + getLength(): number; + at(index: number): T; + getRange(start: number, end: number): T[]; + setCollectionChangedCallback(callback: (change: CollectionChange, startIndex: number, count: number) => void): void; +} + +export interface IGridDataRow { + row?: number; + values: any[]; +} + +export enum CollectionChange { + ItemsReplaced +} + +class LoadCancellationToken { + isCancelled: boolean; +} + +class DataWindow { + private _dataSourceLength: number; + private _data: TData[]; + private _length: number = 0; + private _offsetFromDataSource: number = -1; + + private loadFunction: (offset: number, count: number) => Thenable; + private lastLoadCancellationToken: LoadCancellationToken; + private loadCompleteCallback: (start: number, end: number) => void; + private placeholderItemGenerator: (index: number) => TData; + + constructor(dataSourceLength: number, + loadFunction: (offset: number, count: number) => Thenable, + placeholderItemGenerator: (index: number) => TData, + loadCompleteCallback: (start: number, end: number) => void) { + this._dataSourceLength = dataSourceLength; + this.loadFunction = loadFunction; + this.placeholderItemGenerator = placeholderItemGenerator; + this.loadCompleteCallback = loadCompleteCallback; + } + + getStartIndex(): number { + return this._offsetFromDataSource; + } + + getEndIndex(): number { + return this._offsetFromDataSource + this._length; + } + + contains(dataSourceIndex: number): boolean { + return dataSourceIndex >= this.getStartIndex() && dataSourceIndex < this.getEndIndex(); + } + + getItem(index: number): TData { + if (!this._data) { + return this.placeholderItemGenerator(index); + } + return this._data[index - this._offsetFromDataSource]; + } + + positionWindow(offset: number, length: number): void { + this._offsetFromDataSource = offset; + this._length = length; + this._data = undefined; + + if (this.lastLoadCancellationToken) { + this.lastLoadCancellationToken.isCancelled = true; + } + + if (length === 0) { + return; + } + + let cancellationToken = new LoadCancellationToken(); + this.lastLoadCancellationToken = cancellationToken; + this.loadFunction(offset, length).then(data => { + if (!cancellationToken.isCancelled) { + this._data = data; + this.loadCompleteCallback(this._offsetFromDataSource, this._offsetFromDataSource + this._length); + } + }); + } +} + +export class VirtualizedCollection implements IObservableCollection { + + private _length: number; + private _windowSize: number; + private _bufferWindowBefore: DataWindow; + private _window: DataWindow; + private _bufferWindowAfter: DataWindow; + + private collectionChangedCallback: (change: CollectionChange, startIndex: number, count: number) => void; + + constructor(windowSize: number, + length: number, + loadFn: (offset: number, count: number) => Thenable, + private _placeHolderGenerator: (index: number) => TData) { + this._windowSize = windowSize; + this._length = length; + + let loadCompleteCallback = (start: number, end: number) => { + if (this.collectionChangedCallback) { + this.collectionChangedCallback(CollectionChange.ItemsReplaced, start, end - start); + } + }; + + this._bufferWindowBefore = new DataWindow(length, loadFn, _placeHolderGenerator, loadCompleteCallback); + this._window = new DataWindow(length, loadFn, _placeHolderGenerator, loadCompleteCallback); + this._bufferWindowAfter = new DataWindow(length, loadFn, _placeHolderGenerator, loadCompleteCallback); + } + + setCollectionChangedCallback(callback: (change: CollectionChange, startIndex: number, count: number) => void): void { + this.collectionChangedCallback = callback; + } + + getLength(): number { + return this._length; + } + + at(index: number): TData { + return this.getRange(index, index + 1)[0]; + } + + getRange(start: number, end: number): TData[] { + + // current data may contain placeholders + let currentData = this.getRangeFromCurrent(start, end); + + // only shift window and make promise of refreshed data in following condition: + if (start < this._bufferWindowBefore.getStartIndex() || end > this._bufferWindowAfter.getEndIndex()) { + // jump, reset + this.resetWindowsAroundIndex(start); + } else if (end <= this._bufferWindowBefore.getEndIndex()) { + // scroll up, shift up + let windowToRecycle = this._bufferWindowAfter; + this._bufferWindowAfter = this._window; + this._window = this._bufferWindowBefore; + this._bufferWindowBefore = windowToRecycle; + let newWindowOffset = Math.max(0, this._window.getStartIndex() - this._windowSize); + + this._bufferWindowBefore.positionWindow(newWindowOffset, this._window.getStartIndex() - newWindowOffset); + } else if (start >= this._bufferWindowAfter.getStartIndex()) { + // scroll down, shift down + let windowToRecycle = this._bufferWindowBefore; + this._bufferWindowBefore = this._window; + this._window = this._bufferWindowAfter; + this._bufferWindowAfter = windowToRecycle; + let newWindowOffset = Math.min(this._window.getStartIndex() + this._windowSize, this._length); + let newWindowLength = Math.min(this._length - newWindowOffset, this._windowSize); + + this._bufferWindowAfter.positionWindow(newWindowOffset, newWindowLength); + } + + return currentData; + } + + private getRangeFromCurrent(start: number, end: number): TData[] { + let currentData = []; + for (let i = 0; i < end - start; i++) { + currentData.push(this.getDataFromCurrent(start + i)); + } + + return currentData; + } + + private getDataFromCurrent(index: number): TData { + if (this._bufferWindowBefore.contains(index)) { + return this._bufferWindowBefore.getItem(index); + } else if (this._bufferWindowAfter.contains(index)) { + return this._bufferWindowAfter.getItem(index); + } else if (this._window.contains(index)) { + return this._window.getItem(index); + } + + return this._placeHolderGenerator(index); + } + + private resetWindowsAroundIndex(index: number): void { + + let bufferWindowBeforeStart = Math.max(0, index - this._windowSize * 1.5); + let bufferWindowBeforeEnd = Math.max(0, index - this._windowSize / 2); + this._bufferWindowBefore.positionWindow(bufferWindowBeforeStart, bufferWindowBeforeEnd - bufferWindowBeforeStart); + + let mainWindowStart = bufferWindowBeforeEnd; + let mainWindowEnd = Math.min(mainWindowStart + this._windowSize, this._length); + this._window.positionWindow(mainWindowStart, mainWindowEnd - mainWindowStart); + + let bufferWindowAfterStart = mainWindowEnd; + let bufferWindowAfterEnd = Math.min(bufferWindowAfterStart + this._windowSize, this._length); + this._bufferWindowAfter.positionWindow(bufferWindowAfterStart, bufferWindowAfterEnd - bufferWindowAfterStart); + } +} + +export class AsyncDataProvider implements Slick.DataProvider { + + constructor(private dataRows: IObservableCollection) { } + + public getLength(): number { + return this.dataRows ? this.dataRows.getLength() : 0; + } + + public getItem(index: number): TData { + return !this.dataRows ? undefined : this.dataRows.at(index); + } + + public getRange(start: number, end: number): TData[] { + return !this.dataRows ? undefined : this.dataRows.getRange(start, end); + } +} diff --git a/src/sql/base/browser/ui/table/plugins/mousewheelTableScroll.plugin.ts b/src/sql/base/browser/ui/table/plugins/mousewheelTableScroll.plugin.ts new file mode 100644 index 0000000000..f45bd29b99 --- /dev/null +++ b/src/sql/base/browser/ui/table/plugins/mousewheelTableScroll.plugin.ts @@ -0,0 +1,76 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the Source EULA. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +'use strict'; + +import * as DOM from 'vs/base/browser/dom'; +import { StandardMouseWheelEvent } from 'vs/base/browser/mouseEvent'; +import { dispose, IDisposable } from 'vs/base/common/lifecycle'; +import { mixin } from 'vs/base/common/objects'; + +const SCROLL_WHEEL_SENSITIVITY = 50; + +export interface IMouseWheelSupportOptions { + scrollSpeed?: number; +} + +const defaultOptions: IMouseWheelSupportOptions = { + scrollSpeed: SCROLL_WHEEL_SENSITIVITY +}; + +export class MouseWheelSupport implements Slick.Plugin { + + private viewport: HTMLElement; + private canvas: HTMLElement; + private options: IMouseWheelSupportOptions; + + private _disposables: IDisposable[] = []; + + constructor(options: IMouseWheelSupportOptions = {}) { + this.options = mixin(options, defaultOptions); + } + + public init(grid: Slick.Grid): void { + this.canvas = grid.getCanvasNode(); + this.viewport = this.canvas.parentElement; + let onMouseWheel = (browserEvent: MouseWheelEvent) => { + let e = new StandardMouseWheelEvent(browserEvent); + this._onMouseWheel(e); + }; + this._disposables.push(DOM.addDisposableListener(this.viewport, 'mousewheel', onMouseWheel)); + this._disposables.push(DOM.addDisposableListener(this.viewport, 'DOMMouseScroll', onMouseWheel)); + } + + private _onMouseWheel(event: StandardMouseWheelEvent) { + const scrollHeight = this.canvas.clientHeight; + const height = this.viewport.clientHeight; + const scrollDown = Math.sign(event.deltaY) === -1; + if (scrollDown) { + if ((this.viewport.scrollTop - (event.deltaY * this.options.scrollSpeed)) + height > scrollHeight) { + this.viewport.scrollTop = scrollHeight - height; + this.viewport.dispatchEvent(new Event('scroll')); + } else { + this.viewport.scrollTop = this.viewport.scrollTop - (event.deltaY * this.options.scrollSpeed); + this.viewport.dispatchEvent(new Event('scroll')); + event.stopPropagation(); + event.preventDefault(); + } + } else { + if ((this.viewport.scrollTop - (event.deltaY * this.options.scrollSpeed)) < 0) { + this.viewport.scrollTop = 0; + this.viewport.dispatchEvent(new Event('scroll')); + } else { + this.viewport.scrollTop = this.viewport.scrollTop - (event.deltaY * this.options.scrollSpeed); + this.viewport.dispatchEvent(new Event('scroll')); + event.stopPropagation(); + event.preventDefault(); + } + } + } + + destroy() { + dispose(this._disposables); + } +} diff --git a/src/sql/base/browser/ui/table/table.ts b/src/sql/base/browser/ui/table/table.ts index 0150c887d1..c9aa34957b 100644 --- a/src/sql/base/browser/ui/table/table.ts +++ b/src/sql/base/browser/ui/table/table.ts @@ -11,9 +11,17 @@ import { IListStyles } from 'vs/base/browser/ui/list/listWidget'; import * as DOM from 'vs/base/browser/dom'; import { Color } from 'vs/base/common/color'; import { mixin } from 'vs/base/common/objects'; -import { IDisposable } from 'vs/base/common/lifecycle'; +import { IDisposable, dispose } from 'vs/base/common/lifecycle'; import { Orientation } from 'vs/base/browser/ui/splitview/splitview'; import { Widget } from 'vs/base/browser/ui/widget'; +import { isArray, isBoolean } from 'vs/base/common/types'; +import { Event, Emitter } from 'vs/base/common/event'; +import { range } from 'vs/base/common/arrays'; + +export interface ITableContextMenuEvent { + anchor: HTMLElement | { x: number, y: number }; + cell?: { row: number, cell: number }; +} export interface ITableStyles extends IListStyles { tableHeaderBackground?: Color; @@ -27,30 +35,46 @@ function getDefaultOptions(): Slick.GridOptions { }; } -export class Table extends Widget implements IThemable { +export interface ITableSorter { + sort(args: Slick.OnSortEventArgs); +} + +export interface ITableConfiguration { + dataProvider?: Slick.DataProvider | Array; + columns?: Slick.Column[]; + sorter?: ITableSorter; +} + +export class Table extends Widget implements IThemable, IDisposable { private styleElement: HTMLStyleElement; private idPrefix: string; private _grid: Slick.Grid; private _columns: Slick.Column[]; - private _data: TableDataView; + private _data: Slick.DataProvider; + private _sorter: ITableSorter; + private _autoscroll: boolean; - private _onRowCountChangeListener: IDisposable; private _container: HTMLElement; private _tableContainer: HTMLElement; private _classChangeTimeout: number; - constructor(parent: HTMLElement, data?: Array | TableDataView, columns?: Slick.Column[], options?: Slick.GridOptions) { + private _disposables: IDisposable[] = []; + + private _onContextMenu = new Emitter(); + public readonly onContextMenu: Event = this._onContextMenu.event; + + constructor(parent: HTMLElement, configuration?: ITableConfiguration, options?: Slick.GridOptions) { super(); - if (data instanceof TableDataView) { - this._data = data; + if (!configuration || isArray(configuration.dataProvider)) { + this._data = new TableDataView(configuration && configuration.dataProvider as Array); } else { - this._data = new TableDataView(data); + this._data = configuration.dataProvider; } - if (columns) { - this._columns = columns; + if (configuration.columns) { + this._columns = configuration.columns; } else { this._columns = new Array>(); } @@ -81,15 +105,33 @@ export class Table extends Widget implements IThemabl this._grid = new Slick.Grid(this._tableContainer, this._data, this._columns, newOptions); this.idPrefix = this._tableContainer.classList[0]; DOM.addClass(this._container, this.idPrefix); - this._onRowCountChangeListener = this._data.onRowCountChange(() => this._handleRowCountChange()); - this._grid.onSort.subscribe((e, args) => { - this._data.sort(args); - this._grid.invalidate(); - this._grid.render(); + if (configuration.sorter) { + this._sorter = configuration.sorter; + this._grid.onSort.subscribe((e, args) => { + this._sorter.sort(args); + this._grid.invalidate(); + this._grid.render(); + }); + } + + this._grid.onContextMenu.subscribe((e: JQuery.Event) => { + const originalEvent = e.originalEvent; + const cell = this._grid.getCellFromEvent(originalEvent); + const anchor = originalEvent instanceof MouseEvent ? { x: originalEvent.x, y: originalEvent.y } : originalEvent.srcElement as HTMLElement; + this._onContextMenu.fire({ anchor, cell }); }); } - private _handleRowCountChange() { + public dispose() { + dispose(this._disposables); + } + + public invalidateRows(rows: number[], keepEditor: boolean) { + this._grid.invalidateRows(rows, keepEditor); + this._grid.render(); + } + + public updateRowCount() { this._grid.updateRowCount(); this._grid.render(); if (this._autoscroll) { @@ -113,20 +155,22 @@ export class Table extends Widget implements IThemabl } else { this._data = new TableDataView(data); } - this._onRowCountChangeListener.dispose(); this._grid.setData(this._data, true); - this._onRowCountChangeListener = this._data.onRowCountChange(() => this._handleRowCountChange()); } get columns(): Slick.Column[] { return this._grid.getColumns(); } - setSelectedRows(rows: number[]) { - this._grid.setSelectedRows(rows); + public setSelectedRows(rows: number[] | boolean) { + if (isBoolean(rows)) { + this._grid.setSelectedRows(range(this._grid.getDataLength())); + } else { + this._grid.setSelectedRows(rows); + } } - getSelectedRows(): number[] { + public getSelectedRows(): number[] { return this._grid.getSelectedRows(); } @@ -143,21 +187,6 @@ export class Table extends Widget implements IThemabl }; } - onContextMenu(fn: (e: Slick.EventData, data: Slick.OnContextMenuEventArgs) => any): IDisposable; - onContextMenu(fn: (e: DOMEvent, data: Slick.OnContextMenuEventArgs) => any): IDisposable; - onContextMenu(fn: any): IDisposable { - this._grid.onContextMenu.subscribe(fn); - return { - dispose: () => { - this._grid.onContextMenu.unsubscribe(fn); - } - }; - } - - getCellFromEvent(e: DOMEvent): Slick.Cell { - return this._grid.getCellFromEvent(e); - } - setSelectionModel(model: Slick.SelectionModel>) { this._grid.setSelectionModel(model); } @@ -194,7 +223,7 @@ export class Table extends Widget implements IThemabl this._tableContainer.style.width = sizing.width + 'px'; this._tableContainer.style.height = sizing.height + 'px'; } else { - if (orientation === Orientation.HORIZONTAL) { + if (orientation === Orientation.VERTICAL) { this._container.style.width = '100%'; this._container.style.height = sizing + 'px'; this._tableContainer.style.width = '100%'; @@ -207,6 +236,7 @@ export class Table extends Widget implements IThemabl } } this.resizeCanvas(); + this.autosizeColumns(); } autosizeColumns() { diff --git a/src/sql/base/browser/ui/table/tableView.ts b/src/sql/base/browser/ui/table/tableView.ts index f0927c1d40..237d5fdbcf 100644 --- a/src/sql/base/browser/ui/table/tableView.ts +++ b/src/sql/base/browser/ui/table/tableView.ts @@ -25,7 +25,7 @@ export class TableBasicView extends View { super(undefined, viewOpts); this._container = document.createElement('div'); this._container.className = 'table-view'; - this._table = new Table(this._container, data, columns, tableOpts); + this._table = new Table(this._container, { dataProvider: data, columns }, tableOpts); } public get table(): Table { @@ -59,7 +59,7 @@ export class TableHeaderView extends HeaderView { super(undefined, viewOpts); this._container = document.createElement('div'); this._container.className = 'table-view'; - this._table = new Table(this._container, data, columns, tableOpts); + this._table = new Table(this._container, { dataProvider: data, columns }, tableOpts); } public get table(): Table { @@ -76,7 +76,7 @@ export class TableHeaderView extends HeaderView { } protected layoutBody(size: number): void { - this._table.layout(size, Orientation.HORIZONTAL); + this._table.layout(size, Orientation.VERTICAL); } focus(): void { @@ -99,7 +99,7 @@ export class TableCollapsibleView extends AbstractCollapsibleView { super(undefined, viewOpts); this._container = document.createElement('div'); this._container.className = 'table-view'; - this._table = new Table(this._container, data, columns, tableOpts); + this._table = new Table(this._container, { dataProvider: data, columns }, tableOpts); } public render(container: HTMLElement, orientation: Orientation): void { @@ -143,6 +143,6 @@ export class TableCollapsibleView extends AbstractCollapsibleView { } protected layoutBody(size: number): void { - this._table.layout(size, Orientation.HORIZONTAL); + this._table.layout(size, Orientation.VERTICAL); } } diff --git a/src/sql/parts/dashboard/widgets/insights/views/tableInsight.component.ts b/src/sql/parts/dashboard/widgets/insights/views/tableInsight.component.ts index 5ac016b24f..21ebd1f982 100644 --- a/src/sql/parts/dashboard/widgets/insights/views/tableInsight.component.ts +++ b/src/sql/parts/dashboard/widgets/insights/views/tableInsight.component.ts @@ -62,7 +62,7 @@ export default class TableInsight extends Disposable implements IInsightsView, O private createTable() { if (!this.table) { - this.table = new Table(this._elementRef.nativeElement, this.dataView, this.columns, { showRowNumber: true }); + this.table = new Table(this._elementRef.nativeElement, { dataProvider: this.dataView, columns: this.columns }, { showRowNumber: true }); this.table.setSelectionModel(new CellSelectionModel()); this._register(attachTableStyler(this.table, this.themeService)); } diff --git a/src/sql/parts/disasterRecovery/restore/restoreDialog.ts b/src/sql/parts/disasterRecovery/restore/restoreDialog.ts index 9c2060f8bf..d3cd9b4181 100644 --- a/src/sql/parts/disasterRecovery/restore/restoreDialog.ts +++ b/src/sql/parts/disasterRecovery/restore/restoreDialog.ts @@ -272,7 +272,8 @@ export class RestoreDialog extends Modal { this._restorePlanTableContainer = labelContainer.getHTMLElement(); labelContainer.hide(); this._restorePlanData = new TableDataView(); - this._restorePlanTable = new Table(labelContainer.getHTMLElement(), this._restorePlanData, this._restorePlanColumn, { enableColumnReorder: false }); + this._restorePlanTable = new Table(labelContainer.getHTMLElement(), + { dataProvider: this._restorePlanData, columns: this._restorePlanColumn }, { enableColumnReorder: false }); this._restorePlanTable.setSelectionModel(new RowSelectionModel({ selectActiveRow: false })); this._restorePlanTable.onSelectedRowsChanged((e, data) => this.backupFileCheckboxChanged(e, data)); }); @@ -328,7 +329,8 @@ export class RestoreDialog extends Modal { field: 'restoreAs' }]; this._fileListData = new TableDataView(); - this._fileListTable = new Table(fileNameContainer.getHTMLElement(), this._fileListData, columns, { enableColumnReorder: false }); + this._fileListTable = new Table(fileNameContainer.getHTMLElement(), + { dataProvider : this._fileListData, columns } , { enableColumnReorder: false }); this._fileListTable.setSelectionModel(new RowSelectionModel()); }); }); diff --git a/src/sql/parts/grid/common/interfaces.ts b/src/sql/parts/grid/common/interfaces.ts index e448ba4949..9830eaaa6b 100644 --- a/src/sql/parts/grid/common/interfaces.ts +++ b/src/sql/parts/grid/common/interfaces.ts @@ -4,14 +4,7 @@ * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ISlickColumn, IObservableCollection, IGridDataRow } from 'angular2-slickgrid'; - -export interface ISlickRange { - fromCell: number; - fromRow: number; - toCell: number; - toRow: number; -} +import { ISlickColumn, VirtualizedCollection } from 'angular2-slickgrid'; export interface IGridIcon { showCondition: () => boolean; @@ -41,7 +34,7 @@ export interface IGridIcon { } export interface IGridDataSet { - dataRows: IObservableCollection; + dataRows: VirtualizedCollection<{}>; columnDefinitions: ISlickColumn[]; resized: any; // EventEmitter; totalRows: number; @@ -61,7 +54,7 @@ export enum SaveFormat { export interface IGridInfo { batchIndex: number; resultSetNumber: number; - selection: ISlickRange[]; + selection: Slick.Range[]; gridIndex: number; rowIndex?: number; } @@ -69,5 +62,5 @@ export interface ISaveRequest { format: SaveFormat; batchIndex: number; resultSetNumber: number; - selection: ISlickRange[]; + selection: Slick.Range[]; } \ No newline at end of file diff --git a/src/sql/parts/grid/media/slickColorTheme.css b/src/sql/parts/grid/media/slickColorTheme.css index cdfbe7de7d..0c067d9723 100644 --- a/src/sql/parts/grid/media/slickColorTheme.css +++ b/src/sql/parts/grid/media/slickColorTheme.css @@ -9,66 +9,64 @@ */ .errorMessage { - color: var(--color-error); + color: var(--color-error); } .batchMessage { - padding-left: 20px; + padding-left: 20px; } .slick-cell a, a:link { - color: var(--color-grid-link); - text-decoration: underline; + color: var(--color-grid-link); + text-decoration: underline; } .slick-cell a:hover { - color: var(--color-grid-link-hover); + color: var(--color-grid-link-hover); } .resultsMessageValue a, a:link { - color: var(--color-grid-link); - text-decoration: underline; + color: var(--color-grid-link); + text-decoration: underline; } .resultsMessageValue a:hover { - color: var(--color-grid-link-hover); + color: var(--color-grid-link-hover); } .grid .slick-cell.dirtyCell { - color: var(--color-grid-dirty-text); - background-color: var(--color-grid-dirty-background); + color: var(--color-grid-dirty-text); + background-color: var(--color-grid-dirty-background); } .grid .slick-cell.dirtyRowHeader { - background-color: var(--color-grid-dirty-background); + background-color: var(--color-grid-dirty-background); } - .slick-cell.dirtyRowHeader > .row-number { - color: var(--color-grid-dirty-text); - font-weight: 500; + color: var(--color-grid-dirty-text); + font-weight: 500; } - /* * vs theme * */ .vs .slickgridContainer { - --color-content: #101010; - --color-content-disabled: #a9a9a9; - --color-error: #E81123; - --color-success: #7CD300; - --color-bg-header: hsla(0,0%,50%,.2); - --color-resize-handle: grey; - --color-bg-content-header: #F5F5F5; /* used for color of grid headers */ - --color-cell-border-active: grey; - --color-cell-bg-grid-selected: rgb(173, 214, 255); - --color-grid-link: #0078D7; - --color-grid-link-hover: #0b93ff; - --color-grid-dirty-background: #CCC; - --color-grid-dirty-text: #101010; + --color-content: #101010; + --color-content-disabled: #a9a9a9; + --color-error: #E81123; + --color-success: #7CD300; + --color-bg-header: hsla(0,0%,50%,.2); + --color-resize-handle: grey; + --color-bg-content-header: #F5F5F5; /* used for color of grid headers */ + --color-cell-border-active: grey; + --color-cell-bg-grid-selected: rgb(173, 214, 255); + --color-grid-link: #0078D7; + --color-grid-link-hover: #0b93ff; + --color-grid-dirty-background: #CCC; + --color-grid-dirty-text: #101010; } /* grid styling */ @@ -77,102 +75,102 @@ } .vs slick-grid.active .grid .slick-cell.selected { - background-color: var(--color-cell-bg-grid-selected); + background-color: var(--color-cell-bg-grid-selected); } .vs .grid .slick-cell.selected .grid-cell-value-container.missing-value { - color: var(--color-content) !important; + color: var(--color-content) !important; } .vs .boxRow.content.horzBox.slickgrid { - border: solid 1px #EEEEF2; + border: solid 1px #EEEEF2; } /* icons */ -.vs .gridIcon.extendFullScreen { - /* ExtendToFullScreen_16x_vscode */ - background-image: url("extendFullScreen.svg"); +.vs .icon.extendFullScreen { + /* ExtendToFullScreen_16x_vscode */ + background-image: url("extendFullScreen.svg"); } -.vs .gridIcon.exitFullScreen { - /* ExitFullScreen_16x_vscode */ - background-image: url("exitFullScreen.svg"); +.vs .icon.exitFullScreen { + /* ExitFullScreen_16x_vscode */ + background-image: url("exitFullScreen.svg"); } -.vs .gridIcon.saveJson { - /* ResultToJSON_16x_vscode */ - background-image: url("saveJson.svg"); +.vs .icon.saveJson { + /* ResultToJSON_16x_vscode */ + background-image: url("saveJson.svg"); } -.vs .gridIcon.saveCsv { - /* ResultToCSV_16x_vscode */ - background-image: url("saveCsv.svg"); +.vs .icon.saveCsv { + /* ResultToCSV_16x_vscode */ + background-image: url("saveCsv.svg"); } -.vs .gridIcon.saveExcel { - /* ResultToXlsx_16x_vscode */ - background-image: url("saveExcel.svg"); +.vs .icon.saveExcel { + /* ResultToXlsx_16x_vscode */ + background-image: url("saveExcel.svg"); } -.vs .gridIcon.viewChart { - /* ResultToXlsx_16x_vscode */ - background-image: url("viewChart.svg"); +.vs .icon.viewChart { + /* ResultToXlsx_16x_vscode */ + background-image: url("viewChart.svg"); } /* headers */ .vs .resultsMessageHeader { - background: var(--color-bg-header); - color: var(--color-content); + background: var(--color-bg-header); + color: var(--color-content); } .vs .resultsViewCollapsible:not(.collapsed) { - background-image: url("uncollapsedArrow.svg"); - background-repeat: no-repeat; - background-position: 2px; + background-image: url("uncollapsedArrow.svg"); + background-repeat: no-repeat; + background-position: 2px; } .vs .resultsViewCollapsible { - background-image: url("collapsedArrow.svg"); - background-repeat: no-repeat; - background-position: 2px; + background-image: url("collapsedArrow.svg"); + background-repeat: no-repeat; + background-position: 2px; } .vs .queryResultsShortCut { - color: grey; + color: grey; } /* scroll bar */ .vs ::-webkit-scrollbar { - width: 14px; - height: 10px; + width: 14px; + height: 10px; } .vs ::-webkit-scrollbar-thumb { - background: hsla(0,0%,47%,.4); + background: hsla(0,0%,47%,.4); } .vs ::-webkit-scrollbar-thumb:hover { - background: hsla(0,0%,39%,.7); + background: hsla(0,0%,39%,.7); } .vs ::-webkit-scrollbar-thumb:active { - background: rgba(85,85,85,0.8); + background: rgba(85,85,85,0.8); } .vs ::-webkit-scrollbar-track { - background: var(--background-color); + background: var(--background-color); } .vs ::-webkit-scrollbar-corner { - background: transparent; + background: transparent; } .vs .monaco-workbench input { - color: var(--color-content); + color: var(--color-content); } .vs .monaco-workbench .input { - background-color: white; + background-color: white; } /* @@ -181,19 +179,19 @@ */ .vs-dark .slickgridContainer { - --color-content: #E5E5E5; - --color-content-disabled: grey; - --color-error: #E81123; - --color-success: #7CD300; - --color-bg-header: hsla(0,0%,50%,.2); /* used for pane toolbars */ - --color-resize-handle: #4d4d4d; - --color-bg-content-header: #333334; /* used for color of grid headers */ - --color-cell-border-active: white; - --color-cell-bg-grid-selected: rgb(38, 79, 120); - --color-grid-link: #FF6000; - --color-grid-link-hover: #ff8033; - --color-grid-dirty-background: #4d4d4d; - --color-grid-dirty-text: #E5E5E5; + --color-content: #E5E5E5; + --color-content-disabled: grey; + --color-error: #E81123; + --color-success: #7CD300; + --color-bg-header: hsla(0,0%,50%,.2); /* used for pane toolbars */ + --color-resize-handle: #4d4d4d; + --color-bg-content-header: #333334; /* used for color of grid headers */ + --color-cell-border-active: white; + --color-cell-bg-grid-selected: rgb(38, 79, 120); + --color-grid-link: #FF6000; + --color-grid-link-hover: #ff8033; + --color-grid-dirty-background: #4d4d4d; + --color-grid-dirty-text: #E5E5E5; } /* grid styling */ @@ -203,109 +201,117 @@ } .vs-dark slick-grid.active .grid .slick-cell.selected { - background-color: var(--color-cell-bg-grid-selected); + background-color: var(--color-cell-bg-grid-selected); } .vs-dark .grid .slick-cell.selected .grid-cell-value-container.missing-value { - color: var(--color-content) !important; + color: var(--color-content) !important; } .vs-dark .boxRow.content.horzBox.slickgrid { - border: solid 1px #2D2D30; + border: solid 1px #2D2D30; } /* icons */ -.vs-dark .gridIcon.extendFullScreen, -.hc-black .gridIcon.extendFullScreen { - /* ExtendToFullScreen_16x_vscode_inverse.svg */ - background-image: url("extendFullScreen_inverse.svg"); +.vs-dark .icon.extendFullScreen, +.hc-black .icon.extendFullScreen { + /* ExtendToFullScreen_16x_vscode_inverse.svg */ + background-image: url("extendFullScreen_inverse.svg"); } -.vs-dark .gridIcon.exitFullScreen, -.hc-black .gridIcon.exitFullScreen { - /* ExitFullScreen_16x_vscode_inverse.svg */ - background-image: url("exitFullScreen_inverse.svg"); +.vs-dark .icon.exitFullScreen, +.hc-black .icon.exitFullScreen { + /* ExitFullScreen_16x_vscode_inverse.svg */ + background-image: url("exitFullScreen_inverse.svg"); } -.vs-dark .gridIcon.saveJson, -.hc-black .gridIcon.saveJson { - /* ResultToJSON_16x_vscode_inverse.svg */ - background-image: url("saveJson_inverse.svg"); +.vs-dark .icon.saveJson, +.hc-black .icon.saveJson { + /* ResultToJSON_16x_vscode_inverse.svg */ + background-image: url("saveJson_inverse.svg"); } -.vs-dark .gridIcon.saveCsv, -.hc-black .gridIcon.saveCsv { - /* ResultToCSV_16x_vscode_inverse.svg */ - background-image: url("saveCsv_inverse.svg"); +.vs-dark .icon.saveCsv, +.hc-black .icon.saveCsv { + /* ResultToCSV_16x_vscode_inverse.svg */ + background-image: url("saveCsv_inverse.svg"); } -.vs-dark .gridIcon.saveExcel, -.hc-black .gridIcon.saveExcel { - /* ResultToXlsx_16x_vscode_inverse.svg */ - background-image: url("saveExcel_inverse.svg"); +.vs-dark .icon.saveExcel, +.hc-black .icon.saveExcel { + /* ResultToXlsx_16x_vscode_inverse.svg */ + background-image: url("saveExcel_inverse.svg"); } -.vs-dark .gridIcon.viewChart, -.hc-black .gridIcon.viewChart { - /* ResultToXlsx_16x_vscode */ - background-image: url("viewChart_inverse.svg"); +.vs-dark .icon.viewChart, +.hc-black .icon.viewChart { + /* ResultToXlsx_16x_vscode */ + background-image: url("viewChart_inverse.svg"); } +.grid-panel .action-label.icon { + height: 35px; + line-height: 35px; + min-width: 28px; + background-size: 16px; + background-position: center center; + background-repeat: no-repeat; +} /* headers */ .vs-dark .resultsMessageHeader { - background: var(--color-bg-header); - color: var(--color-content); + background: var(--color-bg-header); + color: var(--color-content); } .vs-dark .resultsViewCollapsible:not(.collapsed), .hc-black .resultsViewCollapsible:not(.collapsed) { - background-image:url("uncollapsedArrow_inverse.svg"); - background-repeat:no-repeat; - background-position: 2px; + background-image:url("uncollapsedArrow_inverse.svg"); + background-repeat:no-repeat; + background-position: 2px; } .vs-dark .resultsViewCollapsible, .hc-black .resultsViewCollapsible { - background-image: url("collapsedArrow_inverse.svg"); - background-repeat:no-repeat; - background-position: 2px; + background-image: url("collapsedArrow_inverse.svg"); + background-repeat:no-repeat; + background-position: 2px; } .vs-dark .queryResultsShortCut { - color: grey; + color: grey; } /* scroll bar */ .vs-dark ::-webkit-scrollbar { - width: 14px; - height: 10px; + width: 14px; + height: 10px; } .vs-dark ::-webkit-scrollbar-thumb { - background: hsla(0,0%,47%,.4); + background: hsla(0,0%,47%,.4); } .vs-dark ::-webkit-scrollbar-thumb:hover { - background: hsla(0,0%,39%,.7); + background: hsla(0,0%,39%,.7); } .vs-dark ::-webkit-scrollbar-thumb:active { - background: rgba(85,85,85,0.8); + background: rgba(85,85,85,0.8); } .vs-dark ::-webkit-scrollbar-track { - background: var(--background-color); + background: var(--background-color); } .vs-dark ::-webkit-scrollbar-corner { - background: transparent; + background: transparent; } .vs-dark .monaco-workbench input, .vs-dark .monaco-workbench .input { - color: var(--color-content); - background-color: #3C3C3C; + color: var(--color-content); + background-color: #3C3C3C; } /* @@ -313,20 +319,20 @@ * */ - .hc-black .slickgridContainer { - --color-content: #E5E5E5; - --color-content-disabled: grey; - --color-error: #E81123; - --color-success: #7CD300; - --color-bg-header: hsla(0,0%,50%,.2); /* used for pane toolbars */ - --color-resize-handle: #4d4d4d; - --color-bg-content-header: #333334; /* used for color of grid headers */ - --color-cell-border-active: orange; - --color-cell-bg-grid-selected: rgb(38, 79, 120); - --color-grid-link: #FF6000; - --color-grid-link-hover: #ff8033; - --color-grid-dirty-background: #FFF; - --color-grid-dirty-text: #000; +.hc-black .slickgridContainer { + --color-content: #E5E5E5; + --color-content-disabled: grey; + --color-error: #E81123; + --color-success: #7CD300; + --color-bg-header: hsla(0,0%,50%,.2); /* used for pane toolbars */ + --color-resize-handle: #4d4d4d; + --color-bg-content-header: #333334; /* used for color of grid headers */ + --color-cell-border-active: orange; + --color-cell-bg-grid-selected: rgb(38, 79, 120); + --color-grid-link: #FF6000; + --color-grid-link-hover: #ff8033; + --color-grid-dirty-background: #FFF; + --color-grid-dirty-text: #000; } /* grid styling */ @@ -336,32 +342,32 @@ } .hc-black slick-grid.active .grid .slick-cell.selected { - background-color: var(--color-cell-bg-grid-selected); + background-color: var(--color-cell-bg-grid-selected); } .hc-black .grid .slick-cell.selected .grid-cell-value-container.missing-value { - color: var(--color-content) !important; + color: var(--color-content) !important; } .hc-black .boxRow.content.horzBox.slickgrid { - border: solid 1px #2D2D30; + border: solid 1px #2D2D30; } /* headers */ .hc-black .resultsMessageHeader { - background: var(--color-bg-header); - color: var(--color-content); + background: var(--color-bg-header); + color: var(--color-content); } .hc-black .queryResultsShortCut { - color: grey; + color: grey; } /* scroll bar */ .hc-black ::-webkit-scrollbar { - width: 14px; - height: 10px; + width: 14px; + height: 10px; } .hc-black ::-webkit-scrollbar-thumb { @@ -377,14 +383,14 @@ } .hc-black ::-webkit-scrollbar-track { - background: var(--background-color); + background: var(--background-color); } .hc-black ::-webkit-scrollbar-corner { - background: transparent; + background: transparent; } .hc-black .monaco-workbench input { - color: #000; - background-color: #FFF; + color: #000; + background-color: #FFF; } diff --git a/src/sql/parts/grid/services/dataService.ts b/src/sql/parts/grid/services/dataService.ts index 3535178b59..b578a4a0e0 100644 --- a/src/sql/parts/grid/services/dataService.ts +++ b/src/sql/parts/grid/services/dataService.ts @@ -14,7 +14,6 @@ import { IQueryModelService } from 'sql/parts/query/execution/queryModel'; import { ResultSerializer } from 'sql/parts/query/common/resultSerializer'; import { ISaveRequest } from 'sql/parts/grid/common/interfaces'; -import { ISlickRange } from 'angular2-slickgrid'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IQueryEditorService } from 'sql/parts/query/common/queryEditorService'; @@ -184,7 +183,7 @@ export class DataService { * @param resultId The result id of the result to copy from * @param includeHeaders [Optional]: Should column headers be included in the copy selection */ - copyResults(selection: ISlickRange[], batchId: number, resultId: number, includeHeaders?: boolean): void { + copyResults(selection: Slick.Range[], batchId: number, resultId: number, includeHeaders?: boolean): void { this._queryModel.copyResults(this._uri, selection, batchId, resultId, includeHeaders); } diff --git a/src/sql/parts/grid/views/editData/editData.component.ts b/src/sql/parts/grid/views/editData/editData.component.ts index 70b47c413c..18610a69b7 100644 --- a/src/sql/parts/grid/views/editData/editData.component.ts +++ b/src/sql/parts/grid/views/editData/editData.component.ts @@ -13,7 +13,7 @@ import 'vs/css!sql/parts/grid/media/slickGrid'; import 'vs/css!./media/editData'; import { ElementRef, ChangeDetectorRef, OnInit, OnDestroy, Component, Inject, forwardRef, EventEmitter } from '@angular/core'; -import { IGridDataRow, VirtualizedCollection, ISlickRange } from 'angular2-slickgrid'; +import { VirtualizedCollection } from 'angular2-slickgrid'; import { IGridDataSet } from 'sql/parts/grid/common/interfaces'; import * as Services from 'sql/parts/grid/services/sharedServices'; @@ -76,10 +76,10 @@ export class EditDataComponent extends GridParentComponent implements OnInit, On public onIsCellEditValid: (row: number, column: number, newValue: any) => boolean; public onIsColumnEditable: (column: number) => boolean; public overrideCellFn: (rowNumber, columnId, value?, data?) => string; - public loadDataFunction: (offset: number, count: number) => Promise; + public loadDataFunction: (offset: number, count: number) => Promise<{}[]>; private savedViewState: { - gridSelections: ISlickRange[]; + gridSelections: Slick.Range[]; scrollTop; scrollLeft; }; @@ -153,6 +153,7 @@ export class EditDataComponent extends GridParentComponent implements OnInit, On self.dataSet = undefined; self.placeHolderDataSets = []; self.renderedDataSets = self.placeHolderDataSets; + this._cd.detectChanges(); self.totalElapsedTimeSpan = undefined; self.complete = false; @@ -180,23 +181,31 @@ export class EditDataComponent extends GridParentComponent implements OnInit, On }; // Setup a function for generating a promise to lookup result subsets - this.loadDataFunction = (offset: number, count: number): Promise => { - return new Promise((resolve, reject) => { + this.loadDataFunction = (offset: number, count: number): Promise<{}[]> => { + return new Promise<{}[]>((resolve, reject) => { self.dataService.getEditRows(offset, count).subscribe(result => { - let rowIndex = offset; - let gridData: IGridDataRow[] = result.subset.map(row => { - self.idMapping[rowIndex] = row.id; - rowIndex++; - return { - values: [{}].concat(row.cells.map(c => { - return mixin({ ariaLabel: escape(c.displayValue) }, c); - })), row: row.id - }; + let gridData = result.subset.map(r => { + let dataWithSchema = {}; + // skip the first column since its a number column + for (let i = 1; i < this.dataSet.columnDefinitions.length; i++) { + dataWithSchema[this.dataSet.columnDefinitions[i].field] = r.cells[i - 1].displayValue; + } + return dataWithSchema; }); + // let rowIndex = offset; + // let gridData: IGridDataRow[] = result.subset.map(row => { + // self.idMapping[rowIndex] = row.id; + // rowIndex++; + // return { + // values: [{}].concat(row.cells.map(c => { + // return mixin({ ariaLabel: escape(c.displayValue) }, c); + // })), row: row.id + // }; + // }); // Append a NULL row to the end of gridData - let newLastRow = gridData.length === 0 ? 0 : (gridData[gridData.length - 1].row + 1); - gridData.push({ values: self.dataSet.columnDefinitions.map(cell => { return { displayValue: 'NULL', isNull: false }; }), row: newLastRow }); + // let newLastRow = gridData.length === 0 ? 0 : (gridData[gridData.length - 1].row + 1); + // gridData.push({ values: self.dataSet.columnDefinitions.map(cell => { return { displayValue: 'NULL', isNull: false }; }), row: newLastRow }); resolve(gridData); }); }); @@ -356,7 +365,7 @@ export class EditDataComponent extends GridParentComponent implements OnInit, On self.windowSize, resultSet.rowCount, this.loadDataFunction, - index => { return { values: [] }; } + index => { return {}; } ), columnDefinitions: [rowNumberColumn.getColumnDefinition()].concat(resultSet.columnInfo.map((c, i) => { let isLinked = c.isXml || c.isJson; @@ -581,14 +590,17 @@ export class EditDataComponent extends GridParentComponent implements OnInit, On } private saveViewState(): void { - let gridSelections = this.slickgrids.toArray()[0].getSelectedRanges(); - let viewport = ((this.slickgrids.toArray()[0] as any)._grid.getCanvasNode() as HTMLElement).parentElement; + let grid = this.slickgrids.toArray()[0] + if (grid) { + let gridSelections = grid.getSelectedRanges(); + let viewport = ((grid as any)._grid.getCanvasNode() as HTMLElement).parentElement; - this.savedViewState = { - gridSelections, - scrollTop: viewport.scrollTop, - scrollLeft: viewport.scrollLeft - }; + this.savedViewState = { + gridSelections, + scrollTop: viewport.scrollTop, + scrollLeft: viewport.scrollLeft + }; + } } private restoreViewState(): void { diff --git a/src/sql/parts/grid/views/gridParentComponent.ts b/src/sql/parts/grid/views/gridParentComponent.ts index 2f54ede180..ccbe79ae34 100644 --- a/src/sql/parts/grid/views/gridParentComponent.ts +++ b/src/sql/parts/grid/views/gridParentComponent.ts @@ -13,7 +13,7 @@ import 'vs/css!sql/parts/grid/media/slickGrid'; import { Subscription, Subject } from 'rxjs/Rx'; import { ElementRef, QueryList, ChangeDetectorRef, ViewChildren } from '@angular/core'; -import { IGridDataRow, ISlickRange, SlickGrid, FieldType } from 'angular2-slickgrid'; +import { SlickGrid } from 'angular2-slickgrid'; import { toDisposableSubscription } from 'sql/parts/common/rxjsUtils'; import * as Constants from 'sql/parts/query/common/constants'; import * as LocalizedConstants from 'sql/parts/query/common/localizedConstants'; @@ -226,11 +226,11 @@ export abstract class GridParentComponent { this.messagesFocussedContextKey.set(false); } - protected getSelection(index?: number): ISlickRange[] { + protected getSelection(index?: number): Slick.Range[] { let selection = this.slickgrids.toArray()[index || this.activeGrid].getSelectedRanges(); if (selection) { - selection = selection.map(c => { return { fromCell: c.fromCell - 1, toCell: c.toCell - 1, toRow: c.toRow, fromRow: c.fromRow }; }); - return selection; + selection = selection.map(c => { return { fromCell: c.fromCell - 1, toCell: c.toCell - 1, toRow: c.toRow, fromRow: c.fromRow }; }); + return selection; } else { return undefined; } @@ -332,7 +332,7 @@ export abstract class GridParentComponent { /** * Send save result set request to service */ - handleContextClick(event: { type: string, batchId: number, resultId: number, index: number, selection: ISlickRange[] }): void { + handleContextClick(event: { type: string, batchId: number, resultId: number, index: number, selection: Slick.Range[] }): void { switch (event.type) { case 'savecsv': this.dataService.sendSaveRequest({ batchIndex: event.batchId, resultSetNumber: event.resultId, format: SaveFormat.CSV, selection: event.selection }); diff --git a/src/sql/parts/grid/views/query/chartViewer.component.ts b/src/sql/parts/grid/views/query/chartViewer.component.ts index 21cccac35e..108c288749 100644 --- a/src/sql/parts/grid/views/query/chartViewer.component.ts +++ b/src/sql/parts/grid/views/query/chartViewer.component.ts @@ -328,11 +328,15 @@ export class ChartViewerComponent implements OnInit, OnDestroy, IChartViewAction // Remove first column and its value since this is the row number column this._executeResult.columns = dataSet.columnDefinitions.slice(1).map(def => def.name); - this._executeResult.rows = dataSet.dataRows.getRange(0, dataSet.dataRows.getLength()).map(gridRow => { - return gridRow.values.slice(1).map(cell => (cell.invariantCultureDisplayValue === null || cell.invariantCultureDisplayValue === undefined) ? cell.displayValue : cell.invariantCultureDisplayValue); + this._executeResult.rows = dataSet.dataRows.getRange(0, dataSet.dataRows.getLength()).map(v => { + return this._executeResult.columns.reduce((p, c) => { + p.push(v[c]); + return p; + }, []); }); } + public initChart() { this._cd.detectChanges(); if (this._executeResult) { diff --git a/src/sql/parts/grid/views/query/query.component.ts b/src/sql/parts/grid/views/query/query.component.ts index e35fcd2a4b..9fb39739f6 100644 --- a/src/sql/parts/grid/views/query/query.component.ts +++ b/src/sql/parts/grid/views/query/query.component.ts @@ -15,7 +15,7 @@ import { ElementRef, QueryList, ChangeDetectorRef, OnInit, OnDestroy, Component, Inject, ViewChildren, forwardRef, EventEmitter, Input, ViewChild } from '@angular/core'; -import { IGridDataRow, SlickGrid, VirtualizedCollection, ISlickRange } from 'angular2-slickgrid'; +import { IGridDataRow, SlickGrid, VirtualizedCollection } from 'angular2-slickgrid'; import * as LocalizedConstants from 'sql/parts/query/common/localizedConstants'; import * as Services from 'sql/parts/grid/services/sharedServices'; @@ -163,7 +163,7 @@ export class QueryComponent extends GridParentComponent implements OnInit, OnDes public onActiveCellChanged: (gridIndex: number) => void; private savedViewState: { - gridSelections: ISlickRange[][]; + gridSelections: Slick.Range[][]; resultsScroll: number; messagePaneScroll: number; slickGridScrolls: { vertical: number; horizontal: number }[]; diff --git a/src/sql/parts/insights/browser/insightsDialogView.ts b/src/sql/parts/insights/browser/insightsDialogView.ts index ec1e09a28b..e791c178b3 100644 --- a/src/sql/parts/insights/browser/insightsDialogView.ts +++ b/src/sql/parts/insights/browser/insightsDialogView.ts @@ -196,21 +196,21 @@ export class InsightsDialogView extends Modal { } })); - this._register(this._topTable.onContextMenu((e: DOMEvent, data: Slick.OnContextMenuEventArgs) => { + this._register(this._topTable.onContextMenu(e => { if (this.hasActions()) { this._contextMenuService.showContextMenu({ - getAnchor: () => e.target as HTMLElement, + getAnchor: () => e.anchor, getActions: () => this.insightActions, - getActionsContext: () => this.topInsightContext(this._topTableData.getItem(this._topTable.getCellFromEvent(e).row)) + getActionsContext: () => this.topInsightContext(this._topTableData.getItem(e.cell.row)) }); } })); - this._register(this._bottomTable.onContextMenu((e: DOMEvent, data: Slick.OnContextMenuEventArgs) => { + this._register(this._bottomTable.onContextMenu(e => { this._contextMenuService.showContextMenu({ - getAnchor: () => e.target as HTMLElement, + getAnchor: () => e.anchor, getActions: () => TPromise.as([this._instantiationService.createInstance(CopyInsightDialogSelectionAction, CopyInsightDialogSelectionAction.ID, CopyInsightDialogSelectionAction.LABEL)]), - getActionsContext: () => this.bottomInsightContext(this._bottomTableData.getItem(this._bottomTable.getCellFromEvent(e).row), this._bottomTable.getCellFromEvent(e)) + getActionsContext: () => this.bottomInsightContext(this._bottomTableData.getItem(e.cell.row), e.cell) }); })); diff --git a/src/sql/parts/jobManagement/views/alertsView.component.ts b/src/sql/parts/jobManagement/views/alertsView.component.ts index 48d0c0dfd1..989cd282bf 100644 --- a/src/sql/parts/jobManagement/views/alertsView.component.ts +++ b/src/sql/parts/jobManagement/views/alertsView.component.ts @@ -109,10 +109,10 @@ export class AlertsViewComponent extends JobManagementView implements OnInit { $(this._gridEl.nativeElement).empty(); $(this.actionBarContainer.nativeElement).empty(); this.initActionBar(); - this._table = new Table(this._gridEl.nativeElement, undefined, columns, this.options); + this._table = new Table(this._gridEl.nativeElement, {columns}, this.options); this._table.grid.setData(this.dataView, true); - this._register(this._table.onContextMenu((e: DOMEvent, data: Slick.OnContextMenuEventArgs) => { + this._register(this._table.onContextMenu(e => { self.openContextMenu(e); })); diff --git a/src/sql/parts/jobManagement/views/jobsView.component.ts b/src/sql/parts/jobManagement/views/jobsView.component.ts index f84631eacd..5a5738efb1 100644 --- a/src/sql/parts/jobManagement/views/jobsView.component.ts +++ b/src/sql/parts/jobManagement/views/jobsView.component.ts @@ -177,7 +177,7 @@ export class JobsViewComponent extends JobManagementView implements OnInit { $(this._gridEl.nativeElement).empty(); $(this.actionBarContainer.nativeElement).empty(); this.initActionBar(); - this._table = new Table(this._gridEl.nativeElement, undefined, columns, options); + this._table = new Table(this._gridEl.nativeElement, {columns}, options); this._table.grid.setData(this.dataView, true); this._table.grid.onClick.subscribe((e, args) => { let job = self.getJob(args); @@ -186,7 +186,7 @@ export class JobsViewComponent extends JobManagementView implements OnInit { self._agentViewComponent.showHistory = true; }); - this._register(this._table.onContextMenu((e: DOMEvent, data: Slick.OnContextMenuEventArgs) => { + this._register(this._table.onContextMenu(e => { self.openContextMenu(e); })); diff --git a/src/sql/parts/jobManagement/views/operatorsView.component.ts b/src/sql/parts/jobManagement/views/operatorsView.component.ts index 67ef8efdc5..6cfbdb73c8 100644 --- a/src/sql/parts/jobManagement/views/operatorsView.component.ts +++ b/src/sql/parts/jobManagement/views/operatorsView.component.ts @@ -110,10 +110,10 @@ export class OperatorsViewComponent extends JobManagementView implements OnInit $(this._gridEl.nativeElement).empty(); $(this.actionBarContainer.nativeElement).empty(); this.initActionBar(); - this._table = new Table(this._gridEl.nativeElement, undefined, columns, this.options); + this._table = new Table(this._gridEl.nativeElement, {columns}, this.options); this._table.grid.setData(this.dataView, true); - this._register(this._table.onContextMenu((e: DOMEvent, data: Slick.OnContextMenuEventArgs) => { + this._register(this._table.onContextMenu(e => { self.openContextMenu(e); })); diff --git a/src/sql/parts/jobManagement/views/proxiesView.component.ts b/src/sql/parts/jobManagement/views/proxiesView.component.ts index d9f0e14667..ac66a2f1cb 100644 --- a/src/sql/parts/jobManagement/views/proxiesView.component.ts +++ b/src/sql/parts/jobManagement/views/proxiesView.component.ts @@ -112,10 +112,10 @@ export class ProxiesViewComponent extends JobManagementView implements OnInit { $(this._gridEl.nativeElement).empty(); $(this.actionBarContainer.nativeElement).empty(); this.initActionBar(); - this._table = new Table(this._gridEl.nativeElement, undefined, columns, this.options); + this._table = new Table(this._gridEl.nativeElement, {columns}, this.options); this._table.grid.setData(this.dataView, true); - this._register(this._table.onContextMenu((e: DOMEvent, data: Slick.OnContextMenuEventArgs) => { + this._register(this._table.onContextMenu(e => { self.openContextMenu(e); })); diff --git a/src/sql/parts/modelComponents/table.component.ts b/src/sql/parts/modelComponents/table.component.ts index babc53fdcb..c6a16a3481 100644 --- a/src/sql/parts/modelComponents/table.component.ts +++ b/src/sql/parts/modelComponents/table.component.ts @@ -101,7 +101,7 @@ export default class TableComponent extends ComponentBase implements IComponent, forceFitColumns: true }; - this._table = new Table(this._inputContainer.nativeElement, this._tableData, this._tableColumns, options); + this._table = new Table(this._inputContainer.nativeElement, { dataProvider: this._tableData, columns: this._tableColumns }, options); this._table.setData(this._tableData); this._table.setSelectionModel(new RowSelectionModel({ selectActiveRow: true })); diff --git a/src/sql/parts/profiler/editor/profilerEditor.ts b/src/sql/parts/profiler/editor/profilerEditor.ts index 216d1cc475..b9ed8380af 100644 --- a/src/sql/parts/profiler/editor/profilerEditor.ts +++ b/src/sql/parts/profiler/editor/profilerEditor.ts @@ -327,7 +327,7 @@ export class ProfilerEditor extends BaseEditor { detailTableContainer.style.width = '100%'; detailTableContainer.style.height = '100%'; this._detailTableData = new TableDataView(); - this._detailTable = new Table(detailTableContainer, this._detailTableData, [ + this._detailTable = new Table(detailTableContainer, { dataProvider: this._detailTableData, columns: [ { id: 'label', name: nls.localize('label', "Label"), @@ -340,7 +340,7 @@ export class ProfilerEditor extends BaseEditor { field: 'value', formatter: textFormatter } - ], { forceFitColumns: true }); + ]}, { forceFitColumns: true }); this._tabbedPanel.pushTab({ identifier: 'detailTable', diff --git a/src/sql/parts/query/common/resultSerializer.ts b/src/sql/parts/query/common/resultSerializer.ts index aad83e0413..611b22dc90 100644 --- a/src/sql/parts/query/common/resultSerializer.ts +++ b/src/sql/parts/query/common/resultSerializer.ts @@ -26,7 +26,6 @@ import * as paths from 'vs/base/common/paths'; import * as nls from 'vs/nls'; import * as pretty from 'pretty-data'; -import { ISlickRange } from 'angular2-slickgrid'; import * as path from 'path'; import Severity from 'vs/base/common/severity'; import { INotificationService } from 'vs/platform/notification/common/notification'; @@ -255,7 +254,7 @@ export class ResultSerializer { return config; } - private getParameters(filePath: string, batchIndex: number, resultSetNo: number, format: string, selection: ISlickRange): SaveResultsRequestParams { + private getParameters(filePath: string, batchIndex: number, resultSetNo: number, format: string, selection: Slick.Range): SaveResultsRequestParams { let saveResultsParams: SaveResultsRequestParams; if (!path.isAbsolute(filePath)) { this._filePath = PathUtilities.resolveFilePath(this._uri, filePath, this.rootPath); @@ -287,7 +286,7 @@ export class ResultSerializer { /** * Check if a range of cells were selected. */ - private isSelected(selection: ISlickRange): boolean { + private isSelected(selection: Slick.Range): boolean { return (selection && !((selection.fromCell === selection.toCell) && (selection.fromRow === selection.toRow))); } @@ -319,7 +318,7 @@ export class ResultSerializer { /** * Send request to sql tools service to save a result set */ - private sendRequestToService(filePath: string, batchIndex: number, resultSetNo: number, format: string, selection: ISlickRange): Thenable { + private sendRequestToService(filePath: string, batchIndex: number, resultSetNo: number, format: string, selection: Slick.Range): Thenable { let saveResultsParams = this.getParameters(filePath, batchIndex, resultSetNo, format, selection); this.logToOutputChannel(LocalizedConstants.msgSaveStarted + this._filePath); diff --git a/src/sql/parts/query/editor/actions.ts b/src/sql/parts/query/editor/actions.ts new file mode 100644 index 0000000000..be91790c8d --- /dev/null +++ b/src/sql/parts/query/editor/actions.ts @@ -0,0 +1,160 @@ + +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the Source EULA. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +'use strict'; + +import { Action } from 'vs/base/common/actions'; +import { localize } from 'vs/nls'; +import { TPromise } from 'vs/base/common/winjs.base'; +import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; +import { ITree } from 'vs/base/parts/tree/browser/tree'; + +import QueryRunner from 'sql/parts/query/execution/queryRunner'; +import { SaveFormat } from 'sql/parts/grid/common/interfaces'; +import { Table } from 'sql/base/browser/ui/table/table'; +import { GridTableState } from 'sql/parts/query/editor/gridPanel'; + +export interface IGridActionContext { + cell: { row: number; cell: number; }; + selection: Slick.Range[]; + runner: QueryRunner; + batchId: number; + resultId: number; + table: Table; + tableState: GridTableState; +} + +export interface IMessagesActionContext { + selection: Selection; + tree: ITree; +} + +export class SaveResultAction extends Action { + public static SAVECSV_ID = 'grid.saveAsCsv'; + public static SAVECSV_LABEL = localize('saveAsCsv', 'Save As CSV'); + public static SAVECSV_ICON = 'saveCsv'; + + public static SAVEJSON_ID = 'grid.saveAsJson'; + public static SAVEJSON_LABEL = localize('saveAsJson', 'Save As JSON'); + public static SAVEJSON_ICON = 'saveJson'; + + public static SAVEEXCEL_ID = 'grid.saveAsExcel'; + public static SAVEEXCEL_LABEL = localize('saveAsExcel', 'Save As Excel'); + public static SAVEEXCEL_ICON = 'saveExcel'; + + constructor( + id: string, + label: string, + icon: string, + private format: SaveFormat + ) { + super(id, label, icon); + } + + public run(context: IGridActionContext): TPromise { + context.runner.serializeResults(context.batchId, context.resultId, this.format, context.selection); + return TPromise.as(true); + } +} + +export class CopyResultAction extends Action { + public static COPY_ID = 'grid.copySelection'; + public static COPY_LABEL = localize('copySelection', 'Copy'); + + public static COPYWITHHEADERS_ID = 'grid.copyWithHeaders'; + public static COPYWITHHEADERS_LABEL = localize('copyWithHeaders', 'Copy With Headers'); + + constructor( + id: string, + label: string, + private copyHeader: boolean, + ) { + super(id, label); + } + + public run(context: IGridActionContext): TPromise { + context.runner.copyResults(context.selection, context.batchId, context.resultId, this.copyHeader); + return TPromise.as(true); + } +} + +export class SelectAllGridAction extends Action { + public static ID = 'grid.selectAll'; + public static LABEL = localize('selectAll', 'Select All'); + + constructor() { + super(SelectAllGridAction.ID, SelectAllGridAction.LABEL); + } + + public run(context: IGridActionContext): TPromise { + context.table.setSelectedRows(true); + return TPromise.as(true); + } +} + +export class CopyMessagesAction extends Action { + public static ID = 'grid.messages.copy'; + public static LABEL = localize('copyMessages', 'Copy'); + + constructor( + @IClipboardService private clipboardService: IClipboardService + ) { + super(CopyMessagesAction.ID, CopyMessagesAction.LABEL); + } + + public run(context: IMessagesActionContext): TPromise { + this.clipboardService.writeText(context.selection.toString()); + return TPromise.as(true); + } +} + +export class SelectAllMessagesAction extends Action { + public static ID = 'grid.messages.selectAll'; + public static LABEL = localize('selectAll', 'Select All'); + + constructor() { + super(SelectAllMessagesAction.ID, SelectAllMessagesAction.LABEL); + } + + public run(context: IMessagesActionContext): TPromise { + let range = document.createRange(); + range.selectNodeContents(context.tree.getHTMLElement()); + let sel = document.getSelection(); + sel.removeAllRanges(); + sel.addRange(range); + return TPromise.as(true); + } +} + +export class MaximizeTableAction extends Action { + public static ID = 'grid.maximize'; + public static LABEL = localize('maximize', 'Maximize'); + public static ICON = 'extendFullScreen'; + + constructor() { + super(MaximizeTableAction.ID, MaximizeTableAction.LABEL, MaximizeTableAction.ICON); + } + + public run(context: IGridActionContext): TPromise { + context.tableState.maximized = true; + return TPromise.as(true); + } +} + +export class MinimizeTableAction extends Action { + public static ID = 'grid.minimize'; + public static LABEL = localize('minimize', 'Minimize'); + public static ICON = 'exitFullScreen'; + + constructor() { + super(MinimizeTableAction.ID, MinimizeTableAction.LABEL, MinimizeTableAction.ICON); + } + + public run(context: IGridActionContext): TPromise { + context.tableState.maximized = false; + return TPromise.as(true); + } +} diff --git a/src/sql/parts/query/editor/gridPanel.ts b/src/sql/parts/query/editor/gridPanel.ts new file mode 100644 index 0000000000..8aaa0c97ca --- /dev/null +++ b/src/sql/parts/query/editor/gridPanel.ts @@ -0,0 +1,414 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the Source EULA. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +'use strict'; + +import { attachTableStyler } from 'sql/common/theme/styler'; +import QueryRunner from 'sql/parts/query/execution/queryRunner'; +import { VirtualizedCollection, AsyncDataProvider } from 'sql/base/browser/ui/table/asyncDataView'; +import { Table, ITableStyles, ITableContextMenuEvent } from 'sql/base/browser/ui/table/table'; +import { ScrollableSplitView } from 'sql/base/browser/ui/scrollableSplitview/scrollableSplitview'; +import { MouseWheelSupport } from 'sql/base/browser/ui/table/plugins/mousewheelTableScroll.plugin'; +import { AutoColumnSize } from 'sql/base/browser/ui/table/plugins/autoSizeColumns.plugin'; +import { SaveFormat } from 'sql/parts/grid/common/interfaces'; +import { IGridActionContext, SaveResultAction, CopyResultAction, SelectAllGridAction, MaximizeTableAction, MinimizeTableAction } from 'sql/parts/query/editor/actions'; +import { CellSelectionModel } from 'sql/base/browser/ui/table/plugins/cellSelectionModel.plugin'; +import { RowNumberColumn } from 'sql/base/browser/ui/table/plugins/rowNumberColumn.plugin'; + +import * as sqlops from 'sqlops'; + +import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; +import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; +import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import { Emitter, Event } from 'vs/base/common/event'; +import { IThemeService } from 'vs/platform/theme/common/themeService'; +import { ViewletPanel, IViewletPanelOptions } from 'vs/workbench/browser/parts/views/panelViewlet'; +import { isUndefinedOrNull } from 'vs/base/common/types'; +import { range } from 'vs/base/common/arrays'; +import { Orientation, IView } from 'vs/base/browser/ui/splitview/splitview'; +import { Disposable, IDisposable, dispose } from 'vs/base/common/lifecycle'; +import { $ } from 'vs/base/browser/builder'; +import { generateUuid } from 'vs/base/common/uuid'; +import { TPromise } from 'vs/base/common/winjs.base'; +import { Separator, ActionBar, ActionsOrientation } from 'vs/base/browser/ui/actionbar/actionbar'; +import { Dimension, getContentWidth } from 'vs/base/browser/dom'; + +const rowHeight = 29; +const columnHeight = 26; +const minGridHeightInRows = 8; +const estimatedScrollBarHeight = 10; + +export interface IGridTableState { + canBeMaximized: boolean; + maximized: boolean; +} + +export class GridTableState { + + private _maximized: boolean; + + private _onMaximizedChange = new Emitter(); + public onMaximizedChange: Event = this._onMaximizedChange.event; + + public canBeMaximized: boolean; + + constructor(state?: IGridTableState) { + if (state) { + this._maximized = state.maximized; + this.canBeMaximized = state.canBeMaximized; + } + } + + public get maximized(): boolean { + return this._maximized; + } + + public set maximized(val: boolean) { + if (val === this._maximized) { + return; + } + this._maximized = val; + this._onMaximizedChange.fire(val); + } + + public clone(): GridTableState { + return new GridTableState({ canBeMaximized: this.canBeMaximized, maximized: this.maximized }); + } +} + +export class GridPanel extends ViewletPanel { + private container = document.createElement('div'); + private splitView: ScrollableSplitView; + private tables: GridTable[] = []; + private tableDisposable: IDisposable[] = []; + private queryRunnerDisposables: IDisposable[] = []; + + private runner: QueryRunner; + + private maximizedGrid: GridTable; + + constructor( + title: string, options: IViewletPanelOptions, + @IKeybindingService keybindingService: IKeybindingService, + @IContextMenuService contextMenuService: IContextMenuService, + @IConfigurationService configurationService: IConfigurationService, + @IThemeService private themeService: IThemeService + ) { + super(title, options, keybindingService, contextMenuService, configurationService); + this.splitView = new ScrollableSplitView(this.container, { enableResizing: false }); + } + + protected renderBody(container: HTMLElement): void { + this.container.style.width = '100%'; + this.container.style.height = '100%'; + + container.appendChild(this.container); + } + + protected layoutBody(size: number): void { + this.splitView.layout(size); + } + + public set queryRunner(runner: QueryRunner) { + dispose(this.queryRunnerDisposables); + this.reset(); + this.queryRunnerDisposables = []; + this.runner = runner; + this.queryRunnerDisposables.push(this.runner.onResultSet(e => this.onResultSet(e))); + this.queryRunnerDisposables.push(this.runner.onQueryStart(() => this.reset())); + } + + private onResultSet(resultSet: sqlops.ResultSetSummary | sqlops.ResultSetSummary[]) { + this.addResultSet(resultSet); + + this.tables.map(t => { + t.state.canBeMaximized = this.tables.length > 1; + }); + + this.maximumBodySize = this.tables.reduce((p, c) => { + return p + c.maximumSize; + }, 0); + } + + private addResultSet(resultSet: sqlops.ResultSetSummary | sqlops.ResultSetSummary[]) { + let resultsToAdd: sqlops.ResultSetSummary[]; + if (!Array.isArray(resultSet)) { + resultsToAdd = [resultSet]; + } else { + resultsToAdd = resultSet; + } + + let tables: GridTable[] = []; + + for (let set of resultsToAdd) { + let tableState = new GridTableState(); + let table = new GridTable(this.runner, tableState, set, this.contextMenuService); + tableState.onMaximizedChange(e => { + if (e) { + this.maximizeTable(table.id); + } else { + this.minimizeTables(); + } + }); + this.tableDisposable.push(attachTableStyler(table, this.themeService)); + + tables.push(table); + } + + if (isUndefinedOrNull(this.maximizedGrid)) { + this.splitView.addViews(tables, tables.map(i => i.minimumSize), this.splitView.length); + } + + this.tables = this.tables.concat(tables); + } + + private reset() { + for (let i = this.splitView.length - 1; i >= 0; i--) { + this.splitView.removeView(i); + } + dispose(this.tables); + this.tables = []; + } + + private maximizeTable(tableid: string): void { + if (!this.tables.find(t => t.id === tableid)) { + return; + } + + for (let i = this.tables.length - 1; i >= 0; i--) { + if (this.tables[i].id === tableid) { + this.tables[i].state.maximized = true; + this.maximizedGrid = this.tables[i]; + continue; + } + + this.splitView.removeView(i); + } + } + + private minimizeTables(): void { + if (this.maximizedGrid) { + this.maximizedGrid.state.maximized = false; + this.maximizedGrid = undefined; + this.splitView.removeView(0); + this.splitView.addViews(this.tables, this.tables.map(i => i.minimumSize)); + } + } +} + +class GridTable extends Disposable implements IView { + private static BOTTOMPADDING = 5; + private static ACTIONBAR_WIDTH = 26; + private table: Table; + private actionBar: ActionBar; + private container = document.createElement('div'); + private selectionModel = new CellSelectionModel(); + private styles: ITableStyles; + + private columns: Slick.Column[]; + + private _onDidChange = new Emitter(); + public readonly onDidChange: Event = this._onDidChange.event; + + public id = generateUuid(); + + constructor( + private runner: QueryRunner, + public state: GridTableState, + private resultSet: sqlops.ResultSetSummary, + private contextMenuService: IContextMenuService + ) { + super(); + this.container.style.width = '100%'; + this.container.style.height = '100%'; + this.container.style.marginBottom = GridTable.BOTTOMPADDING + 'px'; + this.container.className = 'grid-panel'; + + this.columns = this.resultSet.columnInfo.map((c, i) => { + return >{ + id: i.toString(), + name: c.columnName, + field: i.toString(), + width: 100 + }; + }); + } + + public render(container: HTMLElement, orientation: Orientation): void { + container.appendChild(this.container); + } + + private build(): void { + let tableContainer = document.createElement('div'); + tableContainer.style.display = 'inline-block'; + + this.container.appendChild(tableContainer); + + let collection = new VirtualizedCollection(50, this.resultSet.rowCount, + (offset, count) => this.loadData(offset, count), + index => this.placeholdGenerator(index) + ); + collection.setCollectionChangedCallback((change, startIndex, count) => { + this.renderGridDataRowsRange(startIndex, count); + }); + let numberColumn = new RowNumberColumn({ numberOfRows: this.resultSet.rowCount }); + this.columns.unshift(numberColumn.getColumnDefinition()); + this.table = this._register(new Table(tableContainer, { dataProvider: new AsyncDataProvider(collection), columns: this.columns }, { rowHeight, showRowNumber: true })); + this.table.setSelectionModel(this.selectionModel); + this.table.registerPlugin(new MouseWheelSupport()); + this.table.registerPlugin(new AutoColumnSize()); + this.table.registerPlugin(numberColumn); + this._register(this.table.onContextMenu(this.contextMenu, this)); + + if (this.styles) { + this.table.style(this.styles); + } + + let actions = []; + + if (this.state.canBeMaximized) { + if (this.state.maximized) { + actions.splice(1, 0, new MinimizeTableAction()); + } else { + actions.splice(1, 0, new MaximizeTableAction()); + } + } + + actions.push( + new SaveResultAction(SaveResultAction.SAVECSV_ID, SaveResultAction.SAVECSV_LABEL, SaveResultAction.SAVECSV_ICON, SaveFormat.CSV), + new SaveResultAction(SaveResultAction.SAVEEXCEL_ID, SaveResultAction.SAVEEXCEL_LABEL, SaveResultAction.SAVEEXCEL_ICON, SaveFormat.EXCEL), + new SaveResultAction(SaveResultAction.SAVEJSON_ID, SaveResultAction.SAVEJSON_LABEL, SaveResultAction.SAVEJSON_ICON, SaveFormat.JSON) + ); + + let actionBarContainer = document.createElement('div'); + actionBarContainer.style.width = GridTable.ACTIONBAR_WIDTH + 'px'; + actionBarContainer.style.display = 'inline-block'; + actionBarContainer.style.height = '100%'; + actionBarContainer.style.verticalAlign = 'top'; + this.container.appendChild(actionBarContainer); + this.actionBar = new ActionBar(actionBarContainer, { + orientation: ActionsOrientation.VERTICAL, context: { + runner: this.runner, + batchId: this.resultSet.batchId, + resultId: this.resultSet.id, + table: this.table, + tableState: this.state + } + }); + this.actionBar.push(actions, { icon: true, label: false }); + } + + public layout(size: number): void { + if (!this.table) { + this.build(); + } + this.table.layout( + new Dimension( + getContentWidth(this.container) - GridTable.ACTIONBAR_WIDTH, + size - GridTable.BOTTOMPADDING + ) + ); + } + + public get minimumSize(): number { + let smallestRows = ((this.resultSet.rowCount) * rowHeight) + columnHeight + estimatedScrollBarHeight + GridTable.BOTTOMPADDING; + let smallestSize = (minGridHeightInRows * rowHeight) + columnHeight + estimatedScrollBarHeight + GridTable.BOTTOMPADDING; + return Math.min(smallestRows, smallestSize); + } + + public get maximumSize(): number { + return ((this.resultSet.rowCount) * rowHeight) + columnHeight + estimatedScrollBarHeight + GridTable.BOTTOMPADDING; + } + + private loadData(offset: number, count: number): Thenable { + return this.runner.getQueryRows(offset, count, this.resultSet.batchId, this.resultSet.id).then(response => { + return response.resultSubset.rows.map(r => { + let dataWithSchema = {}; + // skip the first column since its a number column + for (let i = 1; i < this.columns.length; i++) { + dataWithSchema[this.columns[i].field] = r[i - 1].displayValue; + } + return dataWithSchema as T; + }); + }); + } + + private contextMenu(e: ITableContextMenuEvent): void { + const selection = this.selectionModel.getSelectedRanges(); + const { cell } = e; + this.contextMenuService.showContextMenu({ + getAnchor: () => e.anchor, + getActions: () => { + let actions = [ + new SelectAllGridAction(), + new Separator(), + new SaveResultAction(SaveResultAction.SAVECSV_ID, SaveResultAction.SAVECSV_LABEL, SaveResultAction.SAVECSV_ICON, SaveFormat.CSV), + new SaveResultAction(SaveResultAction.SAVEEXCEL_ID, SaveResultAction.SAVEEXCEL_LABEL, SaveResultAction.SAVEEXCEL_ICON, SaveFormat.EXCEL), + new SaveResultAction(SaveResultAction.SAVEJSON_ID, SaveResultAction.SAVEJSON_LABEL, SaveResultAction.SAVEJSON_ICON, SaveFormat.JSON), + new Separator(), + new CopyResultAction(CopyResultAction.COPY_ID, CopyResultAction.COPY_LABEL, false), + new CopyResultAction(CopyResultAction.COPYWITHHEADERS_ID, CopyResultAction.COPYWITHHEADERS_LABEL, true) + ]; + + if (this.state.canBeMaximized) { + if (this.state.maximized) { + actions.splice(1, 0, new MinimizeTableAction()); + } else { + actions.splice(1, 0, new MaximizeTableAction()); + } + } + + return TPromise.as(actions); + }, + getActionsContext: () => { + return { + cell, + selection, + runner: this.runner, + batchId: this.resultSet.batchId, + resultId: this.resultSet.id, + table: this.table, + tableState: this.state + }; + } + }); + } + + private placeholdGenerator(index: number): any { + return { values: [] }; + } + + private renderGridDataRowsRange(startIndex: number, count: number): void { + // let editor = this.table.getCellEditor(); + // let oldValue = editor ? editor.getValue() : undefined; + // let wasValueChanged = editor ? editor.isValueChanged() : false; + this.invalidateRange(startIndex, startIndex + count); + // let activeCell = this._grid.getActiveCell(); + // if (editor && activeCell.row >= startIndex && activeCell.row < startIndex + count) { + // if (oldValue && wasValueChanged) { + // editor.setValue(oldValue); + // } + // } + } + + private invalidateRange(start: number, end: number): void { + let refreshedRows = range(start, end); + if (this.table) { + this.table.invalidateRows(refreshedRows, true); + } + } + + public style(styles: ITableStyles) { + if (this.table) { + this.table.style(styles); + } else { + this.styles = styles; + } + } + + public dispose() { + $(this.container).destroy(); + super.dispose(); + } +} diff --git a/src/sql/parts/query/editor/media/messagePanel.css b/src/sql/parts/query/editor/media/messagePanel.css new file mode 100644 index 0000000000..bf1b20c343 --- /dev/null +++ b/src/sql/parts/query/editor/media/messagePanel.css @@ -0,0 +1,32 @@ + +/* Disable repl hover highlight in tree. */ +.monaco-workbench .message-tree .monaco-tree .monaco-tree-rows > .monaco-tree-row:hover:not(.highlighted):not(.selected):not(.focused) { + background-color: inherit; +} + +/* Disable repl hover highlight in tree. */ +.monaco-workbench .message-tree .monaco-tree .monaco-tree-row > .content { + line-height: 18px; + user-select: text; + word-wrap: break-word; + /* white-space: pre-wrap; */ + word-break: break-all; +} + +.message-tree .time-stamp { + width: 100px; + display: inline-block; +} + +.message-tree .message, +.message-tree .batch-start { + display: inline-block; +} + +.message-tree .batch-start { + text-decoration: underline; +} + +.message-tree .batch-start:hover { + color: red; +} diff --git a/src/sql/parts/query/editor/messagePanel.ts b/src/sql/parts/query/editor/messagePanel.ts new file mode 100644 index 0000000000..424aca1f3f --- /dev/null +++ b/src/sql/parts/query/editor/messagePanel.ts @@ -0,0 +1,343 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the Source EULA. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +'use strict'; + +import 'vs/css!./media/messagePanel'; +import { IMessagesActionContext, SelectAllMessagesAction, CopyMessagesAction } from './actions'; +import QueryRunner from 'sql/parts/query/execution/queryRunner'; + +import { IResultMessage, BatchSummary, ISelectionData } from 'sqlops'; + +import { ViewletPanel, IViewletPanelOptions } from 'vs/workbench/browser/parts/views/panelViewlet'; +import { IDataSource, ITree, IRenderer, ContextMenuEvent } from 'vs/base/parts/tree/browser/tree'; +import { TPromise } from 'vs/base/common/winjs.base'; +import { generateUuid } from 'vs/base/common/uuid'; +import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; +import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; +import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import { Tree } from 'vs/base/parts/tree/browser/treeImpl'; +import { attachListStyler } from 'vs/platform/theme/common/styler'; +import { IThemeService } from 'vs/platform/theme/common/themeService'; +import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { OpenMode, ClickBehavior, ICancelableEvent, IControllerOptions } from 'vs/base/parts/tree/browser/treeDefaults'; +import { WorkbenchTreeController } from 'vs/platform/list/browser/listService'; +import { IMouseEvent } from 'vs/base/browser/mouseEvent'; +import { $ } from 'vs/base/browser/builder'; +import { isArray } from 'vs/base/common/types'; +import { IDisposable, dispose } from 'vs/base/common/lifecycle'; +import { localize } from 'vs/nls'; +import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService'; +import { IEditor } from 'vs/editor/common/editorCommon'; + +export interface IResultMessageIntern extends IResultMessage { + id?: string; +} + +export interface IMessagePanelMessage { + message: string; + isError: boolean; +} + +export interface IMessagePanelBatchMessage extends IMessagePanelMessage { + selection: ISelectionData; + time: string; +} + +interface IMessageTemplate { + message: HTMLElement; +} + +interface IBatchTemplate extends IMessageTemplate { + timeStamp: HTMLElement; +} + +const TemplateIds = { + MESSAGE: 'message', + BATCH: 'batch', + MODEL: 'model' +}; + +export class MessagePanel extends ViewletPanel { + private ds = new MessageDataSource(); + private renderer = new MessageRenderer(); + private model = new Model(); + private controller: MessageController; + private container = $('div message-tree').getHTMLElement(); + + private queryRunnerDisposables: IDisposable[] = []; + + private tree: ITree; + + constructor( + title: string, options: IViewletPanelOptions, + @IKeybindingService keybindingService: IKeybindingService, + @IContextMenuService contextMenuService: IContextMenuService, + @IConfigurationService configurationService: IConfigurationService, + @IThemeService private themeService: IThemeService, + @IInstantiationService instantiationService: IInstantiationService + ) { + super(title, options, keybindingService, contextMenuService, configurationService); + this.controller = instantiationService.createInstance(MessageController, { openMode: OpenMode.SINGLE_CLICK, clickBehavior: ClickBehavior.ON_MOUSE_UP /* do not change, to preserve focus behaviour in input field */ }); + this.controller.toFocusOnClick = this.model; + this.tree = new Tree(this.container, { + dataSource: this.ds, + renderer: this.renderer, + controller: this.controller + }, { keyboardSupport: false }); + } + + protected renderBody(container: HTMLElement): void { + this.container.style.width = '100%'; + this.container.style.height = '100%'; + attachListStyler(this.tree, this.themeService); + container.appendChild(this.container); + this.tree.setInput(this.model); + } + + protected layoutBody(size: number): void { + const previousScrollPosition = this.tree.getScrollPosition(); + this.tree.layout(size); + if (previousScrollPosition === 1) { + this.tree.setScrollPosition(1); + } + } + + public set queryRunner(runner: QueryRunner) { + dispose(this.queryRunnerDisposables); + this.queryRunnerDisposables = []; + this.reset(); + this.queryRunnerDisposables.push(runner.onQueryStart(() => this.reset())); + this.queryRunnerDisposables.push(runner.onBatchStart(e => this.onBatchStart(e))); + this.queryRunnerDisposables.push(runner.onMessage(e => this.onMessage(e))); + this.queryRunnerDisposables.push(runner.onQueryEnd(e => this.onQueryEnd(e))); + } + + private onMessage(message: IResultMessage | IResultMessage[]) { + if (isArray(message)) { + this.model.messages.push(...message.map(c => { + return { + isError: c.isError, + message: c.message + }; + })); + } else { + this.model.messages.push({ + message: message.message, + isError: message.isError + }); + } + const previousScrollPosition = this.tree.getScrollPosition(); + this.tree.refresh(this.model).then(() => { + if (previousScrollPosition === 1) { + this.tree.setScrollPosition(1); + } + }); + } + + private onBatchStart(batch: BatchSummary) { + this.model.messages.push({ + message: localize('query.message.startQuery', 'Started executing query at Line {0}', batch.selection.startLine), + time: new Date(batch.executionStart).toLocaleTimeString(), + selection: batch.selection, + isError: false + }); + const previousScrollPosition = this.tree.getScrollPosition(); + this.tree.refresh(this.model).then(() => { + if (previousScrollPosition === 1) { + this.tree.setScrollPosition(1); + } + }); + } + + private onQueryEnd(elapsedTime: string) { + this.model.totalExecuteMessage = { + message: localize('query.message.executionTime', 'Total execution time: {0}', elapsedTime), + isError: false + }; + const previousScrollPosition = this.tree.getScrollPosition(); + this.tree.refresh(this.model).then(() => { + if (previousScrollPosition === 1) { + this.tree.setScrollPosition(1); + } + }); + } + + private reset() { + this.model.messages = []; + this.model.totalExecuteMessage = undefined; + this.tree.refresh(this.model); + } +} + +class MessageDataSource implements IDataSource { + getId(tree: ITree, element: Model | IResultMessageIntern): string { + if (element instanceof Model) { + return element.uuid; + } else { + if (!element.id) { + element.id = generateUuid(); + } + return element.id; + } + } + + hasChildren(tree: ITree, element: any): boolean { + return element instanceof Model; + } + + getChildren(tree: ITree, element: any): TPromise { + if (element instanceof Model) { + let messages = element.messages; + if (element.totalExecuteMessage) { + messages = messages.concat(element.totalExecuteMessage); + } + return TPromise.as(messages); + } else { + return TPromise.as(undefined); + } + } + + getParent(tree: ITree, element: any): TPromise { + return TPromise.as(null); + } +} + +class MessageRenderer implements IRenderer { + getHeight(tree: ITree, element: any): number { + return 22; + } + + getTemplateId(tree: ITree, element: any): string { + if (element instanceof Model) { + return TemplateIds.MODEL; + } else if (element.selection) { + return TemplateIds.BATCH; + } else { + return TemplateIds.MESSAGE; + } + } + + renderTemplate(tree: ITree, templateId: string, container: HTMLElement): IMessageTemplate | IBatchTemplate { + + if (templateId === TemplateIds.MESSAGE) { + $('div.time-stamp').appendTo(container); + const message = $('div.message').appendTo(container).getHTMLElement(); + return { message }; + } else if (templateId === TemplateIds.BATCH) { + const timeStamp = $('div.time-stamp').appendTo(container).getHTMLElement(); + const message = $('div.batch-start').appendTo(container).getHTMLElement(); + return { message, timeStamp }; + } else { + return undefined; + } + } + + renderElement(tree: ITree, element: IResultMessage, templateId: string, templateData: IMessageTemplate | IBatchTemplate): void { + if (templateId === TemplateIds.MESSAGE) { + let data: IMessageTemplate = templateData; + data.message.innerText = element.message; + } else if (templateId === TemplateIds.BATCH) { + let data = templateData as IBatchTemplate; + data.timeStamp.innerText = element.time; + data.message.innerText = element.message; + } + } + + disposeTemplate(tree: ITree, templateId: string, templateData: any): void { + } +} + +export class MessageController extends WorkbenchTreeController { + + private lastSelectedString: string = null; + public toFocusOnClick: { focus(): void }; + + constructor( + options: IControllerOptions, + @IConfigurationService configurationService: IConfigurationService, + @IWorkbenchEditorService private workbenchEditorService: IWorkbenchEditorService, + @IContextMenuService private contextMenuService: IContextMenuService, + @IInstantiationService private instantiationService: IInstantiationService + ) { + super(options, configurationService); + } + + protected onLeftClick(tree: ITree, element: any, eventish: ICancelableEvent, origin: string = 'mouse'): boolean { + const mouseEvent = eventish; + // input and output are one element in the tree => we only expand if the user clicked on the output. + // if ((element.reference > 0 || (element instanceof RawObjectReplElement && element.hasChildren)) && mouseEvent.target.className.indexOf('input expression') === -1) { + super.onLeftClick(tree, element, eventish, origin); + tree.clearFocus(); + tree.deselect(element); + // } + + const selection = window.getSelection(); + if (selection.type !== 'Range' || this.lastSelectedString === selection.toString()) { + // only focus the input if the user is not currently selecting. + this.toFocusOnClick.focus(); + } + this.lastSelectedString = selection.toString(); + + if (element.selection) { + let selection: ISelectionData = element.selection; + // this is a batch statement + let control = this.workbenchEditorService.getActiveEditor().getControl() as IEditor; + control.setSelection({ + startColumn: selection.startColumn + 1, + endColumn: selection.endColumn + 1, + endLineNumber: selection.endLine + 1, + startLineNumber: selection.startLine + 1 + }); + control.focus(); + } + + return true; + } + + public onContextMenu(tree: ITree, element: any, event: ContextMenuEvent): boolean { + if (event.target && event.target.tagName && event.target.tagName.toLowerCase() === 'input') { + return false; // allow context menu on input fields + } + + // Prevent native context menu from showing up + if (event) { + event.preventDefault(); + event.stopPropagation(); + } + + const selection = document.getSelection(); + + this.contextMenuService.showContextMenu({ + getAnchor: () => { + return { x: event.posx, y: event.posy }; + }, + getActions: () => { + return TPromise.as([ + this.instantiationService.createInstance(CopyMessagesAction), + new SelectAllMessagesAction() + ]); + }, + getActionsContext: () => { + return { + selection, + tree + }; + } + }); + + return true; + } +} + +export class Model { + public messages: Array = []; + public totalExecuteMessage: IMessagePanelMessage; + + public uuid = generateUuid(); + + public focus() { + + } +} diff --git a/src/sql/parts/query/editor/queryResultsEditor.ts b/src/sql/parts/query/editor/queryResultsEditor.ts index 5d4d9d228e..69e67c2f2c 100644 --- a/src/sql/parts/query/editor/queryResultsEditor.ts +++ b/src/sql/parts/query/editor/queryResultsEditor.ts @@ -6,7 +6,6 @@ 'use strict'; import { TPromise } from 'vs/base/common/winjs.base'; -import { Builder } from 'vs/base/browser/builder'; import { EditorOptions } from 'vs/workbench/common/editor'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { RawContextKey } from 'vs/platform/contextkey/common/contextkey'; @@ -14,10 +13,10 @@ import { BaseEditor } from 'vs/workbench/browser/parts/editor/baseEditor'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { BareFontInfo } from 'vs/editor/common/config/fontInfo'; import { getZoomLevel } from 'vs/base/browser/browser'; -import { Configuration } from 'vs/editor/browser/config/configuration'; import { IThemeService } from 'vs/platform/theme/common/themeService'; import * as DOM from 'vs/base/browser/dom'; import * as types from 'vs/base/common/types'; +import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { QueryResultsInput } from 'sql/parts/query/common/queryResultsInput'; import { IQueryModelService } from 'sql/parts/query/execution/queryModel'; @@ -25,8 +24,7 @@ import { bootstrapAngular } from 'sql/services/bootstrap/bootstrapService'; import { IQueryComponentParams } from 'sql/services/bootstrap/bootstrapParams'; import { QueryOutputModule } from 'sql/parts/query/views/queryOutput.module'; import { QUERY_OUTPUT_SELECTOR } from 'sql/parts/query/views/queryOutput.component'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { Event } from 'vs/base/common/event'; +import { QueryResultsView } from 'sql/parts/query/editor/queryResultsView'; export const RESULTS_GRID_DEFAULTS = { cellPadding: [6, 10, 5], @@ -97,6 +95,8 @@ export class QueryResultsEditor extends BaseEditor { protected _rawOptions: BareResultsGridInfo; protected _input: QueryResultsInput; + private resultsView: QueryResultsView; + constructor( @ITelemetryService telemetryService: ITelemetryService, @IThemeService themeService: IThemeService, @@ -106,12 +106,12 @@ export class QueryResultsEditor extends BaseEditor { ) { super(QueryResultsEditor.ID, telemetryService, themeService); this._rawOptions = BareResultsGridInfo.createFromRawSettings(this._configurationService.getValue('resultsGrid'), getZoomLevel()); - this._configurationService.onDidChangeConfiguration(e => { - if (e.affectsConfiguration('resultsGrid')) { - this._rawOptions = BareResultsGridInfo.createFromRawSettings(this._configurationService.getValue('resultsGrid'), getZoomLevel()); - this.applySettings(); - } - }); + // this._configurationService.onDidChangeConfiguration(e => { + // if (e.affectsConfiguration('resultsGrid')) { + // this._rawOptions = BareResultsGridInfo.createFromRawSettings(this._configurationService.getValue('resultsGrid'), getZoomLevel()); + // this.applySettings(); + // } + // }); } public get input(): QueryResultsInput { @@ -136,54 +136,22 @@ export class QueryResultsEditor extends BaseEditor { } createEditor(parent: HTMLElement): void { + if (!this.resultsView) { + this.resultsView = new QueryResultsView(parent, this._instantiationService, this._queryModelService); + } } layout(dimension: DOM.Dimension): void { + this.resultsView.layout(dimension); } setInput(input: QueryResultsInput, options: EditorOptions): TPromise { super.setInput(input, options); - this.applySettings(); - if (!input.hasBootstrapped) { - this._bootstrapAngular(); - } + this.resultsView.input = input; return TPromise.wrap(null); } - /** - * Load the angular components and record for this input that we have done so - */ - private _bootstrapAngular(): void { - let input = this.input; - let uri = input.uri; - - // Pass the correct DataService to the new angular component - let dataService = this._queryModelService.getDataService(uri); - if (!dataService) { - throw new Error('DataService not found for URI: ' + uri); - } - - // Mark that we have bootstrapped - input.setBootstrappedTrue(); - - // Get the bootstrap params and perform the bootstrap - // Note: pass in input so on disposal this is cleaned up. - // Otherwise many components will be left around and be subscribed - // to events from the backing data service - let params: IQueryComponentParams = { - dataService: dataService, - onSaveViewState: this.input.onSaveViewStateEmitter.event, - onRestoreViewState: this.input.onRestoreViewStateEmitter.event - }; - bootstrapAngular(this._instantiationService, - QueryOutputModule, - this.getContainer(), - QUERY_OUTPUT_SELECTOR, - params, - input); - } - public dispose(): void { super.dispose(); } -} \ No newline at end of file +} diff --git a/src/sql/parts/query/editor/queryResultsView.ts b/src/sql/parts/query/editor/queryResultsView.ts new file mode 100644 index 0000000000..bf0c10521e --- /dev/null +++ b/src/sql/parts/query/editor/queryResultsView.ts @@ -0,0 +1,122 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the Source EULA. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +'use strict'; + +import { QueryResultsInput } from 'sql/parts/query/common/queryResultsInput'; +import { TabbedPanel, IPanelTab, IPanelView } from 'sql/base/browser/ui/panel/panel'; +import { IQueryModelService } from '../execution/queryModel'; +import QueryRunner from 'sql/parts/query/execution/queryRunner'; +import { MessagePanel } from './messagePanel'; +import { GridPanel } from './gridPanel'; + +import * as nls from 'vs/nls'; +import * as UUID from 'vs/base/common/uuid'; +import { PanelViewlet } from 'vs/workbench/browser/parts/views/panelViewlet'; +import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import * as DOM from 'vs/base/browser/dom'; +import { Emitter } from 'vs/base/common/event'; +import { IDisposable, dispose } from 'vs/base/common/lifecycle'; + +class ResultsView implements IPanelView { + private panelViewlet: PanelViewlet; + private gridPanel: GridPanel; + private messagePanel: MessagePanel; + private container = document.createElement('div'); + + private _onRemove = new Emitter(); + public readonly onRemove = this._onRemove.event; + + private _onLayout = new Emitter(); + public readonly onLayout = this._onLayout.event; + + private queryRunnerDisposable: IDisposable[] = []; + + constructor(instantiationService: IInstantiationService) { + this.panelViewlet = instantiationService.createInstance(PanelViewlet, 'resultsView', { showHeaderInTitleWhenSingleView: false }); + this.gridPanel = instantiationService.createInstance(GridPanel, nls.localize('gridPanel', 'Results'), {}); + this.messagePanel = instantiationService.createInstance(MessagePanel, nls.localize('messagePanel', 'Messages'), {}); + this.panelViewlet.create(this.container).then(() => { + this.panelViewlet.addPanels([ + { panel: this.gridPanel, size: 1000, index: 0 }, + { panel: this.messagePanel, size: this.messagePanel.minimumSize, index: 1 } + ]); + }); + } + + render(container: HTMLElement): void { + container.appendChild(this.container); + } + + layout(dimension: DOM.Dimension): void { + this.panelViewlet.layout(dimension); + } + + remove(): void { + this.container.remove(); + } + + public set queryRunner(runner: QueryRunner) { + this.gridPanel.queryRunner = runner; + this.messagePanel.queryRunner = runner; + } +} + +class ResultsTab implements IPanelTab { + public readonly title = nls.localize('resultsTabTitle', 'Results'); + public readonly identifier = UUID.generateUuid(); + public readonly view: ResultsView; + + private _isAttached = false; + + constructor(instantiationService: IInstantiationService) { + this.view = new ResultsView(instantiationService); + + this.view.onLayout(() => this._isAttached = true, this); + this.view.onRemove(() => this._isAttached = false, this); + } + + public isAttached(): boolean { + return this._isAttached; + } + + public set queryRunner(runner: QueryRunner) { + this.view.queryRunner = runner; + } +} + +export class QueryResultsView { + private _panelView: TabbedPanel; + private _input: QueryResultsInput; + private resultsTab: ResultsTab; + + constructor( + container: HTMLElement, + @IInstantiationService instantiationService: IInstantiationService, + @IQueryModelService private queryModelService: IQueryModelService + ) { + this.resultsTab = new ResultsTab(instantiationService); + this._panelView = new TabbedPanel(container, { showHeaderWhenSingleView: false }); + } + + public style() { + + } + + public set input(input: QueryResultsInput) { + this._input = input; + this.resultsTab.queryRunner = this.queryModelService._getQueryInfo(input.uri).queryRunner; + // if (!this.resultsTab.isAttached) { + this._panelView.pushTab(this.resultsTab); + // } + } + + public get input(): QueryResultsInput { + return this._input; + } + + public layout(dimension: DOM.Dimension) { + this._panelView.layout(dimension); + } +} diff --git a/src/sql/parts/query/execution/queryModel.ts b/src/sql/parts/query/execution/queryModel.ts index 7b1c04b148..6049954a20 100644 --- a/src/sql/parts/query/execution/queryModel.ts +++ b/src/sql/parts/query/execution/queryModel.ts @@ -5,7 +5,6 @@ import QueryRunner from 'sql/parts/query/execution/queryRunner'; import { DataService } from 'sql/parts/grid/services/dataService'; -import { ISlickRange } from 'angular2-slickgrid'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; import { Event } from 'vs/base/common/event'; import { QueryInput } from 'sql/parts/query/common/queryInput'; @@ -19,6 +18,7 @@ import { EditRevertCellResult, ExecutionPlanOptions } from 'sqlops'; +import { QueryInfo } from 'sql/parts/query/execution/queryModelService'; export const SERVICE_ID = 'queryModelService'; @@ -48,7 +48,7 @@ export interface IQueryModelService { resizeResultsets(uri: string): void; onAngularLoaded(uri: string): void; - copyResults(uri: string, selection: ISlickRange[], batchId: number, resultId: number, includeHeaders?: boolean): void; + copyResults(uri: string, selection: Slick.Range[], batchId: number, resultId: number, includeHeaders?: boolean): void; setEditorSelection(uri: string, index: number): void; showWarning(uri: string, message: string): void; showError(uri: string, message: string): void; @@ -69,6 +69,7 @@ export interface IQueryModelService { revertRow(ownerUri: string, rowId: number): Thenable; getEditRows(ownerUri: string, rowStart: number, numberOfRows: number): Thenable; + _getQueryInfo(uri: string): QueryInfo; // Edit Data Callbacks onEditSessionReady: Event; } diff --git a/src/sql/parts/query/execution/queryModelService.ts b/src/sql/parts/query/execution/queryModelService.ts index 9611a6f32e..7e5ee6d546 100644 --- a/src/sql/parts/query/execution/queryModelService.ts +++ b/src/sql/parts/query/execution/queryModelService.ts @@ -16,7 +16,6 @@ import { SqlFlavorStatusbarItem } from 'sql/parts/query/common/flavorStatus'; import { RowCountStatusBarItem } from 'sql/parts/query/common/rowCountStatus'; import * as sqlops from 'sqlops'; -import { ISlickRange } from 'angular2-slickgrid'; import * as nls from 'vs/nls'; import * as statusbar from 'vs/workbench/browser/parts/statusbar/statusbar'; @@ -31,7 +30,7 @@ import Severity from 'vs/base/common/severity'; const selectionSnippetMaxLen = 100; -interface QueryEvent { +export interface QueryEvent { type: string; data: any; } @@ -39,7 +38,7 @@ interface QueryEvent { /** * Holds information about the state of a query runner */ -class QueryInfo { +export class QueryInfo { public queryRunner: QueryRunner; public dataService: DataService; public queryEventQueue: QueryEvent[]; @@ -170,7 +169,7 @@ export class QueryModelService implements IQueryModelService { return undefined; } - public copyResults(uri: string, selection: ISlickRange[], batchId: number, resultId: number, includeHeaders?: boolean): void { + public copyResults(uri: string, selection: Slick.Range[], batchId: number, resultId: number, includeHeaders?: boolean): void { this._queryInfoMap.get(uri).queryRunner.copyResults(selection, batchId, resultId, includeHeaders); } @@ -569,7 +568,7 @@ export class QueryModelService implements IQueryModelService { } } - private _getQueryInfo(uri: string): QueryInfo { + public _getQueryInfo(uri: string): QueryInfo { return this._queryInfoMap.get(uri); } diff --git a/src/sql/parts/query/execution/queryRunner.ts b/src/sql/parts/query/execution/queryRunner.ts index 8e3a1edb90..8b4e284cba 100644 --- a/src/sql/parts/query/execution/queryRunner.ts +++ b/src/sql/parts/query/execution/queryRunner.ts @@ -10,8 +10,8 @@ import * as sqlops from 'sqlops'; import * as Constants from 'sql/parts/query/common/constants'; import * as WorkbenchUtils from 'sql/workbench/common/sqlWorkbenchUtils'; import { IQueryManagementService } from 'sql/parts/query/common/queryManagement'; -import { ISlickRange } from 'angular2-slickgrid'; import * as Utils from 'sql/parts/connection/common/utils'; +import { SaveFormat } from 'sql/parts/grid/common/interfaces'; import Severity from 'vs/base/common/severity'; import { IWorkspaceConfigurationService } from 'vs/workbench/services/configuration/common/configuration'; @@ -21,6 +21,9 @@ import * as types from 'vs/base/common/types'; import { EventEmitter } from 'sql/base/common/eventEmitter'; import { IDisposable } from 'vs/base/common/lifecycle'; import { INotificationService } from 'vs/platform/notification/common/notification'; +import { Emitter, echo, debounceEvent, Event } from 'vs/base/common/event'; +import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { ResultSerializer } from 'sql/parts/query/common/resultSerializer'; export interface IEditSessionReadyEvent { ownerUri: string; @@ -61,6 +64,38 @@ export default class QueryRunner { private _batchSets: sqlops.BatchSummary[] = []; private _eventEmitter = new EventEmitter(); + private _onMessage = new Emitter(); + public readonly onMessage = debounceEvent(echo(this._onMessage.event), (l, e) => { + // on first run + if (types.isUndefinedOrNull(l)) { + return [e]; + } else { + return l.concat(e); + } + }); + + private _onResultSet = new Emitter(); + public readonly onResultSet = debounceEvent(echo(this._onResultSet.event), (l, e) => { + // on first run + if (types.isUndefinedOrNull(l)) { + return [e]; + } else { + return l.concat(e); + } + }); + + private _onQueryStart = new Emitter(); + public readonly onQueryStart: Event = echo(this._onQueryStart.event); + + private _onQueryEnd = new Emitter(); + public readonly onQueryEnd: Event = echo(this._onQueryEnd.event); + + private _onBatchStart = new Emitter(); + public readonly onBatchStart: Event = echo(this._onBatchStart.event); + + private _onBatchEnd = new Emitter(); + public readonly onBatchEnd: Event = echo(this._onBatchEnd.event); + // CONSTRUCTOR ///////////////////////////////////////////////////////// constructor( public uri: string, @@ -68,7 +103,8 @@ export default class QueryRunner { @IQueryManagementService private _queryManagementService: IQueryManagementService, @INotificationService private _notificationService: INotificationService, @IWorkspaceConfigurationService private _workspaceConfigurationService: IWorkspaceConfigurationService, - @IClipboardService private _clipboardService: IClipboardService + @IClipboardService private _clipboardService: IClipboardService, + @IInstantiationService private instantiationService: IInstantiationService ) { } get isExecuting(): boolean { @@ -152,6 +188,7 @@ export default class QueryRunner { private handleSuccessRunQueryResult() { // The query has started, so lets fire up the result pane + this._onQueryStart.fire(); this._eventEmitter.emit(EventType.START); this._queryManagementService.registerRunner(this, this.uri); } @@ -187,8 +224,9 @@ export default class QueryRunner { } }); - // We're done with this query so shut down any waiting mechanisms this._eventEmitter.emit(EventType.COMPLETE, Utils.parseNumAsTimeString(this._totalElapsedMilliseconds)); + // We're done with this query so shut down any waiting mechanisms + this._onQueryEnd.fire(Utils.parseNumAsTimeString(this._totalElapsedMilliseconds)); } /** @@ -209,6 +247,7 @@ export default class QueryRunner { // Store the batch this.batchSets[batch.id] = batch; this._eventEmitter.emit(EventType.BATCH_START, batch); + this._onBatchStart.fire(batch); } /** @@ -225,7 +264,9 @@ export default class QueryRunner { // send a time message in the format used for query complete this.sendBatchTimeMessage(batch.id, Utils.parseNumAsTimeString(executionTime)); } + this._eventEmitter.emit(EventType.BATCH_COMPLETE, batch); + this._onBatchEnd.fire(batch); } /** @@ -256,6 +297,7 @@ export default class QueryRunner { // Store the result set in the batch and emit that a result set has completed batchSet.resultSetSummaries[resultSet.id] = resultSet; this._eventEmitter.emit(EventType.RESULT_SET, resultSet); + this._onResultSet.fire(resultSet); } } } @@ -269,13 +311,13 @@ export default class QueryRunner { // Send the message to the results pane this._eventEmitter.emit(EventType.MESSAGE, message); + this._onMessage.fire(message); } /** * Get more data rows from the current resultSets from the service layer */ public getQueryRows(rowStart: number, numberOfRows: number, batchIndex: number, resultSetIndex: number): Thenable { - const self = this; let rowData: sqlops.QueryExecuteSubsetParams = { ownerUri: this.uri, resultSetIndex: resultSetIndex, @@ -284,16 +326,12 @@ export default class QueryRunner { batchIndex: batchIndex }; - return new Promise((resolve, reject) => { - self._queryManagementService.getQueryRows(rowData).then(result => { - resolve(result); - }, error => { - self._notificationService.notify({ - severity: Severity.Error, - message: nls.localize('query.gettingRowsFailedError', 'Something went wrong getting more rows: {0}', error) - }); - reject(error); + return this._queryManagementService.getQueryRows(rowData).then(r => r, error => { + this._notificationService.notify({ + severity: Severity.Error, + message: nls.localize('query.gettingRowsFailedError', 'Something went wrong getting more rows: {0}', error) }); + return error; }); } @@ -317,7 +355,7 @@ export default class QueryRunner { this._isExecuting = false; this._notificationService.notify({ severity: Severity.Error, - message: nls.localize('query.initEditExecutionFailed', 'Init Edit Execution failed: ') + error + message: nls.localize('query.initEditExecutionFailed', 'Init Edit Execution failed: ') + error }); }); } @@ -341,7 +379,7 @@ export default class QueryRunner { let error = `Nothing returned from subset query`; self._notificationService.notify({ severity: Severity.Error, - message: error + message: error }); reject(error); } @@ -350,7 +388,7 @@ export default class QueryRunner { let errorMessage = nls.localize('query.moreRowsFailedError', 'Something went wrong getting more rows:'); self._notificationService.notify({ severity: Severity.Error, - message: `${errorMessage} ${error}` + message: `${errorMessage} ${error}` }); reject(error); }); @@ -412,7 +450,7 @@ export default class QueryRunner { * @param resultId The result id of the result to copy from * @param includeHeaders [Optional]: Should column headers be included in the copy selection */ - copyResults(selection: ISlickRange[], batchId: number, resultId: number, includeHeaders?: boolean): void { + copyResults(selection: Slick.Range[], batchId: number, resultId: number, includeHeaders?: boolean): void { const self = this; let copyString = ''; const eol = this.getEolString(); @@ -483,7 +521,7 @@ export default class QueryRunner { return !!removeNewLines; } - private getColumnHeaders(batchId: number, resultId: number, range: ISlickRange): string[] { + private getColumnHeaders(batchId: number, resultId: number, range: Slick.Range): string[] { let headers: string[] = undefined; let batchSummary: sqlops.BatchSummary = this.batchSets[batchId]; if (batchSummary !== undefined) { @@ -519,7 +557,11 @@ export default class QueryRunner { isError: false }; // Send the message to the results pane - this._eventEmitter.emit(EventType.MESSAGE, message); + this._onMessage.fire(message); } } + + public serializeResults(batchId: number, resultSetId: number, format: SaveFormat, selection: Slick.Range[]) { + return this.instantiationService.createInstance(ResultSerializer).saveResults(this.uri, { selection, format, batchIndex: batchId, resultSetNumber: resultSetId }); + } } diff --git a/src/sql/parts/queryPlan/topOperations.component.ts b/src/sql/parts/queryPlan/topOperations.component.ts index 2bc1477972..47388479af 100644 --- a/src/sql/parts/queryPlan/topOperations.component.ts +++ b/src/sql/parts/queryPlan/topOperations.component.ts @@ -103,7 +103,7 @@ export class TopOperationsComponent extends TabChild implements OnDestroy, OnIni column.rerenderOnResize = true; return column; }); - this._table = new Table(this._el.nativeElement, data, columns); + this._table = new Table(this._el.nativeElement, { dataProvider: data, columns }); this._disposables.push(attachTableStyler(this._table, this.themeService)); } } diff --git a/src/typings/globals/slickgrid/index.d.ts b/src/typings/globals/slickgrid/index.d.ts index 1470423119..5a9f073a71 100644 --- a/src/typings/globals/slickgrid/index.d.ts +++ b/src/typings/globals/slickgrid/index.d.ts @@ -1212,7 +1212,7 @@ declare namespace Slick { public render(): void; public invalidate(): void; public invalidateRow(row: number): void; - public invalidateRows(rows: number[]): void; + public invalidateRows(rows: number[], keepEditor: boolean): void; public invalidateAllRows(): void; public updateCell(row: number, cell: number): void; public updateRow(row: number): void; diff --git a/src/typings/modules/angular2-slickgrid/index.d.ts b/src/typings/modules/angular2-slickgrid/index.d.ts index 41128dcd45..2c84ce4784 100644 --- a/src/typings/modules/angular2-slickgrid/index.d.ts +++ b/src/typings/modules/angular2-slickgrid/index.d.ts @@ -1,39 +1,3 @@ -// Generated by typings -// Source: node_modules/angular2-slickgrid/out/js/gridsync.service.d.ts -declare module '~angular2-slickgrid/out/js/gridsync.service' { -import { Observable } from 'rxjs/Rx'; -import { SelectionModel } from '~angular2-slickgrid/out/js/selectionModel'; -export class GridSyncService { - columnMinWidthPX: number; - private _scrollLeftPX; - private _scrollBarWidthPX; - private _columnWidthPXs; - private _rowNumberColumnWidthPX; - private _updated; - private _typeDropdownOffset; - private _selectionModel; - private _initialColumnWidthPXsOnResize; - private _isGridReadOnly; - initialColumnResize(): void; - resizeColumn(index: number, deltaWidthPX: number): void; - openTypeDropdown(columnIndex: number): void; - private setColumnWidthPX(index, widthPX); - underlyingSelectionModel: any; - readonly updated: Observable; - readonly typeDropdownOffset: Observable<[number, number]>; - scrollLeftPX: number; - scrollBarWidthPX: number; - columnWidthPXs: number[]; - rowNumberColumnWidthPX: number; - readonly selectionModel: SelectionModel; - isGridReadOnly: boolean; - private notifyUpdates(propertyName); -} -} -declare module 'angular2-slickgrid/out/js/gridsync.service' { -export * from '~angular2-slickgrid/out/js/gridsync.service'; -} - // Generated by typings // Source: node_modules/angular2-slickgrid/out/js/interfaces.d.ts declare module '~angular2-slickgrid/out/js/interfaces' { @@ -57,7 +21,6 @@ export interface IObservableCollection { at(index: number): T; getRange(start: number, end: number): T[]; setCollectionChangedCallback(callback: (change: CollectionChange, startIndex: number, count: number) => void): void; - resetWindowsAroundIndex(index: number): void; } export class CancellationToken { private _isCanceled; @@ -66,27 +29,6 @@ export class CancellationToken { readonly isCanceled: boolean; readonly canceled: Observable; } -export enum FieldType { - String = 0, - Boolean = 1, - Integer = 2, - Decimal = 3, - Date = 4, - Unknown = 5, -} -export interface IColumnDefinition { - id?: string; - name: string; - type: FieldType; - asyncPostRender?: (cellRef: string, row: number, dataContext: JSON, colDef: any) => void; - formatter?: (row: number, cell: any, value: any, columnDef: any, dataContext: any) => string; - isEditable?: boolean; -} - -export interface ISlickColumn extends Slick.Column { - isEditable?: boolean; -} - export interface IGridColumnDefinition { id: string; type: number; @@ -95,6 +37,9 @@ export interface IGridDataRow { row?: number; values: any[]; } +export interface ISlickColumn extends Slick.Column { + isEditable?: boolean; +} } declare module 'angular2-slickgrid/out/js/interfaces' { export * from '~angular2-slickgrid/out/js/interfaces'; @@ -109,13 +54,13 @@ export class SelectionModel implements ISlickSelectionModel { private _handler; private _onSelectedRangesChanged; private _slickRangeFactory; - constructor(_rowSelectionModel: ISlickSelectionModel, _handler: ISlickEventHandler, _onSelectedRangesChanged: ISlickEvent, _slickRangeFactory: (fromRow: number, fromCell: number, toRow: number, toCell: number) => ISlickRange); - readonly range: ISlickRange[]; + constructor(_rowSelectionModel: ISlickSelectionModel, _handler: ISlickEventHandler, _onSelectedRangesChanged: ISlickEvent, _slickRangeFactory: (fromRow: number, fromCell: number, toRow: number, toCell: number) => Slick.Range); + readonly range: Slick.Range[]; readonly onSelectedRangesChanged: ISlickEvent; init(grid: ISlickGrid): void; destroy(): void; - setSelectedRanges(ranges: ISlickRange[]): void; - getSelectedRanges(): ISlickRange[]; + setSelectedRanges(ranges: Slick.Range[]): void; + getSelectedRanges(): Slick.Range[]; changeSelectedRanges(selections: ISelectionRange[]): void; toggleSingleColumnSelection(columnId: string): void; setSingleColumnSelection(columnId: string): void; @@ -132,27 +77,21 @@ export class SelectionModel implements ISlickSelectionModel { private updateSelectedRanges(ranges); } export interface ISlickSelectionModel { - range: ISlickRange[]; + range: Slick.Range[]; onSelectedRangesChanged: any; init(grid: any): void; destroy(): void; - setSelectedRanges(ranges: ISlickRange[]): void; - getSelectedRanges(): ISlickRange[]; + setSelectedRanges(ranges: Slick.Range[]): void; + getSelectedRanges(): Slick.Range[]; } export interface ISlickEventHandler { subscribe(event: any, handler: any): void; unsubscribeAll(): void; } export interface ISlickEvent { - notify(eventData: ISlickRange[]): void; + notify(eventData: Slick.Range[]): void; subscribe(handler: (e: any, args: any) => void): void; } -export interface ISlickRange { - fromCell: number; - fromRow: number; - toCell: number; - toRow: number; -} export interface ISlickGrid { getActiveCellNode(): any; getCanvasNode(): any; @@ -171,12 +110,11 @@ export * from '~angular2-slickgrid/out/js/selectionModel'; declare module '~angular2-slickgrid/out/js/slickGrid' { import { OnChanges, OnInit, OnDestroy, SimpleChange, EventEmitter, AfterViewInit } from '@angular/core'; import { Observable } from 'rxjs/Rx'; -import { IObservableCollection, IGridDataRow, IColumnDefinition } from '~angular2-slickgrid/out/js/interfaces'; -import { ISlickRange } from '~angular2-slickgrid/out/js/selectionModel'; +import { IObservableCollection, IGridDataRow, ISlickColumn } from '~angular2-slickgrid/out/js/interfaces'; +export function getOverridableTextEditorClass(grid: SlickGrid): any; export class SlickGrid implements OnChanges, OnInit, OnDestroy, AfterViewInit { private _el; - private _gridSyncService; - columnDefinitions: IColumnDefinition[]; + columnDefinitions: ISlickColumn[]; dataRows: IObservableCollection; resized: Observable; highlightedCells: { @@ -187,7 +125,6 @@ export class SlickGrid implements OnChanges, OnInit, OnDestroy, AfterViewInit { contextColumns: string[]; columnsLoading: string[]; showHeader: boolean; - showDataTypeIcon: boolean; enableColumnReorder: boolean; enableAsyncPostRender: boolean; selectionModel: string | Slick.SelectionModel; @@ -195,45 +132,23 @@ export class SlickGrid implements OnChanges, OnInit, OnDestroy, AfterViewInit { enableEditing: boolean; topRowNumber: number; overrideCellFn: (rowNumber, columnId, value?, data?) => string; - isColumnEditable: (column: number) => boolean; isCellEditValid: (row: number, column: number, newValue: any) => boolean; - private _rowHeight; loadFinished: EventEmitter; - editingFinished: EventEmitter; - contextMenu: EventEmitter; - topRowNumberChange: EventEmitter; - activeCellChanged: EventEmitter<{ - row: number; - column: number; - }>; - cellEditBegin: EventEmitter<{ - row: number; - column: number; - }>; - cellEditExit: EventEmitter<{ - row: number; - column: number; - newValue: any; - }>; - rowEditBegin: EventEmitter<{ - row: number; - }>; - rowEditExit: EventEmitter<{ - row: number; - }>; + onContextMenu: EventEmitter>; + onScroll: EventEmitter>; + onActiveCellChanged: EventEmitter>; + onBeforeEditCell: EventEmitter>; + onCellChange: EventEmitter>; onFocus(): void; rowHeight: number; + private _rowHeight; private _grid; private _gridColumns; private _columnNameToIndex; private _gridData; private _resizeSubscription; private _gridSyncSubscription; - private _topRow; - private _leftPx; - private _activeEditingRow; - private _activeEditingRowHasChanges; - constructor(_el: any, _gridSyncService: any); + constructor(_el: any); ngOnChanges(changes: { [propName: string]: SimpleChange; }): void; @@ -245,27 +160,20 @@ export class SlickGrid implements OnChanges, OnInit, OnDestroy, AfterViewInit { readonly onSelectedRowsChanged: Slick.Event>; getSelectedRows(): number[]; getColumnIndex(name: string): number; - getSelectedRanges(): ISlickRange[]; + getSelectedRanges(): Slick.Range[]; registerPlugin(plugin: Slick.Plugin | string): void; setActive(): void; - selection: ISlickRange[] | boolean; - subscribeToContextMenu(): void; + selection: Slick.Range[] | boolean; private initGrid(); private changeEditSession(enabled); - private handleEditorCellChange(rowNumber); - private static getDataWithSchema(data, columns); private onResize(); private invalidateRange(start, end); - private getColumnEditor; + private getColumnEditor(column); private getFormatter; - private subscribeToScroll(); - private subscribeToCellChanged(); - private subscribeToBeforeEditCell(); - private subscribeToActiveCellChanged(); - private updateColumnWidths(); + private setupEvents(); private updateSchema(); - private getImagePathForDataType(type); private setCallbackOnDataRowsChanged(); + readonly activeCell: Slick.Cell; private renderGridDataRowsRange(startIndex, count); } } @@ -302,7 +210,6 @@ export * from '~angular2-slickgrid/out/js/virtualizedCollection'; // Generated by typings // Source: node_modules/angular2-slickgrid/out/index.d.ts declare module '~angular2-slickgrid/out/index' { -export * from '~angular2-slickgrid/out/js/gridsync.service'; export * from '~angular2-slickgrid/out/js/interfaces'; export * from '~angular2-slickgrid/out/js/selectionModel'; export * from '~angular2-slickgrid/out/js/slickGrid'; diff --git a/src/typings/modules/angular2-slickgrid/typings.json b/src/typings/modules/angular2-slickgrid/typings.json index ca7d18b070..cbe481d151 100644 --- a/src/typings/modules/angular2-slickgrid/typings.json +++ b/src/typings/modules/angular2-slickgrid/typings.json @@ -1,9 +1,10 @@ { "resolution": "main", "tree": { - "raw": "npm:angular2-slickgrid", - "main": "out/index.js", - "version": "1.3.9", - "name": "angular2-slickgrid" + "src": "D:\\code\\sqlopsstudio\\node_modules\\angular2-slickgrid\\package.json", + "raw": "npm:angular2-slickgrid", + "main": "out/index.js", + "version": "1.4.1", + "name": "angular2-slickgrid" } } diff --git a/yarn.lock b/yarn.lock index 2e109ccea5..5b6caf4954 100644 --- a/yarn.lock +++ b/yarn.lock @@ -59,6 +59,10 @@ dependencies: commander "*" +"@types/fancy-log@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@types/fancy-log/-/fancy-log-1.3.0.tgz#a61ab476e5e628cd07a846330df53b85e05c8ce0" + "@types/keytar@4.0.1": version "4.0.1" resolved "https://registry.yarnpkg.com/@types/keytar/-/keytar-4.0.1.tgz#e2cf6405dc33861424e59b67516c66d2cf7bc21b" @@ -72,8 +76,8 @@ resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.39.tgz#f68d63db8b69c38e9558b4073525cf96c4f7a829" "@types/node@*": - version "4.2.22" - resolved "https://registry.yarnpkg.com/@types/node/-/node-4.2.22.tgz#cf488a0f6b4a9c245d09927f4f757ca278b9c8ce" + version "10.5.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.5.7.tgz#960d9feb3ade2233bcc9843c918d740b4f78a7cf" "@types/semver@5.3.30": version "5.3.30" @@ -99,11 +103,11 @@ abbrev@1.0.x: version "1.0.9" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" -accepts@~1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f" +accepts@~1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" dependencies: - mime-types "~2.1.16" + mime-types "~2.1.18" negotiator "0.6.1" acorn-jsx@^3.0.0: @@ -120,9 +124,9 @@ acorn@^3.0.4: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" -acorn@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7" +acorn@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.1.tgz#f095829297706a7c9776958c0afc8930a9b9d9d8" agent-base@4, agent-base@^4.1.0: version "4.2.1" @@ -142,8 +146,8 @@ ajv@^4.7.0, ajv@^4.9.1: json-stable-stringify "^1.0.1" ajv@^5.1.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.3.0.tgz#4414ff74a50879c208ee5fdc826e32c303549eda" + version "5.5.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" dependencies: co "^4.6.0" fast-deep-equal "^1.0.0" @@ -174,9 +178,9 @@ angular2-grid@2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/angular2-grid/-/angular2-grid-2.0.6.tgz#01fe225dc13b2822370b6c61f9a6913b3a26f989" -"angular2-slickgrid@github:Microsoft/angular2-slickgrid#1.4.3": - version "1.4.3" - resolved "https://codeload.github.com/Microsoft/angular2-slickgrid/tar.gz/a9801217a1b25ee2bf001cacfd9edf4cbb6992d2" +"angular2-slickgrid@github:Microsoft/angular2-slickgrid#1.4.4": + version "1.4.4" + resolved "https://codeload.github.com/Microsoft/angular2-slickgrid/tar.gz/5494e99f3ffdfd119e02bd2a26db5ba3c1e05c1d" ansi-colors@^1.0.1: version "1.1.0" @@ -206,10 +210,6 @@ ansi-red@^0.1.1: dependencies: ansi-wrap "0.1.0" -ansi-regex@^0.2.0, ansi-regex@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-0.2.1.tgz#0d8e946967a3d8143f93e24e298525fc1b2235f9" - ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -218,17 +218,13 @@ ansi-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" -ansi-styles@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.1.0.tgz#eaecbf66cd706882760b2f4691582b8f55d7a7de" - ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" -ansi-styles@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" dependencies: color-convert "^1.9.0" @@ -247,13 +243,24 @@ applicationinsights@0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/applicationinsights/-/applicationinsights-0.18.0.tgz#162ebb48a383408bc4de44db32b417307f45bbc1" +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + archy@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + argparse@^1.0.7: - version "1.0.9" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" dependencies: sprintf-js "~1.0.2" @@ -274,11 +281,7 @@ arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" -arr-flatten@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b" - -arr-flatten@^1.1.0: +arr-flatten@^1.0.1, arr-flatten@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" @@ -319,8 +322,8 @@ array-slice@^0.2.3: resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" array-slice@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.0.0.tgz#e73034f00dcc1f40876008fd20feae77bd4b7c2f" + version "1.1.0" + resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4" array-sort@^1.0.0: version "1.0.0" @@ -353,12 +356,12 @@ arrify@^1.0.0: resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" asap@~2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f" + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" asar@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/asar/-/asar-0.14.0.tgz#998b36a26abd0e590e55d9f92cfd3fd7a6051652" + version "0.14.3" + resolved "https://registry.yarnpkg.com/asar/-/asar-0.14.3.tgz#c72a81542a48e3bca459fb1b07ee2b6adfae265d" dependencies: chromium-pickle-js "^0.2.0" commander "^2.9.0" @@ -374,8 +377,10 @@ asn1@0.1.11: resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.1.11.tgz#559be18376d08a4ec4dbe80877d27818639b2df7" asn1@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + dependencies: + safer-buffer "~2.1.0" assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" @@ -406,10 +411,10 @@ async@1.x, async@^1.4.0, async@^1.5.0: resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" async@^2.0.1: - version "2.6.0" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" + version "2.6.1" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" dependencies: - lodash "^4.14.0" + lodash "^4.17.10" async@~0.2.8: version "0.2.10" @@ -423,13 +428,9 @@ asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" -atob@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.0.tgz#ab2b150e51d7b122b9efc8d7340c06b6c41076bc" - -atob@~1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/atob/-/atob-1.1.3.tgz#95f13629b12c3a51a5d215abdce2aa9f32f80773" +atob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.1.tgz#ae2d5a729477f289d60dd7f96a6314a22dd6c22a" autoprefixer@^6.3.1: version "6.7.7" @@ -455,8 +456,8 @@ aws-sign@~0.3.0: resolved "https://registry.yarnpkg.com/aws-sign/-/aws-sign-0.3.0.tgz#3d81ca69b474b1e16518728b51c24ff0bbedc6e9" aws4@^1.2.1, aws4@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" + version "1.8.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" azure-storage@^0.3.1: version "0.3.3" @@ -519,8 +520,8 @@ base@^0.11.1: pascalcase "^0.1.1" bcrypt-pbkdf@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" dependencies: tweetnacl "^0.14.3" @@ -529,12 +530,12 @@ beeper@^1.0.0: resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" big-integer@^1.6.25: - version "1.6.25" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.25.tgz#1de45a9f57542ac20121c682f8d642220a34e823" + version "1.6.34" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.34.tgz#701affc8f0d73c490930a6b482dc23ed6ffc7484" binary-extensions@^1.0.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.10.0.tgz#9aeb9a6c5e88638aad171e167f5900abe24835d0" + version "1.11.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" binary-search-bounds@2.0.3: version "2.0.3" @@ -555,12 +556,23 @@ bindings@^1.2.1, bindings@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.3.0.tgz#b346f6ecf6a95f5a815c5839fc7cdb22502f1ed7" +bl@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" + dependencies: + readable-stream "^2.3.5" + safe-buffer "^5.1.1" + bl@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/bl/-/bl-1.1.2.tgz#fdca871a99713aa00d19e3bbba41c44787a65398" dependencies: readable-stream "~2.0.5" +bluebird@^3.0.5: + version "3.5.1" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" + body-parser@1.18.2: version "1.18.2" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" @@ -592,21 +604,9 @@ boom@2.x.x: dependencies: hoek "2.x.x" -boom@4.x.x: - version "4.3.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" - dependencies: - hoek "4.x.x" - -boom@5.x.x: - version "5.2.0" - resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" - dependencies: - hoek "4.x.x" - brace-expansion@^1.0.0, brace-expansion@^1.1.7: - version "1.1.8" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" dependencies: balanced-match "^1.0.0" concat-map "0.0.1" @@ -620,16 +620,14 @@ braces@^1.8.2: repeat-element "^1.1.2" braces@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.1.tgz#7086c913b4e5a08dbe37ac0ee6a2500c4ba691bb" + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" dependencies: arr-flatten "^1.1.0" array-unique "^0.3.2" - define-property "^1.0.0" extend-shallow "^2.0.1" fill-range "^4.0.0" isobject "^3.0.1" - kind-of "^6.0.2" repeat-element "^1.1.2" snapdragon "^0.8.1" snapdragon-node "^2.0.1" @@ -651,21 +649,36 @@ browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: caniuse-db "^1.0.30000639" electron-to-chromium "^1.2.7" +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + +buffer-alloc@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + buffer-crc32@~0.2.3: version "0.2.13" resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" -buffer-from@^1.0.0: +buffer-fill@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.0.0.tgz#4cb8832d23612589b0406e9e2956c17f06fdf531" + resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" buffers@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" bufferstreams@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/bufferstreams/-/bufferstreams-1.1.1.tgz#0161373060ac5988eff99058731114f6e195d51e" + version "1.1.3" + resolved "https://registry.yarnpkg.com/bufferstreams/-/bufferstreams-1.1.3.tgz#a8515ac024fa90e8fa7d58c11b13dea1f28abe72" dependencies: readable-stream "^2.0.2" @@ -734,8 +747,8 @@ caniuse-api@^1.5.2: lodash.uniq "^4.5.0" caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30000760" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000760.tgz#3ea29473eb78a6ccb09f2eb73ac9e1debfec528d" + version "1.0.30000875" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000875.tgz#6f904fc89120de4029a9ca0f21d7ac3db89a0dce" caseless@~0.11.0: version "0.11.0" @@ -758,15 +771,13 @@ chainsaw@~0.1.0: dependencies: traverse ">=0.3.0 <0.4" -chalk@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.5.1.tgz#663b3a648b68b55d04690d49167aa837858f2174" +chalk@2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.1.tgz#523fe2678aec7b04e8041909292fe8b17059b796" dependencies: - ansi-styles "^1.1.0" - escape-string-regexp "^1.0.0" - has-ansi "^0.1.0" - strip-ansi "^0.3.0" - supports-color "^0.2.0" + ansi-styles "^3.2.0" + escape-string-regexp "^1.0.5" + supports-color "^5.2.0" chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" @@ -779,12 +790,12 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: supports-color "^2.0.0" chalk@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" + version "2.4.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" dependencies: - ansi-styles "^3.1.0" + ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" - supports-color "^4.0.0" + supports-color "^5.3.0" charenc@~0.0.1: version "0.0.2" @@ -821,9 +832,13 @@ cheerio@^1.0.0-rc.1: lodash "^4.15.0" parse5 "^3.0.1" +chownr@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" + chrome-remote-interface@^0.25.3: - version "0.25.3" - resolved "https://registry.yarnpkg.com/chrome-remote-interface/-/chrome-remote-interface-0.25.3.tgz#b692ae538cd5af3a6dd285636bfab3d29a7006c1" + version "0.25.7" + resolved "https://registry.yarnpkg.com/chrome-remote-interface/-/chrome-remote-interface-0.25.7.tgz#827e85fbef3cc561a9ef2404eb7eee355968c5bc" dependencies: commander "2.11.x" ws "3.3.x" @@ -833,8 +848,8 @@ chromium-pickle-js@^0.2.0: resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205" ci-info@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.1.tgz#47b44df118c48d2597b56d342e7e25791060171a" + version "1.1.3" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.3.tgz#710193264bb05c77b8c90d02f5aaf22216a667b2" circular-json@^0.3.1: version "0.3.3" @@ -889,8 +904,8 @@ cliui@^3.2.0: wrap-ansi "^2.0.0" cliui@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.0.0.tgz#743d4650e05f36d1ed2575b59638d87322bfbbcc" + version "4.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" dependencies: string-width "^2.1.1" strip-ansi "^4.0.0" @@ -900,7 +915,7 @@ clone-buffer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" -clone-stats@^0.0.1, clone-stats@~0.0.1: +clone-stats@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" @@ -913,20 +928,20 @@ clone@^0.2.0: resolved "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz#c6126a90ad4f72dbf5acdb243cc37724fe93fc1f" clone@^1.0.0, clone@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f" + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" clone@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb" + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" cloneable-readable@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.0.0.tgz#a6290d413f217a61232f95e458ff38418cfb0117" + version "1.1.2" + resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.2.tgz#d591dee4a8f8bc15da43ce97dceeba13d43e2a65" dependencies: inherits "^2.0.1" - process-nextick-args "^1.0.6" - through2 "^2.0.1" + process-nextick-args "^2.0.0" + readable-stream "^2.3.5" co@^4.6.0: version "4.6.0" @@ -958,12 +973,16 @@ color-convert@^0.5.3: resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-0.5.3.tgz#bdb6c69ce660fadffe0b0007cc447e1b9f7282bd" color-convert@^1.3.0, color-convert@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" + version "1.9.2" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.2.tgz#49881b8fba67df12a96bdf3f56c0aab9e7913147" dependencies: - color-name "^1.1.1" + color-name "1.1.1" -color-name@^1.0.0, color-name@^1.1.1: +color-name@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689" + +color-name@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" @@ -994,16 +1013,16 @@ colormin@^1.0.5: has "^1.0.1" colors@^1.1.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.0.tgz#5f20c9fef6945cb1134260aab33bfbdc8295e04e" + version "1.3.1" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.1.tgz#4accdb89cf2cabc7f982771925e9468784f32f3d" colors@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" -combined-stream@^1.0.5, combined-stream@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" +combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" dependencies: delayed-stream "~1.0.0" @@ -1013,15 +1032,15 @@ combined-stream@~0.0.4: dependencies: delayed-stream "0.0.5" -commander@*, commander@^2.11.0: - version "2.15.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" +commander@*, commander@^2.11.0, commander@^2.12.1, commander@^2.8.1, commander@^2.9.0: + version "2.17.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" commander@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/commander/-/commander-0.6.1.tgz#fa68a14f6a945d54dbbe50d8cdb3320e9e3b1a06" -commander@2.11.x, commander@^2.8.1, commander@^2.9.0, commander@~2.11.0: +commander@2.11.x: version "2.11.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" @@ -1035,13 +1054,17 @@ commander@2.8.x: dependencies: graceful-readlink ">= 1.0.0" -commander@^2.12.1: +commander@~2.13.0: version "2.13.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" +commander@~2.16.0: + version "2.16.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.16.0.tgz#f16390593996ceb4f3eeb020b31d78528f7f8a50" + commandpost@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/commandpost/-/commandpost-1.2.1.tgz#2e9c4c7508b9dc704afefaa91cab92ee6054cc68" + version "1.3.0" + resolved "https://registry.yarnpkg.com/commandpost/-/commandpost-1.3.0.tgz#e0654e4933abf58406c7d3b77ce747083da178c4" component-emitter@^1.2.1: version "1.2.1" @@ -1051,15 +1074,7 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -concat-stream@1.6.0, concat-stream@^1.5.2: - version "1.6.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" - dependencies: - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -concat-stream@^1.6.0: +concat-stream@1.6.2, concat-stream@^1.5.2, concat-stream@^1.6.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" dependencies: @@ -1069,10 +1084,10 @@ concat-stream@^1.6.0: typedarray "^0.0.6" concat-with-sourcemaps@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/concat-with-sourcemaps/-/concat-with-sourcemaps-1.0.4.tgz#f55b3be2aeb47601b10a2d5259ccfb70fd2f1dd6" + version "1.1.0" + resolved "https://registry.yarnpkg.com/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz#d4ea93f05ae25790951b99e7b3b09e3908a4082e" dependencies: - source-map "^0.5.1" + source-map "^0.6.1" config-chain@~1.1.5: version "1.1.11" @@ -1081,6 +1096,10 @@ config-chain@~1.1.5: ini "^1.3.4" proto-list "~1.2.1" +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + content-disposition@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" @@ -1090,8 +1109,8 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" convert-source-map@1.X, convert-source-map@^1.1.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" + version "1.5.1" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" cookie-jar@~0.3.0: version "0.3.0" @@ -1110,8 +1129,8 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" copy-props@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/copy-props/-/copy-props-2.0.1.tgz#665fc32046ca84a898abaa3c5945e7f248ccba00" + version "2.0.4" + resolved "https://registry.yarnpkg.com/copy-props/-/copy-props-2.0.4.tgz#93bb1cadfafd31da5bb8a9d4b41f471ec3a72dfe" dependencies: each-props "^1.3.0" is-plain-object "^2.0.1" @@ -1161,12 +1180,6 @@ cryptiles@2.x.x: dependencies: boom "2.x.x" -cryptiles@3.x.x: - version "3.1.2" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" - dependencies: - boom "5.x.x" - cson-parser@^1.3.3: version "1.3.5" resolved "https://registry.yarnpkg.com/cson-parser/-/cson-parser-1.3.5.tgz#7ec675e039145533bf2a6a856073f1599d9c2d24" @@ -1191,12 +1204,12 @@ css-what@2.1: resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" css@2.X: - version "2.2.1" - resolved "https://registry.yarnpkg.com/css/-/css-2.2.1.tgz#73a4c81de85db664d4ee674f7d47085e3b2d55dc" + version "2.2.3" + resolved "https://registry.yarnpkg.com/css/-/css-2.2.3.tgz#f861f4ba61e79bedc962aa548e5780fd95cbc6be" dependencies: inherits "^2.0.1" source-map "^0.1.38" - source-map-resolve "^0.3.0" + source-map-resolve "^0.5.1" urix "^0.1.0" cssnano@^3.0.0: @@ -1244,8 +1257,8 @@ csso@~2.3.1: source-map "^0.5.3" cssom@0.3.x, "cssom@>= 0.3.0 < 0.4.0": - version "0.3.2" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" + version "0.3.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.4.tgz#8cd52e8a3acfd68d3aed38ee0a640177d2f9d797" "cssstyle@>= 0.2.21 < 0.3.0": version "0.2.37" @@ -1279,7 +1292,7 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -dateformat@^1.0.11, dateformat@^1.0.7-1.2.3: +dateformat@^1.0.11: version "1.0.12" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" dependencies: @@ -1302,7 +1315,7 @@ debug-fabulous@0.0.X: lazy-debug-legacy "0.0.X" object-assign "4.1.0" -debug@2.2.0, debug@~2.2.0: +debug@2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" dependencies: @@ -1328,6 +1341,12 @@ decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + dependencies: + mimic-response "^1.0.0" + decompress-zip@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/decompress-zip/-/decompress-zip-0.3.0.tgz#ae3bcb7e34c65879adfe77e19c30f86602b4bdb0" @@ -1340,17 +1359,17 @@ decompress-zip@0.3.0: readable-stream "^1.1.8" touch "0.0.3" -deep-extend@~0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" deep-is@~0.1.2, deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" -deepmerge@~0.2.7: - version "0.2.10" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-0.2.10.tgz#8906bf9e525a4fbf1b203b2afcb4640249821219" +deepmerge@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.1.1.tgz#e862b4e45ea0555072bf51e7fd0d9845170ae768" default-compare@^1.0.0: version "1.0.0" @@ -1411,14 +1430,22 @@ delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + denodeify@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631" -depd@1.1.1, depd@~1.1.1: +depd@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" +depd@~1.1.1, depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + deprecated@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/deprecated/-/deprecated-0.0.1.tgz#f9c9af5464afa1e7a971458a8bdef2aa94d5bb19" @@ -1427,23 +1454,17 @@ destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" -detect-file@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-0.1.0.tgz#4935dedfd9488648e006b0129566e9386711ea63" - dependencies: - fs-exists-sync "^0.1.0" - detect-file@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" -detect-indent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-2.0.0.tgz#720ff51e4d97b76884f6bf57292348b13dfde939" - dependencies: - get-stdin "^3.0.0" - minimist "^1.1.0" - repeating "^1.1.0" +detect-indent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + +detect-libc@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" detect-newline@2.X: version "2.1.0" @@ -1454,25 +1475,25 @@ diff@1.4.0: resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" diff@^3.2.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c" + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" doctrine@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63" + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" dependencies: esutils "^2.0.2" - isarray "^1.0.0" documentdb@^1.5.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/documentdb/-/documentdb-1.14.1.tgz#1a4716c0b38a40daf375dc9a4b2a2beb4e26294a" + version "1.14.5" + resolved "https://registry.yarnpkg.com/documentdb/-/documentdb-1.14.5.tgz#356851f0aa5e7f18ae0ed202de0dd13b05b3f762" dependencies: big-integer "^1.6.25" binary-search-bounds "2.0.3" int64-buffer "^0.1.9" priorityqueuejs "1.0.0" semaphore "1.0.5" + tunnel "0.0.5" underscore "1.8.3" dom-serializer@0, dom-serializer@~0.1.0: @@ -1491,8 +1512,8 @@ domelementtype@~1.1.1: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" domhandler@^2.3.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259" + version "2.4.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" dependencies: domelementtype "1" @@ -1504,8 +1525,8 @@ domutils@1.5.1: domelementtype "1" domutils@^1.5.1: - version "1.6.2" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.6.2.tgz#1958cc0b4c9426e9ed367fb1c8e854891b0fa3ff" + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" dependencies: dom-serializer "0" domelementtype "1" @@ -1521,8 +1542,8 @@ duplexer@~0.1.1: resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" duplexify@^3.2.0: - version "3.5.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.1.tgz#4e1516be68838bc90a49994f0b39a6e5960befcd" + version "3.6.0" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.0.tgz#592903f5d80b38d037220541264d69a198fb3410" dependencies: end-of-stream "^1.0.0" inherits "^2.0.1" @@ -1530,17 +1551,28 @@ duplexify@^3.2.0: stream-shift "^1.0.0" each-props@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/each-props/-/each-props-1.3.1.tgz#fc138f51e3a2774286d4858e02d6e7de462de158" + version "1.3.2" + resolved "https://registry.yarnpkg.com/each-props/-/each-props-1.3.2.tgz#ea45a414d16dd5cfa419b1a81720d5ca06892333" dependencies: is-plain-object "^2.0.1" object.defaults "^1.1.0" ecc-jsbn@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" dependencies: jsbn "~0.1.0" + safer-buffer "^2.1.0" + +editorconfig@^0.13.2: + version "0.13.3" + resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.13.3.tgz#e5219e587951d60958fd94ea9a9a008cdeff1b34" + dependencies: + bluebird "^3.0.5" + commander "^2.9.0" + lru-cache "^3.2.0" + semver "^5.1.0" + sigmund "^1.0.1" editorconfig@^0.15.0: version "0.15.0" @@ -1579,16 +1611,16 @@ electron-mksnapshot@~1.7.0: extract-zip "^1.6.5" electron-to-chromium@^1.2.7: - version "1.3.27" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz#78ecb8a399066187bb374eede35d9c70565a803d" + version "1.3.56" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.56.tgz#aad1420d23e9dd8cd2fc2bc53f4928adcf85f02f" -encodeurl@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.0.tgz#7a90d833efda6cfa6eac0f4949dbb0fad3a63206" + version "1.4.1" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" dependencies: once "^1.4.0" @@ -1607,19 +1639,20 @@ env-paths@^1.0.0: resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-1.0.0.tgz#4168133b42bb05c38a35b1ae4397c8298ab369e0" error-ex@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" dependencies: is-arrayish "^0.2.1" es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: - version "0.10.35" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.35.tgz#18ee858ce6a3c45c7d79e91c15fcca9ec568494f" + version "0.10.45" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.45.tgz#0bfdf7b473da5919d5adf3bd25ceb754fccc3653" dependencies: - es6-iterator "~2.0.1" + es6-iterator "~2.0.3" es6-symbol "~3.1.1" + next-tick "1" -es6-iterator@^2.0.1, es6-iterator@~2.0.1: +es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" dependencies: @@ -1682,7 +1715,7 @@ escape-string-regexp@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz#4dbc2fe674e71949caf3fb2695ce7f2dc1d9a8d1" -escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.3, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.3, 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" @@ -1758,10 +1791,10 @@ eslint@^3.0.0, eslint@^3.4.0: user-home "^2.0.0" espree@^3.4.0: - version "3.5.2" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.2.tgz#756ada8b979e9dcfcdb30aad8d1a9304a905e1ca" + version "3.5.4" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" dependencies: - acorn "^5.2.1" + acorn "^5.5.0" acorn-jsx "^3.0.0" esprima@2.5.x: @@ -1777,21 +1810,20 @@ esprima@^1.2.2: resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.2.5.tgz#0993502feaf668138325756f30f9a51feeec11e9" esprima@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" esquery@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" + version "1.0.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" dependencies: estraverse "^4.0.0" esrecurse@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163" + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" dependencies: estraverse "^4.1.0" - object-assign "^4.0.1" estraverse@^1.9.1: version "1.9.3" @@ -1818,7 +1850,7 @@ event-emitter@~0.3.5: event-stream@^3.1.7, event-stream@^3.3.1, event-stream@^3.3.4, event-stream@~3.3.4: version "3.3.4" - resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" + resolved "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" dependencies: duplexer "~0.1.1" from "~0" @@ -1868,11 +1900,9 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" -expand-tilde@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-1.2.2.tgz#0b81eba897e5a3d31d1c3d102f8f01441e559449" - dependencies: - os-homedir "^1.0.1" +expand-template@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-1.1.1.tgz#981f188c0c3a87d2e28f559bc541426ff94f21dd" expand-tilde@^2.0.0, expand-tilde@^2.0.2: version "2.0.2" @@ -1881,10 +1911,10 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: homedir-polyfill "^1.0.1" express@^4.13.1: - version "4.16.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c" + version "4.16.3" + resolved "https://registry.yarnpkg.com/express/-/express-4.16.3.tgz#6af8a502350db3246ecc4becf6b5a34d22f7ed53" dependencies: - accepts "~1.3.4" + accepts "~1.3.5" array-flatten "1.1.1" body-parser "1.18.2" content-disposition "0.5.2" @@ -1892,26 +1922,26 @@ express@^4.13.1: cookie "0.3.1" cookie-signature "1.0.6" debug "2.6.9" - depd "~1.1.1" - encodeurl "~1.0.1" + depd "~1.1.2" + encodeurl "~1.0.2" escape-html "~1.0.3" etag "~1.8.1" - finalhandler "1.1.0" + finalhandler "1.1.1" fresh "0.5.2" merge-descriptors "1.0.1" methods "~1.1.2" on-finished "~2.3.0" parseurl "~1.3.2" path-to-regexp "0.1.7" - proxy-addr "~2.0.2" + proxy-addr "~2.0.3" qs "6.5.1" range-parser "~1.2.0" safe-buffer "5.1.1" - send "0.16.1" - serve-static "1.13.1" + send "0.16.2" + serve-static "1.13.2" setprototypeof "1.1.0" - statuses "~1.3.1" - type-is "~1.6.15" + statuses "~1.4.0" + type-is "~1.6.16" utils-merge "1.0.1" vary "~1.1.2" @@ -1935,8 +1965,8 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: is-extendable "^1.0.1" extend@^3.0.0, extend@~3.0.0, extend@~3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" extend@~1.2.1: version "1.2.1" @@ -1968,26 +1998,23 @@ extract-opts@^2.2.0: typechecker "~2.0.1" extract-zip@^1.6.5: - version "1.6.6" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.6.tgz#1290ede8d20d0872b429fd3f351ca128ec5ef85c" + version "1.6.7" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9" dependencies: - concat-stream "1.6.0" + concat-stream "1.6.2" debug "2.6.9" - mkdirp "0.5.0" + mkdirp "0.5.1" yauzl "2.4.1" -extsprintf@1.3.0, extsprintf@^1.2.0: +extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" -fancy-log@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.0.tgz#45be17d02bb9917d60ccffd4995c999e6c8c9948" - dependencies: - chalk "^1.1.1" - time-stamp "^1.0.0" +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" -fancy-log@^1.3.2: +fancy-log@1.3.2, fancy-log@^1.1.0, fancy-log@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.2.tgz#f41125e3d84f2e7d89a43d06d958c8f78be16be1" dependencies: @@ -1996,8 +2023,8 @@ fancy-log@^1.3.2: time-stamp "^1.0.0" fast-deep-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" + version "1.1.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" fast-json-stable-stringify@^2.0.0: version "2.0.0" @@ -2021,6 +2048,12 @@ fd-slicer@~1.0.1: dependencies: pend "~1.2.0" +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + dependencies: + pend "~1.2.0" + figures@^1.3.5: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" @@ -2036,8 +2069,8 @@ file-entry-cache@^2.0.0: object-assign "^4.0.1" filename-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775" + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" fileset@0.2.x: version "0.2.1" @@ -2047,12 +2080,12 @@ fileset@0.2.x: minimatch "2.x" fill-range@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + version "2.2.4" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" dependencies: is-number "^2.1.0" isobject "^2.0.0" - randomatic "^1.1.3" + randomatic "^3.0.0" repeat-element "^1.1.2" repeat-string "^1.5.2" @@ -2065,16 +2098,16 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" -finalhandler@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" +finalhandler@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" dependencies: debug "2.6.9" - encodeurl "~1.0.1" + encodeurl "~1.0.2" escape-html "~1.0.3" on-finished "~2.3.0" parseurl "~1.3.2" - statuses "~1.3.1" + statuses "~1.4.0" unpipe "~1.0.0" find-index@^0.1.1: @@ -2098,15 +2131,6 @@ find-up@^2.1.0: dependencies: locate-path "^2.0.0" -findup-sync@^0.4.2: - version "0.4.3" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.4.3.tgz#40043929e7bc60adf0b7f4827c4c6e75a0deca12" - dependencies: - detect-file "^0.1.0" - is-glob "^2.0.1" - micromatch "^2.3.7" - resolve-dir "^0.1.0" - findup-sync@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" @@ -2130,10 +2154,6 @@ first-chunk-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e" -flagged-respawn@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-0.3.2.tgz#ff191eddcd7088a675b2610fffc976be9b8074b5" - flagged-respawn@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.0.tgz#4e79ae9b2eb38bf86b3bb56bf3e0a56aa5fcabd7" @@ -2151,19 +2171,15 @@ flatten@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" -for-in@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.5.tgz#007374e2b6d5c67420a1479bdb75a04872b738c4" - for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" -for-own@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072" +for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" dependencies: - for-in "^0.1.5" + for-in "^1.0.1" for-own@^1.0.0: version "1.0.0" @@ -2204,11 +2220,11 @@ form-data@~2.1.1: mime-types "^2.1.12" form-data@~2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf" + version "2.3.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" dependencies: asynckit "^0.4.0" - combined-stream "^1.0.5" + combined-stream "1.0.6" mime-types "^2.1.12" formatio@1.1.1: @@ -2235,9 +2251,9 @@ from@~0: version "0.1.7" resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" -fs-exists-sync@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" fs-extra@0.26.7, fs-extra@^0.26.5: version "0.26.7" @@ -2268,10 +2284,23 @@ fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" -function-bind@^1.0.2: +function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + gaze@^0.5.1: version "0.5.2" resolved "https://registry.yarnpkg.com/gaze/-/gaze-0.5.2.tgz#40b709537d24d1d45767db5a908689dfe69ac44f" @@ -2293,12 +2322,8 @@ generate-object-property@^1.1.0: is-property "^1.0.0" get-caller-file@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" - -get-stdin@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-3.0.2.tgz#c1ced24b9039b38ded85bdf161e57713b6dd4abe" + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" get-stdin@^4.0.1: version "4.0.1" @@ -2324,6 +2349,10 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + github-releases@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/github-releases/-/github-releases-0.4.1.tgz#4a13bdf85c4161344271db3d81db08e7379102ff" @@ -2444,13 +2473,6 @@ glob@~3.1.21: inherits "1" minimatch "~0.2.11" -global-modules@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-0.2.3.tgz#ea5a3bed42c6d6ce995a4f8a1269b5dae223828d" - dependencies: - global-prefix "^0.1.4" - is-windows "^0.2.0" - global-modules@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" @@ -2459,15 +2481,6 @@ global-modules@^1.0.0: is-windows "^1.0.1" resolve-dir "^1.0.0" -global-prefix@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-0.1.5.tgz#8d3bc6b8da3ca8112a160d8d496ff0462bfef78f" - dependencies: - homedir-polyfill "^1.0.0" - ini "^1.3.4" - is-windows "^0.2.0" - which "^1.2.12" - global-prefix@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" @@ -2502,19 +2515,19 @@ globule@~0.1.0: minimatch "~0.2.11" glogg@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.0.tgz#7fe0f199f57ac906cf512feead8f90ee4a284fc5" + version "1.0.1" + resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.1.tgz#dcf758e44789cc3f3d32c1f3562a3676e6a34810" dependencies: sparkles "^1.0.0" gm@^1.14.2: - version "1.23.0" - resolved "https://registry.yarnpkg.com/gm/-/gm-1.23.0.tgz#80a2fe9cbf131515024846444658461269f52661" + version "1.23.1" + resolved "https://registry.yarnpkg.com/gm/-/gm-1.23.1.tgz#2edeeb958084d0f8ea7988e5d995b1c7dfc14777" dependencies: array-parallel "~0.1.3" array-series "~0.1.5" cross-spawn "^4.0.0" - debug "~2.2.0" + debug "^3.1.0" graceful-fs@4.1.11, graceful-fs@4.X, graceful-fs@^4.0.0, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9: version "4.1.11" @@ -2619,12 +2632,13 @@ gulp-concat@^2.6.0: vinyl "^2.0.0" gulp-cssnano@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/gulp-cssnano/-/gulp-cssnano-2.1.2.tgz#e08a09771ec5454a549f1a005bdd256cb8e5e0a3" + version "2.1.3" + resolved "https://registry.yarnpkg.com/gulp-cssnano/-/gulp-cssnano-2.1.3.tgz#02007e2817af09b3688482b430ad7db807aebf72" dependencies: + buffer-from "^1.0.0" cssnano "^3.0.0" - gulp-util "^3.0.6" object-assign "^4.0.1" + plugin-error "^1.0.1" vinyl-sourcemaps-apply "^0.2.1" gulp-eslint@^3.0.1: @@ -2652,18 +2666,18 @@ gulp-filter@^4.0.0: streamfilter "^1.0.5" gulp-flatmap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gulp-flatmap/-/gulp-flatmap-1.0.0.tgz#e634e03cffb263aebacfdc22dd8ce2f3d76ffe97" + version "1.0.2" + resolved "https://registry.yarnpkg.com/gulp-flatmap/-/gulp-flatmap-1.0.2.tgz#b515ae6081d66af99daf56c612e2d92502720133" dependencies: - gulp-util "~2.2.14" - through2 "~0.6.3" + plugin-error "0.1.2" + through2 "2.0.3" gulp-gm@~0.0.3: - version "0.0.8" - resolved "https://registry.yarnpkg.com/gulp-gm/-/gulp-gm-0.0.8.tgz#5fb69a51e6cbb449ccc3043479a691247f5db268" + version "0.0.9" + resolved "https://registry.yarnpkg.com/gulp-gm/-/gulp-gm-0.0.9.tgz#dbd74a812eca5ba28c0b74e8d2f729bde9844978" dependencies: gm "^1.14.2" - gulp-util "^2.2.14" + plugin-error "^1.0.1" through2 "^0.4.1" gulp-image-resize@^0.10.0: @@ -2676,14 +2690,14 @@ gulp-image-resize@^0.10.0: through2 "~0.4.1" gulp-json-editor@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/gulp-json-editor/-/gulp-json-editor-2.2.1.tgz#7c4dd7477e8d06dc5dc49c0b81e745cdb04f97bb" + version "2.4.2" + resolved "https://registry.yarnpkg.com/gulp-json-editor/-/gulp-json-editor-2.4.2.tgz#6274e612e9f16a2d9d10aea50b64df7e113f87d7" dependencies: - deepmerge "~0.2.7" - detect-indent "^2.0.0" - gulp-util "~3.0.0" - js-beautify "~1.5.4" - through2 "~0.5.0" + deepmerge "^2.1.1" + detect-indent "^5.0.0" + js-beautify "^1.7.5" + plugin-error "^1.0.1" + through2 "^2.0.3" gulp-mocha@^2.1.3: version "2.2.0" @@ -2715,10 +2729,14 @@ gulp-remote-src@^0.4.0: through2 "~2.0.3" vinyl "~2.0.1" -gulp-rename@1.2.2, gulp-rename@^1.2.0: +gulp-rename@1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/gulp-rename/-/gulp-rename-1.2.2.tgz#3ad4428763f05e2764dec1c67d868db275687817" +gulp-rename@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/gulp-rename/-/gulp-rename-1.4.0.tgz#de1c718e7c4095ae861f7296ef4f3248648240bd" + gulp-replace@^0.5.4: version "0.5.4" resolved "https://registry.yarnpkg.com/gulp-replace/-/gulp-replace-0.5.4.tgz#69a67914bbd13c562bff14f504a403796aa0daa9" @@ -2747,8 +2765,8 @@ gulp-sourcemaps@1.6.0: vinyl "^1.0.0" gulp-sourcemaps@^1.11.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/gulp-sourcemaps/-/gulp-sourcemaps-1.12.0.tgz#786f97c94a0f968492465d70558e04242c679598" + version "1.12.1" + resolved "https://registry.yarnpkg.com/gulp-sourcemaps/-/gulp-sourcemaps-1.12.1.tgz#b437d1f3d980cf26e81184823718ce15ae6597b6" dependencies: "@gulp-sourcemaps/map-sources" "1.X" acorn "4.X" @@ -2757,7 +2775,7 @@ gulp-sourcemaps@^1.11.0: debug-fabulous "0.0.X" detect-newline "2.X" graceful-fs "4.X" - source-map "0.X" + source-map "~0.6.0" strip-bom "2.X" through2 "2.X" vinyl "1.X" @@ -2780,21 +2798,25 @@ gulp-tsb@2.0.5: vinyl "^0.4.3" gulp-tslint@^8.1.2: - version "8.1.2" - resolved "https://registry.yarnpkg.com/gulp-tslint/-/gulp-tslint-8.1.2.tgz#e0f43194b473d7e76bb45a58fe8c60e7dfe3beb2" + version "8.1.3" + resolved "https://registry.yarnpkg.com/gulp-tslint/-/gulp-tslint-8.1.3.tgz#a89ed144038ae861ee7bfea9528272d126a93da1" dependencies: - gulp-util "~3.0.8" + "@types/fancy-log" "1.3.0" + chalk "2.3.1" + fancy-log "1.3.2" map-stream "~0.0.7" + plugin-error "1.0.1" through "~2.3.8" gulp-uglify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/gulp-uglify/-/gulp-uglify-3.0.0.tgz#0df0331d72a0d302e3e37e109485dddf33c6d1ca" + version "3.0.1" + resolved "https://registry.yarnpkg.com/gulp-uglify/-/gulp-uglify-3.0.1.tgz#8d3eee466521bea6b10fd75dff72adf8b7ea2d97" dependencies: gulplog "^1.0.0" has-gulplog "^0.1.0" lodash "^4.13.1" make-error-cause "^1.1.1" + safe-buffer "^5.1.2" through2 "^2.0.0" uglify-js "^3.0.5" vinyl-sourcemaps-apply "^0.2.0" @@ -2822,20 +2844,7 @@ gulp-util@3.0.7: through2 "^2.0.0" vinyl "^0.5.0" -gulp-util@^2.2.14, gulp-util@~2.2.14: - version "2.2.20" - resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-2.2.20.tgz#d7146e5728910bd8f047a6b0b1e549bc22dbd64c" - dependencies: - chalk "^0.5.0" - dateformat "^1.0.7-1.2.3" - lodash._reinterpolate "^2.4.1" - lodash.template "^2.4.1" - minimist "^0.2.0" - multipipe "^0.1.0" - through2 "^0.5.0" - vinyl "^0.2.1" - -gulp-util@^3.0.0, gulp-util@^3.0.1, gulp-util@^3.0.6, gulp-util@^3.0.7, gulp-util@^3.0.8, gulp-util@~3.0.0, gulp-util@~3.0.8: +gulp-util@^3.0.0, gulp-util@^3.0.1, gulp-util@^3.0.6, gulp-util@^3.0.7, gulp-util@^3.0.8: version "3.0.8" resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" dependencies: @@ -2935,12 +2944,6 @@ har-validator@~5.0.3: ajv "^5.1.0" har-schema "^2.0.0" -has-ansi@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-0.1.0.tgz#84f265aae8c0e6a88a12d7022894b7568894c62e" - dependencies: - ansi-regex "^0.2.0" - has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" @@ -2951,9 +2954,9 @@ has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" -has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" has-gulplog@^0.1.0: version "0.1.0" @@ -2961,6 +2964,10 @@ has-gulplog@^0.1.0: dependencies: sparkles "^1.0.0" +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" @@ -2989,10 +2996,10 @@ has-values@^1.0.0: kind-of "^4.0.0" has@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" dependencies: - function-bind "^1.0.2" + function-bind "^1.1.1" hawk@~1.0.0: version "1.0.0" @@ -3012,15 +3019,6 @@ hawk@~3.1.3: hoek "2.x.x" sntp "1.x.x" -hawk@~6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" - dependencies: - boom "4.x.x" - cryptiles "3.x.x" - hoek "4.x.x" - sntp "2.x.x" - hoek@0.9.x: version "0.9.1" resolved "https://registry.yarnpkg.com/hoek/-/hoek-0.9.1.tgz#3d322462badf07716ea7eb85baf88079cddce505" @@ -3029,19 +3027,15 @@ hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" -hoek@4.x.x: - version "4.2.0" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" - -homedir-polyfill@^1.0.0, homedir-polyfill@^1.0.1: +homedir-polyfill@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" dependencies: parse-passwd "^1.0.0" hosted-git-info@^2.1.4: - version "2.5.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" + version "2.7.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" html-comment-regex@^1.1.0: version "1.1.1" @@ -3062,7 +3056,7 @@ html-comment-regex@^1.1.0: inherits "^2.0.1" readable-stream "^2.0.2" -http-errors@1.6.2, http-errors@~1.6.2: +http-errors@1.6.2: version "1.6.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" dependencies: @@ -3071,6 +3065,15 @@ http-errors@1.6.2, http-errors@~1.6.2: setprototypeof "1.0.3" statuses ">= 1.3.1 < 2" +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + http-proxy-agent@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" @@ -3118,13 +3121,19 @@ husky@^0.13.1: is-ci "^1.0.9" normalize-path "^1.0.0" -iconv-lite@0.4.19, iconv-lite@^0.4.19: +iconv-lite@0.4.19: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" +iconv-lite@^0.4.19: + version "0.4.23" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" + dependencies: + safer-buffer ">= 2.1.2 < 3" + ignore@^3.2.0: - version "3.3.7" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" + version "3.3.10" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" imurmurhash@^0.1.4: version "0.1.4" @@ -3155,13 +3164,9 @@ inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, i version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - ini@^1.3.4, ini@~1.3.0: - version "1.3.4" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" innosetup-compiler@^5.5.60: version "5.5.62" @@ -3186,14 +3191,10 @@ inquirer@^0.12.0: through "^2.3.6" int64-buffer@^0.1.9: - version "0.1.9" - resolved "https://registry.yarnpkg.com/int64-buffer/-/int64-buffer-0.1.9.tgz#9e039da043b24f78b196b283e04653ef5e990f61" + version "0.1.10" + resolved "https://registry.yarnpkg.com/int64-buffer/-/int64-buffer-0.1.10.tgz#277b228a87d95ad777d07c13832022406a473423" -interpret@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.4.tgz#820cdd588b868ffb191a809506d6c9c8f212b1b0" - -interpret@^1.1.0: +interpret@^1.0.0, interpret@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" @@ -3201,9 +3202,9 @@ invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" -ipaddr.js@1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.5.2.tgz#d4b505bde9946987ccf0fc58d9010ff9607e3fa0" +ipaddr.js@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e" irregular-plurals@^1.0.0: version "1.4.0" @@ -3213,13 +3214,6 @@ is-absolute-url@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" -is-absolute@^0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.2.6.tgz#20de69f3db942ef2d87b9c2da36f172235b1b5eb" - dependencies: - is-relative "^0.2.1" - is-windows "^0.2.0" - is-absolute@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" @@ -3249,10 +3243,6 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" -is-buffer@^1.0.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b" - is-buffer@^1.1.5, is-buffer@~1.1.1: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -3264,8 +3254,8 @@ is-builtin-module@^1.0.0: builtin-modules "^1.0.0" is-ci@^1.0.9: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5" dependencies: ci-info "^1.0.0" @@ -3298,8 +3288,8 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: kind-of "^6.0.2" is-dotfile@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" is-equal-shallow@^0.1.3: version "0.1.3" @@ -3353,16 +3343,21 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" +is-my-ip-valid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824" + is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.4: - version "2.16.1" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz#5a846777e2c2620d1e69104e5d3a03b1f6088f11" + version "2.18.0" + resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.18.0.tgz#47001d4bad2e9195ee964c7ed42b5f12d3d5ad6b" dependencies: generate-function "^2.0.0" generate-object-property "^1.1.0" + is-my-ip-valid "^1.0.0" jsonpointer "^4.0.0" xtend "^4.0.0" -is-number@^2.0.2, is-number@^2.1.0: +is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" dependencies: @@ -3378,25 +3373,19 @@ is-number@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" -is-odd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-2.0.0.tgz#7646624671fd7ea558ccd9a2795182f2958f1b24" - dependencies: - is-number "^4.0.0" - is-path-cwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" is-path-in-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" dependencies: is-path-inside "^1.0.0" is-path-inside@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" dependencies: path-is-inside "^1.0.1" @@ -3422,12 +3411,6 @@ is-property@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" -is-relative@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.2.1.tgz#d27f4c7d516d175fb610db84bbeef23c3bc97aa5" - dependencies: - is-unc-path "^0.1.1" - is-relative@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" @@ -3435,10 +3418,8 @@ is-relative@^1.0.0: is-unc-path "^1.0.0" is-resolvable@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" - dependencies: - tryit "^1.0.1" + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" @@ -3454,12 +3435,6 @@ is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" -is-unc-path@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-0.1.2.tgz#6ab053a72573c10250ff416a3814c35178af39b9" - dependencies: - unc-path-regex "^0.1.0" - is-unc-path@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" @@ -3474,10 +3449,6 @@ is-valid-glob@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-0.3.0.tgz#d4b55c69f51886f9b65c70d6c2622d37e29f48fe" -is-windows@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c" - 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" @@ -3490,7 +3461,7 @@ isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: +isarray@1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -3577,14 +3548,15 @@ jquery@>=1.8.0: resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.3.1.tgz#958ce29e81c9790f31be7792df5d4d95fc57fbca" js-base64@^2.1.9: - version "2.3.2" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.3.2.tgz#a79a923666372b580f8e27f51845c6f7e8fbfbaf" + version "2.4.8" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.8.tgz#57a9b130888f956834aa40c5b165ba59c758f033" -js-beautify@~1.5.4: - version "1.5.10" - resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.5.10.tgz#4d95371702699344a516ca26bf59f0a27bb75719" +js-beautify@^1.7.5: + version "1.7.5" + resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.7.5.tgz#69d9651ef60dbb649f65527b53674950138a7919" dependencies: config-chain "~1.1.5" + editorconfig "^0.13.2" mkdirp "~0.5.0" nopt "~3.0.1" @@ -3600,8 +3572,8 @@ js-yaml@3.6.1: esprima "^2.6.0" js-yaml@3.x, js-yaml@^3.5.1, js-yaml@^3.7.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" + version "3.12.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -3693,22 +3665,17 @@ jsprim@^1.2.2: verror "1.10.0" keytar@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/keytar/-/keytar-4.0.5.tgz#cc1255ef06eeea1a12440b773f7d4a375b048729" + version "4.2.1" + resolved "https://registry.yarnpkg.com/keytar/-/keytar-4.2.1.tgz#8a06a6577fdf6373e0aa6b112277e63dec77fd12" dependencies: - nan "2.5.1" + nan "2.8.0" + prebuild-install "^2.4.1" kind-of@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-1.1.0.tgz#140a3d2d41a36d2efcfa9377b62c24f8495a5c44" -kind-of@^3.0.2: - version "3.0.4" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.0.4.tgz#7b8ecf18a4e17f8269d73b501c9f232c96887a74" - dependencies: - is-buffer "^1.0.2" - -kind-of@^3.0.3, kind-of@^3.1.0, kind-of@^3.2.0: +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" dependencies: @@ -3776,21 +3743,7 @@ levn@~0.2.5: prelude-ls "~1.1.0" type-check "~0.3.1" -liftoff@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.3.0.tgz#a98f2ff67183d8ba7cfaca10548bd7ff0550b385" - dependencies: - extend "^3.0.0" - findup-sync "^0.4.2" - fined "^1.0.1" - flagged-respawn "^0.3.2" - lodash.isplainobject "^4.0.4" - lodash.isstring "^4.0.1" - lodash.mapvalues "^4.4.0" - rechoir "^0.6.2" - resolve "^1.1.7" - -liftoff@^2.5.0: +liftoff@^2.1.0, liftoff@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.5.0.tgz#2009291bb31cea861bbf10a7c15a28caf75c31ec" dependencies: @@ -3838,36 +3791,14 @@ lodash._basevalues@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" -lodash._escapehtmlchar@~2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/lodash._escapehtmlchar/-/lodash._escapehtmlchar-2.4.1.tgz#df67c3bb6b7e8e1e831ab48bfa0795b92afe899d" - dependencies: - lodash._htmlescapes "~2.4.1" - -lodash._escapestringchar@~2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/lodash._escapestringchar/-/lodash._escapestringchar-2.4.1.tgz#ecfe22618a2ade50bfeea43937e51df66f0edb72" - lodash._getnative@^3.0.0: version "3.9.1" resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" -lodash._htmlescapes@~2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/lodash._htmlescapes/-/lodash._htmlescapes-2.4.1.tgz#32d14bf0844b6de6f8b62a051b4f67c228b624cb" - lodash._isiterateecall@^3.0.0: version "3.0.9" resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" -lodash._isnative@~2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/lodash._isnative/-/lodash._isnative-2.4.1.tgz#3ea6404b784a7be836c7b57580e1cdf79b14832c" - -lodash._objecttypes@~2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz#7c0b7f69d98a1f76529f890b0cdb1b4dfec11c11" - lodash._reescape@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a" @@ -3876,52 +3807,20 @@ lodash._reevaluate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed" -lodash._reinterpolate@^2.4.1, lodash._reinterpolate@~2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-2.4.1.tgz#4f1227aa5a8711fc632f5b07a1f4607aab8b3222" - lodash._reinterpolate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" -lodash._reunescapedhtml@~2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/lodash._reunescapedhtml/-/lodash._reunescapedhtml-2.4.1.tgz#747c4fc40103eb3bb8a0976e571f7a2659e93ba7" - dependencies: - lodash._htmlescapes "~2.4.1" - lodash.keys "~2.4.1" - lodash._root@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" -lodash._shimkeys@~2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz#6e9cc9666ff081f0b5a6c978b83e242e6949d203" - dependencies: - lodash._objecttypes "~2.4.1" - -lodash.defaults@~2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-2.4.1.tgz#a7e8885f05e68851144b6e12a8f3678026bc4c54" - dependencies: - lodash._objecttypes "~2.4.1" - lodash.keys "~2.4.1" - lodash.escape@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" dependencies: lodash._root "^3.0.0" -lodash.escape@~2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-2.4.1.tgz#2ce12c5e084db0a57dda5e5d1eeeb9f5d175a3b4" - dependencies: - lodash._escapehtmlchar "~2.4.1" - lodash._reunescapedhtml "~2.4.1" - lodash.keys "~2.4.1" - lodash.isarguments@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" @@ -3938,20 +3837,6 @@ lodash.isinteger@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" -lodash.isobject@~2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-2.4.1.tgz#5a2e47fe69953f1ee631a7eba1fe64d2d06558f5" - dependencies: - lodash._objecttypes "~2.4.1" - -lodash.isplainobject@^4.0.4: - version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - -lodash.isstring@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" - lodash.isundefined@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz#23ef3d9535565203a66cefd5b830f848911afb48" @@ -3964,18 +3849,6 @@ lodash.keys@^3.0.0: lodash.isarguments "^3.0.0" lodash.isarray "^3.0.0" -lodash.keys@~2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-2.4.1.tgz#48dea46df8ff7632b10d706b8acb26591e2b3727" - dependencies: - lodash._isnative "~2.4.1" - lodash._shimkeys "~2.4.1" - lodash.isobject "~2.4.1" - -lodash.mapvalues@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" - lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -3984,18 +3857,6 @@ lodash.restparam@^3.0.0: version "3.6.1" resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" -lodash.template@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-2.4.1.tgz#9e611007edf629129a974ab3c48b817b3e1cf20d" - dependencies: - lodash._escapestringchar "~2.4.1" - lodash._reinterpolate "~2.4.1" - lodash.defaults "~2.4.1" - lodash.escape "~2.4.1" - lodash.keys "~2.4.1" - lodash.templatesettings "~2.4.1" - lodash.values "~2.4.1" - lodash.template@^3.0.0: version "3.6.2" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" @@ -4017,32 +3878,15 @@ lodash.templatesettings@^3.0.0: lodash._reinterpolate "^3.0.0" lodash.escape "^3.0.0" -lodash.templatesettings@~2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz#ea76c75d11eb86d4dbe89a83893bb861929ac699" - dependencies: - lodash._reinterpolate "~2.4.1" - lodash.escape "~2.4.1" - lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" -lodash.values@~2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/lodash.values/-/lodash.values-2.4.1.tgz#abf514436b3cb705001627978cbcf30b1280eea4" - dependencies: - lodash.keys "~2.4.1" - lodash@^3.5.0: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" -lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.3.0: - version "4.17.4" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" - -lodash@^4.17.10: +lodash@^4.0.0, lodash@^4.13.1, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.3.0: version "4.17.10" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" @@ -4077,24 +3921,19 @@ lru-cache@2: version "2.7.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" -lru-cache@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" +lru-cache@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-3.2.0.tgz#71789b3b7f5399bec8565dda38aa30d2a097efee" dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" + pseudomap "^1.0.1" -lru-cache@^4.1.1: +lru-cache@^4.0.1, lru-cache@^4.1.1: version "4.1.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" dependencies: pseudomap "^1.0.2" yallist "^2.1.2" -macaddress@^0.2.8: - version "0.2.8" - resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" - make-error-cause@^1.1.1: version "1.2.2" resolved "https://registry.yarnpkg.com/make-error-cause/-/make-error-cause-1.2.2.tgz#df0388fcd0b37816dff0a5fb8108939777dcbc9d" @@ -4102,14 +3941,14 @@ make-error-cause@^1.1.1: make-error "^1.2.0" make-error@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.0.tgz#52ad3a339ccf10ce62b4040b708fe707244b8b96" + version "1.3.4" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.4.tgz#19978ed575f9e9545d2ff8c13e33b5d18a67d535" make-iterator@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.0.tgz#57bef5dc85d23923ba23767324d8e8f8f3d9694b" + version "1.0.1" + resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6" dependencies: - kind-of "^3.1.0" + kind-of "^6.0.2" map-cache@^0.2.0, map-cache@^0.2.2: version "0.2.2" @@ -4134,14 +3973,14 @@ map-visit@^1.0.0: object-visit "^1.0.0" markdown-it@^8.3.1: - version "8.4.0" - resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-8.4.0.tgz#e2400881bf171f7018ed1bd9da441dac8af6306d" + version "8.4.2" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-8.4.2.tgz#386f98998dc15a37722aa7722084f4020bdd9b54" dependencies: argparse "^1.0.7" entities "~1.1.1" linkify-it "^2.0.0" mdurl "^1.0.1" - uc.micro "^1.0.3" + uc.micro "^1.0.5" matchdep@^2.0.0: version "2.0.0" @@ -4156,6 +3995,10 @@ math-expression-evaluator@^1.2.14: version "1.2.17" resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" +math-random@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" + md5@^2.1.0: version "2.2.1" resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9" @@ -4243,21 +4086,21 @@ micromatch@^3.0.4: snapdragon "^0.8.1" to-regex "^3.0.2" -mime-db@~1.30.0: - version "1.30.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" +mime-db@~1.35.0: + version "1.35.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.35.0.tgz#0569d657466491283709663ad379a99b90d9ab47" -mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.15, mime-types@~2.1.16, mime-types@~2.1.17, mime-types@~2.1.7: - version "2.1.17" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" +mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.7: + version "2.1.19" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.19.tgz#71e464537a7ef81c15f2db9d97e913fc0ff606f0" dependencies: - mime-db "~1.30.0" + mime-db "~1.35.0" -mime@1.4.1, mime@^1.3.4: +mime@1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" -mime@^1.4.1: +mime@^1.3.4, mime@^1.4.1: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" @@ -4266,8 +4109,12 @@ mime@~1.2.11, mime@~1.2.4, mime@~1.2.9: resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10" mimic-fn@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" minimatch@0.3: version "0.3.0" @@ -4303,10 +4150,6 @@ minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" -minimist@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.2.0.tgz#4dffe525dae2b864c66c2e23c6271d7afdecefce" - minimist@~0.0.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" @@ -4322,12 +4165,6 @@ mkdirp@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" -mkdirp@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.0.tgz#1d73076a6df986cd9344e15e71fcc05a4c9abf12" - dependencies: - minimist "0.0.8" - mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" @@ -4347,8 +4184,8 @@ mksnapshot@^0.3.0: request "^2.79.0" mocha-junit-reporter@^1.13.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/mocha-junit-reporter/-/mocha-junit-reporter-1.17.0.tgz#2e5149ed40fc5d2e3ca71e42db5ab1fec9c6d85c" + version "1.18.0" + resolved "https://registry.yarnpkg.com/mocha-junit-reporter/-/mocha-junit-reporter-1.18.0.tgz#9209a3fba30025ae3ae5e6bfe7f9c5bc3c2e8ee2" dependencies: debug "^2.2.0" md5 "^2.1.0" @@ -4372,8 +4209,8 @@ mocha@^2.0.1, mocha@^2.2.5: to-iso-string "0.0.2" moment@^2.10.2: - version "2.21.0" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.21.0.tgz#2a114b51d2a6ec9e6d83cf803f838a878d8a023a" + version "2.22.2" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.22.2.tgz#3c257f9839fc0e93ff53149632239eb90783ff66" ms@0.7.1: version "0.7.1" @@ -4392,7 +4229,7 @@ multimatch@^2.0.0: arrify "^1.0.0" minimatch "^3.0.0" -multipipe@^0.1.0, multipipe@^0.1.2: +multipipe@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b" dependencies: @@ -4410,36 +4247,23 @@ mute-stream@~0.0.4: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" -nan@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.1.tgz#d5b01691253326a97a2bbee9e61c55d8d60351e2" - -nan@^2.0.0, nan@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45" - -nan@^2.0.9, nan@^2.3.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.4.0.tgz#fb3c59d45fe4effe215f0b890f8adf6eb32d2232" - -nan@^2.1.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46" - -nan@^2.8.0: +nan@2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a" +nan@^2.0.0, nan@^2.0.9, nan@^2.1.0, nan@^2.3.0, nan@^2.6.2, nan@^2.8.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" + nanomatch@^1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.9.tgz#879f7150cb2dab7a471259066c104eee6e0fa7c2" + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" define-property "^2.0.2" extend-shallow "^3.0.2" fragment-cache "^0.2.1" - is-odd "^2.0.0" is-windows "^1.0.2" kind-of "^6.0.2" object.pick "^1.3.0" @@ -4460,8 +4284,8 @@ native-watchdog@0.3.0: resolved "https://registry.yarnpkg.com/native-watchdog/-/native-watchdog-0.3.0.tgz#c7d952ca05e9877f1ff7a3ff80991610b6104bbb" natives@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.0.tgz#e9ff841418a6b2ec7a495e939984f78f163e6e31" + version "1.1.4" + resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.4.tgz#2f0f224fc9a7dd53407c7667c84cf8dbe773de58" natural-compare@^1.4.0: version "1.4.0" @@ -4471,12 +4295,22 @@ negotiator@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" +next-tick@1: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + ng2-charts@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/ng2-charts/-/ng2-charts-1.6.0.tgz#108a2133ff62a8623895240fadbddbea2951f29d" dependencies: chart.js "^2.6.0" +node-abi@^2.2.0: + version "2.4.3" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.4.3.tgz#43666b7b17e57863e572409edbb82115ac7af28b" + dependencies: + semver "^5.4.1" + node-pty@0.7.4: version "0.7.4" resolved "https://registry.yarnpkg.com/node-pty/-/node-pty-0.7.4.tgz#07146b2b40b76e432e57ce6750bda40f0da5c99f" @@ -4499,6 +4333,10 @@ nodegit-promise@~4.0.0: dependencies: asap "~2.0.3" +noop-logger@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" + nopt@3.x, nopt@^3.0.1, nopt@~3.0.1: version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" @@ -4524,16 +4362,12 @@ normalize-path@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" -normalize-path@^2.0.0: +normalize-path@^2.0.0, normalize-path@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" dependencies: remove-trailing-separator "^1.0.1" -normalize-path@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a" - normalize-range@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" @@ -4553,6 +4387,15 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" +npmlog@^4.0.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + nsfw@1.0.16: version "1.0.16" resolved "https://registry.yarnpkg.com/nsfw/-/nsfw-1.0.16.tgz#78ba3e7f513b53d160c221b9018e0baf108614cc" @@ -4590,8 +4433,8 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" "nwmatcher@>= 1.3.4 < 2.0.0": - version "1.4.3" - resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.3.tgz#64348e3b3d80f035b40ac11563d278f8b72db89c" + version "1.4.4" + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.4.tgz#2285631f34a95f0d0395cd900c96ed39b58f346e" oauth-sign@~0.3.0: version "0.3.0" @@ -4648,10 +4491,10 @@ object.map@^1.0.0: make-iterator "^1.0.0" object.omit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.0.tgz#868597333d54e60662940bb458605dd6ae12fe94" + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" dependencies: - for-own "^0.1.3" + for-own "^0.1.4" is-extendable "^0.1.1" object.pick@^1.2.0, object.pick@^1.3.0: @@ -4680,11 +4523,11 @@ once@~1.3.0: onetime@^1.0.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" + resolved "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" oniguruma@^6.0.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/oniguruma/-/oniguruma-6.1.1.tgz#1c7d96e53d116eb881dbe78b8355b4adc8225898" + version "6.2.1" + resolved "https://registry.yarnpkg.com/oniguruma/-/oniguruma-6.2.1.tgz#a50ee69642844ad1d252685aab187171b06ece04" dependencies: nan "^2.0.9" @@ -4765,8 +4608,8 @@ os-tmpdir@^1.0.0, os-tmpdir@~1.0.1: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" osenv@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" dependencies: os-homedir "^1.0.0" os-tmpdir "^1.0.0" @@ -4782,8 +4625,8 @@ p-finally@^1.0.0: resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" p-limit@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c" + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" dependencies: p-try "^1.0.0" @@ -4802,10 +4645,10 @@ p-try@^1.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" parse-filepath@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.1.tgz#159d6155d43904d16c10ef698911da1e91969b73" + version "1.0.2" + resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" dependencies: - is-absolute "^0.2.3" + is-absolute "^1.0.0" map-cache "^0.2.0" path-root "^0.1.1" @@ -4879,8 +4722,8 @@ path-key@^2.0.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" path-parse@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" path-root-regex@^0.1.0: version "0.1.2" @@ -4945,7 +4788,7 @@ plist@^1.1.0: xmlbuilder "4.0.0" xmldom "0.1.x" -plugin-error@^0.1.2: +plugin-error@0.1.2, plugin-error@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-0.1.2.tgz#3b9bb3335ccf00f425e07437e19276967da47ace" dependencies: @@ -4955,6 +4798,15 @@ plugin-error@^0.1.2: arr-union "^2.0.1" extend-shallow "^1.1.2" +plugin-error@1.0.1, plugin-error@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-1.0.1.tgz#77016bd8919d0ac377fdcdd0322328953ca5781c" + dependencies: + ansi-colors "^1.0.1" + arr-diff "^4.0.0" + arr-union "^3.1.0" + extend-shallow "^3.0.2" + plur@^2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/plur/-/plur-2.1.2.tgz#7482452c1a0f508e3e344eaec312c91c29dc655a" @@ -5024,11 +4876,10 @@ postcss-discard-unused@^2.2.1: uniqs "^2.0.0" postcss-filter-plugins@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c" + version "2.0.3" + resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz#82245fdf82337041645e477114d8e593aa18b8ec" dependencies: postcss "^5.0.4" - uniqid "^4.0.0" postcss-merge-idents@^2.1.5: version "2.1.7" @@ -5180,6 +5031,26 @@ postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0 source-map "^0.5.6" supports-color "^3.2.3" +prebuild-install@^2.4.1: + version "2.5.3" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-2.5.3.tgz#9f65f242782d370296353710e9bc843490c19f69" + dependencies: + detect-libc "^1.0.3" + expand-template "^1.0.2" + github-from-package "0.0.0" + minimist "^1.2.0" + mkdirp "^0.5.1" + node-abi "^2.2.0" + noop-logger "^0.1.1" + npmlog "^4.0.1" + os-homedir "^1.0.1" + pump "^2.0.1" + rc "^1.1.6" + simple-get "^2.7.0" + tar-fs "^1.13.0" + tunnel-agent "^0.6.0" + which-pm-runs "^1.0.0" + prelude-ls@~1.1.0, prelude-ls@~1.1.1, prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -5218,7 +5089,11 @@ priorityqueuejs@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/priorityqueuejs/-/priorityqueuejs-1.0.0.tgz#2ee4f23c2560913e08c07ce5ccdd6de3df2c5af8" -process-nextick-args@^1.0.6, process-nextick-args@~1.0.6: +process-nextick-args@^2.0.0, 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" + +process-nextick-args@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" @@ -5243,20 +5118,27 @@ proto-list@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" -proxy-addr@~2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.2.tgz#6571504f47bb988ec8180253f85dd7e14952bdec" +proxy-addr@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" dependencies: forwarded "~0.1.2" - ipaddr.js "1.5.2" + ipaddr.js "1.8.0" -pseudomap@^1.0.2: +pseudomap@^1.0.1, pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" -pump@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.2.tgz#3b3ee6512f94f0e575538c17995f9f16990a5d51" +pump@^1.0.0, pump@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" dependencies: end-of-stream "^1.1.0" once "^1.3.1" @@ -5269,7 +5151,7 @@ q@^1.0.1, q@^1.1.2: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" -qs@6.5.1, qs@~6.5.1: +qs@6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" @@ -5289,6 +5171,10 @@ qs@~6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" +qs@~6.5.1: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + query-string@^4.1.0: version "4.3.4" resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" @@ -5308,12 +5194,13 @@ queue@^3.0.10, queue@^3.1.0: dependencies: inherits "~2.0.0" -randomatic@^1.1.3: - version "1.1.5" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.5.tgz#5e9ef5f2d573c67bd2b8124ae90b5156e457840b" +randomatic@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.0.tgz#36f2ca708e9e567f5ed2ec01949026d50aa10116" dependencies: - is-number "^2.0.2" - kind-of "^3.0.2" + is-number "^4.0.0" + kind-of "^6.0.0" + math-random "^1.0.1" range-parser@~1.2.0: version "1.2.0" @@ -5328,11 +5215,11 @@ raw-body@2.3.2: iconv-lite "0.4.19" unpipe "1.0.0" -rc@^1.1.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.2.tgz#d8ce9cb57e8d64d9c7badd9876c7c34cbe3c7077" +rc@^1.1.2, rc@^1.1.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" dependencies: - deep-extend "~0.4.0" + deep-extend "^0.6.0" ini "~1.3.0" minimist "^1.2.0" strip-json-comments "~2.0.1" @@ -5380,16 +5267,16 @@ readable-stream@^1.1.8, readable-stream@~1.1.9: isarray "0.0.1" string_decoder "~0.10.x" -readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.1.5, readable-stream@^2.2.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" +readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" dependencies: core-util-is "~1.0.0" inherits "~2.0.3" isarray "~1.0.0" - process-nextick-args "~1.0.6" + process-nextick-args "~2.0.0" safe-buffer "~5.1.1" - string_decoder "~1.0.3" + string_decoder "~1.1.1" util-deprecate "~1.0.1" readable-stream@~2.0.0, readable-stream@~2.0.5: @@ -5452,11 +5339,10 @@ reflect-metadata@^0.1.8: resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.12.tgz#311bf0c6b63cd782f228a81abe146a2bfa9c56f2" regex-cache@^0.4.2: - version "0.4.3" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" + version "0.4.4" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" dependencies: is-equal-shallow "^0.1.3" - is-primitive "^2.0.0" regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" @@ -5483,20 +5369,10 @@ repeat-element@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" -repeat-string@^1.5.2: - version "1.5.4" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.5.4.tgz#64ec0c91e0f4b475f90d5b643651e3e6e5b6c2d5" - -repeat-string@^1.6.1: +repeat-string@^1.5.2, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" -repeating@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-1.1.3.tgz#3d4114218877537494f97f77f9785fab810fa4ac" - dependencies: - is-finite "^1.0.0" - repeating@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" @@ -5580,8 +5456,8 @@ request@2.81.0: uuid "^3.0.0" "request@>= 2.44.0 < 3.0.0", request@^2.45.0, request@^2.79.0: - version "2.83.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" + version "2.87.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.87.0.tgz#32f00235cd08d482b4d0d68db93a829c0ed5756e" dependencies: aws-sign2 "~0.7.0" aws4 "^1.6.0" @@ -5591,7 +5467,6 @@ request@2.81.0: forever-agent "~0.6.1" form-data "~2.3.1" har-validator "~5.0.3" - hawk "~6.0.2" http-signature "~1.2.0" is-typedarray "~1.0.0" isstream "~0.1.2" @@ -5601,7 +5476,6 @@ request@2.81.0: performance-now "^2.1.0" qs "~6.5.1" safe-buffer "^5.1.1" - stringstream "~0.0.5" tough-cookie "~2.3.3" tunnel-agent "^0.6.0" uuid "^3.1.0" @@ -5664,13 +5538,6 @@ require-uncached@^1.0.2: caller-path "^0.1.0" resolve-from "^1.0.0" -resolve-dir@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-0.1.1.tgz#b219259a5602fac5c5c496ad894a6e8cc430261e" - dependencies: - expand-tilde "^1.2.2" - global-modules "^0.2.3" - 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" @@ -5682,7 +5549,7 @@ resolve-from@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" -resolve-url@^0.2.1, resolve-url@~0.2.1: +resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" @@ -5690,15 +5557,9 @@ resolve@1.1.x: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.3.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" - dependencies: - path-parse "^1.0.5" - -resolve@^1.4.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.6.0.tgz#0fbd21278b27b4004481c395349e7aba60a9ff5c" +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.3.2, resolve@^1.4.0: + version "1.8.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" dependencies: path-parse "^1.0.5" @@ -5719,13 +5580,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@^2.2.8: - version "2.6.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" - dependencies: - glob "^7.0.5" - -rimraf@^2.4.2: +rimraf@^2.2.8, rimraf@^2.4.2: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: @@ -5751,16 +5606,24 @@ rxjs@5.4.0: dependencies: symbol-observable "^1.0.1" -safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" +safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, 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" + safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" dependencies: ret "~0.1.10" +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + samsam@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.1.2.tgz#bec11fdc83a9fda063401210e40176c3024d1567" @@ -5787,26 +5650,22 @@ semver-greatest-satisfied-range@^1.1.0: dependencies: sver-compat "^1.5.0" -"semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.3.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" +"semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.3.0, semver@^5.4.1: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" semver@4.3.6, semver@^4.1.0, semver@^4.3.4: version "4.3.6" resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" -semver@^5.4.1: - version "5.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" - -send@0.16.1: - version "0.16.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.16.1.tgz#a70e1ca21d1382c11d0d9f6231deb281080d7ab3" +send@0.16.2: + version "0.16.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" dependencies: debug "2.6.9" - depd "~1.1.1" + depd "~1.1.2" destroy "~1.0.4" - encodeurl "~1.0.1" + encodeurl "~1.0.2" escape-html "~1.0.3" etag "~1.8.1" fresh "0.5.2" @@ -5815,22 +5674,22 @@ send@0.16.1: ms "2.0.0" on-finished "~2.3.0" range-parser "~1.2.0" - statuses "~1.3.1" + statuses "~1.4.0" sequencify@~0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/sequencify/-/sequencify-0.0.7.tgz#90cff19d02e07027fd767f5ead3e7b95d1e7380c" -serve-static@1.13.1: - version "1.13.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.1.tgz#4c57d53404a761d8f2e7c1e8a18a47dbf278a719" +serve-static@1.13.2: + version "1.13.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" dependencies: - encodeurl "~1.0.1" + encodeurl "~1.0.2" escape-html "~1.0.3" parseurl "~1.3.2" - send "0.16.1" + send "0.16.2" -set-blocking@^2.0.0: +set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -5890,6 +5749,18 @@ signal-exit@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" +simple-concat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6" + +simple-get@^2.7.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.1.tgz#0e22e91d4575d87620620bc91308d57a77f44b5d" + dependencies: + decompress-response "^3.3.0" + once "^1.3.1" + simple-concat "^1.0.0" + single-line-log@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/single-line-log/-/single-line-log-1.1.2.tgz#c2f83f273a3e1a16edb0995661da0ed5ef033364" @@ -5955,32 +5826,17 @@ sntp@1.x.x: dependencies: hoek "2.x.x" -sntp@2.x.x: - version "2.1.0" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" - dependencies: - hoek "4.x.x" - sort-keys@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" dependencies: is-plain-obj "^1.0.0" -source-map-resolve@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.3.1.tgz#610f6122a445b8dd51535a2a71b783dfc1248761" +source-map-resolve@^0.5.0, source-map-resolve@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" dependencies: - atob "~1.1.0" - resolve-url "~0.2.1" - source-map-url "~0.3.0" - urix "~0.1.0" - -source-map-resolve@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.1.tgz#7ad0f593f2281598e854df80f19aae4b92d7a11a" - dependencies: - atob "^2.0.0" + atob "^2.1.1" decode-uri-component "^0.2.0" resolve-url "^0.2.1" source-map-url "^0.4.0" @@ -5990,19 +5846,15 @@ source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" -source-map-url@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.3.0.tgz#7ecaf13b57bcd09da8a40c5d269db33799d4aaf9" - source-map@0.4.x, source-map@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" dependencies: amdefine ">=0.0.4" -source-map@0.X, source-map@>=0.5.6, source-map@^0.6.1, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" +source-map@>=0.5.6: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" source-map@^0.1.38: version "0.1.43" @@ -6014,6 +5866,10 @@ source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" +source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + source-map@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" @@ -6021,8 +5877,8 @@ source-map@~0.2.0: amdefine ">=0.0.4" sparkles@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3" + version "1.0.1" + resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.1.tgz#008db65edce6c50eec0c5e228e1945061dd0437c" spdlog@0.6.0: version "0.6.0" @@ -6032,19 +5888,27 @@ spdlog@0.6.0: mkdirp "^0.5.1" nan "^2.8.0" -spdx-correct@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" +spdx-correct@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" dependencies: - spdx-license-ids "^1.0.2" + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" -spdx-expression-parse@~1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" +spdx-exceptions@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" -spdx-license-ids@^1.0.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87" speedometer@~0.1.2: version "0.1.4" @@ -6067,13 +5931,14 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" sshpk@^1.7.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" + version "1.14.2" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.2.tgz#c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98" dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" dashdash "^1.12.0" getpass "^0.1.1" + safer-buffer "^2.0.2" optionalDependencies: bcrypt-pbkdf "^1.0.0" ecc-jsbn "~0.1.1" @@ -6091,14 +5956,14 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" -"statuses@>= 1.3.1 < 2": +"statuses@>= 1.3.1 < 2", "statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + +statuses@~1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" -statuses@~1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" - stream-combiner@~0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" @@ -6106,16 +5971,16 @@ stream-combiner@~0.0.4: duplexer "~0.1.1" stream-consume@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/stream-consume/-/stream-consume-0.1.0.tgz#a41ead1a6d6081ceb79f65b061901b6d8f3d1d0f" + version "0.1.1" + resolved "https://registry.yarnpkg.com/stream-consume/-/stream-consume-0.1.1.tgz#d3bdb598c2bd0ae82b8cac7ac50b1107a7996c48" stream-shift@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" streamfilter@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/streamfilter/-/streamfilter-1.0.5.tgz#87507111beb8e298451717b511cfed8f002abf53" + version "1.0.7" + resolved "https://registry.yarnpkg.com/streamfilter/-/streamfilter-1.0.7.tgz#ae3e64522aa5a35c061fd17f67620c7653c643c9" dependencies: readable-stream "^2.0.2" @@ -6135,7 +6000,7 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^2.0.0, string-width@^2.1.1: +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" dependencies: @@ -6146,21 +6011,15 @@ string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" -string_decoder@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" dependencies: safe-buffer "~5.1.0" -stringstream@~0.0.4, stringstream@~0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" - -strip-ansi@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.3.0.tgz#25f48ea22ca79187f3174a4db8759347bb126220" - dependencies: - ansi-regex "^0.2.1" +stringstream@~0.0.4: + version "0.0.6" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72" strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" @@ -6213,8 +6072,8 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" sudo-prompt@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-8.0.0.tgz#a7b4a1ca6cbcca0e705b90a89dfc81d11034cba9" + version "8.2.0" + resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-8.2.0.tgz#bcd4aaacdb367b77b4bffcce1c658c2b1dd327f3" sumchecker@^2.0.1: version "2.0.2" @@ -6226,10 +6085,6 @@ supports-color@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-1.2.0.tgz#ff1ed1e61169d06b3cf2d588e188b18d8847e17e" -supports-color@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a" - supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -6240,11 +6095,11 @@ supports-color@^3.1.0, supports-color@^3.2.3: dependencies: has-flag "^1.0.0" -supports-color@^4.0.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" +supports-color@^5.2.0, supports-color@^5.3.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" dependencies: - has-flag "^2.0.0" + has-flag "^3.0.0" sver-compat@^1.5.0: version "1.5.0" @@ -6254,8 +6109,8 @@ sver-compat@^1.5.0: es6-symbol "^3.1.1" svg.js@^2.2.5: - version "2.6.4" - resolved "https://registry.yarnpkg.com/svg.js/-/svg.js-2.6.4.tgz#034085b13391c6fcca1a0185a34dbea6c3e78dc3" + version "2.6.5" + resolved "https://registry.yarnpkg.com/svg.js/-/svg.js-2.6.5.tgz#5b93d0c8c11e2b70812ef9de1562aa91975cc3b6" svgo@^0.7.0: version "0.7.2" @@ -6284,6 +6139,27 @@ table@^3.7.8: slice-ansi "0.0.4" string-width "^2.0.0" +tar-fs@^1.13.0: + version "1.16.3" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.3.tgz#966a628841da2c4010406a82167cbd5e0c72d509" + dependencies: + chownr "^1.0.1" + mkdirp "^0.5.1" + pump "^1.0.0" + tar-stream "^1.1.2" + +tar-stream@^1.1.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.1.tgz#f84ef1696269d6223ca48f6e1eeede3f7e81f395" + dependencies: + bl "^1.0.0" + buffer-alloc "^1.1.0" + end-of-stream "^1.0.0" + fs-constants "^1.0.0" + readable-stream "^2.3.0" + to-buffer "^1.1.0" + xtend "^4.0.0" + temp@^0.8.1, temp@^0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" @@ -6317,7 +6193,7 @@ through2@2.0.1: readable-stream "~2.0.0" xtend "~4.0.0" -through2@2.X, through2@^2.0.0, through2@^2.0.1, through2@^2.0.3, through2@~2.0.0, through2@~2.0.3: +through2@2.0.3, through2@2.X, through2@^2.0.0, through2@^2.0.3, through2@~2.0.0, through2@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" dependencies: @@ -6331,14 +6207,7 @@ through2@^0.4.1, through2@~0.4.0, through2@~0.4.1: readable-stream "~1.0.17" xtend "~2.1.1" -through2@^0.5.0, through2@~0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/through2/-/through2-0.5.1.tgz#dfdd012eb9c700e2323fd334f38ac622ab372da7" - dependencies: - readable-stream "~1.0.17" - xtend "~3.0.0" - -through2@^0.6.0, through2@^0.6.1, through2@^0.6.3, through2@~0.6.3: +through2@^0.6.0, through2@^0.6.1, through2@^0.6.3: version "0.6.5" resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" dependencies: @@ -6384,6 +6253,10 @@ to-absolute-glob@^0.1.1: dependencies: extend-shallow "^2.0.1" +to-buffer@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" + to-iso-string@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/to-iso-string/-/to-iso-string-0.0.2.tgz#4dc19e664dfccbe25bd8db508b00c6da158255d1" @@ -6417,8 +6290,8 @@ touch@0.0.3: nopt "~1.0.10" tough-cookie@~2.3.0, tough-cookie@~2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" + version "2.3.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" dependencies: punycode "^1.4.1" @@ -6430,21 +6303,13 @@ trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" -tryit@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" - -tslib@^1.7.1: - version "1.8.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.8.0.tgz#dc604ebad64bcbf696d613da6c954aa0e7ea1eb6" - -tslib@^1.8.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.0.tgz#e37a86fda8cbbaf23a057f473c9f4dc64e5fc2e8" +tslib@^1.8.0, tslib@^1.8.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" tslint@^5.9.1: - version "5.9.1" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.9.1.tgz#1255f87a3ff57eb0b0e1f0e610a8b4748046c9ae" + version "5.11.0" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.11.0.tgz#98f30c02eae3cde7006201e4c33cb08b48581eed" dependencies: babel-code-frame "^6.22.0" builtin-modules "^1.1.1" @@ -6457,13 +6322,13 @@ tslint@^5.9.1: resolve "^1.3.2" semver "^5.3.0" tslib "^1.8.0" - tsutils "^2.12.1" + tsutils "^2.27.2" -tsutils@^2.12.1: - version "2.12.2" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.12.2.tgz#ad58a4865d17ec3ddb6631b6ca53be14a5656ff3" +tsutils@^2.27.2: + version "2.29.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" dependencies: - tslib "^1.7.1" + tslib "^1.8.1" tunnel-agent@^0.6.0: version "0.6.0" @@ -6483,6 +6348,10 @@ tunnel@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.4.tgz#2d3785a158c174c9a16dc2c046ec5fc5f1742213" +tunnel@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.5.tgz#d1532254749ed36620fcd1010865495a1fa9d0ae" + tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" @@ -6493,12 +6362,12 @@ type-check@~0.3.1, type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-is@~1.6.15: - version "1.6.15" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" +type-is@~1.6.15, type-is@~1.6.16: + version "1.6.16" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" dependencies: media-typer "0.3.0" - mime-types "~2.1.15" + mime-types "~2.1.18" typechecker@~2.0.1: version "2.0.8" @@ -6533,18 +6402,18 @@ typescript@2.8.1: resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.8.1.tgz#6160e4f8f195d5ba81d4876f9c0cc1fbc0820624" typescript@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.6.2.tgz#3c5b6fd7f6de0914269027f03c0946758f7673a4" + version "2.9.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.9.2.tgz#1cbf61d05d6b96269244eb6a3bce4bd914e0f00c" -uc.micro@^1.0.1, uc.micro@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.3.tgz#7ed50d5e0f9a9fb0a573379259f2a77458d50192" +uc.micro@^1.0.1, uc.micro@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.5.tgz#0c65f15f815aa08b560a61ce8b4db7ffc3f45376" uglify-es@^3.0.18: - version "3.1.9" - resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.1.9.tgz#6c82df628ac9eb7af9c61fd70c744a084abe6161" + version "3.3.9" + resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" dependencies: - commander "~2.11.0" + commander "~2.13.0" source-map "~0.6.1" uglify-js@^2.6: @@ -6557,10 +6426,10 @@ uglify-js@^2.6: uglify-to-browserify "~1.0.0" uglify-js@^3.0.5: - version "3.1.9" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.1.9.tgz#dffca799308cf327ec3ac77eeacb8e196ce3b452" + version "3.4.7" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.7.tgz#4df6b92e54789aa921a254cb1e33704d6ec12b89" dependencies: - commander "~2.11.0" + commander "~2.16.0" source-map "~0.6.1" uglify-to-browserify@~1.0.0: @@ -6568,17 +6437,21 @@ uglify-to-browserify@~1.0.0: resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" ultron@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.0.tgz#b07a2e6a541a815fc6a34ccd4533baec307ca864" + version "1.1.1" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" -unc-path-regex@^0.1.0, unc-path-regex@^0.1.2: +unc-path-regex@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" -underscore@1.8.3, underscore@^1.7.0, underscore@^1.8.3: +underscore@1.8.3: version "1.8.3" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" +underscore@^1.7.0, underscore@^1.8.3: + version "1.9.1" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" + underscore@~1.4.4: version "1.4.4" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.4.4.tgz#61a6a32010622afa07963bf325203cf12239d604" @@ -6596,12 +6469,6 @@ uniq@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" -uniqid@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1" - dependencies: - macaddress "^0.2.8" - uniqs@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" @@ -6618,8 +6485,8 @@ unique-stream@^2.0.2: through2-filter "^2.0.0" universalify@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" @@ -6632,7 +6499,7 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" -urix@^0.1.0, urix@~0.1.0: +urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" @@ -6641,10 +6508,8 @@ url-join@^1.1.0: resolved "https://registry.yarnpkg.com/url-join/-/url-join-1.1.0.tgz#741c6c2f4596c4830d6718460920d0c92202dc78" use@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.0.tgz#14716bf03fdfefd03040aef58d8b4b85f3a7c544" - dependencies: - kind-of "^6.0.2" + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" user-home@^1.1.1: version "1.1.1" @@ -6661,18 +6526,18 @@ util-deprecate@1.0.2, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" "util@>=0.10.3 <1": - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + version "0.11.0" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.0.tgz#c5f391beb244103d799b21077a926fef8769e1fb" dependencies: - inherits "2.0.1" + inherits "2.0.3" utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" uuid@^3.0.0, uuid@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" v8-inspect-profiler@^0.0.7: version "0.0.7" @@ -6687,8 +6552,8 @@ v8flags@^2.0.2: user-home "^1.1.1" v8flags@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.0.2.tgz#ad6a78a20a6b23d03a8debc11211e3cc23149477" + version "3.1.1" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.1.1.tgz#42259a1461c08397e37fe1d4f1cfb59cad85a053" dependencies: homedir-polyfill "^1.0.1" @@ -6697,11 +6562,11 @@ vali-date@^1.0.0: resolved "https://registry.yarnpkg.com/vali-date/-/vali-date-1.0.0.tgz#1b904a59609fb328ef078138420934f6b86709a6" validate-npm-package-license@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" dependencies: - spdx-correct "~1.0.0" - spdx-expression-parse "~1.0.0" + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" validator@~3.1.0: version "3.1.0" @@ -6716,8 +6581,8 @@ vary@~1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" vendors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22" + version "1.0.2" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.2.tgz#7fcb5eef9f5623b156bcea89ec37d63676f21801" verror@1.10.0: version "1.10.0" @@ -6776,12 +6641,6 @@ vinyl@1.X, vinyl@^1.0.0: clone-stats "^0.0.1" replace-ext "0.0.1" -vinyl@^0.2.1: - version "0.2.3" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.2.3.tgz#bca938209582ec5a49ad538a00fa1f125e513252" - dependencies: - clone-stats "~0.0.1" - vinyl@^0.4.0, vinyl@^0.4.3, vinyl@^0.4.5, vinyl@^0.4.6: version "0.4.6" resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.4.6.tgz#2f356c87a550a255461f36bbeb2a5ba8bf784847" @@ -6798,8 +6657,8 @@ vinyl@^0.5.0, vinyl@^0.5.1: replace-ext "0.0.1" vinyl@^2.0.0, vinyl@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.1.0.tgz#021f9c2cf951d6b939943c89eb5ee5add4fd924c" + version "2.2.0" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.0.tgz#d85b07da96e458d25b2ffe19fece9f2caa13ed86" dependencies: clone "^2.1.1" clone-buffer "^1.0.0" @@ -6929,12 +6788,22 @@ which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" -which@^1.1.1, which@^1.2.12, which@^1.2.14, which@^1.2.9: - version "1.3.0" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" +which-pm-runs@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" + +which@^1.1.1, which@^1.2.14, which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" dependencies: isexe "^2.0.0" +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + dependencies: + string-width "^1.0.2 || 2" + window-size@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" @@ -6990,8 +6859,8 @@ write@^0.2.1: mkdirp "^0.5.1" ws@3.3.x: - version "3.3.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.2.tgz#96c1d08b3fefda1d5c1e33700d3bfaa9be2d5608" + version "3.3.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" dependencies: async-limiter "~1.0.0" safe-buffer "~5.1.0" @@ -7029,8 +6898,8 @@ xmlbuilder@4.0.0: lodash "^3.5.0" xmlbuilder@~9.0.1: - version "9.0.4" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.4.tgz#519cb4ca686d005a8420d3496f3f0caeecca580f" + version "9.0.7" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" xmldom@0.1.x: version "0.1.27" @@ -7050,10 +6919,6 @@ xtend@~2.1.1: dependencies: object-keys "~0.4.0" -xtend@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-3.0.0.tgz#5cce7407baf642cba7becda568111c493f59665a" - y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" @@ -7132,11 +6997,11 @@ yauzl@2.8.0: fd-slicer "~1.0.1" yauzl@^2.2.1, yauzl@^2.3.1: - version "2.9.1" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.9.1.tgz#a81981ea70a57946133883f029c5821a89359a7f" + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" dependencies: buffer-crc32 "~0.2.3" - fd-slicer "~1.0.1" + fd-slicer "~1.1.0" yazl@^2.2.1, yazl@^2.2.2: version "2.4.3" @@ -7145,5 +7010,5 @@ yazl@^2.2.1, yazl@^2.2.2: buffer-crc32 "~0.2.3" zone.js@^0.8.4: - version "0.8.20" - resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.8.20.tgz#a218c48db09464b19ff6fc8f0d4bb5b1046e185d" + version "0.8.26" + resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.8.26.tgz#7bdd72f7668c5a7ad6b118148b4ea39c59d08d2d"