Merge branch 'development' into add-20-syntax-highlighting-languages

This commit is contained in:
William Shepherd 2019-07-24 09:19:44 -05:00 committed by GitHub
commit 9d3a658f9f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
33 changed files with 189 additions and 102 deletions

View file

@ -28,5 +28,11 @@
"eslint.options": {
"configFile": ".eslintrc.yml",
"rulePaths": ["eslint-rules"]
}
},
"eslint.validate": [
"javascript",
"javascriptreact",
"typescript",
"typescriptreact"
]
}

View file

@ -21,13 +21,6 @@ Download the official installer for your operating system:
- [Windows](https://central.github.com/deployments/desktop/desktop/latest/win32)
- [Windows machine-wide install](https://central.github.com/deployments/desktop/desktop/latest/win32?format=msi)
There are several community-supported package managers that can be used to install Github Desktop.
- Windows users can install using [Chocolatey](https://chocolatey.org/) package manager:
`c:\> choco install github-desktop`
- macOS users can install using [Homebrew](https://brew.sh/) package manager:
`$ brew cask install github`
- Arch Linux users can install the latest version from the [AUR](https://aur.archlinux.org/packages/github-desktop/).
You can install this alongside your existing GitHub Desktop for Mac or GitHub
Desktop for Windows application.
@ -43,6 +36,21 @@ beta channel to get access to early builds of Desktop:
- [macOS](https://central.github.com/deployments/desktop/desktop/latest/darwin?env=beta)
- [Windows](https://central.github.com/deployments/desktop/desktop/latest/win32?env=beta)
### Community Releases
There are several community-supported package managers that can be used to
install GitHub Desktop:
- Windows users can install using [Chocolatey](https://chocolatey.org/) package manager:
`c:\> choco install github-desktop`
- macOS users can install using [Homebrew](https://brew.sh/) package manager:
`$ brew cask install github`
Installers for various Linux distributions can be found on the
[`shiftkey/desktop`](https://github.com/shiftkey/desktop) fork.
Arch Linux users can install the latest version from the
[AUR](https://aur.archlinux.org/packages/github-desktop-bin/).
## Is GitHub Desktop right for me? What are the primary areas of focus?
[This document](https://github.com/desktop/desktop/blob/development/docs/process/what-is-desktop.md) describes the focus of GitHub Desktop and who the product is most useful for.

View file

@ -1,4 +1,4 @@
runtime = electron
disturl = https://atom.io/download/electron
target = 3.1.6
target = 5.0.6
arch = x64

View file

@ -3,7 +3,7 @@
"productName": "GitHub Desktop",
"bundleID": "com.github.GitHubClient",
"companyName": "GitHub, Inc.",
"version": "2.1.0",
"version": "2.1.1-beta2",
"main": "./main.js",
"repository": {
"type": "git",

View file

@ -97,7 +97,7 @@ export function enableBranchProtectionChecks(): boolean {
/** Should the app detect Windows Subsystem for Linux as a valid shell? */
export function enableWSLDetection(): boolean {
return enableDevelopmentFeatures()
return enableBetaFeatures()
}
/**

View file

@ -188,13 +188,6 @@ interface XMLHttpRequest extends XMLHttpRequestEventTarget {
}
declare namespace Electron {
interface MenuItem {
readonly accelerator?: Electron.Accelerator
readonly submenu?: Electron.Menu
readonly role?: string
readonly type: 'normal' | 'separator' | 'submenu' | 'checkbox' | 'radio'
}
interface RequestOptions {
readonly method: string
readonly url: string

View file

@ -17,7 +17,7 @@ export interface IMenuItem {
* When specified the click property will be ignored.
* See https://electronjs.org/docs/api/menu-item#roles
*/
readonly role?: string
readonly role?: Electron.MenuItemConstructorOptions['role']
}
/**

View file

@ -57,12 +57,10 @@ async function getRawShellEnv(): Promise<string | null> {
cleanup()
}, 5000)
const options = {
child = ChildProcess.spawn(shell, ['-ilc', 'command env'], {
detached: true,
stdio: ['ignore', 'pipe', process.stderr],
}
child = ChildProcess.spawn(shell, ['-ilc', 'command env'], options)
})
const buffers: Array<Buffer> = []

View file

@ -9,6 +9,7 @@ export enum Shell {
Hyper = 'Hyper',
iTerm2 = 'iTerm2',
PowerShellCore = 'PowerShell Core',
Kitty = 'Kitty',
}
export const Default = Shell.Terminal
@ -30,6 +31,10 @@ export function parse(label: string): Shell {
return Shell.PowerShellCore
}
if (label === Shell.Kitty) {
return Shell.Kitty
}
return Default
}
@ -43,6 +48,8 @@ function getBundleID(shell: Shell): string {
return 'co.zeit.hyper'
case Shell.PowerShellCore:
return 'com.microsoft.powershell'
case Shell.Kitty:
return 'net.kovidgoyal.kitty'
default:
return assertNever(shell, `Unknown shell: ${shell}`)
}
@ -66,11 +73,13 @@ export async function getAvailableShells(): Promise<
hyperPath,
iTermPath,
powerShellCorePath,
kittyPath,
] = await Promise.all([
getShellPath(Shell.Terminal),
getShellPath(Shell.Hyper),
getShellPath(Shell.iTerm2),
getShellPath(Shell.PowerShellCore),
getShellPath(Shell.Kitty),
])
const shells: Array<IFoundShell<Shell>> = []
@ -90,6 +99,11 @@ export async function getAvailableShells(): Promise<
shells.push({ shell: Shell.PowerShellCore, path: powerShellCorePath })
}
if (kittyPath) {
const kittyExecutable = `${kittyPath}/Contents/MacOS/kitty`
shells.push({ shell: Shell.Kitty, path: kittyExecutable })
}
return shells
}
@ -97,7 +111,16 @@ export function launch(
foundShell: IFoundShell<Shell>,
path: string
): ChildProcess {
const bundleID = getBundleID(foundShell.shell)
const commandArgs = ['-b', bundleID, path]
return spawn('open', commandArgs)
if (foundShell.shell === Shell.Kitty) {
// kitty does not handle arguments as expected when using `open` with
// an existing session but closed window (it reverts to the previous
// directory rather than using the new directory directory).
//
// This workaround launches the internal `kitty` executable which
// will open a new window to the desired path.
return spawn(foundShell.path, ['--single-instance', '--directory', path])
} else {
const bundleID = getBundleID(foundShell.shell)
return spawn('open', ['-b', bundleID, path])
}
}

View file

@ -406,9 +406,7 @@ export class AppStore extends TypedBaseStore<IAppState> {
const window = remote.getCurrentWindow()
this.windowState = getWindowState(window)
window.webContents.getZoomFactor(factor => {
this.onWindowZoomFactorChanged(factor)
})
this.onWindowZoomFactorChanged(window.webContents.getZoomFactor())
this.wireupIpcEventHandlers(window)
this.wireupStoreEventHandlers()

View file

@ -43,6 +43,7 @@ export class AppWindow {
disableBlinkFeatures: 'Auxclick',
// Enable, among other things, the ResizeObserver
experimentalFeatures: true,
nodeIntegration: true,
},
acceptFirstMouse: true,
}

View file

@ -43,6 +43,7 @@ export class CrashWindow {
// process but our components which relies on ResizeObserver should
// be able to degrade gracefully.
experimentalFeatures: false,
nodeIntegration: true,
},
}

View file

@ -611,29 +611,27 @@ function zoom(direction: ZoomDirection): ClickHandler {
webContents.setZoomFactor(1)
webContents.send('zoom-factor-changed', 1)
} else {
webContents.getZoomFactor(rawZoom => {
const zoomFactors =
direction === ZoomDirection.In ? ZoomInFactors : ZoomOutFactors
const rawZoom = webContents.getZoomFactor()
const zoomFactors =
direction === ZoomDirection.In ? ZoomInFactors : ZoomOutFactors
// So the values that we get from getZoomFactor are floating point
// precision numbers from chromium that don't always round nicely so
// we'll have to do a little trick to figure out which of our supported
// zoom factors the value is referring to.
const currentZoom = findClosestValue(zoomFactors, rawZoom)
// So the values that we get from getZoomFactor are floating point
// precision numbers from chromium that don't always round nicely so
// we'll have to do a little trick to figure out which of our supported
// zoom factors the value is referring to.
const currentZoom = findClosestValue(zoomFactors, rawZoom)
const nextZoomLevel = zoomFactors.find(f =>
direction === ZoomDirection.In ? f > currentZoom : f < currentZoom
)
const nextZoomLevel = zoomFactors.find(f =>
direction === ZoomDirection.In ? f > currentZoom : f < currentZoom
)
// If we couldn't find a zoom level (likely due to manual manipulation
// of the zoom factor in devtools) we'll just snap to the closest valid
// factor we've got.
const newZoom =
nextZoomLevel === undefined ? currentZoom : nextZoomLevel
// If we couldn't find a zoom level (likely due to manual manipulation
// of the zoom factor in devtools) we'll just snap to the closest valid
// factor we've got.
const newZoom = nextZoomLevel === undefined ? currentZoom : nextZoomLevel
webContents.setZoomFactor(newZoom)
webContents.send('zoom-factor-changed', newZoom)
})
webContents.setZoomFactor(newZoom)
webContents.send('zoom-factor-changed', newZoom)
}
}
}

View file

@ -162,6 +162,24 @@ function getAccessKey(text: string): string | null {
return m ? m[1] : null
}
/** Workaround for missing type information on Electron.MenuItem.type */
function parseMenuItem(
type: string
): 'normal' | 'separator' | 'submenu' | 'checkbox' | 'radio' {
switch (type) {
case 'normal':
case 'separator':
case 'submenu':
case 'checkbox':
case 'radio':
return type
default:
throw new Error(
`Unable to parse string ${type} to a valid menu item type`
)
}
}
/**
* Creates an instance of one of the types in the MenuItem type union based
* on an Electron MenuItem instance. Will recurse through all sub menus and
@ -182,8 +200,10 @@ function menuItemFromElectronMenuItem(menuItem: Electron.MenuItem): MenuItem {
const accelerator = getAccelerator(menuItem)
const accessKey = getAccessKey(menuItem.label)
const type = parseMenuItem(menuItem.type)
// normal, separator, submenu, checkbox or radio.
switch (menuItem.type) {
switch (type) {
case 'normal':
return {
id,
@ -230,10 +250,7 @@ function menuItemFromElectronMenuItem(menuItem: Electron.MenuItem): MenuItem {
accessKey,
}
default:
return assertNever(
menuItem.type,
`Unknown menu item type ${menuItem.type}`
)
return assertNever(type, `Unknown menu item type ${type}`)
}
}
/**

View file

@ -175,10 +175,10 @@ export class AddExistingRepository extends React.Component<
private showFilePicker = async () => {
const window = remote.getCurrentWindow()
const directory: string[] | null = remote.dialog.showOpenDialog(window, {
const directory = remote.dialog.showOpenDialog(window, {
properties: ['createDirectory', 'openDirectory'],
})
if (!directory) {
if (directory === undefined) {
return
}

View file

@ -162,11 +162,11 @@ export class CreateRepository extends React.Component<
private showFilePicker = async () => {
const window = remote.getCurrentWindow()
const directory: string[] | null = remote.dialog.showOpenDialog(window, {
const directory = remote.dialog.showOpenDialog(window, {
properties: ['createDirectory', 'openDirectory'],
})
if (!directory) {
if (directory === undefined) {
return
}

View file

@ -59,7 +59,7 @@ export class ModifiedImageDiff extends React.Component<
private container: HTMLElement | null = null
private readonly resizeObserver: ResizeObserver
private resizedTimeoutID: number | null = null
private resizedTimeoutID: NodeJS.Immediate | null = null
public constructor(props: IModifiedImageDiffProps) {
super(props)

View file

@ -123,7 +123,7 @@ export class CommitSummary extends React.Component<
> {
private descriptionScrollViewRef: HTMLDivElement | null = null
private readonly resizeObserver: ResizeObserver | null = null
private updateOverflowTimeoutId: number | null = null
private updateOverflowTimeoutId: NodeJS.Immediate | null = null
private descriptionRef: HTMLDivElement | null = null
public constructor(props: ICommitSummaryProps) {

View file

@ -264,7 +264,7 @@ export class List extends React.Component<IListProps, IListState> {
private list: HTMLDivElement | null = null
private grid: React.Component<any, any> | null = null
private readonly resizeObserver: ResizeObserver | null = null
private updateSizeTimeoutId: number | null = null
private updateSizeTimeoutId: NodeJS.Immediate | null = null
public constructor(props: IListProps) {
super(props)

View file

@ -49,13 +49,13 @@ export class CommitConflictsWarning extends React.Component<
private renderFiles(files: ReadonlyArray<WorkingDirectoryFileChange>) {
return (
<p>
<div className="conflicted-files-text">
{files.map(f => (
<Monospaced key={f.path}>
<PathText path={f.path} />
</Monospaced>
))}
</p>
</div>
)
}

View file

@ -76,7 +76,11 @@ export class RepositoryListItem extends React.Component<
: 'repository-list-item'
return (
<div onContextMenu={this.onContextMenu} className={className}>
<div
onContextMenu={this.onContextMenu}
className={className}
title={repoTooltip}
>
{!enableGroupRepositoriesByOwner() && (
<div
className="change-indicator-wrapper"
@ -98,7 +102,7 @@ export class RepositoryListItem extends React.Component<
className="icon-for-repository"
symbol={iconForRepository(repository)}
/>
<div className="name" title={repoTooltip}>
<div className="name">
{prefix ? <span className="prefix">{prefix}</span> : null}
<HighlightText
text={repository.name}

View file

@ -4,6 +4,7 @@
display: flex;
flex-direction: row;
flex: 1;
overflow: hidden;
.fill-window {
// necessary for "no files in commit" view to

View file

@ -10,6 +10,7 @@
@import 'dialogs/release-notes';
@import 'dialogs/usage-reporting';
@import 'dialogs/stash-changes';
@import 'dialogs/commit-conflicts-warning';
// The styles herein attempt to follow a flow where margins are only applied
// to the bottom of elements (with the exception of the last child). This to

View file

@ -6,6 +6,7 @@
flex-direction: row;
flex: 1;
border-top: var(--base-border);
max-height: 100%;
> .focus-container {
display: flex;

View file

@ -4,6 +4,7 @@
display: flex;
flex-direction: column;
flex: 1;
max-height: 100%;
.header {
display: flex;

View file

@ -18,7 +18,6 @@
flex-grow: 1;
padding: 0 var(--spacing);
width: 100%;
height: 100%;
// Chrome on Windows ignores the body element
// font-family and uses Arial so we redefine

View file

@ -3,6 +3,7 @@
flex-direction: column;
flex-grow: 1;
min-width: 0;
max-height: 100%;
.header {
span {
@ -64,4 +65,5 @@
display: flex;
flex-grow: 1;
min-width: 0;
overflow: hidden;
}

View file

@ -0,0 +1,3 @@
.conflicted-files-text {
margin-bottom: 10px;
}

View file

@ -5,6 +5,7 @@
display: flex;
flex-direction: column;
flex: 1;
max-height: 100%;
// Necessary so that the diff doesn't expand
// beyond the width of the history

View file

@ -1,5 +1,15 @@
{
"releases": {
"2.1.1-beta2": [
"[Fixed] Incorrect proportions for \"stashed changes\" button - #7964",
"[Fixed] Overflowing diffs push UI elements out of window - #7967"
],
"2.1.1-beta1": [
"[Added] WSL Support - #7821 #7891. Thanks @ADustyOldMuffin @say25!",
"[Fixed] Tooltip does not display on the entire hit area for list items - #7910. Thanks @say25!",
"[Improved] Error handling when trying to rebase onto an invalid ref - #7871",
"[Improved] Trigger diff search even when CodeMirror doesn't have focus - #7899"
],
"2.1.0": [
"[New] Branches that have been merged and deleted on GitHub.com will now be pruned after two weeks - #750",
"[Added] Search text within diffs using shortcut - #7538",

View file

@ -127,6 +127,7 @@ These shells are currently supported:
- [Hyper](https://hyper.sh/)
- [iTerm2](https://www.iterm2.com/)
- [PowerShell Core](https://github.com/powershell/powershell/)
- [Kitty](https://sw.kovidgoyal.net/kitty/)
These are defined in an enum at the top of the file:
@ -136,6 +137,7 @@ export enum Shell {
Hyper = 'Hyper',
iTerm2 = 'iTerm2',
PowerShellCore = 'PowerShell Core',
Kitty = 'Kitty',
}
```
@ -168,11 +170,13 @@ export async function getAvailableShells(): Promise<
hyperPath,
iTermPath,
powerShellCorePath,
kittyPath,
] = await Promise.all([
getShellPath(Shell.Terminal),
getShellPath(Shell.Hyper),
getShellPath(Shell.iTerm2),
getShellPath(Shell.PowerShellCore),
getShellPath(Shell.Kitty),
])
// other code

View file

@ -55,8 +55,8 @@
"yarn": ">= 1.9"
},
"dependencies": {
"@typescript-eslint/eslint-plugin": "1.6.0",
"@typescript-eslint/parser": "1.6.0",
"@typescript-eslint/eslint-plugin": "1.10.2",
"@typescript-eslint/parser": "1.10.2",
"airbnb-browser-shims": "^3.0.0",
"ajv": "^6.4.0",
"awesome-node-loader": "^1.1.0",
@ -141,7 +141,7 @@
"@types/memoize-one": "^3.1.1",
"@types/mini-css-extract-plugin": "^0.2.0",
"@types/mri": "^1.1.0",
"@types/node": "10.1.4",
"@types/node": "10.12.18",
"@types/react": "^16.3.16",
"@types/react-css-transition-replace": "^2.1.3",
"@types/react-dom": "^16.0.5",
@ -164,12 +164,9 @@
"@types/webpack-merge": "^4.1.3",
"@types/winston": "^2.2.0",
"@types/xml2js": "^0.4.0",
"electron": "3.1.6",
"electron": "5.0.6",
"electron-builder": "20.28.4",
"electron-packager": "^13.1.0",
"electron-winstaller": "2.5.2"
},
"resolutions": {
"**/@types/node": "10.1.4"
}
}

View file

@ -174,6 +174,11 @@
resolved "https://registry.yarnpkg.com/@types/electron-winstaller/-/electron-winstaller-2.6.0.tgz#703073ee2109fefe8a958fdadb746dfc0a827918"
integrity sha512-pQke6avqSYtkNunEec7NF2dTDSFsf2e1Ti9VkaJFzI15UfTEOjwz22lKoImja7nXPLu8nINYSaVaPgw0XHJEkA==
"@types/eslint-visitor-keys@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d"
integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==
"@types/event-kit@^1.2.28":
version "1.2.32"
resolved "https://registry.yarnpkg.com/@types/event-kit/-/event-kit-1.2.32.tgz#068cbdc69e8c969afae8c9f6e3a51ea4b1b5522e"
@ -311,11 +316,21 @@
resolved "https://registry.yarnpkg.com/@types/mri/-/mri-1.1.0.tgz#66555e4d797713789ea0fefdae0898d8170bf5af"
integrity sha512-fMl88ZoZXOB7VKazJ6wUMpZc9QIn+jcigSFRf2K/rrw4DcXn+/uGxlWX8DDlcE7JkwgIZ7BDH+JgxZPlc/Ap3g==
"@types/node@*", "@types/node@10.1.4", "@types/node@^8.0.24":
"@types/node@*":
version "10.1.4"
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.1.4.tgz#606651d3f8a8bec08b8cb262161aab9209f4a29d"
integrity sha512-GpQxofkdlHYxjHad98UUdNoMO7JrmzQZoAaghtNg14Gwg7YkohcrCoJEcEMSgllx4VIZ+mYw7ZHjfaeIagP/rg==
"@types/node@10.12.18":
version "10.12.18"
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.18.tgz#1d3ca764718915584fcd9f6344621b7672665c67"
integrity sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==
"@types/node@^10.12.18":
version "10.14.10"
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.10.tgz#e491484c6060af8d461e12ec81c0da8a3282b8de"
integrity sha512-V8wj+w2YMNvGuhgl/MA5fmTxgjmVHVoasfIaxMMZJV6Y8Kk+Ydpi1z2whoShDCJ2BuNVoqH/h1hrygnBxkrw/Q==
"@types/prop-types@*":
version "15.5.2"
resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.5.2.tgz#3c6b8dceb2906cc87fe4358e809f9d20c8d59be1"
@ -519,29 +534,39 @@
dependencies:
"@types/node" "*"
"@typescript-eslint/eslint-plugin@1.6.0":
version "1.6.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.6.0.tgz#a5ff3128c692393fb16efa403ec7c8a5593dab0f"
integrity sha512-U224c29E2lo861TQZs6GSmyC0OYeRNg6bE9UVIiFBxN2MlA0nq2dCrgIVyyRbC05UOcrgf2Wk/CF2gGOPQKUSQ==
"@typescript-eslint/eslint-plugin@1.10.2":
version "1.10.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.10.2.tgz#552fc64cfcb19c6162190360217c945e8faa330a"
integrity sha512-7449RhjE1oLFIy5E/5rT4wG5+KsfPzakJuhvpzXJ3C46lq7xywY0/Rjo9ZBcwrfbk0nRZ5xmUHkk7DZ67tSBKw==
dependencies:
"@typescript-eslint/parser" "1.6.0"
"@typescript-eslint/typescript-estree" "1.6.0"
requireindex "^1.2.0"
"@typescript-eslint/experimental-utils" "1.10.2"
eslint-utils "^1.3.1"
functional-red-black-tree "^1.0.1"
regexpp "^2.0.1"
tsutils "^3.7.0"
"@typescript-eslint/parser@1.6.0":
version "1.6.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-1.6.0.tgz#f01189c8b90848e3b8e45a6cdad27870529d1804"
integrity sha512-VB9xmSbfafI+/kI4gUK3PfrkGmrJQfh0N4EScT1gZXSZyUxpsBirPL99EWZg9MmPG0pzq/gMtgkk7/rAHj4aQw==
"@typescript-eslint/experimental-utils@1.10.2":
version "1.10.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-1.10.2.tgz#cd548c03fc1a2b3ba5c136d1599001a1ede24215"
integrity sha512-Hf5lYcrnTH5Oc67SRrQUA7KuHErMvCf5RlZsyxXPIT6AXa8fKTyfFO6vaEnUmlz48RpbxO4f0fY3QtWkuHZNjg==
dependencies:
"@typescript-eslint/typescript-estree" "1.6.0"
"@typescript-eslint/typescript-estree" "1.10.2"
eslint-scope "^4.0.0"
"@typescript-eslint/parser@1.10.2":
version "1.10.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-1.10.2.tgz#36cfe8c6bf1b6c1dd81da56f88c8588f4b1a852b"
integrity sha512-xWDWPfZfV0ENU17ermIUVEVSseBBJxKfqBcRCMZ8nAjJbfA5R7NWMZmFFHYnars5MjK4fPjhu4gwQv526oZIPQ==
dependencies:
"@types/eslint-visitor-keys" "^1.0.0"
"@typescript-eslint/experimental-utils" "1.10.2"
"@typescript-eslint/typescript-estree" "1.10.2"
eslint-visitor-keys "^1.0.0"
"@typescript-eslint/typescript-estree@1.6.0":
version "1.6.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-1.6.0.tgz#6cf43a07fee08b8eb52e4513b428c8cdc9751ef0"
integrity sha512-A4CanUwfaG4oXobD5y7EXbsOHjCwn8tj1RDd820etpPAjH+Icjc2K9e/DQM1Hac5zH2BSy+u6bjvvF2wwREvYA==
"@typescript-eslint/typescript-estree@1.10.2":
version "1.10.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-1.10.2.tgz#8403585dd74b6cfb6f78aa98b6958de158b5897b"
integrity sha512-Kutjz0i69qraOsWeI8ETqYJ07tRLvD9URmdrMoF10bG8y8ucLmPtSxROvVejWvlJUGl2et/plnMiKRDW+rhEhw==
dependencies:
lodash.unescape "4.0.1"
semver "5.5.0"
@ -3346,12 +3371,12 @@ electron-winstaller@2.5.2:
lodash.template "^4.2.2"
temp "^0.8.3"
electron@3.1.6:
version "3.1.6"
resolved "https://registry.yarnpkg.com/electron/-/electron-3.1.6.tgz#f6222e1964838b31c5806dd041b1b58a941998f6"
integrity sha512-elEKKlFMnR0bhR/Uttk0TI496ZadxYsecyKgj2tZgrWx/F/anzfxbEYNcv134vT+qMFC/BXvoaeaIIj2YYdVuA==
electron@5.0.6:
version "5.0.6"
resolved "https://registry.yarnpkg.com/electron/-/electron-5.0.6.tgz#e3ca4a58b5716fceef3fb64e1fd2222dd9c51de0"
integrity sha512-0L53lv26eDhaaNxL6DqXGQrQOEAYbrQg40stRSb2pzrY06kwPbABzXEiaCvEsBuKUQ+9OQBbVyyvXRbLJlun/A==
dependencies:
"@types/node" "^8.0.24"
"@types/node" "^10.12.18"
electron-download "^4.1.0"
extract-zip "^1.0.3"
@ -8289,11 +8314,6 @@ require-main-filename@^1.0.1:
resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=
requireindex@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.2.0.tgz#3463cdb22ee151902635aa6c9535d4de9c2ef1ef"
integrity sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==
resolve-cwd@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
@ -9517,9 +9537,9 @@ tslib@^1.9.0:
integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==
tslint-config-prettier@^1.14.0:
version "1.14.0"
resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.14.0.tgz#860b36634e53f4c70c64c51ff3ef7fd9bbab7676"
integrity sha512-SomD+aLvAwoihMtyCfkhhWKt9wcpSY2ZpgDV6OuxLYi8+7uOwE2g03aa+jJLSmY0Ys8s3ZLM5Iwfuwu3giCSQQ==
version "1.18.0"
resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz#75f140bde947d35d8f0d238e0ebf809d64592c37"
integrity sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg==
tslint-microsoft-contrib@^5.2.1:
version "5.2.1"