diff --git a/package.json b/package.json index 44f3f43b7e0..f3ee9b241b0 100644 --- a/package.json +++ b/package.json @@ -18,12 +18,13 @@ "update-deps": "lerna exec -- npm-check-updates --reject 'electron-builder-http,electron-builder-util,electron-builder-core,electron-publish' -a", "set-versions": "node test/out/helpers/setVersions.js", "npm-publish": "yarn compile && ./packages/npm-publish.sh && conventional-changelog -p angular -i CHANGELOG.md -s", - "schema": "typescript-json-schema packages/electron-builder/tsconfig.json Config --out packages/electron-builder/scheme.json --noExtraProps", + "schema": "typescript-json-schema packages/electron-builder/tsconfig.json Config --out packages/electron-builder/scheme.json --noExtraProps --useTypeOfKeyword --strictNullChecks", "jsdoc": "ts2jsdoc packages/electron-updater packages/electron-builder-http", "docs": "rm -rf jsdoc/out/docs && jsdoc -R jsdoc/readme.md -c jsdoc/jsdoc.json -d jsdoc/out/docs" }, "//": "repository must be specified otherwise conventional-changelog will use forked repo (currently cloned)", "repository": "electron-userland/electron-builder", + "///": "all dependencies for all packages (hoisted)", "dependencies": { "7zip-bin": "^2.0.4", "ajv": "^5.0.2-beta", @@ -61,7 +62,7 @@ "yargs": "^6.6.0" }, "devDependencies": { - "@develar/typescript-json-schema": "0.9.1", + "@develar/typescript-json-schema": "0.9.3", "@types/electron": "^1.4.32", "@types/ini": "^1.3.29", "@types/jest": "^18.1.1", @@ -90,7 +91,6 @@ "ts-babel": "^1.4.4", "tslint": "^4.4.2", "typescript": "^2.2.1", - "typescript-json-schema": "^0.9.0", "whitespace": "^2.1.0", "xml2js": "^0.4.17" }, diff --git a/packages/electron-builder/src/fileMatcher.ts b/packages/electron-builder/src/fileMatcher.ts index fc793361e41..fd777b29145 100644 --- a/packages/electron-builder/src/fileMatcher.ts +++ b/packages/electron-builder/src/fileMatcher.ts @@ -5,7 +5,6 @@ import { warn } from "electron-builder-util/out/log" import { mkdirs } from "fs-extra-p" import { Minimatch } from "minimatch" import * as path from "path" -import { Macros } from "./metadata" import { createFilter, hasMagic } from "./util/filter" export class FileMatcher { @@ -14,14 +13,14 @@ export class FileMatcher { readonly patterns: Array - constructor(from: string, to: string, private options: Macros, patterns?: Array | string | n) { - this.from = this.expandPattern(from) - this.to = this.expandPattern(to) - this.patterns = asArray(patterns).map(it => path.posix.normalize(it)) + constructor(from: string, to: string, private readonly macroExpander: (pattern: string) => string, patterns?: Array | string | n) { + this.from = macroExpander(from) + this.to = macroExpander(to) + this.patterns = asArray(patterns).map(it => path.posix.normalize(macroExpander(it))) } addPattern(pattern: string) { - this.patterns.push(path.posix.normalize((pattern))) + this.patterns.push(path.posix.normalize(this.macroExpander(pattern))) } addAllPattern() { @@ -49,19 +48,18 @@ export class FileMatcher { return } - for (const p of this.patterns) { - let expandedPattern = this.expandPattern(p) + for (let pattern of this.patterns) { if (relativeFrom != null) { - expandedPattern = path.join(relativeFrom, expandedPattern) + pattern = path.join(relativeFrom, pattern) } - const parsedPattern = new Minimatch(expandedPattern, minimatchOptions) + const parsedPattern = new Minimatch(pattern, minimatchOptions) result.push(parsedPattern) if (!hasMagic(parsedPattern)) { // https://github.com/electron-userland/electron-builder/issues/545 // add **/* - result.push(new Minimatch(`${expandedPattern}/**/*`, minimatchOptions)) + result.push(new Minimatch(`${pattern}/**/*`, minimatchOptions)) } } } @@ -71,13 +69,6 @@ export class FileMatcher { this.computeParsedPatterns(parsedPatterns) return createFilter(this.from, parsedPatterns, ignoreFiles, rawFilter, excludePatterns) } - - private expandPattern(pattern: string): string { - return pattern - .replace(/\$\{arch}/g, this.options.arch!) - .replace(/\$\{os}/g, this.options.os) - .replace(/\$\{\/\*}/g, "{,/**/*}") - } } export function copyFiles(patterns: Array | null): Promise { diff --git a/packages/electron-builder/src/metadata.ts b/packages/electron-builder/src/metadata.ts index 4c1b0790681..efd4767ffec 100755 --- a/packages/electron-builder/src/metadata.ts +++ b/packages/electron-builder/src/metadata.ts @@ -341,11 +341,6 @@ export interface PlatformSpecificBuildOptions extends TargetSpecificOptions { readonly publish?: Publish } -export interface Macros { - os: string - arch: string | null -} - export function getPlatformIconFileName(value: string | null | undefined, isMac: boolean) { if (value === undefined) { return undefined diff --git a/packages/electron-builder/src/platformPackager.ts b/packages/electron-builder/src/platformPackager.ts index c6fb5d2cb19..86c4a24183f 100644 --- a/packages/electron-builder/src/platformPackager.ts +++ b/packages/electron-builder/src/platformPackager.ts @@ -10,7 +10,7 @@ import * as path from "path" import { AppInfo } from "./appInfo" import { checkFileInArchive, createAsarArchive } from "./asarUtil" import { copyFiles, FileMatcher } from "./fileMatcher" -import { AsarOptions, Config, FileAssociation, FilePattern, Macros, PlatformSpecificBuildOptions } from "./metadata" +import { AsarOptions, Config, FileAssociation, FilePattern, PlatformSpecificBuildOptions } from "./metadata" import { unpackElectron } from "./packager/dirPackager" import { BuildInfo, PackagerOptions } from "./packagerApi" import { readInstalled } from "./readInstalled" @@ -104,14 +104,14 @@ export abstract class PlatformPackager .then(() => BluebirdPromise.each(targets, it => it.isAsyncSupported ? null : it.build(appOutDir, arch)))) } - private getExtraFileMatchers(isResources: boolean, appOutDir: string, fileMatchOptions: Macros, customBuildOptions: DC): Array | null { + private getExtraFileMatchers(isResources: boolean, appOutDir: string, macroExpander: (pattern: string) => string, customBuildOptions: DC): Array | null { const base = isResources ? this.getResourcesDir(appOutDir) : (this.platform === Platform.MAC ? path.join(appOutDir, `${this.appInfo.productFilename}.app`, "Contents") : appOutDir) - return this.getFileMatchers(isResources ? "extraResources" : "extraFiles", this.projectDir, base, true, fileMatchOptions, customBuildOptions) + return this.getFileMatchers(isResources ? "extraResources" : "extraFiles", this.projectDir, base, true, macroExpander, customBuildOptions) } - private createFileMatcher(appDir: string, resourcesPath: string, fileMatchOptions: Macros, platformSpecificBuildOptions: DC) { - const patterns = this.info.isPrepackedAppAsar ? null : this.getFileMatchers("files", appDir, path.join(resourcesPath, "app"), false, fileMatchOptions, platformSpecificBuildOptions) - const matcher = patterns == null ? new FileMatcher(appDir, path.join(resourcesPath, "app"), fileMatchOptions) : patterns[0] + private createFileMatcher(appDir: string, resourcesPath: string, macroExpander: (pattern: string) => string, platformSpecificBuildOptions: DC) { + const patterns = this.info.isPrepackedAppAsar ? null : this.getFileMatchers("files", appDir, path.join(resourcesPath, "app"), false, macroExpander, platformSpecificBuildOptions) + const matcher = patterns == null ? new FileMatcher(appDir, path.join(resourcesPath, "app"), macroExpander) : patterns[0] if (matcher.isEmpty() || matcher.containsOnlyIgnore()) { matcher.addAllPattern() } @@ -141,13 +141,9 @@ export abstract class PlatformPackager } const asarOptions = await this.computeAsarOptions(platformSpecificBuildOptions) - const fileMatchOptions: Macros = { - arch: Arch[arch], - os: this.platform.buildConfigurationKey - } - - const extraResourceMatchers = this.getExtraFileMatchers(true, appOutDir, fileMatchOptions, platformSpecificBuildOptions) - const extraFileMatchers = this.getExtraFileMatchers(false, appOutDir, fileMatchOptions, platformSpecificBuildOptions) + const macroExpander = (it: string) => this.expandMacro(it, arch, {"/*": "{,/**/*}"}) + const extraResourceMatchers = this.getExtraFileMatchers(true, appOutDir, macroExpander, platformSpecificBuildOptions) + const extraFileMatchers = this.getExtraFileMatchers(false, appOutDir, macroExpander, platformSpecificBuildOptions) const resourcesPath = this.platform === Platform.MAC ? path.join(appOutDir, "Electron.app", "Contents", "Resources") : path.join(appOutDir, "resources") @@ -188,7 +184,7 @@ export abstract class PlatformPackager } } - const defaultMatcher = this.createFileMatcher(appDir, resourcesPath, fileMatchOptions, platformSpecificBuildOptions) + const defaultMatcher = this.createFileMatcher(appDir, resourcesPath, macroExpander, platformSpecificBuildOptions) const filter = defaultMatcher.createFilter(ignoreFiles, rawFilter, excludePatterns.length > 0 ? excludePatterns : null) let promise if (this.info.isPrepackedAppAsar) { @@ -198,7 +194,7 @@ export abstract class PlatformPackager promise = copyDir(appDir, path.join(resourcesPath, "app"), filter) } else { - const unpackPattern = this.getFileMatchers("asarUnpack", appDir, path.join(resourcesPath, "app"), false, fileMatchOptions, platformSpecificBuildOptions) + const unpackPattern = this.getFileMatchers("asarUnpack", appDir, path.join(resourcesPath, "app"), false, macroExpander, platformSpecificBuildOptions) const fileMatcher = unpackPattern == null ? null : unpackPattern[0] promise = createAsarArchive(appDir, resourcesPath, asarOptions, filter, fileMatcher == null ? null : fileMatcher.createFilter()) } @@ -279,11 +275,11 @@ export abstract class PlatformPackager return deepAssign({}, result, defaultOptions) } - private getFileMatchers(name: "files" | "extraFiles" | "extraResources" | "asarUnpack", defaultSrc: string, defaultDest: string, allowAdvancedMatching: boolean, fileMatchOptions: Macros, customBuildOptions: DC): Array | null { + private getFileMatchers(name: "files" | "extraFiles" | "extraResources" | "asarUnpack", defaultSrc: string, defaultDest: string, allowAdvancedMatching: boolean, macroExpander: (pattern: string) => string, customBuildOptions: DC): Array | null { const globalPatterns: Array | string | n | FilePattern = (this.config)[name] const platformSpecificPatterns: Array | string | n = (customBuildOptions)[name] - const defaultMatcher = new FileMatcher(defaultSrc, defaultDest, fileMatchOptions) + const defaultMatcher = new FileMatcher(defaultSrc, defaultDest, macroExpander) const fileMatchers: Array = [] function addPatterns(patterns: Array | string | n | FilePattern) { @@ -306,7 +302,7 @@ export abstract class PlatformPackager else if (allowAdvancedMatching) { const from = pattern.from == null ? defaultSrc : path.resolve(defaultSrc, pattern.from) const to = pattern.to == null ? defaultDest : path.resolve(defaultDest, pattern.to) - fileMatchers.push(new FileMatcher(from, to, fileMatchOptions, pattern.filter)) + fileMatchers.push(new FileMatcher(from, to, macroExpander, pattern.filter)) } else { throw new Error(`Advanced file copying not supported for "${name}"`) @@ -393,16 +389,22 @@ export abstract class PlatformPackager if (pattern == null) { pattern = this.platformSpecificBuildOptions.artifactName || this.config.artifactName || defaultPattern || "${productName}-${version}.${ext}" } + return this.expandMacro(pattern, arch, { + ext: ext + }) + } + expandMacro(pattern: string, arch: Arch | n, extra: any = {}): string { if (arch == null) { pattern = pattern .replace("-${arch}", "") .replace(" ${arch}", "") .replace("_${arch}", "") + .replace("/${arch}", "") } const appInfo = this.appInfo - return pattern.replace(/\$\{([a-zA-Z]+)\}/g, (match, p1): string => { + return pattern.replace(/\$\{([_a-zA-Z./*]+)\}/g, (match, p1): string => { switch (p1) { case "name": return appInfo.name @@ -423,11 +425,23 @@ export abstract class PlatformPackager case "os": return this.platform.buildConfigurationKey - case "ext": - return ext - default: - throw new Error(`Macro ${p1} is not defined`) + if (p1.startsWith("env.")) { + const envName = p1.substring("env.".length) + const envValue = process.env[envName] + if (envValue == null) { + throw new Error(`Env ${envName} is not defined`) + } + return envValue + } + + const value = extra[p1] + if (value == null) { + throw new Error(`Macro ${p1} is not defined`) + } + else { + return value + } } }) } diff --git a/packages/electron-builder/src/publish/PublishManager.ts b/packages/electron-builder/src/publish/PublishManager.ts index cf1f7648ec7..919c705af5d 100644 --- a/packages/electron-builder/src/publish/PublishManager.ts +++ b/packages/electron-builder/src/publish/PublishManager.ts @@ -15,7 +15,7 @@ import isCi from "is-ci" import { safeDump } from "js-yaml" import * as path from "path" import * as url from "url" -import { Macros, PlatformSpecificBuildOptions } from "../metadata" +import { PlatformSpecificBuildOptions } from "../metadata" import { Packager } from "../packager" import { ArtifactCreated, BuildInfo } from "../packagerApi" import { PlatformPackager } from "../platformPackager" @@ -28,7 +28,6 @@ export class PublishManager implements PublishContext { readonly publishTasks: Array> = [] private readonly errors: Array = [] - private isPublishOptionGuessed = false private isPublish = false readonly progress = (process.stdout).isTTY ? new MultiProgress() : null @@ -44,12 +43,10 @@ export class PublishManager implements PublishContext { if (tag != null) { log(`Tag ${tag} is defined, so artifacts will be published`) publishOptions.publish = "onTag" - this.isPublishOptionGuessed = true } else if (isCi) { log("CI detected, so artifacts will be published if draft release exists") publishOptions.publish = "onTagOrDraft" - this.isPublishOptionGuessed = true } } } @@ -68,14 +65,16 @@ export class PublishManager implements PublishContext { } const packager = event.packager - const publishConfigs = await getPublishConfigsForUpdateInfo(packager, await getPublishConfigs(packager, null, false)) + const publishConfigs = await getPublishConfigsForUpdateInfo(packager, await getPublishConfigs(packager, null)) if (publishConfigs == null || publishConfigs.length === 0) { return } let publishConfig = publishConfigs[0] if ((publishConfig).url != null) { - publishConfig = Object.assign({}, publishConfig, {url: expandPattern((publishConfig).url, {os: packager.platform.buildConfigurationKey, arch: packager.platform === Platform.WINDOWS ? null : Arch[Arch.x64]})}) + publishConfig = Object.assign({}, publishConfig, { + url: packager.expandMacro((publishConfig).url, packager.platform === Platform.WINDOWS ? null : Arch.x64) + }) } if (packager.platform === Platform.WINDOWS) { @@ -94,7 +93,7 @@ export class PublishManager implements PublishContext { private async artifactCreated(event: ArtifactCreated) { const packager = event.packager const target = event.target - const publishConfigs = event.publishConfig == null ? await getPublishConfigs(packager, target == null ? null : (packager.config)[target.name], !this.isPublishOptionGuessed) : [event.publishConfig] + const publishConfigs = event.publishConfig == null ? await getPublishConfigs(packager, target == null ? null : (packager.config)[target.name]) : [event.publishConfig] const eventFile = event.file if (publishConfigs == null) { @@ -228,10 +227,7 @@ async function writeUpdateInfo(event: ArtifactCreated, _publishConfigs: ArrayoutputJson)(updateInfoFile, { version: version, releaseDate: new Date().toISOString(), - url: computeDownloadUrl(publishConfig, packager.generateName2("zip", "mac", isGitHub), version, { - os: Platform.MAC.buildConfigurationKey, - arch: Arch[Arch.x64] - }), + url: computeDownloadUrl(publishConfig, packager.generateName2("zip", "mac", isGitHub), packager, null), }, {spaces: 2}) packager.info.dispatchArtifactCreated({ @@ -301,9 +297,9 @@ export function createPublisher(context: PublishContext, version: string, publis return null } -export function computeDownloadUrl(publishConfig: PublishConfiguration, fileName: string | null, version: string, macros: Macros) { +export function computeDownloadUrl(publishConfig: PublishConfiguration, fileName: string | null, packager: PlatformPackager, arch: Arch | null) { if (publishConfig.provider === "generic") { - const baseUrlString = expandPattern((publishConfig).url, macros) + const baseUrlString = packager.expandMacro((publishConfig).url, arch) if (fileName == null) { return baseUrlString } @@ -318,7 +314,7 @@ export function computeDownloadUrl(publishConfig: PublishConfiguration, fileName } else { const gh = publishConfig - baseUrl = `${githubUrl(gh)}/${gh.owner}/${gh.repo}/releases/download/v${version}` + baseUrl = `${githubUrl(gh)}/${gh.owner}/${gh.repo}/releases/download/v${packager.appInfo.version}` } if (fileName == null) { @@ -327,25 +323,7 @@ export function computeDownloadUrl(publishConfig: PublishConfiguration, fileName return `${baseUrl}/${encodeURI(fileName)}` } -function expandPattern(pattern: string, macros: Macros): string { - const arch = macros.arch - if (arch == null) { - pattern = pattern - .replace("-${arch}", "") - .replace(" ${arch}", "") - .replace("_${arch}", "") - .replace("/${arch}", "") - } - - pattern = pattern.replace(/\$\{os}/g, macros.os) - if (arch != null) { - pattern = pattern.replace(/\$\{arch}/g, arch) - } - - return pattern -} - -export async function getPublishConfigs(packager: PlatformPackager, targetSpecificOptions: PlatformSpecificBuildOptions | null | undefined, errorIfCannot: boolean = true): Promise | null> { +export async function getPublishConfigs(packager: PlatformPackager, targetSpecificOptions: PlatformSpecificBuildOptions | null | undefined): Promise | null> { let publishers // check build.nsis (target) @@ -419,4 +397,4 @@ function isPullRequest() { } return isSet(process.env.TRAVIS_PULL_REQUEST) || isSet(process.env.CI_PULL_REQUEST) || isSet(process.env.CI_PULL_REQUESTS) -} +} \ No newline at end of file diff --git a/packages/electron-builder/src/targets/WebInstaller.ts b/packages/electron-builder/src/targets/WebInstaller.ts index e45329af6e6..0119c9e6f79 100644 --- a/packages/electron-builder/src/targets/WebInstaller.ts +++ b/packages/electron-builder/src/targets/WebInstaller.ts @@ -1,4 +1,3 @@ -import { Platform } from "electron-builder-core" import { NsisWebOptions } from "../options/winOptions" import { computeDownloadUrl, getPublishConfigs, getPublishConfigsForUpdateInfo } from "../publish/PublishManager" import { WinPackager } from "../winPackager" @@ -27,10 +26,7 @@ export default class WebInstallerTarget extends NsisTarget { throw new Error("Cannot compute app package download URL") } - appPackageUrl = computeDownloadUrl(publishConfigs[0], null, packager.appInfo.version, { - os: Platform.WINDOWS.buildConfigurationKey, - arch: "" - }) + appPackageUrl = computeDownloadUrl(publishConfigs[0], null, packager, null) defines.APP_PACKAGE_URL_IS_INCOMLETE = null } diff --git a/test/out/__snapshots__/filesTest.js.snap b/test/out/__snapshots__/filesTest.js.snap index 08b9cbc0f00..0df08ccf746 100644 --- a/test/out/__snapshots__/filesTest.js.snap +++ b/test/out/__snapshots__/filesTest.js.snap @@ -1,5 +1,7 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`expand not defined env 1`] = `"Env FOO_NOT_DEFINED is not defined"`; + exports[`extraResources on Linux and Windows 1`] = ` Array [ "RELEASES", diff --git a/test/out/mac/__snapshots__/macPackagerTest.js.snap b/test/out/mac/__snapshots__/macPackagerTest.js.snap index aa145f188b3..8a7a9dd9d23 100644 --- a/test/out/mac/__snapshots__/macPackagerTest.js.snap +++ b/test/out/mac/__snapshots__/macPackagerTest.js.snap @@ -73,7 +73,7 @@ Array [ exports[`one-package 3`] = ` Object { "releaseDate": "1970-01-01T00:00:00.000Z", - "url": "https://develar.s3.amazonaws.com/test/mac/x64/Test%20App%20%C3%9FW-1.1.0-mac.zip", + "url": "https://develar.s3.amazonaws.com/test/mac/Test%20App%20%C3%9FW-1.1.0-mac.zip", "version": "1.1.0", } `; diff --git a/test/src/filesTest.ts b/test/src/filesTest.ts index 7354c0cead8..07f6cd65e5c 100644 --- a/test/src/filesTest.ts +++ b/test/src/filesTest.ts @@ -8,13 +8,25 @@ import pathSorter from "path-sort" import Mode, { Permissions } from "stat-mode" import { expectedWinContents } from "./helpers/expectedContents" import { assertThat } from "./helpers/fileAssert" -import { app, assertPack } from "./helpers/packTester" +import { app, appThrows, assertPack } from "./helpers/packTester" + +const linuxDirTarget = Platform.LINUX.createTarget(DIR_TARGET) + +test.ifDevOrLinuxCi("expand not defined env", appThrows({ + targets: linuxDirTarget, + config: { + asar: false, + files: ["${env.FOO_NOT_DEFINED}"], + } +})) + +process.env.__NOT_BAR__ = "!**/bar" test.ifDevOrLinuxCi("files", app({ - targets: Platform.LINUX.createTarget(DIR_TARGET), + targets: linuxDirTarget, config: { asar: false, - files: ["!ignoreMe${/*}", "!**/bar"], + files: ["!ignoreMe${/*}", "${env.__NOT_BAR__}"], } }, { projectDirCreated: projectDir => BluebirdPromise.all([ @@ -31,7 +43,7 @@ test.ifDevOrLinuxCi("files", app({ })) test.ifDevOrLinuxCi("map resources", app({ - targets: Platform.LINUX.createTarget(DIR_TARGET), + targets: linuxDirTarget, config: { asar: false, extraResources: [ diff --git a/yarn.lock b/yarn.lock index 4934b99ca76..951010d70b9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -22,9 +22,9 @@ "7zip-bin-mac" "^1.0.1" "7zip-bin-win" "^2.0.2" -"@develar/typescript-json-schema@0.9.1": - version "0.9.1" - resolved "https://registry.yarnpkg.com/@develar/typescript-json-schema/-/typescript-json-schema-0.9.1.tgz#667b110aff37d251d836bda3c4d7e52f9f970886" +"@develar/typescript-json-schema@0.9.3": + version "0.9.3" + resolved "https://registry.yarnpkg.com/@develar/typescript-json-schema/-/typescript-json-schema-0.9.3.tgz#01574486bae0097ccb89ceef9b7a182dca0ee2c5" dependencies: glob "~7.1.1" json-stable-stringify "^1.0.1" @@ -1242,15 +1242,15 @@ findup-sync@~0.3.0: dependencies: glob "~5.0.0" -for-in@^0.1.5: - version "0.1.6" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8" +for-in@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.1.tgz#d6c3e3798ceaaa301047b109dedf1b1ae37a0efa" for-own@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072" + 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" forever-agent@~0.6.1: version "0.6.1" @@ -2850,8 +2850,8 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" resolve@^1.1.7, resolve@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.1.tgz#5d0a1632609b6b00a22284293db1d5d973676314" + version "1.3.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.2.tgz#1f0442c9e0cbb8136e87b9305f932f46c7f28235" dependencies: path-parse "^1.0.5" @@ -3260,15 +3260,6 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -typescript-json-schema@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/typescript-json-schema/-/typescript-json-schema-0.9.0.tgz#09d244139d18167d4c0a179370b170dc322892b2" - dependencies: - glob "~7.1.1" - json-stable-stringify "^1.0.1" - typescript "~2.1.5" - yargs "^6.6.0" - typescript@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.2.1.tgz#4862b662b988a4c8ff691cc7969622d24db76ae9"