diff --git a/.bazelproject b/.bazelproject index e14c108008..b3521fea50 100644 --- a/.bazelproject +++ b/.bazelproject @@ -22,3 +22,11 @@ workspace_type: java build_flags: --javacopt=-g + +additional_languages: + javascript + typescript + +ts_config_rules: + //tools/node_tools/node_modules_licenses:tsconfig_editor + //polygerrit-ui/app/node_modules_licenses:tsconfig_editor diff --git a/WORKSPACE b/WORKSPACE index 56e76ab2e4..7717417ec2 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -1217,6 +1217,15 @@ yarn_install( yarn_lock = "//:tools/node_tools/yarn.lock", ) +# Install all Bazel dependencies needed for npm packages that supply Bazel rules +load("@npm//:install_bazel_dependencies.bzl", "install_bazel_dependencies") + +install_bazel_dependencies() + +load("@npm_bazel_typescript//:index.bzl", "ts_setup_workspace") + +ts_setup_workspace() + # Bower component transitive dependencies. load("//lib/js:bower_archives.bzl", "load_bower_archives") diff --git a/package.json b/package.json index d3da55339f..029e348460 100644 --- a/package.json +++ b/package.json @@ -4,13 +4,15 @@ "description": "Gerrit Code Review", "dependencies": {}, "devDependencies": { + "@bazel/rollup": "^1.1.0", + "@bazel/typescript": "^1.0.1", "eslint": "^6.6.0", "eslint-config-google": "^0.13.0", "eslint-plugin-html": "^6.0.0", "eslint-plugin-jsdoc": "^18.4.3", "fried-twinkie": "^0.2.2", "polymer-cli": "^1.9.11", - "typescript": "^2.x.x", + "typescript": "^3.7.4", "web-component-tester": "^6.5.1" }, "scripts": { diff --git a/polygerrit-ui/app/BUILD b/polygerrit-ui/app/BUILD index e21dbe2d22..3f941e3ec8 100644 --- a/polygerrit-ui/app/BUILD +++ b/polygerrit-ui/app/BUILD @@ -12,6 +12,8 @@ polygerrit_bundle( "**/*.js", ], exclude = [ + "node_modules/**", + "node_modules_licenses/**", "bower_components/**", "test/**", "**/*_test.html", @@ -41,6 +43,8 @@ filegroup( ], exclude = [ "bower_components/**", + "node_modules/**", + "node_modules_licenses/**", ], ), ) @@ -54,6 +58,8 @@ filegroup( ], exclude = [ "bower_components/**", + "node_modules/**", + "node_modules_licenses/**", "**/*_test.html", "test/**", "samples/**", diff --git a/polygerrit-ui/app/node_modules_licenses/.gitignore b/polygerrit-ui/app/node_modules_licenses/.gitignore new file mode 100644 index 0000000000..6a3417b8d9 --- /dev/null +++ b/polygerrit-ui/app/node_modules_licenses/.gitignore @@ -0,0 +1 @@ +/out/ diff --git a/polygerrit-ui/app/node_modules_licenses/BUILD b/polygerrit-ui/app/node_modules_licenses/BUILD new file mode 100644 index 0000000000..d2f24b9071 --- /dev/null +++ b/polygerrit-ui/app/node_modules_licenses/BUILD @@ -0,0 +1,61 @@ +load("@npm_bazel_typescript//:index.bzl", "ts_config", "ts_library") +load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_binary", "npm_package_bin") +load("//tools/node_tools/node_modules_licenses:node_modules_licenses.bzl", "node_modules_licenses") + +filegroup( + name = "licenses-texts", + srcs = glob(["licenses/*.txt"]), +) + +ts_library( + name = "licenses-config", + srcs = [ + "licenses.ts", + ], + compiler = "//tools/node_tools:tsc_wrapped-bin", + node_modules = "@tools_npm//:node_modules", + tsconfig = "tsconfig.json", + deps = [ + "//tools/node_tools/node_modules_licenses:licenses-map", + "@tools_npm//@types/node", + ], +) + +# (TODO)dmfilippov Find a better way to fix it (another workaround or submit a bug to +# plugin's authors or to a ts_config rule author). +# The following genrule is a workaround for a bazel intellij plugin's bug. +# According to the documentation, the ts_config_rules section should be added +# to a .bazelproject file if a project uses typescript +# (https://ij.bazel.build/docs/dynamic-languages-typescript.html) +# Unfortunately, this doesn't work. It seems, that the plugin expects some output from +# the ts_config rule, but the rule doesn't produce any output. +# To workaround the issue, the tsconfig_editor genrule was added. The genrule only copies +# input file to the output file, but this is enough to make bazel plugins works. +# So, if you have any problem a typescript editor (import errors, types not found, etc...) - +# try to build this rule from the command line +# (bazel build tools/node_tools/node_modules/licenses:tsconfig_editor) and then sync bazel project +# in intellij. +genrule( + name = "tsconfig_editor", + srcs = [":tsconfig.json"], + outs = ["tsconfig_editor.json"], + cmd = "cp $< $@", +) + +# filegroup is enough (instead of rollup-bundle), because we are not going to run licenses.ts file +filegroup( + name = "licenses-config-js", + srcs = [":licenses-config"], + output_group = "es5_sources", +) + +# Generate polygerrit-licenses.json for files in @ui_npm workspace. +# For details - see comments for node_modules_licenses rule and +# tools/node_tools/node_modules_licenses/license-map-generator.ts file +node_modules_licenses( + name = "polygerrit-licenses", + licenses_config = "licenses-config-js", + licenses_texts = [":licenses-texts"], + node_modules = "@ui_npm//:node_modules", + visibility = ["//visibility:public"], +) diff --git a/polygerrit-ui/app/node_modules_licenses/licenses.ts b/polygerrit-ui/app/node_modules_licenses/licenses.ts new file mode 100644 index 0000000000..cb80b33fa8 --- /dev/null +++ b/polygerrit-ui/app/node_modules_licenses/licenses.ts @@ -0,0 +1,84 @@ +/** + * @license + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Ugly import path due to the following bugs: +// https://github.com/bazelbuild/rules_nodejs/issues/1522 +// https://github.com/bazelbuild/rules_nodejs/issues/1380 +import {PackageInfo, LicenseType, LicenseInfo} from "../../../tools/node_tools/node_modules_licenses/package-license-info"; + +class LicenseTypes { + public static Mit: LicenseType = { + name: "MIT", + allowed: true + }; + public static Gpl: LicenseType = { + name: "GPL", + allowed: true + }; + + public static Bsd3: LicenseType = { + name: "BSD-3-Clause", + allowed: true + }; +} + +/** List of licenses texts. Add the licenses here if there is no text file with license + * in package. For details - see comments for {@link LicenseInfo} and {@link PackageInfo} */ +class SharedLicenses { + public static Polymer2015: LicenseInfo = { + name: "Polymer-2015", + type: LicenseTypes.Bsd3, + sharedLicenseFile: "polymer-2015.txt", + }; + + public static Polymer2017: LicenseInfo = { + name: "Polymer-2017", + type: LicenseTypes.Bsd3, + sharedLicenseFile: "polymer-2017.txt", + } +} + +const packages: PackageInfo[] = [ + { + name: "@polymer/iron-a11y-keys-behavior", + license: SharedLicenses.Polymer2015 + }, + { + name: "@polymer/polymer", + license: SharedLicenses.Polymer2017, + filesFilter: f => ["index.html", "LICENSE.txt"].indexOf(f) < 0, + }, + { + name: "@polymer/polymer", + license: SharedLicenses.Polymer2015, + filesFilter: f => ["index.html", "LICENSE.txt"].indexOf(f) >= 0, + }, + { + name: "@webcomponents/shadycss", + license: SharedLicenses.Polymer2017, + }, + { + name: "ba-linkify", + license: { + name: "ba-linkify", + type: LicenseTypes.Mit, + packageLicenseFile: "LICENSE", + } + } +]; + +export default packages; diff --git a/polygerrit-ui/app/node_modules_licenses/licenses/polymer-2015.txt b/polygerrit-ui/app/node_modules_licenses/licenses/polymer-2015.txt new file mode 100644 index 0000000000..0e805c62a4 --- /dev/null +++ b/polygerrit-ui/app/node_modules_licenses/licenses/polymer-2015.txt @@ -0,0 +1,2 @@ +This is an example of license text - 2015 +It is not in use and it is updated in other change. diff --git a/polygerrit-ui/app/node_modules_licenses/licenses/polymer-2017.txt b/polygerrit-ui/app/node_modules_licenses/licenses/polymer-2017.txt new file mode 100644 index 0000000000..fd4e292c2f --- /dev/null +++ b/polygerrit-ui/app/node_modules_licenses/licenses/polymer-2017.txt @@ -0,0 +1,2 @@ +This is an example of license text - 2017 +It is not in use and it is updated in other change. diff --git a/polygerrit-ui/app/node_modules_licenses/tsconfig.json b/polygerrit-ui/app/node_modules_licenses/tsconfig.json new file mode 100644 index 0000000000..16559adde8 --- /dev/null +++ b/polygerrit-ui/app/node_modules_licenses/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "target": "es6", + "module": "commonjs", + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "strict": true, + "moduleResolution": "node", + "outDir": "out", + "noImplicitAny": false, + "types": ["node"] + }, + "include": ["**/*.ts"] +} diff --git a/tools/node_tools/BUILD b/tools/node_tools/BUILD new file mode 100644 index 0000000000..018674c3a6 --- /dev/null +++ b/tools/node_tools/BUILD @@ -0,0 +1,34 @@ +load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_binary") + +package(default_visibility = ["//visibility:public"]) + +# By default, rollup_bundle rule uses rollup from @npm workspace +# and it expects that all plugins are installed in the same workspace. +# This rule defines another rollup-bin from @tools_npm workspace. +# Usage: rollup_bundle(rollup_bin = "//tools/node_tools:rollup-bin, ...) +nodejs_binary( + name = "rollup-bin", + data = [ + "@tools_npm//:node_modules", + ], + # The entry point must be "@tools_npm:node_modules/rollup/dist/bin/rollup", + # But bazel doesn't run it correctly with the following command line: + # bazel test --test_env=GERRIT_NOTEDB=ON --spawn_strategy=standalone \ + # --genrule_strategy=standalone --test_output errors --test_summary detailed \ + # --flaky_test_attempts 3 --test_verbose_timeout_warnings --build_tests_only \ + # --subcommands //... + # This command line appears in Gerrit CI. + # For details, see comment in rollup-runner.js file + entry_point = "//tools/node_tools:rollup-runner.js", +) + +# Create a tsc_wrapped compiler rule to use in the ts_library +# compiler attribute when using self-managed dependencies +nodejs_binary( + name = "tsc_wrapped-bin", + # Point bazel to your node_modules to find the entry point + data = ["@tools_npm//:node_modules"], + # It seems, bazel uses different approaches to compile ts files (it runs some + # ts service in background). It works without any workaround. + entry_point = "@tools_npm//:node_modules/@bazel/typescript/internal/tsc_wrapped/tsc_wrapped.js", +) diff --git a/tools/node_tools/node_modules_licenses/.gitignore b/tools/node_tools/node_modules_licenses/.gitignore new file mode 100644 index 0000000000..6a3417b8d9 --- /dev/null +++ b/tools/node_tools/node_modules_licenses/.gitignore @@ -0,0 +1 @@ +/out/ diff --git a/tools/node_tools/node_modules_licenses/BUILD b/tools/node_tools/node_modules_licenses/BUILD new file mode 100644 index 0000000000..7f7490e2f6 --- /dev/null +++ b/tools/node_tools/node_modules_licenses/BUILD @@ -0,0 +1,61 @@ +load("@npm_bazel_typescript//:index.bzl", "ts_config", "ts_library") +load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_binary") +load("@npm_bazel_rollup//:index.bzl", "rollup_bundle") + +package(default_visibility = ["//visibility:public"]) + +ts_library( + name = "licenses-map", + srcs = glob(["*.ts"]), + compiler = "//tools/node_tools:tsc_wrapped-bin", + node_modules = "@tools_npm//:node_modules", + tsconfig = "tsconfig.json", + deps = [ + "@tools_npm//@types/node", + ], +) + +# rollup_bundle - workaround for https://github.com/bazelbuild/rules_nodejs/issues/1522 +# The ts_library rule ("license-map") transpiles each .ts file to .js file. +# The "license-map" rule includes multiple .ts files and produces multiple output files. +# The nodejs_binary requires only one file as an entry_point. It is expected, that other +# .js files from ts_library are also available, but because of the bug they are not available. +# As a workaround we are using rollup_bundle to group all files together. +rollup_bundle( + name = "license-map-generator-bundle", + config_file = "rollup.config.js", + entry_point = "license-map-generator.ts", + format = "cjs", + rollup_bin = "//tools/node_tools:rollup-bin", + deps = [ + ":licenses-map", + "@tools_npm//rollup", + "@tools_npm//rollup-plugin-node-resolve", + ], +) + +nodejs_binary( + name = "license-map-generator-bin", + entry_point = "license-map-generator-bundle.js", +) + +# (TODO)dmfilippov Find a better way to fix it (another workaround or submit a bug to +# plugin's authors or to a ts_config rule author). +# The following genrule is a workaround for a bazel intellij plugin's bug. +# According to the documentation, the ts_config_rules section should be added +# to a .bazelproject file if a project uses typescript +# (https://ij.bazel.build/docs/dynamic-languages-typescript.html) +# Unfortunately, this doesn't work. It seems, that the plugin expects some output from +# the ts_config rule, but the rule doesn't produce any output. +# To workaround the issue, the tsconfig_editor genrule was added. The genrule only copies +# input file to the output file, but this is enough to make bazel plugins works. +# So, if you have any problem a typescript editor (import errors, types not found, etc...) - +# try to build this rule from the command line +# (bazel build tools/node_tools/node_modules/licenses:tsconfig_editor) and then sync bazel project +# in intellij. +genrule( + name = "tsconfig_editor", + srcs = ["tsconfig.json"], + outs = ["tsconfig_editor.json"], + cmd = "cp $< $@", +) diff --git a/tools/node_tools/node_modules_licenses/README.md b/tools/node_tools/node_modules_licenses/README.md new file mode 100644 index 0000000000..b3258ee7eb --- /dev/null +++ b/tools/node_tools/node_modules_licenses/README.md @@ -0,0 +1,14 @@ +This directory contains a tool to produce json file with information about licenses for npm +workspace. + +The tool consists of: +* Command-line tool (entry point license-map-generator.ts) which gets as input a list of files in + a node_modules folder, licenses config and produces a json file with packages grouped by their + licenses. + If the tool finds a file with an inappropriate license, then it returns error. + + Exact format for input and output data of the tool can be found in the source code. + +* Bazel rule node_modules_licenses (in the node_modules_licenses.bzl file), which wraps + command-line tool and allows to call it + during the build diff --git a/tools/node_tools/node_modules_licenses/base-types.ts b/tools/node_tools/node_modules_licenses/base-types.ts new file mode 100644 index 0000000000..3c067d14e1 --- /dev/null +++ b/tools/node_tools/node_modules_licenses/base-types.ts @@ -0,0 +1,24 @@ +/** + * @license + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** Aliases to use in the code*/ +export type PackageName = string; +export type PackageVersion = string; +export type FilePath = string; +export type DirPath = string; +export type LicenseName = string; +export type LicenseTypeName = string; diff --git a/tools/node_tools/node_modules_licenses/installed-node-modules-map.ts b/tools/node_tools/node_modules_licenses/installed-node-modules-map.ts new file mode 100644 index 0000000000..3f4955e798 --- /dev/null +++ b/tools/node_tools/node_modules_licenses/installed-node-modules-map.ts @@ -0,0 +1,101 @@ +/** + * @license + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { PackageName, PackageVersion, DirPath, FilePath } from "./base-types"; +import {fail} from "./utils"; +import * as path from "path"; +import * as fs from "fs"; + +/** + * Describe one installed package from node_modules + */ +export interface InstalledPackage { + /** Package name (it is calculated based on path to module) */ + name: PackageName; + /** Package version from package.json */ + version: PackageVersion; + /** + * Path to the top-level package directory, where package.json is placed + * This path is relative to process working directory (because bazel pass all paths relative to it) + */ + rootPath: DirPath; + /** All files in package. Path is relative to rootPath */ + files: FilePath[]; +} + +/** + * Calculates all installed packages from a list of files + * It is expected, that the addPackageJson method is called first for + * all package.json files first and then the addFile method is called for all files (including package.json) + */ +export class InsalledPackagesBuilder { + private readonly rootPathToPackageMap: Map = new Map(); + + public addPackageJson(packageJsonPath: string) { + const pack = this.createInstalledPackage(packageJsonPath); + this.rootPathToPackageMap.set(pack.rootPath, pack) + } + public addFile(file: string) { + const pack = this.findPackageForFile(file)!; + pack.files.push(path.relative(pack.rootPath, file)); + } + + /** + * Create new InstalledPackage. + * The name of a package is a relative path to the closest node_modules parent. + * For example for the packageJsonFile='/a/node_modules/b/node_modules/d/e/package.json' + * the package name is 'd/e' + */ + private createInstalledPackage(packageJsonFile: string): InstalledPackage { + const nameParts: Array = []; + const rootPath = path.dirname(packageJsonFile); + let currentDir = rootPath; + while(currentDir != "") { + const partName = path.basename(currentDir); + if(partName === "node_modules") { + const version = JSON.parse(fs.readFileSync(packageJsonFile, {encoding: 'utf-8'}))["version"]; + if(!version) { + fail(`Can't get version for ${packageJsonFile}`) + } + return { + name: nameParts.reverse().join("/"), + rootPath: rootPath, + version: version, + files: [] + }; + } + nameParts.push(partName); + currentDir = path.dirname(currentDir); + } + fail(`Can't create package info for '${packageJsonFile}'`) + } + + private findPackageForFile(filePath: FilePath): InstalledPackage { + let currentDir = path.dirname(filePath); + while(currentDir != "") { + if(this.rootPathToPackageMap.has(currentDir)) { + return this.rootPathToPackageMap.get(currentDir)!; + } + currentDir = path.dirname(currentDir); + } + fail(`Can't find package for '${filePath}'`); + } + + public build(): InstalledPackage[] { + return [...this.rootPathToPackageMap.values()]; + } +} diff --git a/tools/node_tools/node_modules_licenses/license-map-generator.ts b/tools/node_tools/node_modules_licenses/license-map-generator.ts new file mode 100644 index 0000000000..c0c2315725 --- /dev/null +++ b/tools/node_tools/node_modules_licenses/license-map-generator.ts @@ -0,0 +1,85 @@ +/** + * @license + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * This is a command-line tool to calculate licenses for files in npm packages. + * The tool expected the following inputs: + * + * config.js - information about licenses for packages. The js file must be a module + * and must have array of {@link PackageInfo} as a default export. + * + * node-modules-files.txt - list of files (one per line) to calculate license. + * Each line must be a path to a file inside node_module directory + * (full path or path relative to current work dir) + * + * shared-licenses.txt - list of files (one per line) with licenses texts. Each line is a path + * to a file with license text. The files can be referenced by {@link SharedFileLicenseInfo} + * + * json-output.json - output file name. The {@link LicensesMap} defines the schema of this file. + * + * Note: It is expected, that config is compiled from .ts file end has default export. + * Typescript compiler checks that .ts file matches PackageInfo interface, so no additional + * validations are needed. + */ + +import * as path from "path"; +import * as fs from "fs"; +import {PackageInfo} from "./package-license-info"; +import {fail, readMultilineParamFile} from "./utils"; +import {LicenseMapGenerator} from "./licenses-map"; +import {SharedLicensesProvider} from "./shared-licenses-provider"; + +interface LicenseMapCommandLineArgs { + generatorParams: LicenseMapGeneratorParameters; + outputJsonPath: string; +} + +export interface LicenseMapGeneratorParameters { + sharedLicensesFiles: string[]; + nodeModulesFiles: string[]; + packages: PackageInfo[]; +} + +function parseArguments(argv: string[]): LicenseMapCommandLineArgs { + if(argv.length < 6) { + fail("Invalid command line parameters\n" + + "\tUsage:\n\tnode license-map-generator config.js node-modules-files.txt shared-licenses.txt json-output.json"); + } + const packages: PackageInfo[] = require(path.join(process.cwd(), argv[2])).default; + const nodeModulesFiles = readMultilineParamFile(argv[3]); + const sharedLicensesFiles = readMultilineParamFile(argv[4]); + + return { + generatorParams: { + packages, + nodeModulesFiles, + sharedLicensesFiles, + }, + outputJsonPath: argv[5] + } +} + +function main() { + const args = parseArguments(process.argv); + const generator = new LicenseMapGenerator(args.generatorParams.packages, new SharedLicensesProvider(args.generatorParams.sharedLicensesFiles)); + const licenseMap = generator.generateMap(args.generatorParams.nodeModulesFiles); + // JSON is quite small, so there are no reasons to minify it. + // Write it as multiline file with tabs (spaces). + fs.writeFileSync(args.outputJsonPath, JSON.stringify(licenseMap, null, 2), "utf-8"); +} + +main(); diff --git a/tools/node_tools/node_modules_licenses/licenses-map.ts b/tools/node_tools/node_modules_licenses/licenses-map.ts new file mode 100644 index 0000000000..9f277e5f55 --- /dev/null +++ b/tools/node_tools/node_modules_licenses/licenses-map.ts @@ -0,0 +1,279 @@ +/** + * @license + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import * as path from "path"; +import * as fs from "fs"; +import {isSharedFileLicenseInfo, LicenseInfo, PackageInfo} from "./package-license-info"; +import {LicenseName, PackageName, FilePath, PackageVersion} from "./base-types"; +import { InstalledPackage, InsalledPackagesBuilder } from "./installed-node-modules-map"; +import {SharedLicensesProvider} from "./shared-licenses-provider"; +import {fail} from "./utils"; + +interface FilteredFiles { + installedPackage: InstalledPackage; + /** Path relative to installedPackage */ + includedFiles: FilePath[]; + /** Path relative to installedPackage */ + excludedFiles: FilePath[]; +} +interface PackageLicensedFiles { + packageInfo: PackageInfo; + filteredFiles: FilteredFiles; +} + +enum LicensedFilesDisplayInfoType { + AllFiles = "AllFiles", + OnlySpecificFiles = "OnlySpecificFiles", + AllFilesExceptSpecific = "AllFilesExceptSpecific", +} + +interface AllFiles { + kind: LicensedFilesDisplayInfoType.AllFiles; +} + +interface AllFilesExceptSpecificFiles { + kind: LicensedFilesDisplayInfoType.AllFilesExceptSpecific; + /** Path relative to installedPackage */ + files: FilePath[] +} + +interface OnlySpecificFiles { + kind: LicensedFilesDisplayInfoType.OnlySpecificFiles; + /** Path relative to installedPackage */ + files: FilePath[]; +} + +export type FilteredFilesDisplayInfo = AllFiles | AllFilesExceptSpecificFiles | OnlySpecificFiles; + +export interface LicenseMapPackageInfo { + name: PackageName; + version: PackageVersion; + licensedFiles: FilteredFilesDisplayInfo; +} + +export interface LicenseMapItem { + licenseName: LicenseName, + licenseText: string; + packages: LicenseMapPackageInfo[]; +} + +export type LicensesMap = { [licenseName: string]: LicenseMapItem } + +/** LicenseMapGenerator calculates license map for nodeModulesFiles. + */ +export class LicenseMapGenerator { + /** + * packages - information about licenses for packages + * sharedLicensesProvider - returns text for shared licenses by name + */ + public constructor(private readonly packages: ReadonlyArray, private readonly sharedLicensesProvider: SharedLicensesProvider) { + } + + /** generateMap calculates LicenseMap for nodeModulesFiles + * Each (key, value) pair in this map has the following information: + * The key is a license name. + * The value contains information about packages and files for which this license + * is applied. + * + * The method tries to provide information in a compact way: + * 1) If all files in the package have the same license, then it stores a name of the package + * without list of files + * 2) If different files in the package has different licenses, then the method calculates + * which list is shorter - list of included files or list of excluded files. + */ + public generateMap(nodeModulesFiles: ReadonlyArray): LicensesMap { + const installedPackages = this.getInstalledPackages(nodeModulesFiles); + const licensedFilesGroupedByLicense = this.getLicensedFilesGroupedByLicense(installedPackages); + + const result: LicensesMap = {}; + licensedFilesGroupedByLicense.forEach((packageLicensedFiles, licenseName) => { + result[licenseName] = this.getLicenseMapItem(licenseName, packageLicensedFiles); + }); + return result; + } + + private getLicenseMapItem(licenseName: string, packagesLicensedFiles: PackageLicensedFiles[]): LicenseMapItem { + const packages: LicenseMapPackageInfo[] = []; + let licenseText: string = ""; + packagesLicensedFiles.forEach((packageLicensedFiles) => { + const packageLicenseText = this.getLicenseText(packageLicensedFiles); + if (licenseText.length !== 0 && packageLicenseText !== licenseText) { + fail(`There are different license texts for license '${licenseName}'.\n` + + "Probably, you have multiple version of the same package.\n" + + "In this case you must define different license name for each version" + ); + } + licenseText = packageLicenseText; + packages.push({ + name: packageLicensedFiles.packageInfo.name, + version: packageLicensedFiles.filteredFiles.installedPackage.version, + licensedFiles: this.getFilteredFilesDisplayInfo(packageLicensedFiles.filteredFiles) + }); + }); + return { + licenseName, + licenseText, + packages + }; + } + + /** getFilteredFilesDisplayInfo calculates the best method to display information about + * filteredFiles in filteredFiles.installedPackage + * In the current implementation - the best method is a method with a shorter list of files + * + * Each {@link PackageInfo} has a filter for files (by default all files + * are included). Applying filter to files from an installedPackage returns 2 lists of files: + * includedFiles (i.e. files with {@link PackageInfo.license} license) and excludedFiles + * (i.e. files which have different license(s)). + * + * A text representaion of license-map must have full information about per-file licenses if + * needed, but we want to produce files lists there as short as possible + */ + private getFilteredFilesDisplayInfo(filteredFiles: FilteredFiles): FilteredFilesDisplayInfo { + if (filteredFiles.includedFiles.length > 0 && filteredFiles.excludedFiles.length === 0) { + /** All files from package are included (i.e. all files have the same license). + * It is enough to print only installedPackage name. + * */ + return { + kind: LicensedFilesDisplayInfoType.AllFiles + } + } else if (filteredFiles.includedFiles.length <= filteredFiles.excludedFiles.length) { + /** After applying filter, the number of files with filteredFiles.license is less than + * the number of excluded files. + * It is more convenient to print information about license in the format: + * GIT license - fontPackage (only files A,B,C)*/ + return { + kind: LicensedFilesDisplayInfoType.OnlySpecificFiles, + files: filteredFiles.includedFiles + }; + } else { + /** Only few files from filteredFiles.installedPackage has filteredFiles.license. + * It is more convenient to print information about license in the format: + * Apache license - fontPackage (except files A,B,C) + */ + return { + kind: LicensedFilesDisplayInfoType.AllFilesExceptSpecific, + files: filteredFiles.excludedFiles + } + } + } + + private getLicensedFilesGroupedByLicense(installedPackages: InstalledPackage[]): Map { + const result: Map = new Map(); + installedPackages.forEach(installedPackage => { + // It is possible that different files in package have different licenses. + // See the getPackageInfosForInstalledPackage method for details. + const packageInfos = this.findPackageInfosForInstalledPackage(installedPackage); + if(packageInfos.length === 0) { + fail(`License for package '${installedPackage.name}-${installedPackage.version}' was not found`); + } + + const allPackageLicensedFiles: Set = new Set(); + packageInfos.forEach(packInfo => { + const licensedFiles = this.filterFilesByPackageInfo(installedPackage, packInfo); + if(licensedFiles.includedFiles.length === 0) { + return; + } + const license = packInfo.license; + if (!license.type.allowed) { + fail(`Polygerrit bundle use files with invalid licence ${license.name} from` + + ` the package ${installedPackage.name}`); + } + if(!result.has(license.name)) { + result.set(license.name, []); + } + result.get(license.name)!.push({ + packageInfo: packInfo, + filteredFiles: licensedFiles + }); + licensedFiles.includedFiles.forEach((fileName) => { + if(allPackageLicensedFiles.has(fileName)) { + fail(`File '${fileName}' from '${installedPackage.name}' has multiple licenses.`) + } + allPackageLicensedFiles.add(fileName); + }); + }); + if(allPackageLicensedFiles.size !== installedPackage.files.length) { + fail(`Some files from '${installedPackage.name}' doesn't have a license, but they are used during build`); + } + }); + return result; + } + + /** getInstalledPackages Collects information about all installed packages */ + private getInstalledPackages(nodeModulesFiles: ReadonlyArray): InstalledPackage[] { + const builder = new InsalledPackagesBuilder(); + // Register all package.json files - such files exists in the root folder of each module + nodeModulesFiles.filter(f => path.basename(f) === "package.json") + .forEach(packageJsonFile => builder.addPackageJson(packageJsonFile)); + // Iterate through all files. builder adds each file to appropriate package + nodeModulesFiles.forEach(f => builder.addFile(f)); + return builder.build(); + } + + /** + * findPackageInfosForInstalledPackage finds all possible licenses for the installedPackage. + * It is possible, that different files in package have different licenses. + * For example, @polymer/font-roboto-local package has files with 2 different licenses + * - .js files - Polymer license (i.e. BSD), + * - font files - Apache 2.0 license + * In this case, the package is defined several times with different filesFilter + */ + private findPackageInfosForInstalledPackage(installedPackage: InstalledPackage): PackageInfo[] { + return this.packages.filter(packInfo => { + if(packInfo.name !== installedPackage.name) { + return false; + } + return !packInfo.versions || packInfo.versions.indexOf(installedPackage.version) >= 0; + }); + } + + /** Returns list of files which have license defined in packageInfo */ + private filterFilesByPackageInfo(installedPackage: InstalledPackage, packageInfo: PackageInfo): FilteredFiles { + const filter = packageInfo.filesFilter; + if(!filter) { + return { + installedPackage, + includedFiles: installedPackage.files, + excludedFiles: [], + } + } + return installedPackage.files.reduce((result: FilteredFiles, f) => { + if(filter(f)) { + result.includedFiles.push(f); + } else { + result.excludedFiles.push(f); + } + return result; + }, { + installedPackage, + includedFiles: [], + excludedFiles: [] + }); + } + + private getLicenseText(packageInfo: PackageLicensedFiles) { + if(isSharedFileLicenseInfo(packageInfo.packageInfo.license)) { + return this.sharedLicensesProvider.getText(packageInfo.packageInfo.license.sharedLicenseFile); + } else { + const filePath = path.join(packageInfo.filteredFiles.installedPackage.rootPath, + packageInfo.packageInfo.license.packageLicenseFile) + return fs.readFileSync(filePath, {encoding: 'utf-8'}); + } + } +} + diff --git a/tools/node_tools/node_modules_licenses/node_modules_licenses.bzl b/tools/node_tools/node_modules_licenses/node_modules_licenses.bzl new file mode 100644 index 0000000000..64c8b79e95 --- /dev/null +++ b/tools/node_tools/node_modules_licenses/node_modules_licenses.bzl @@ -0,0 +1,42 @@ +"""This file contains the rule to generate a license map for node modules""" + +def _node_modules_licenses_impl(ctx): + """Wrapper for the license-map-generator command-line tool""" + + node_modules_args = ctx.actions.args() + node_modules_args.add_all(ctx.files.node_modules) + node_modules_args.use_param_file("%s", use_always = True) + + licenses_texts_args = ctx.actions.args() + licenses_texts_args.add_all(ctx.files.licenses_texts) + licenses_texts_args.use_param_file("%s", use_always = True) + + ctx.actions.run( + executable = ctx.executable._license_map_generator, + arguments = [ctx.file.licenses_config.path, node_modules_args, licenses_texts_args, ctx.outputs.json.path], + outputs = [ctx.outputs.json], + inputs = depset([ctx.file.licenses_config] + ctx.files.licenses_texts, transitive = [ctx.attr.node_modules.files]), + ) + +# Rule to run license-map-generator.ts +# node_modules - label of npm workspace in the format @npm//:node_modules +# The output contains information about licenses for the workspace. +# licenses_texts is a list of shared licenses +# For details - see comments in the +# tools/node_tools/node_modules_licenses/license-map-generator.ts file +node_modules_licenses = rule( + implementation = _node_modules_licenses_impl, + attrs = { + "node_modules": attr.label(mandatory = True), + "licenses_texts": attr.label_list(allow_files = True, mandatory = True), + "licenses_config": attr.label(allow_single_file = True, mandatory = True), + "_license_map_generator": attr.label( + default = Label("//tools/node_tools/node_modules_licenses:license-map-generator-bin"), + executable = True, + cfg = "host", + ), + }, + outputs = { + "json": "%{name}.json", + }, +) diff --git a/tools/node_tools/node_modules_licenses/package-license-info.ts b/tools/node_tools/node_modules_licenses/package-license-info.ts new file mode 100644 index 0000000000..c5cdb0fbc7 --- /dev/null +++ b/tools/node_tools/node_modules_licenses/package-license-info.ts @@ -0,0 +1,70 @@ +/** + * @license + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import {LicenseName, LicenseTypeName, PackageName, FilePath} from "./base-types"; + +export interface LicenseType { + /** Name of license type (GPL, MIT, etc...) - can appear in Documentation*/ + name: LicenseTypeName; + /** If true, the file with this license type can be used. + * If false, build shouldn't use this file */ + allowed: boolean; +} + +/** Type to describe a license*/ +export type LicenseInfo = SharedFileLicenseInfo | PackageFileLicenseInfo; + +interface LicenseInfoBase { + /** Name of license - can appear in Documentation*/ + name: LicenseName; + /** Type of license */ + type: LicenseType; +} + +/** Use SharedFileLicenseInfo if license text must be obtained from a list of predefined texts */ +export interface SharedFileLicenseInfo extends LicenseInfoBase { + /** Name of the file with license text. The path to the file is not important, only the filename is used */ + sharedLicenseFile: string; +} + +/** Use PackageFileLicenseInfo if license text must be obtained from package's file */ +export interface PackageFileLicenseInfo extends LicenseInfoBase { + /** Relative path to a file inside package*/ + packageLicenseFile: string; +} + +export function isSharedFileLicenseInfo(licenseInfo: LicenseInfo): licenseInfo is SharedFileLicenseInfo { + return (licenseInfo as SharedFileLicenseInfo).sharedLicenseFile !== undefined; +} + +export function isPackageFileLicenseInfo(licenseInfo: LicenseInfo): licenseInfo is PackageFileLicenseInfo { + return (licenseInfo as PackageFileLicenseInfo).packageLicenseFile !== undefined; +} + +export type FilesFilter = (fileName: FilePath) => boolean; + +/** Describes license for a whole package or to some files inside package */ +export interface PackageInfo { + /** Package name, as it appears in dependencies proprty of package.json */ + name: PackageName; + /** Information about license*/ + license: LicenseInfo; + /** If versions are set, then license applies only to a specific versions */ + versions?: string[]; + /** Predicate to select files to apply license. */ + filesFilter?: FilesFilter; +} diff --git a/tools/node_tools/node_modules_licenses/rollup.config.js b/tools/node_tools/node_modules_licenses/rollup.config.js new file mode 100644 index 0000000000..5b4a84803f --- /dev/null +++ b/tools/node_tools/node_modules_licenses/rollup.config.js @@ -0,0 +1,20 @@ +/** + * @license + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export default { + external: ['fs', 'path'] +}; diff --git a/tools/node_tools/node_modules_licenses/shared-licenses-provider.ts b/tools/node_tools/node_modules_licenses/shared-licenses-provider.ts new file mode 100644 index 0000000000..3be8528111 --- /dev/null +++ b/tools/node_tools/node_modules_licenses/shared-licenses-provider.ts @@ -0,0 +1,50 @@ +/** + * @license + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import * as path from "path"; +import * as fs from "fs"; +import { fail } from "./utils"; + +/** SharedLicensesProvider uses to get license's text + * when package itself doesn't have LICENSE file. + */ +export class SharedLicensesProvider { + private licenseNameToText: Map; + + /** constructor takes list of file paths with licenses texts. + * The path is used to load a license text, + * the filename (without dirname) is used as a license name. + * */ + public constructor(sharedLicensesFiles: string[]) { + this.licenseNameToText = new Map(); + sharedLicensesFiles.forEach(f => { + const licenseName = path.basename(f); + if(this.licenseNameToText.has(licenseName)) { + fail(`There are multiple files for the license's text '${licenseName}'`); + } + this.licenseNameToText.set(licenseName, fs.readFileSync(f, {encoding: 'utf-8'})); + }); + } + + public getText(licenseName: string): string { + if(!this.licenseNameToText.has(licenseName)) { + fail(`There are no text for license ${licenseName}`); + } + return this.licenseNameToText.get(licenseName)!; + } + +} diff --git a/tools/node_tools/node_modules_licenses/tsconfig.json b/tools/node_tools/node_modules_licenses/tsconfig.json new file mode 100644 index 0000000000..cb6f109c39 --- /dev/null +++ b/tools/node_tools/node_modules_licenses/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "target": "es6", + "module": "commonjs", + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "strict": true, + "moduleResolution": "node", + "outDir": "out", + "noImplicitAny": false, + "types": ["node"] + }, + "include": ["*.ts"] +} diff --git a/tools/node_tools/node_modules_licenses/utils.ts b/tools/node_tools/node_modules_licenses/utils.ts new file mode 100644 index 0000000000..5f8e7b3991 --- /dev/null +++ b/tools/node_tools/node_modules_licenses/utils.ts @@ -0,0 +1,27 @@ +/** + * @license + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import * as fs from "fs"; + +export function fail(message: string): never { + console.error(message); + process.exit(1); +} + +export function readMultilineParamFile(path: string): string[] { + return fs.readFileSync(path, {encoding: 'utf-8'}).split(/\r?\n/).filter(f => f.length > 0); +} diff --git a/tools/node_tools/package.json b/tools/node_tools/package.json index 56b6245174..434b5fa615 100644 --- a/tools/node_tools/package.json +++ b/tools/node_tools/package.json @@ -4,13 +4,16 @@ "browser": false, "dependencies": { "@bazel/rollup": "^0.41.0", + "@bazel/typescript": "^1.0.1", + "@types/node": "^10.17.12", "crisper": "^2.1.1", "dom5": "^3.0.1", "polymer-bundler": "^4.0.10", "polymer-cli": "^1.9.11", "rollup": "^1.27.5", "rollup-plugin-node-resolve": "^5.2.0", - "rollup-plugin-terser": "^5.1.3" + "rollup-plugin-terser": "^5.1.3", + "typescript": "^3.7.4" }, "devDependencies": {}, "license": "Apache-2.0", diff --git a/tools/node_tools/rollup-runner.js b/tools/node_tools/rollup-runner.js new file mode 100644 index 0000000000..a8a09f904e --- /dev/null +++ b/tools/node_tools/rollup-runner.js @@ -0,0 +1,51 @@ +/** + * @license + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// This file is a part of workaround for +// https://github.com/bazelbuild/rules_nodejs/issues/1575 +// rollup_bundle doesn't run when it is placed +// in nested node_modules folder and bazel runs with +// --spawn_strategy local flag. The error happens +// because npm_package_bin generates incorrect path to +// rollup bin. +// But npm_package_bin works correctly if entry point +// is an ordinary .js file which depends on some node module. +// This script is a proxy script, which run rollup bin from +// node_modules folder and pass all parameters to it. +const {spawnSync} = require('child_process'); +const path = require('path'); + +const nodePath = process.argv[0]; +const scriptArgs = process.argv.slice(2); +const nodeArgs = process.execArgv; + +const pathToBin = require.resolve("rollup/dist/bin/rollup"); + +const options = { + stdio: 'inherit' +}; + +const spawnResult = spawnSync(nodePath, [...nodeArgs, pathToBin, ...scriptArgs], options); + +if(spawnResult.status !== null) { + process.exit(spawnResult.status); +} + +if(spawnResult.error) { + console.error(spawnResult.error); + process.exit(1); +} diff --git a/tools/node_tools/yarn.lock b/tools/node_tools/yarn.lock index 27f86f589e..49bebf70fa 100644 --- a/tools/node_tools/yarn.lock +++ b/tools/node_tools/yarn.lock @@ -497,6 +497,16 @@ resolved "https://registry.yarnpkg.com/@bazel/rollup/-/rollup-0.41.0.tgz#8dfaccc239f3efbae1c816b0ce2aeb6069d23582" integrity sha512-M+ybGfcxTXnAS1QiaijLEfUznNYLA0cqeGXnYHSRrOhq2U7yesfavxbBtfLSKtg32ktmlHts5te8Zg82BS4DPQ== +"@bazel/typescript@^1.0.1": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@bazel/typescript/-/typescript-1.1.0.tgz#b57ac6c6d627577f394a60fb540fbbdf53bcff0d" + integrity sha512-QnTdb6rwZUR+KfUuAdyazpkA7BOvrWRe7tkPDdyIZHJdBPYdpJW+AapnFSfxvXEIP0Nwesl5KP6Saau0GPiBLg== + dependencies: + protobufjs "6.8.8" + semver "5.6.0" + source-map-support "0.5.9" + tsutils "2.27.2" + "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -590,6 +600,59 @@ resolved "https://registry.yarnpkg.com/@polymer/test-fixture/-/test-fixture-0.0.3.tgz#4443752697d4d9293bbc412ea0b5e4d341f149d9" integrity sha1-REN1JpfU2Sk7vEEuoLXk00HxSdk= +"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" + integrity sha1-m4sMxmPWaafY9vXQiToU00jzD78= + +"@protobufjs/base64@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" + integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== + +"@protobufjs/codegen@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" + integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== + +"@protobufjs/eventemitter@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" + integrity sha1-NVy8mLr61ZePntCV85diHx0Ga3A= + +"@protobufjs/fetch@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" + integrity sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU= + dependencies: + "@protobufjs/aspromise" "^1.1.1" + "@protobufjs/inquire" "^1.1.0" + +"@protobufjs/float@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" + integrity sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E= + +"@protobufjs/inquire@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" + integrity sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik= + +"@protobufjs/path@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" + integrity sha1-bMKyDFya1q0NzP0hynZz2Nf79o0= + +"@protobufjs/pool@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" + integrity sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q= + +"@protobufjs/utf8@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" + integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA= + "@types/babel-generator@^6.25.1": version "6.25.3" resolved "https://registry.yarnpkg.com/@types/babel-generator/-/babel-generator-6.25.3.tgz#8f06caa12d0595a0538560abe771966d77d29286" @@ -839,6 +902,11 @@ resolved "https://registry.yarnpkg.com/@types/launchpad/-/launchpad-0.6.0.tgz#37296109b7f277f6e6c5fd7e0c0706bc918fbb51" integrity sha1-NylhCbfyd/bmxf1+DAcGvJGPu1E= +"@types/long@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9" + integrity sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w== + "@types/merge-stream@^1.0.28": version "1.1.2" resolved "https://registry.yarnpkg.com/@types/merge-stream/-/merge-stream-1.1.2.tgz#a880ff66b1fbbb5eef4958d015c5947a9334dbb1" @@ -881,6 +949,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.118.tgz#8014a9b1dee0b72b4d7cd142563f1af21241c3a2" integrity sha512-N33cKXGSqhOYaPiT4xUGsYlPPDwFtQM/6QxJxuMXA/7BcySW+lkn2yigWP7vfs4daiL/7NJNU6DMCqg5N4B+xQ== +"@types/node@^10.1.0", "@types/node@^10.17.12": + version "10.17.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.13.tgz#ccebcdb990bd6139cd16e84c39dc2fb1023ca90c" + integrity sha512-pMCcqU2zT4TjqYFrWtYHKal7Sl30Ims6ulZ4UFXxI4xbtQqK/qqKwkDoBFCfooRqqmRu9vY3xaJRwxSh673aYg== + "@types/node@^4.0.30": version "4.9.4" resolved "https://registry.yarnpkg.com/@types/node/-/node-4.9.4.tgz#75ef91733afaa856b01e12da6ecf48aa9d5e221f" @@ -1180,11 +1253,6 @@ resolved "https://registry.yarnpkg.com/@webcomponents/webcomponentsjs/-/webcomponentsjs-1.3.3.tgz#5bb82a0d3210c836bd4623e13a4a93145cb9dc27" integrity sha512-eLH04VBMpuZGzBIhOnUjECcQPEPcmfhWEijW9u1B5I+2PPYdWf3vWUExdDxu4Y3GljRSTCOlWnGtS9tpzmXMyQ== -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" @@ -1336,11 +1404,6 @@ append-field@^1.0.0: resolved "https://registry.yarnpkg.com/append-field/-/append-field-1.0.0.tgz#1e3440e915f0b1203d23748e78edd7b9b5b43e56" integrity sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY= -aproba@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - archiver-utils@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2" @@ -1370,14 +1433,6 @@ archiver@^3.0.0: tar-stream "^2.1.0" zip-stream "^2.1.2" -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" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - arr-diff@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" @@ -2241,7 +2296,7 @@ chokidar@^1.7.0: optionalDependencies: fsevents "^1.0.0" -chownr@^1.0.1, chownr@^1.1.1: +chownr@^1.0.1: version "1.1.3" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== @@ -2581,11 +2636,6 @@ configstore@^3.0.0: write-file-atomic "^2.0.0" xdg-basedir "^3.0.0" -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" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= - content-disposition@0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" @@ -2756,7 +2806,7 @@ debug@2.6.9, debug@^2.0.0, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: dependencies: ms "2.0.0" -debug@^3.0.0, debug@^3.1.0, debug@^3.2.6: +debug@^3.0.0, debug@^3.1.0: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== @@ -2850,11 +2900,6 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" @@ -2894,11 +2939,6 @@ detect-indent@^4.0.0: dependencies: repeating "^2.0.0" -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - detect-node@^2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" @@ -3647,13 +3687,6 @@ fs-exists-sync@^0.1.0: resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" integrity sha1-mC1ok6+RjnLQjeyehnP/K1qNat0= -fs-minipass@^1.2.5: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" - integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== - dependencies: - minipass "^2.6.0" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -3672,20 +3705,6 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - 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" - gensync@^1.0.0-beta.1: version "1.0.0-beta.1" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" @@ -4080,11 +4099,6 @@ has-to-string-tag-x@^1.2.0: dependencies: has-symbol-support-x "^1.4.1" -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= - has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" @@ -4237,7 +4251,7 @@ https-proxy-agent@^3.0.0: agent-base "^4.3.0" debug "^3.1.0" -iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: +iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -4249,13 +4263,6 @@ ieee754@^1.1.4: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== -ignore-walk@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" - integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== - dependencies: - minimatch "^3.0.4" - ignore@^3.3.5: version "3.3.10" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" @@ -5065,6 +5072,11 @@ lolex@^1.6.0: resolved "https://registry.yarnpkg.com/lolex/-/lolex-1.6.0.tgz#3a9a0283452a47d7439e72731b9e07d7386e49f6" integrity sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY= +long@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" + integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== + loose-envify@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -5338,21 +5350,6 @@ minimist@~0.0.1: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= -minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" - integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minizlib@^1.2.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" - integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== - dependencies: - minipass "^2.9.0" - mixin-deep@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" @@ -5466,15 +5463,6 @@ native-promise-only@^0.8.1: resolved "https://registry.yarnpkg.com/native-promise-only/-/native-promise-only-0.8.1.tgz#20a318c30cb45f71fe7adfbf7b21c99c1472ef11" integrity sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE= -needle@^2.2.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" - integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" - negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" @@ -5497,22 +5485,6 @@ node-fetch@^2.3.0: resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== -node-pre-gyp@*: - version "0.14.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83" - integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4.4.2" - node-status-codes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-status-codes/-/node-status-codes-1.0.0.tgz#5ae5541d024645d32a58fcddc9ceecea7ae3ac2f" @@ -5526,14 +5498,6 @@ nomnom@^1.8.1: chalk "~0.4.0" underscore "~1.6.0" -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= - dependencies: - abbrev "1" - osenv "^0.1.4" - normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -5556,27 +5520,6 @@ normalize-path@^3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -npm-bundled@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" - integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== - dependencies: - npm-normalize-package-bin "^1.0.1" - -npm-normalize-package-bin@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" - integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== - -npm-packlist@^1.1.6: - version "1.4.8" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" - integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - npm-normalize-package-bin "^1.0.1" - npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -5584,16 +5527,6 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npmlog@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" @@ -5752,7 +5685,7 @@ os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -osenv@^0.1.0, osenv@^0.1.3, osenv@^0.1.4: +osenv@^0.1.0, osenv@^0.1.3: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== @@ -6342,6 +6275,25 @@ progress@2.0.3: resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== +protobufjs@6.8.8: + version "6.8.8" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.8.8.tgz#c8b4f1282fd7a90e6f5b109ed11c84af82908e7c" + integrity sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/long" "^4.0.0" + "@types/node" "^10.1.0" + long "^4.0.0" + proxy-addr@~2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" @@ -6442,7 +6394,7 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: +rc@^1.0.1, rc@^1.1.6: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -6531,7 +6483,7 @@ readable-stream@1.1.x: 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.0.6, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: +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.2.2, readable-stream@^2.2.9, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -6889,11 +6841,6 @@ sauce-connect-launcher@^1.0.0: lodash "^4.16.6" rimraf "^2.5.4" -sax@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - scoped-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/scoped-regex/-/scoped-regex-1.0.0.tgz#a346bb1acd4207ae70bd7c0c7ca9e566b6baddb8" @@ -6935,6 +6882,11 @@ semver-diff@^2.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== +semver@5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" + integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== + semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -7003,11 +6955,6 @@ serviceworker-cache-polyfill@^4.0.0: resolved "https://registry.yarnpkg.com/serviceworker-cache-polyfill/-/serviceworker-cache-polyfill-4.0.0.tgz#de19ee73bef21ab3c0740a37b33db62464babdeb" integrity sha1-3hnuc77yGrPAdAo3sz22JGS6ves= -set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" @@ -7205,6 +7152,14 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" +source-map-support@0.5.9: + version "0.5.9" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f" + integrity sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map-support@~0.5.12: version "0.5.16" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" @@ -7376,7 +7331,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: +string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -7403,7 +7358,7 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -strip-ansi@^3.0.0, strip-ansi@^3.0.1: +strip-ansi@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= @@ -7597,19 +7552,6 @@ tar-stream@^2.1.0: inherits "^2.0.3" readable-stream "^3.1.1" -tar@^4.4.2: - version "4.4.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" - integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.8.6" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" - temp@^0.8.1, temp@^0.8.3: version "0.8.4" resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.4.tgz#8c97a33a4770072e0a05f919396c7665a7dd59f2" @@ -7840,11 +7782,18 @@ triple-beam@^1.2.0, triple-beam@^1.3.0: resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.3.0.tgz#a595214c7298db8339eeeee083e4d10bd8cb8dd9" integrity sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw== -tslib@^1.9.0: +tslib@^1.8.1, tslib@^1.9.0: version "1.10.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== +tsutils@2.27.2: + version "2.27.2" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.27.2.tgz#60ba88a23d6f785ec4b89c6e8179cac9b431f1c7" + integrity sha512-qf6rmT84TFMuxAKez2pIfR8UCai49iQsfB7YWVjV1bKpy/d0PWT5rEOSM6La9PiHZ0k1RRZQiwVdVJfQ3BPHgg== + dependencies: + tslib "^1.8.1" + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -7875,6 +7824,11 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +typescript@^3.7.4: + version "3.7.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.5.tgz#0692e21f65fd4108b9330238aac11dd2e177a1ae" + integrity sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw== + typical@^2.6.0, typical@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/typical/-/typical-2.6.1.tgz#5c080e5d661cbbe38259d2e70a3c7253e873881d" @@ -8306,13 +8260,6 @@ which@^2.0.2: 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" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - widest-line@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c" @@ -8461,11 +8408,6 @@ yallist@^2.1.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -yallist@^3.0.0, yallist@^3.0.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - yauzl@^2.10.0: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" diff --git a/yarn.lock b/yarn.lock index 4eda68b160..a393f14cdf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -485,6 +485,21 @@ lodash "^4.17.11" to-fast-properties "^2.0.0" +"@bazel/rollup@^1.1.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@bazel/rollup/-/rollup-1.2.0.tgz#8b9569ed6f1c00d2a833567901f8ee4600a389fb" + integrity sha512-yrXW+AAUoqc9qN/CweD5p8OEN9bNKFjXnXPBRE4w84LxpkmaJFx+yQJ++c1F57zWMoq2o9EV4CM7y+mK8zxwUg== + +"@bazel/typescript@^1.0.1": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@bazel/typescript/-/typescript-1.2.0.tgz#ab2016e1d6eb7a86b44536e887f51eaf3d75f1a7" + integrity sha512-hPEG8K0psyEcs6HFRiqZNQwXL/dQ8sXKdrNFWv87+rh+YUNfd58uktoynhllympOPThcbUZcZicLWBEFQOc8nA== + dependencies: + protobufjs "6.8.8" + semver "5.6.0" + source-map-support "0.5.9" + tsutils "2.27.2" + "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -563,6 +578,59 @@ resolved "https://registry.yarnpkg.com/@polymer/test-fixture/-/test-fixture-0.0.3.tgz#4443752697d4d9293bbc412ea0b5e4d341f149d9" integrity sha1-REN1JpfU2Sk7vEEuoLXk00HxSdk= +"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" + integrity sha1-m4sMxmPWaafY9vXQiToU00jzD78= + +"@protobufjs/base64@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" + integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== + +"@protobufjs/codegen@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" + integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== + +"@protobufjs/eventemitter@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" + integrity sha1-NVy8mLr61ZePntCV85diHx0Ga3A= + +"@protobufjs/fetch@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" + integrity sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU= + dependencies: + "@protobufjs/aspromise" "^1.1.1" + "@protobufjs/inquire" "^1.1.0" + +"@protobufjs/float@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" + integrity sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E= + +"@protobufjs/inquire@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" + integrity sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik= + +"@protobufjs/path@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" + integrity sha1-bMKyDFya1q0NzP0hynZz2Nf79o0= + +"@protobufjs/pool@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" + integrity sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q= + +"@protobufjs/utf8@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" + integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA= + "@types/babel-generator@^6.25.1": version "6.25.3" resolved "https://registry.yarnpkg.com/@types/babel-generator/-/babel-generator-6.25.3.tgz#8f06caa12d0595a0538560abe771966d77d29286" @@ -796,6 +864,11 @@ resolved "https://registry.yarnpkg.com/@types/launchpad/-/launchpad-0.6.0.tgz#37296109b7f277f6e6c5fd7e0c0706bc918fbb51" integrity sha1-NylhCbfyd/bmxf1+DAcGvJGPu1E= +"@types/long@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9" + integrity sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w== + "@types/merge-stream@^1.0.28": version "1.1.2" resolved "https://registry.yarnpkg.com/@types/merge-stream/-/merge-stream-1.1.2.tgz#a880ff66b1fbbb5eef4958d015c5947a9334dbb1" @@ -833,6 +906,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.6.1.tgz#d5544f6de0aae03eefbb63d5120f6c8be0691946" integrity sha512-rp7La3m845mSESCgsJePNL/JQyhkOJA6G4vcwvVgkDAwHhGdq5GCumxmPjEk1MZf+8p5ZQAUE7tqgQRQTXN7uQ== +"@types/node@^10.1.0": + version "10.17.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.13.tgz#ccebcdb990bd6139cd16e84c39dc2fb1023ca90c" + integrity sha512-pMCcqU2zT4TjqYFrWtYHKal7Sl30Ims6ulZ4UFXxI4xbtQqK/qqKwkDoBFCfooRqqmRu9vY3xaJRwxSh673aYg== + "@types/node@^4.0.30": version "4.9.3" resolved "https://registry.yarnpkg.com/@types/node/-/node-4.9.3.tgz#a24697a8157ab517996afe0c88fa716550ae419a" @@ -5316,6 +5394,11 @@ lolex@^1.6.0: resolved "https://registry.yarnpkg.com/lolex/-/lolex-1.6.0.tgz#3a9a0283452a47d7439e72731b9e07d7386e49f6" integrity sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY= +long@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" + integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== + loose-envify@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -6654,6 +6737,25 @@ progress@2.0.3, progress@^2.0.0: resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== +protobufjs@6.8.8: + version "6.8.8" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.8.8.tgz#c8b4f1282fd7a90e6f5b109ed11c84af82908e7c" + integrity sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/long" "^4.0.0" + "@types/node" "^10.1.0" + long "^4.0.0" + proxy-addr@~2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" @@ -7266,7 +7368,7 @@ semver-diff@^2.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== -semver@^5.0.3, semver@^5.1.0, semver@^5.5.0: +semver@5.6.0, semver@^5.0.3, semver@^5.1.0, semver@^5.5.0: version "5.6.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== @@ -7550,6 +7652,14 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" +source-map-support@0.5.9: + version "0.5.9" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f" + integrity sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map-support@^0.4.2: version "0.4.18" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" @@ -7567,7 +7677,7 @@ source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: +source-map@^0.6.0, 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" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -8218,11 +8328,18 @@ tsickle@^0.23.4: source-map "^0.5.6" source-map-support "^0.4.2" -tslib@^1.9.0: +tslib@^1.8.1, tslib@^1.9.0: version "1.10.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== +tsutils@2.27.2: + version "2.27.2" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.27.2.tgz#60ba88a23d6f785ec4b89c6e8179cac9b431f1c7" + integrity sha512-qf6rmT84TFMuxAKez2pIfR8UCai49iQsfB7YWVjV1bKpy/d0PWT5rEOSM6La9PiHZ0k1RRZQiwVdVJfQ3BPHgg== + dependencies: + tslib "^1.8.1" + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -8272,11 +8389,16 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@^2.4.1, typescript@^2.x.x: +typescript@^2.4.1: version "2.9.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.9.2.tgz#1cbf61d05d6b96269244eb6a3bce4bd914e0f00c" integrity sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w== +typescript@^3.7.4: + version "3.7.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.5.tgz#0692e21f65fd4108b9330238aac11dd2e177a1ae" + integrity sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw== + typical@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/typical/-/typical-2.6.1.tgz#5c080e5d661cbbe38259d2e70a3c7253e873881d"