Tools to generate license map for npm packages
Switching to npm packages requires a new way to define licenses for javascript libraries. This change adds a tool to generate json licenses map and also adds some examples how to define licenses. Change-Id: I80ba0ec5ef7853c517073566dfb34a5caebd5dcb
This commit is contained in:
parent
3f49f9103f
commit
047240b40f
@ -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
|
||||
|
@ -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")
|
||||
|
||||
|
@ -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": {
|
||||
|
@ -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/**",
|
||||
|
1
polygerrit-ui/app/node_modules_licenses/.gitignore
vendored
Normal file
1
polygerrit-ui/app/node_modules_licenses/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
/out/
|
61
polygerrit-ui/app/node_modules_licenses/BUILD
Normal file
61
polygerrit-ui/app/node_modules_licenses/BUILD
Normal file
@ -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"],
|
||||
)
|
84
polygerrit-ui/app/node_modules_licenses/licenses.ts
Normal file
84
polygerrit-ui/app/node_modules_licenses/licenses.ts
Normal file
@ -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;
|
@ -0,0 +1,2 @@
|
||||
This is an example of license text - 2015
|
||||
It is not in use and it is updated in other change.
|
@ -0,0 +1,2 @@
|
||||
This is an example of license text - 2017
|
||||
It is not in use and it is updated in other change.
|
14
polygerrit-ui/app/node_modules_licenses/tsconfig.json
Normal file
14
polygerrit-ui/app/node_modules_licenses/tsconfig.json
Normal file
@ -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"]
|
||||
}
|
34
tools/node_tools/BUILD
Normal file
34
tools/node_tools/BUILD
Normal file
@ -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",
|
||||
)
|
1
tools/node_tools/node_modules_licenses/.gitignore
vendored
Normal file
1
tools/node_tools/node_modules_licenses/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
/out/
|
61
tools/node_tools/node_modules_licenses/BUILD
Normal file
61
tools/node_tools/node_modules_licenses/BUILD
Normal file
@ -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 $< $@",
|
||||
)
|
14
tools/node_tools/node_modules_licenses/README.md
Normal file
14
tools/node_tools/node_modules_licenses/README.md
Normal file
@ -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
|
24
tools/node_tools/node_modules_licenses/base-types.ts
Normal file
24
tools/node_tools/node_modules_licenses/base-types.ts
Normal file
@ -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;
|
@ -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<DirPath, InstalledPackage> = 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<string> = [];
|
||||
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()];
|
||||
}
|
||||
}
|
@ -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();
|
279
tools/node_tools/node_modules_licenses/licenses-map.ts
Normal file
279
tools/node_tools/node_modules_licenses/licenses-map.ts
Normal file
@ -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<PackageInfo>, 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<string>): 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<LicenseName, PackageLicensedFiles[]> {
|
||||
const result: Map<LicenseName, PackageLicensedFiles[]> = 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<string> = 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<string>): 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'});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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",
|
||||
},
|
||||
)
|
@ -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;
|
||||
}
|
20
tools/node_tools/node_modules_licenses/rollup.config.js
Normal file
20
tools/node_tools/node_modules_licenses/rollup.config.js
Normal file
@ -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']
|
||||
};
|
@ -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<string, string>;
|
||||
|
||||
/** 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)!;
|
||||
}
|
||||
|
||||
}
|
14
tools/node_tools/node_modules_licenses/tsconfig.json
Normal file
14
tools/node_tools/node_modules_licenses/tsconfig.json
Normal file
@ -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"]
|
||||
}
|
27
tools/node_tools/node_modules_licenses/utils.ts
Normal file
27
tools/node_tools/node_modules_licenses/utils.ts
Normal file
@ -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);
|
||||
}
|
@ -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",
|
||||
|
51
tools/node_tools/rollup-runner.js
Normal file
51
tools/node_tools/rollup-runner.js
Normal file
@ -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);
|
||||
}
|
@ -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"
|
||||
|
130
yarn.lock
130
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"
|
||||
|
Loading…
Reference in New Issue
Block a user