From aeb7c46332f72e6628fa4a48971cb726424226fb Mon Sep 17 00:00:00 2001 From: Hans Date: Wed, 5 Sep 2018 12:11:11 -0700 Subject: [PATCH] build: add support to build JSON schema through bazel The tests verify that the output of the rule is the same as the input, and will error if not (with a call to action). The binary produces the golden output. We have to check the result of the transformation into git because internally we cannot synchronize quicktype into google3. --- BUILD | 62 ++++++++-- package.json | 2 + packages/schematics/update/BUILD | 5 + rules/tsconfig.json | 2 +- tools/BUILD | 25 +++- tools/bazel.rc | 3 +- tools/quicktype_runner.js | 152 ++++++++++++++++++++++++ tools/ts_json_schema.bzl | 70 +++++++++++ tsconfig.json | 4 + yarn.lock | 195 +++++++++++++++++++++++++++++-- 10 files changed, 498 insertions(+), 22 deletions(-) create mode 100644 tools/quicktype_runner.js create mode 100644 tools/ts_json_schema.bzl diff --git a/BUILD b/BUILD index 5b9205d3ee..10cfed3bc7 100644 --- a/BUILD +++ b/BUILD @@ -9,10 +9,22 @@ licenses(["notice"]) # MIT License exports_files([ "LICENSE", "tsconfig.json", # @external + "tslint.base.json", # @external ]) # NOTE: this will move to node_modules/BUILD in a later release # @external_begin +NODE_MODULES_EXCLUDE = [ + # e.g. node_modules/adm-zip/test/assets/attributes_test/New folder/hidden.txt + "node_modules/**/test/**", + # e.g. node_modules/xpath/docs/function resolvers.md + "node_modules/**/docs/**", + # e.g. node_modules/puppeteer/.local-chromium/mac-536395/chrome-mac/Chromium.app/Contents/Versions/66.0.3347.0/Chromium Framework.framework/Chromium Framework + "node_modules/**/.*/**", + # Ignore paths with spaces. + "node_modules/**/* *", +] + filegroup( name = "node_modules", srcs = glob( @@ -23,16 +35,46 @@ filegroup( "node_modules/**/*.json", "node_modules/**/*.d.ts", ], - exclude = [ - # e.g. node_modules/adm-zip/test/assets/attributes_test/New folder/hidden.txt - "node_modules/**/test/**", - # e.g. node_modules/xpath/docs/function resolvers.md - "node_modules/**/docs/**", - # e.g. node_modules/puppeteer/.local-chromium/mac-536395/chrome-mac/Chromium.app/Contents/Versions/66.0.3347.0/Chromium Framework.framework/Chromium Framework - "node_modules/**/.*/**", - # Ignore paths with spaces. - "node_modules/**/* *", - ], + exclude = NODE_MODULES_EXCLUDE, ) + glob(["node_modules/.bin/*"]), ) + +# node_modules filegroup for tools/quicktype_runner, which contains quicktype-core and tslint. +QUICKTYPE_TRANSITIVE_DEPENDENCIES = [ + "collection-utils", + "core-util-is", + "inherits", + "isarray", + "js-base64", + "pako", + "pluralize", + "process-nextick-args", + "quicktype-core", + "readable-stream", + "safe-buffer", + "stream-json", + "string-to-stream", + "tiny-inflate", + "unicode-properties", + "unicode-trie", + "urijs", + "util-deprecate", + "wordwrap", +] + +filegroup( + name = "quicktype_node_modules", + srcs = glob( + [ + "/".join([ + "node_modules", "**", pkg, "**/*.js", + ]) for pkg in QUICKTYPE_TRANSITIVE_DEPENDENCIES + ] + [ + "/".join([ + "node_modules", "**", pkg, "**/*.json", + ]) for pkg in QUICKTYPE_TRANSITIVE_DEPENDENCIES + ], + exclude = NODE_MODULES_EXCLUDE, + ) +) # @external_end diff --git a/package.json b/package.json index f63af6826e..c31ddb9ff2 100644 --- a/package.json +++ b/package.json @@ -60,6 +60,8 @@ ], "dependencies": { "glob": "^7.0.3", + "node-fetch": "^2.2.0", + "quicktype-core": "^5.0.41", "temp": "^0.8.3", "tslint": "^5.11.0", "typescript": "~3.0.1" diff --git a/packages/schematics/update/BUILD b/packages/schematics/update/BUILD index 2d2a7edfb9..edde66c3c1 100644 --- a/packages/schematics/update/BUILD +++ b/packages/schematics/update/BUILD @@ -20,6 +20,11 @@ ts_library( "**/*_benchmark.ts", ], ), + data = [ + "collection.json", + "migrate/schema.json", + "update/schema.json", + ], deps = [ "//packages/angular_devkit/core", "//packages/angular_devkit/schematics", diff --git a/rules/tsconfig.json b/rules/tsconfig.json index deffb2f179..5fc61e6f10 100644 --- a/rules/tsconfig.json +++ b/rules/tsconfig.json @@ -3,7 +3,7 @@ // things faster. "extends": "../tsconfig.json", "compilerOptions": { - "outDir": "../dist", + "outDir": "../dist/rules", "baseUrl": "" }, "exclude": [ diff --git a/tools/BUILD b/tools/BUILD index ee6d23bbcd..b7b9ca2e64 100644 --- a/tools/BUILD +++ b/tools/BUILD @@ -1 +1,24 @@ -# Marker file indicating this directory is a Bazel package +# Copyright Google Inc. All Rights Reserved. +# +# Use of this source code is governed by an MIT-style license that can be +# found in the LICENSE file at https://angular.io/license + +package(default_visibility = ["//visibility:public"]) + +load("@build_bazel_rules_nodejs//:defs.bzl", "nodejs_binary") + +nodejs_binary( + name = 'quicktype_runner', + data = [ + ":quicktype_runner.js", + ], + node_modules = "//:quicktype_node_modules", + entry_point = "angular_devkit/tools/quicktype_runner.js", + templated_args = [ + # Needed so that node doesn't walk back to the source directory. + # From there, the relative imports would point to .ts files. + "--node_options=--preserve-symlinks", + ], + install_source_map_support = False, +) + diff --git a/tools/bazel.rc b/tools/bazel.rc index 7eb0155fb7..722747468c 100644 --- a/tools/bazel.rc +++ b/tools/bazel.rc @@ -5,5 +5,4 @@ build --strategy=TypeScriptCompile=worker # Performance: avoid stat'ing input files build --watchfs -# Do not generate the symbolic links bazel-*. -build --symlink_prefix=/ +test --test_output=errors diff --git a/tools/quicktype_runner.js b/tools/quicktype_runner.js new file mode 100644 index 0000000000..9d09fe3db2 --- /dev/null +++ b/tools/quicktype_runner.js @@ -0,0 +1,152 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + /** + * This file is pure JavaScript because we want to avoid any dependency or build step + * to it. It's just simple (and zen-ier). + * + * This file wraps around quicktype and can do one of two things; + * + * `node quicktype_runner.js ` + * Reads the in path and outputs the TS file at the out_path. + * + * Using `-` as the out_path will output on STDOUT instead of a file. + */ + +// Imports. +const fs = require('fs'); +const path = require('path'); +const qtCore = require('quicktype-core'); +const tempRoot = process.env['BAZEL_TMPDIR'] || require('os').tmpdir(); + +// Header to add to all files. +const header = ` +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + + // THIS FILE IS AUTOMATICALLY GENERATED IN BAZEL. TO UPDATE THIS FILE YOU NEED TO CHANGE THE + // CORRESPONDING JSON SCHEMA FILE, THEN RUN BAZEL. + +`.replace(/^\n/m, ''); // Remove the first \n, it's in the constant because formatting is 👍. + +// Footer to add to all files. +const footer = ``; + +/** + * The simplest Node JSONSchemaStore implementation we can build which supports our custom protocol. + * Supports reading from ng-cli addresses, valid URLs and files (absolute). + */ +class FetchingJSONSchemaStore extends qtCore.JSONSchemaStore { + constructor(inPath) { + super(); + this._inPath = inPath; + } + + async fetch(address) { + const URL = require("url"); + const url = URL.parse(address); + let content = null; + if (url.protocol === 'ng-cli:') { + let filePath = path.join(__dirname, '../packages/angular/cli', url.hostname, url.path); + content = fs.readFileSync(filePath, 'utf-8').trim(); + } else if (url.hostname) { + try { + const fetch = require("node-fetch"); + const response = await fetch(address); + content = response.text(); + } catch (e) { + content = null; + } + } + + if (content === null && !path.isAbsolute(address)) { + const resolvedPath = path.join(path.dirname(this._inPath), address); + + // Check relative to inPath + if (fs.existsSync(resolvedPath)) { + content = fs.readFileSync(resolvedPath, 'utf-8'); + } + } + + if (content === null && fs.existsSync(address)) { + content = fs.readFileSync(address, 'utf-8').trim(); + } + + if (content == null) { + throw new Error(`Address ${JSON.stringify(address)} cannot be resolved.`); + } + + return qtCore.parseJSON(content, "JSON Schema", address); + } +} + + +/** + * Create the TS file from the schema, and overwrite the outPath (or log). + * @param {string} inPath + * @param {string} outPath + */ +async function main(inPath, outPath) { + const content = await generate(inPath); + + if (outPath === '-') { + console.log(content); + process.exit(0); + } + + const buildWorkspaceDirectory = process.env['BUILD_WORKSPACE_DIRECTORY'] || '.'; + outPath = path.resolve(buildWorkspaceDirectory, outPath); + fs.writeFileSync(outPath, content, 'utf-8'); +} + + +async function generate(inPath) { + // Best description of how to use the API was found at + // https://blog.quicktype.io/customizing-quicktype/ + const inputData = new qtCore.InputData(); + const source = { name: 'Schema', schema: fs.readFileSync(inPath, 'utf-8') }; + + await inputData.addSource('schema', source, () => { + return new qtCore.JSONSchemaInput(new FetchingJSONSchemaStore(inPath)); + }); + + const lang = new qtCore.TypeScriptTargetLanguage(); + + const { lines } = await qtCore.quicktype({ + lang, + inputData, + alphabetizeProperties: true, + src: [inPath], + rendererOptions: { + 'just-types': true, + 'explicit-unions': true, + } + }); + + return header + lines.join('\n') + footer; +} + +// Parse arguments and run main(). +const argv = process.argv.slice(2); +if (argv.length < 2 || argv.length > 3) { + console.error('Must include 2 or 3 arguments.'); + process.exit(1); +} + +main(...argv) + .then(() => process.exit(0)) + .catch(err => { + console.error('An error happened:'); + console.error(err); + process.exit(127); + }); diff --git a/tools/ts_json_schema.bzl b/tools/ts_json_schema.bzl new file mode 100644 index 0000000000..b3771472b3 --- /dev/null +++ b/tools/ts_json_schema.bzl @@ -0,0 +1,70 @@ +# Copyright Google Inc. All Rights Reserved. +# +# Use of this source code is governed by an MIT-style license that can be +# found in the LICENSE file at https://angular.io/license + +load("@build_bazel_rules_typescript//:defs.bzl", "ts_library") +load("@build_bazel_rules_nodejs//:defs.bzl", "nodejs_test", "nodejs_binary") + + +def _ts_json_schema_interface_impl(ctx): + args = [ + ctx.files.src[0].path, + ctx.outputs.ts.path, + ] + + ctx.actions.run( + inputs = ctx.files.src + ctx.files.data, + executable = ctx.executable._binary, + outputs = [ctx.outputs.ts], + arguments = args, + ) + + return [DefaultInfo()] + + +_ts_json_schema_interface = rule( + _ts_json_schema_interface_impl, + attrs = { + "src": attr.label( + allow_files = FileType([ + ".json", + ]), + mandatory = True, + ), + "out": attr.string( + mandatory = True, + ), + "data": attr.label_list( + allow_files = FileType([ + ".json", + ]), + ), + "_binary": attr.label( + default = Label("//tools:quicktype_runner"), + executable = True, + cfg = "host", + ), + }, + outputs = { + "ts": "%{out}" + }, +) + + +def ts_json_schema(name, src, data = [], **kwargs): + out = src.replace(".json", ".ts") + + _ts_json_schema_interface( + name = name + ".interface", + src = src, + out = out, + data = data, + ) + + ts_library( + name = name, + srcs = [ + out, + ] + ) diff --git a/tsconfig.json b/tsconfig.json index 5e324d59e6..a2b446565c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -27,6 +27,10 @@ "es2017" ], "baseUrl": "", + "rootDirs": [ + ".", + "./bazel-bin/" + ], "typeRoots": [ "./node_modules/@types" ], diff --git a/yarn.lock b/yarn.lock index a90fc11356..99700269a1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -461,6 +461,10 @@ dependencies: source-map "^0.6.1" +"@types/urijs@github:quicktype/types-urijs": + version "1.0.1" + resolved "https://codeload.github.com/quicktype/types-urijs/tar.gz/a23603a04e31e883a92244bff8515e3d841a8b98" + "@types/webpack-dev-server@2.9.4", "@types/webpack-dev-server@^2.9.4": version "2.9.4" resolved "http://registry.npmjs.org/@types/webpack-dev-server/-/webpack-dev-server-2.9.4.tgz#cc3c398330ba87c0f1c7bfd020cfafb7bb895493" @@ -1188,6 +1192,15 @@ braces@^2.3.0, braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" +brfs@^1.4.0: + version "1.6.1" + resolved "https://registry.yarnpkg.com/brfs/-/brfs-1.6.1.tgz#b78ce2336d818e25eea04a0947cba6d4fb8849c3" + dependencies: + quote-stream "^1.0.1" + resolve "^1.1.5" + static-module "^2.2.0" + through2 "^2.0.0" + brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" @@ -1277,6 +1290,10 @@ buffer-alloc@^1.2.0: buffer-alloc-unsafe "^1.1.0" buffer-fill "^1.0.0" +buffer-equal@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-0.0.1.tgz#91bc74b11ea405bc916bc6aa908faafa5b4aac4b" + buffer-fill@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" @@ -1608,6 +1625,10 @@ codelyzer@^4.2.1: source-map "^0.5.7" sprintf-js "^1.1.1" +collection-utils@0.0.15: + version "0.0.15" + resolved "https://registry.yarnpkg.com/collection-utils/-/collection-utils-0.0.15.tgz#70f4c54299621699b3f38c66577c9d4284825125" + collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" @@ -1735,7 +1756,7 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -concat-stream@^1.5.0, concat-stream@^1.5.2: +concat-stream@^1.5.0, concat-stream@^1.5.2, concat-stream@~1.6.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" dependencies: @@ -2430,6 +2451,12 @@ dot-prop@^4.1.0: dependencies: is-obj "^1.0.0" +duplexer2@~0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + dependencies: + readable-stream "^2.0.2" + duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" @@ -2614,6 +2641,28 @@ escodegen@1.8.x: optionalDependencies: source-map "~0.2.0" +escodegen@^1.8.1: + version "1.11.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589" + dependencies: + esprima "^3.1.3" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +escodegen@~1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.1.tgz#dbae17ef96c8e4bedb1356f4504fa4cc2f7cb7e2" + dependencies: + esprima "^3.1.3" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + eslint-scope@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172" @@ -2625,6 +2674,10 @@ esprima@2.7.x, esprima@^2.7.1: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" +esprima@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" @@ -2639,7 +2692,7 @@ estraverse@^1.9.1: version "1.9.3" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" -estraverse@^4.1.0, estraverse@^4.1.1: +estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" @@ -2830,6 +2883,15 @@ extsprintf@^1.2.0: version "1.4.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" +falafel@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/falafel/-/falafel-2.1.0.tgz#96bb17761daba94f46d001738b3cedf3a67fe06c" + dependencies: + acorn "^5.0.0" + foreach "^2.0.5" + isarray "0.0.1" + object-keys "^1.0.6" + fast-deep-equal@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" @@ -3017,6 +3079,10 @@ for-own@^1.0.0: dependencies: for-in "^1.0.1" +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -4258,7 +4324,7 @@ jquery@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.3.1.tgz#958ce29e81c9790f31be7792df5d4d95fc57fbca" -js-base64@^2.1.8: +js-base64@^2.1.8, js-base64@^2.4.3: version "2.4.9" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.9.tgz#748911fb04f48a60c4771b375cac45a80df11c03" @@ -4821,6 +4887,12 @@ merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" +merge-source-map@1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.0.4.tgz#a5de46538dae84d4114cc5ea02b4772a6346701f" + dependencies: + source-map "^0.5.6" + methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -5117,6 +5189,10 @@ no-case@^2.2.0: dependencies: lower-case "^1.1.1" +node-fetch@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.2.0.tgz#4ee79bde909262f9775f731e3656d0db55ced5b5" + node-forge@0.7.5: version "0.7.5" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df" @@ -5356,7 +5432,11 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-keys@^1.0.12: +object-inspect@~1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.4.1.tgz#37ffb10e71adaf3748d05f713b4c9452f402cbc4" + +object-keys@^1.0.12, object-keys@^1.0.6: version "1.0.12" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" @@ -5558,7 +5638,11 @@ package-json@^4.0.0: registry-url "^3.0.3" semver "^5.1.0" -pako@~1.0.2, pako@~1.0.5: +pako@^0.2.5: + version "0.2.9" + resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" + +pako@^1.0.6, pako@~1.0.2, pako@~1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" @@ -5639,6 +5723,10 @@ parseqs@0.0.5: dependencies: better-assert "~1.0.0" +parser-toolkit@>=0.0.3: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parser-toolkit/-/parser-toolkit-0.0.5.tgz#ec4b61729c86318b56ea971bfba6b3c672d62c01" + parseuri@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" @@ -5759,6 +5847,10 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" +pluralize@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" + popper.js@^1.14.1: version "1.14.4" resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.14.4.tgz#8eec1d8ff02a5a3a152dd43414a15c7b79fd69b6" @@ -6018,6 +6110,29 @@ quick-lru@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" +quicktype-core@^5.0.41: + version "5.0.41" + resolved "https://registry.yarnpkg.com/quicktype-core/-/quicktype-core-5.0.41.tgz#83f090b1bddeefcff0581e0d9c754d83410ed453" + dependencies: + "@types/urijs" "github:quicktype/types-urijs" + collection-utils "0.0.15" + js-base64 "^2.4.3" + pako "^1.0.6" + pluralize "^7.0.0" + stream-json "0.5.2" + string-to-stream "^1.1.0" + unicode-properties "github:quicktype/unicode-properties#dist" + urijs "^1.19.1" + wordwrap "^1.0.0" + +quote-stream@^1.0.1, quote-stream@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/quote-stream/-/quote-stream-1.0.2.tgz#84963f8c9c26b942e153feeb53aae74652b7e0b2" + dependencies: + buffer-equal "0.0.1" + minimist "^1.1.3" + through2 "^2.0.0" + randomatic@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.0.tgz#36f2ca708e9e567f5ed2ec01949026d50aa10116" @@ -6141,7 +6256,7 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.0, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.3: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" dependencies: @@ -6381,7 +6496,7 @@ resolve@1.1.x, resolve@~1.1.6: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.3.2, resolve@^1.5.0: +resolve@^1.1.5, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.3.2, resolve@^1.5.0: version "1.8.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" dependencies: @@ -6706,6 +6821,10 @@ shallow-clone@^1.0.0: kind-of "^5.0.0" mixin-object "^2.0.1" +shallow-copy@~0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/shallow-copy/-/shallow-copy-0.0.1.tgz#415f42702d73d810330292cc5ee86eae1a11a170" + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -7044,6 +7163,12 @@ stack-trace@0.0.x: version "0.0.10" resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" +static-eval@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/static-eval/-/static-eval-2.0.0.tgz#0e821f8926847def7b4b50cda5d55c04a9b13864" + dependencies: + escodegen "^1.8.1" + static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" @@ -7051,6 +7176,25 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" +static-module@^2.2.0: + version "2.2.5" + resolved "https://registry.yarnpkg.com/static-module/-/static-module-2.2.5.tgz#bd40abceae33da6b7afb84a0e4329ff8852bfbbf" + dependencies: + concat-stream "~1.6.0" + convert-source-map "^1.5.1" + duplexer2 "~0.1.4" + escodegen "~1.9.0" + falafel "^2.1.0" + has "^1.0.1" + magic-string "^0.22.4" + merge-source-map "1.0.4" + object-inspect "~1.4.0" + quote-stream "~1.0.2" + readable-stream "~2.3.3" + shallow-copy "~0.0.1" + static-eval "^2.0.0" + through2 "~2.0.3" + stats-webpack-plugin@0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/stats-webpack-plugin/-/stats-webpack-plugin-0.7.0.tgz#ccffe9b745de8bbb155571e063f8263fc0e2bc06" @@ -7099,6 +7243,12 @@ stream-http@^2.7.2: to-arraybuffer "^1.0.0" xtend "^4.0.0" +stream-json@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/stream-json/-/stream-json-0.5.2.tgz#f4256c0ef1a905f2ef2d473706b4b3ff827653cf" + dependencies: + parser-toolkit ">=0.0.3" + stream-shift@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" @@ -7116,6 +7266,13 @@ strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" +string-to-stream@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string-to-stream/-/string-to-stream-1.1.1.tgz#aba78f73e70661b130ee3e1c0192be4fef6cb599" + dependencies: + inherits "^2.0.1" + readable-stream "^2.1.0" + string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -7293,7 +7450,7 @@ text-hex@1.0.x: version "1.0.0" resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" -through2@^2.0.0, through2@^2.0.2, through2@^2.0.3: +through2@^2.0.0, through2@^2.0.2, through2@^2.0.3, through2@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" dependencies: @@ -7318,6 +7475,10 @@ timers-browserify@^2.0.4: dependencies: setimmediate "^1.0.4" +tiny-inflate@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.2.tgz#93d9decffc8805bd57eae4310f0b745e9b6fb3a7" + tmp@0.0.30: version "0.0.30" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.30.tgz#72419d4a8be7d6ce75148fd8b324e593a711c2ed" @@ -7555,6 +7716,20 @@ ultron@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" +"unicode-properties@github:quicktype/unicode-properties#dist": + version "1.1.0" + resolved "https://codeload.github.com/quicktype/unicode-properties/tar.gz/d5fddfea1ef9d05c6479a979e225476063e13f52" + dependencies: + brfs "^1.4.0" + unicode-trie "^0.3.0" + +unicode-trie@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/unicode-trie/-/unicode-trie-0.3.1.tgz#d671dddd89101a08bac37b6a5161010602052085" + dependencies: + pako "^0.2.5" + tiny-inflate "^1.0.0" + union-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" @@ -7630,6 +7805,10 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +urijs@^1.19.1: + version "1.19.1" + resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.19.1.tgz#5b0ff530c0cbde8386f6342235ba5ca6e995d25a" + urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"