From c0279c469165b451dc3b4112f852ba44be0b2807 Mon Sep 17 00:00:00 2001 From: Elias Kassell Date: Wed, 15 Feb 2023 18:32:43 +0000 Subject: [PATCH 1/9] Beginneth --- .../npm_translate_lock_LTE4Nzc1MDcwNjU= | 4 + BUILD | 31 +- WORKSPACE | 136 +- external/package.json | 0 package.json | 28 - pnpm-lock.yaml | 11703 ++++++++++++++++ protos/BUILD | 12 +- tools/BUILD | 16 + tools/ts_library.bzl | 9 +- tools/ts_proto_library.bzl | 169 +- 10 files changed, 11903 insertions(+), 205 deletions(-) create mode 100755 .aspect/rules/external_repository_action_cache/npm_translate_lock_LTE4Nzc1MDcwNjU= create mode 100644 external/package.json create mode 100644 pnpm-lock.yaml diff --git a/.aspect/rules/external_repository_action_cache/npm_translate_lock_LTE4Nzc1MDcwNjU= b/.aspect/rules/external_repository_action_cache/npm_translate_lock_LTE4Nzc1MDcwNjU= new file mode 100755 index 000000000..8a9da8f18 --- /dev/null +++ b/.aspect/rules/external_repository_action_cache/npm_translate_lock_LTE4Nzc1MDcwNjU= @@ -0,0 +1,4 @@ +# Input hashes for repository rule npm_translate_lock(name = "npm", pnpm_lock = "//:pnpm-lock.yaml"). +# This file should be checked into version control along with the pnpm-lock.yaml file. +pnpm-lock.yaml=-1964332417 +package.json=-409486433 diff --git a/BUILD b/BUILD index 1a98888f5..8a7a1e047 100644 --- a/BUILD +++ b/BUILD @@ -1,6 +1,7 @@ -package(default_visibility = ["//visibility:public"]) +load("@aspect_rules_js//js:defs.bzl", "js_binary") +load("@bazel_gazelle//:def.bzl", "gazelle") -load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_binary") +package(default_visibility = ["//visibility:public"]) exports_files([ "tsconfig.json", @@ -29,43 +30,31 @@ PROTOBUF_DEPS = [ "@npm//estraverse", ] -nodejs_binary( +js_binary( name = "pbjs", data = PROTOBUF_DEPS, entry_point = "@npm//:node_modules/protobufjs-cli/bin/pbjs", - install_source_map_support = False, + # source_map = False, ) -nodejs_binary( +js_binary( name = "pbts", data = PROTOBUF_DEPS, entry_point = "@npm//:node_modules/protobufjs-cli/bin/pbts", - install_source_map_support = False, + # install_source_map_support = False, ) -nodejs_binary( +js_binary( name = "tslint", data = [ "@npm//tslint", ], entry_point = "@npm//:node_modules/tslint/bin/tslint", - install_source_map_support = False, - templated_args = ["--node_options=--preserve-symlinks"], + # install_source_map_support = False, + node_options = ["--preserve-symlinks"], ) -load("@bazel_gazelle//:def.bzl", "gazelle") - # gazelle:prefix github.com/dataform-co/dataform # gazelle:proto package # gazelle:proto_group go_package gazelle(name = "gazelle") - -load("//tools:ts_library.bzl", "ts_library") - -# TODO: This is only here in order to workaround a bug in the way bazel resolves -# workspace imports when in nested repositories, and can be removed once that is fixed. -ts_library( - name = "modules-fix", - srcs = [], - module_name = "df", -) diff --git a/WORKSPACE b/WORKSPACE index e0728ef4b..cfb03668d 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -33,39 +33,135 @@ load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") protobuf_deps() +######## + +# git_repository( +# name = "rules_proto_grpc", +# commit = "b9e6b2922d8b6177d0747f30b738ea467161fc33", +# remote = "https://github.com/gonzojive/rules_proto_grpc.git", +# ) + +# http_archive( +# name = "rules_proto_grpc", +# sha256 = "7954abbb6898830cd10ac9714fbcacf092299fda00ed2baf781172f545120419", +# strip_prefix = "rules_proto_grpc-3.1.1", +# urls = ["https://github.com/rules-proto-grpc/rules_proto_grpc/archive/3.1.1.tar.gz"], +# ) + +http_archive( + name = "rules_proto_grpc", + sha256 = "fb7fc7a3c19a92b2f15ed7c4ffb2983e956625c1436f57a3430b897ba9864059", + strip_prefix = "rules_proto_grpc-4.3.0", + urls = ["https://github.com/rules-proto-grpc/rules_proto_grpc/archive/4.3.0.tar.gz"], +) + +load("@rules_proto_grpc//:repositories.bzl", "rules_proto_grpc_repos", "rules_proto_grpc_toolchains") + +rules_proto_grpc_toolchains() + +rules_proto_grpc_repos() + +load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies", "rules_proto_toolchains") + +rules_proto_dependencies() + +rules_proto_toolchains() + http_archive( name = "build_bazel_rules_nodejs", - sha256 = "d14076339deb08e5460c221fae5c5e9605d2ef4848eee1f0c81c9ffdc1ab31c1", - urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/1.6.1/rules_nodejs-1.6.1.tar.gz"], + sha256 = "dcc55f810142b6cf46a44d0180a5a7fb923c04a5061e2e8d8eb05ccccc60864b", + urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/5.8.0/rules_nodejs-5.8.0.tar.gz"], ) -load("@build_bazel_rules_nodejs//:index.bzl", "node_repositories", "yarn_install") +# or for core module +http_archive( + name = "rules_nodejs", + sha256 = "08337d4fffc78f7fe648a93be12ea2fc4e8eb9795a4e6aa48595b66b34555626", + urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/5.8.0/rules_nodejs-core-5.8.0.tar.gz"], +) -node_repositories( - node_repositories = { - "16.16.0-darwin_amd64": ("node-v16.16.0-darwin-x64.tar.gz", "node-v16.16.0-darwin-x64", "982edd0fad364ad6e2d72161671544ab9399bd0ca8c726bde3cd07775c4c709a"), - "16.16.0-linux_amd64": ("node-v16.16.0-linux-x64.tar.xz", "node-v16.16.0-linux-x64", "edcb6e9bb049ae365611aa209fc03c4bfc7e0295dbcc5b2f1e710ac70384a8ec"), - "16.16.0-windows_amd64": ("node-v16.16.0-win-x64.zip", "node-v16.16.0-win-x64", "c657acc98af55018c8fd6113c7e08d67c8083af75ba0306f9561b0117abc39d4"), - }, - node_version = "16.16.0", - package_json = ["//:package.json"], - yarn_version = "1.13.0", +http_archive( + name = "aspect_rules_js", + sha256 = "ad666b12324bab8bc151772bb2eff9aadace7bfd4d624157c2ac3931860d1c95", + strip_prefix = "rules_js-1.11.1", + url = "https://github.com/aspect-build/rules_js/archive/refs/tags/v1.11.1.tar.gz", ) -yarn_install( +load("@aspect_rules_js//js:repositories.bzl", "rules_js_dependencies") + +rules_js_dependencies() + +http_archive( + name = "aspect_rules_ts", + sha256 = "e81f37c4fe014fc83229e619360d51bfd6cb8ac405a7e8018b4a362efa79d000", + strip_prefix = "rules_ts-1.0.4", + url = "https://github.com/aspect-build/rules_ts/archive/refs/tags/v1.0.4.tar.gz", +) + +load("@aspect_rules_ts//ts:repositories.bzl", "rules_ts_dependencies") + +rules_ts_dependencies( + ts_version_from = "//:package.json", +) + +load("@rules_nodejs//nodejs:repositories.bzl", "DEFAULT_NODE_VERSION", "nodejs_register_toolchains") + +nodejs_register_toolchains( + name = "nodejs", + node_version = DEFAULT_NODE_VERSION, +) + +load("@aspect_rules_js//npm:npm_import.bzl", "npm_translate_lock") + +npm_translate_lock( name = "npm", - package_json = "//:package.json", - symlink_node_modules = False, - yarn_lock = "//:yarn.lock", + data = [ + "//:package.json", + ], + pnpm_lock = "//:pnpm-lock.yaml", + update_pnpm_lock = True, + verify_node_modules_ignored = "//:.bazelignore", ) -load("@npm//:install_bazel_dependencies.bzl", "install_bazel_dependencies") +load("@npm//:repositories.bzl", "npm_repositories") + +npm_repositories() + +######### + +# http_archive( +# name = "rules_nodejs", +# sha256 = "08337d4fffc78f7fe648a93be12ea2fc4e8eb9795a4e6aa48595b66b34555626", +# urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/5.8.0/rules_nodejs-core-5.8.0.tar.gz"], +# ) + +# load("@rules_nodejs//:index.bzl", "node_repositories", "yarn_install") + +# node_repositories( +# node_repositories = { +# "16.16.0-darwin_amd64": ("node-v16.16.0-darwin-x64.tar.gz", "node-v16.16.0-darwin-x64", "982edd0fad364ad6e2d72161671544ab9399bd0ca8c726bde3cd07775c4c709a"), +# "16.16.0-linux_amd64": ("node-v16.16.0-linux-x64.tar.xz", "node-v16.16.0-linux-x64", "edcb6e9bb049ae365611aa209fc03c4bfc7e0295dbcc5b2f1e710ac70384a8ec"), +# "16.16.0-windows_amd64": ("node-v16.16.0-win-x64.zip", "node-v16.16.0-win-x64", "c657acc98af55018c8fd6113c7e08d67c8083af75ba0306f9561b0117abc39d4"), +# }, +# node_version = "16.16.0", +# package_json = ["//:package.json"], +# yarn_version = "1.13.0", +# ) + +# yarn_install( +# name = "npm", +# package_json = "//:package.json", +# symlink_node_modules = False, +# yarn_lock = "//:yarn.lock", +# ) + +# load("@npm//:install_bazel_dependencies.bzl", "install_bazel_dependencies") -install_bazel_dependencies() +# install_bazel_dependencies() -load("@npm_bazel_typescript//:index.bzl", "ts_setup_workspace") +# load("@npm_bazel_typescript//:index.bzl", "ts_setup_workspace") -ts_setup_workspace() +# ts_setup_workspace() # Go/Gazelle requirements/dependencies. http_archive( diff --git a/external/package.json b/external/package.json new file mode 100644 index 000000000..e69de29bb diff --git a/package.json b/package.json index 69df7a612..436cb12d8 100644 --- a/package.json +++ b/package.json @@ -150,33 +150,5 @@ "webpack-cli": "^3.3.10", "webpack-dev-server": "^3.11.2", "yargs": "^16.2.0" - }, - "resolutions": { - "**/object-path": "^0.11.5", - "**/http-proxy": "^1.18.1", - "**/serialize-javascript": "^3.1.0", - "webpack/**/acorn": "^5.7.4", - "**/lodash": "^4.17.21", - "**/ssri": "^7.1.1", - "**/postcss": "^8.2.10", - "**/browserslist": "^4.16.5", - "**/glob-parent": "^5.1.2", - "**/marked": "^4.0.10", - "**/node-forge": "^1.0.0", - "**/json-bigint": "^1.0.0", - "**/y18n": "^5.0.5", - "**/underscore": "^1.12.1", - "**/websocket-extensions": "^0.1.4", - "**/dns-packet": "^1.3.2", - "**/prismjs": "^1.24.0", - "**/url-parse": "^1.5.2", - "**/handlebars": "^4.7.7", - "**/protobufjs": "^7.0.0", - "**/ansi-regex": "^3.0.1", - "**/ansi-html": "^0.0.8", - "**/json-schema": "^0.4.0", - "**/nth-check": "^2.0.1", - "**/node-fetch": "^2.6.7", - "**/markdown-it": "^12.3.2" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 000000000..260be29c7 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,11703 @@ +lockfileVersion: 5.4 + +specifiers: + '@babel/runtime': ^7.2.0 + '@bazel/hide-bazel-files': 1.0.0 + '@bazel/ibazel': ^0.9.1 + '@bazel/labs': ^0.42.3 + '@bazel/rollup': ^1.6.0 + '@bazel/typescript': ^1.1.0 + '@blueprintjs/core': ^3.22.3 + '@blueprintjs/icons': ^3.13.0 + '@blueprintjs/select': ^3.8.0 + '@google-cloud/bigquery': ^5.6.0 + '@google-cloud/storage': ^5.8.2 + '@mapbox/rehype-prism': ^0.6.0 + '@nivo/bar': ^0.61.1 + '@nivo/line': ^0.61.1 + '@octokit/rest': ^16.35.0 + '@rollup/plugin-node-resolve': ^7.1.3 + '@types/analytics-node': ^3.1.2 + '@types/bunyan': ^1.8.6 + '@types/chai': ^4.1.7 + '@types/diff': ^4.0.2 + '@types/es6-shim': ^0.31.37 + '@types/express': ^4.17.1 + '@types/fs-extra': ^8.1.0 + '@types/glob': ^7.1.1 + '@types/google-protobuf': ^3.2.7 + '@types/js-beautify': ^1.8.1 + '@types/json-stable-stringify': ^1.0.32 + '@types/lodash': ^4.14.149 + '@types/long': ^4.0.0 + '@types/moo': ^0.5.0 + '@types/mssql': ^6.0.8 + '@types/node': ^12.12.6 + '@types/node-cache': ^4.2.5 + '@types/object-hash': ^1.3.1 + '@types/pg': ^7.14.5 + '@types/pg-query-stream': ^1.0.3 + '@types/react': ^16.9.17 + '@types/react-dom': ^16.9.4 + '@types/react-router': ^3.0.0 + '@types/react-syntax-highlighter': ^13.5.0 + '@types/readline-sync': ^1.4.3 + '@types/request': ^2.48.3 + '@types/rimraf': ^2.0.2 + '@types/semver': ^7.3.13 + '@types/ssh2': ^0.5.43 + '@types/stack-trace': ^0.0.29 + '@types/swagger-schema-official': ^2.0.20 + '@types/uuid': ^7.0.2 + '@types/validator': ^13.1.0 + '@types/vscode': ^1.45.1 + '@types/webpack-dev-server': ^3.1.7 + '@types/yargs': ^15.0.5 + '@zeit/next-css': 1.0.1 + algoliasearch: ^3.32.1 + analytics-node: ^3.5.0 + axios: ^0.21.2 + babel-loader: ^8.0.6 + babel-plugin-transform-runtime: ^6.23.0 + babel-preset-env: ^1.7.0 + bunyan: ^1.8.12 + chai: ^4.2.0 + chalk: ^4.0.0 + chokidar: ^2.0.4 + cron-parser: ^2.15.0 + css-loader: ^3.6.0 + deepmerge: ^4.2.2 + diff: ^4.0.2 + escodegen: ^1.13.0 + espree: ^7.0.0 + estraverse: ^5.1.0 + express: ^4.17.3 + front-matter: ^4.0.1 + fs-extra: ^9.0.0 + get-port: ^5.1.1 + glob: ^7.1.3 + google-protobuf: ^3.6.1 + grpc: ^1.24.0 + grpc-web-client: ^0.5.0 + handy-redis: ^1.8.3 + js-beautify: ^1.10.2 + jsdoc: ^3.6.11 + json-stable-stringify: ^1.0.1 + lodash: ^4.17.21 + long: ^4.0.0 + minimist: ^1.2.6 + moo: ^0.5.0 + mssql: ^8.1.2 + next-images: ^1.0.4 + node-cache: ^5.1.0 + object-hash: ^2.0.3 + object-sizeof: ^1.6.1 + parse-duration: ^1.0.0 + pegjs: ^0.10.0 + pg: ^8.4.1 + pg-query-stream: ^3.3.1 + presto-client: ^0.8.1 + prettier: ^1.14.2 + pretty-ms: ^4.0.0 + promise-pool-executor: ^1.1.1 + protobufjs: ^7.0.0 + protobufjs-cli: ^1.0.0 + re-resizable: ^4.7.1 + react: ^16.12.0 + react-dom: ^16.12.0 + react-router: ^3.0.0 + react-syntax-highlighter: ^15.3.0 + react-transition-group: ^2.5.3 + readline-sync: ^1.4.9 + redis: ^3.0.2 + rehype-raw: ^5.1.0 + rehype-react: ^6.2.0 + rehype-slug: ^4.0.1 + remark: ^13.0.0 + remark-rehype: ^8.1.0 + request: ^2.88.0 + rimraf: ^2.6.2 + rollup: ^2.7.3 + rollup-plugin-dts: ^1.4.0 + semver: ^7.3.8 + snowflake-sdk: ^1.6.12 + source-map-loader: ^0.2.0 + sql-formatter: ^2.3.3 + ssh2: ^1.4.0 + style-loader: ^1.0.0 + tarjan-graph: ^2.0.0 + tmp: 0.2.0 + ts-loader: ^5.3.1 + ts-mockito: ^2.6.1 + tslint: ^5.14.0 + tslint-config-prettier: ^1.18.0 + tslint-config-security: ^1.16.0 + tslint-react: ^3.6.0 + typed-css-modules: ^0.6.8 + typedoc: ^0.19.2 + typescript: ^3.8.3 + uglify-es: ^3.3.9 + uglify-js: ^3.7.7 + untildify: ^4.0.0 + url: ^0.11.0 + uuid: ^7.0.2 + validator: ^13.7.0 + vm2: 3.9.13 + vsce: ^1.79.5 + vscode-languageclient: ^6.1.3 + vscode-languageserver: ^6.1.1 + vscode-languageserver-textdocument: ^1.0.1 + webpack: 4.20.2 + webpack-cli: ^3.3.10 + webpack-dev-server: ^3.11.2 + yargs: ^16.2.0 + +dependencies: + '@babel/runtime': 7.20.13 + '@bazel/hide-bazel-files': 1.0.0 + '@bazel/ibazel': 0.9.1 + '@bazel/labs': 0.42.3_webpack@4.20.2 + '@bazel/rollup': 1.7.0_rollup@2.79.1 + '@bazel/typescript': 1.7.0_typescript@3.9.10 + '@blueprintjs/core': 3.54.0_wcqkhtmu7mswc6yz4uyexck3ty + '@blueprintjs/icons': 3.33.0 + '@blueprintjs/select': 3.19.1_wcqkhtmu7mswc6yz4uyexck3ty + '@google-cloud/bigquery': 5.12.0 + '@google-cloud/storage': 5.20.5 + '@mapbox/rehype-prism': 0.6.0 + '@nivo/bar': 0.61.1_wcqkhtmu7mswc6yz4uyexck3ty + '@nivo/line': 0.61.1_wcqkhtmu7mswc6yz4uyexck3ty + '@octokit/rest': 16.43.2 + '@rollup/plugin-node-resolve': 7.1.3_rollup@2.79.1 + '@types/analytics-node': 3.1.10 + '@types/bunyan': 1.8.8 + '@types/chai': 4.3.4 + '@types/diff': 4.0.2 + '@types/es6-shim': 0.31.42 + '@types/express': 4.17.17 + '@types/fs-extra': 8.1.2 + '@types/glob': 7.2.0 + '@types/google-protobuf': 3.15.6 + '@types/js-beautify': 1.13.3 + '@types/json-stable-stringify': 1.0.34 + '@types/lodash': 4.14.191 + '@types/long': 4.0.2 + '@types/moo': 0.5.5 + '@types/mssql': 6.0.8 + '@types/node': 12.20.55 + '@types/node-cache': 4.2.5 + '@types/object-hash': 1.3.4 + '@types/pg': 7.14.11 + '@types/pg-query-stream': 1.0.3 + '@types/react': 16.14.35 + '@types/react-dom': 16.9.18 + '@types/react-router': 3.0.28 + '@types/react-syntax-highlighter': 13.5.2 + '@types/readline-sync': 1.4.4 + '@types/request': 2.48.8 + '@types/rimraf': 2.0.5 + '@types/semver': 7.3.13 + '@types/ssh2': 0.5.52 + '@types/stack-trace': 0.0.29 + '@types/swagger-schema-official': 2.0.22 + '@types/uuid': 7.0.5 + '@types/validator': 13.7.12 + '@types/vscode': 1.75.1 + '@types/webpack-dev-server': 3.11.6 + '@types/yargs': 15.0.15 + '@zeit/next-css': 1.0.1_webpack@4.20.2 + algoliasearch: 3.35.1 + analytics-node: 3.5.0 + axios: 0.21.4 + babel-loader: 8.3.0_webpack@4.20.2 + babel-plugin-transform-runtime: 6.23.0 + babel-preset-env: 1.7.0 + bunyan: 1.8.15 + chai: 4.3.7 + chalk: 4.1.2 + chokidar: 2.1.8 + cron-parser: 2.18.0 + css-loader: 3.6.0_webpack@4.20.2 + deepmerge: 4.3.0 + diff: 4.0.2 + escodegen: 1.14.3 + espree: 7.3.1 + estraverse: 5.3.0 + express: 4.18.2 + front-matter: 4.0.2 + fs-extra: 9.1.0 + get-port: 5.1.1 + glob: 7.2.3 + google-protobuf: 3.21.2 + grpc: 1.24.11 + grpc-web-client: 0.5.0_7ouq2zvsbdf2dwgb66cbbrd6aq + handy-redis: 1.8.3 + js-beautify: 1.14.7 + jsdoc: 3.6.11 + json-stable-stringify: 1.0.2 + lodash: 4.17.21 + long: 4.0.0 + minimist: 1.2.8 + moo: 0.5.2 + mssql: 8.1.4 + next-images: 1.8.4_webpack@4.20.2 + node-cache: 5.1.2 + object-hash: 2.2.0 + object-sizeof: 1.6.3 + parse-duration: 1.0.2 + pegjs: 0.10.0 + pg: 8.9.0 + pg-query-stream: 3.4.2_pg@8.9.0 + presto-client: 0.8.1 + prettier: 1.19.1 + pretty-ms: 4.0.0 + promise-pool-executor: 1.1.1 + protobufjs: 7.2.2 + protobufjs-cli: 1.1.1_protobufjs@7.2.2 + re-resizable: 4.11.0 + react: 16.14.0 + react-dom: 16.14.0_react@16.14.0 + react-router: 3.2.6_react@16.14.0 + react-syntax-highlighter: 15.5.0_react@16.14.0 + react-transition-group: 2.9.0_wcqkhtmu7mswc6yz4uyexck3ty + readline-sync: 1.4.10 + redis: 3.1.2 + rehype-raw: 5.1.0 + rehype-react: 6.2.1 + rehype-slug: 4.0.1 + remark: 13.0.0 + remark-rehype: 8.1.0 + request: 2.88.2 + rimraf: 2.7.1 + rollup: 2.79.1 + rollup-plugin-dts: 1.4.14_6gd2y3vqcxk6lounvan455yu24 + semver: 7.3.8 + snowflake-sdk: 1.6.18 + source-map-loader: 0.2.4 + sql-formatter: 2.3.4 + ssh2: 1.11.0 + style-loader: 1.3.0_webpack@4.20.2 + tarjan-graph: 2.0.0 + tmp: 0.2.0 + ts-loader: 5.4.5_typescript@3.9.10 + ts-mockito: 2.6.1 + tslint: 5.20.1_typescript@3.9.10 + tslint-config-prettier: 1.18.0 + tslint-config-security: 1.16.0_67neen4t5xfhpau25dyc5p2yey + tslint-react: 3.6.0_67neen4t5xfhpau25dyc5p2yey + typed-css-modules: 0.6.8 + typedoc: 0.19.2_typescript@3.9.10 + typescript: 3.9.10 + uglify-es: 3.3.9 + uglify-js: 3.17.4 + untildify: 4.0.0 + url: 0.11.0 + uuid: 7.0.3 + validator: 13.9.0 + vm2: 3.9.13 + vsce: 1.103.1 + vscode-languageclient: 6.1.4 + vscode-languageserver: 6.1.1 + vscode-languageserver-textdocument: 1.0.8 + webpack: 4.20.2_webpack-cli@3.3.12 + webpack-cli: 3.3.12_webpack@4.20.2 + webpack-dev-server: 3.11.3_ulcebcz4bfowhsawl25alqvaxy + yargs: 16.2.0 + +packages: + + /@azure/abort-controller/1.1.0: + resolution: {integrity: sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==} + engines: {node: '>=12.0.0'} + dependencies: + tslib: 2.5.0 + dev: false + + /@azure/core-auth/1.4.0: + resolution: {integrity: sha512-HFrcTgmuSuukRf/EdPmqBrc5l6Q5Uu+2TbuhaKbgaCpP2TfAeiNaQPAadxO+CYBRHGUzIDteMAjFspFLDLnKVQ==} + engines: {node: '>=12.0.0'} + dependencies: + '@azure/abort-controller': 1.1.0 + tslib: 2.5.0 + dev: false + + /@azure/core-client/1.7.1: + resolution: {integrity: sha512-85igXpc5V7ns6rvMEpLmIcBDftjUgTWD+0tmYPyQEfPfkAwpPTs1X5rhCDsfqvUZGA8Ksid1hdZGu62r6XXeHg==} + engines: {node: '>=14.0.0'} + dependencies: + '@azure/abort-controller': 1.1.0 + '@azure/core-auth': 1.4.0 + '@azure/core-rest-pipeline': 1.10.1 + '@azure/core-tracing': 1.0.1 + '@azure/core-util': 1.1.1 + '@azure/logger': 1.0.3 + tslib: 2.5.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@azure/core-http-compat/1.3.0: + resolution: {integrity: sha512-ZN9avruqbQ5TxopzG3ih3KRy52n8OAbitX3fnZT5go4hzu0J+KVPSzkL+Wt3hpJpdG8WIfg1sBD1tWkgUdEpBA==} + engines: {node: '>=12.0.0'} + dependencies: + '@azure/abort-controller': 1.1.0 + '@azure/core-client': 1.7.1 + '@azure/core-rest-pipeline': 1.10.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@azure/core-http/2.3.1: + resolution: {integrity: sha512-cur03BUwV0Tbv81bQBOLafFB02B6G++K6F2O3IMl8pSE2QlXm3cu11bfyBNlDUKi5U+xnB3GC63ae3athhkx6Q==} + engines: {node: '>=14.0.0'} + dependencies: + '@azure/abort-controller': 1.1.0 + '@azure/core-auth': 1.4.0 + '@azure/core-tracing': 1.0.0-preview.13 + '@azure/core-util': 1.1.1 + '@azure/logger': 1.0.3 + '@types/node-fetch': 2.6.2 + '@types/tunnel': 0.0.3 + form-data: 4.0.0 + node-fetch: 2.6.9 + process: 0.11.10 + tough-cookie: 4.1.2 + tslib: 2.5.0 + tunnel: 0.0.6 + uuid: 8.3.2 + xml2js: 0.4.23 + transitivePeerDependencies: + - encoding + dev: false + + /@azure/core-lro/2.5.1: + resolution: {integrity: sha512-JHQy/bA3NOz2WuzOi5zEk6n/TJdAropupxUT521JIJvW7EXV2YN2SFYZrf/2RHeD28QAClGdynYadZsbmP+nyQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@azure/abort-controller': 1.1.0 + '@azure/logger': 1.0.3 + tslib: 2.5.0 + dev: false + + /@azure/core-paging/1.5.0: + resolution: {integrity: sha512-zqWdVIt+2Z+3wqxEOGzR5hXFZ8MGKK52x4vFLw8n58pR6ZfKRx3EXYTxTaYxYHc/PexPUTyimcTWFJbji9Z6Iw==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.5.0 + dev: false + + /@azure/core-rest-pipeline/1.10.1: + resolution: {integrity: sha512-Kji9k6TOFRDB5ZMTw8qUf2IJ+CeJtsuMdAHox9eqpTf1cefiNMpzrfnF6sINEBZJsaVaWgQ0o48B6kcUH68niA==} + engines: {node: '>=14.0.0'} + dependencies: + '@azure/abort-controller': 1.1.0 + '@azure/core-auth': 1.4.0 + '@azure/core-tracing': 1.0.1 + '@azure/core-util': 1.1.1 + '@azure/logger': 1.0.3 + form-data: 4.0.0 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + tslib: 2.5.0 + uuid: 8.3.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@azure/core-tracing/1.0.0-preview.13: + resolution: {integrity: sha512-KxDlhXyMlh2Jhj2ykX6vNEU0Vou4nHr025KoSEiz7cS3BNiHNaZcdECk/DmLkEB0as5T7b/TpRcehJ5yV6NeXQ==} + engines: {node: '>=12.0.0'} + dependencies: + '@opentelemetry/api': 1.4.0 + tslib: 2.5.0 + dev: false + + /@azure/core-tracing/1.0.1: + resolution: {integrity: sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==} + engines: {node: '>=12.0.0'} + dependencies: + tslib: 2.5.0 + dev: false + + /@azure/core-util/1.1.1: + resolution: {integrity: sha512-A4TBYVQCtHOigFb2ETiiKFDocBoI1Zk2Ui1KpI42aJSIDexF7DHQFpnjonltXAIU/ceH+1fsZAWWgvX6/AKzog==} + engines: {node: '>=12.0.0'} + dependencies: + '@azure/abort-controller': 1.1.0 + tslib: 2.5.0 + dev: false + + /@azure/identity/2.1.0: + resolution: {integrity: sha512-BPDz1sK7Ul9t0l9YKLEa8PHqWU4iCfhGJ+ELJl6c8CP3TpJt2urNCbm0ZHsthmxRsYoMPbz2Dvzj30zXZVmAFw==} + engines: {node: '>=12.0.0'} + dependencies: + '@azure/abort-controller': 1.1.0 + '@azure/core-auth': 1.4.0 + '@azure/core-client': 1.7.1 + '@azure/core-rest-pipeline': 1.10.1 + '@azure/core-tracing': 1.0.1 + '@azure/core-util': 1.1.1 + '@azure/logger': 1.0.3 + '@azure/msal-browser': 2.33.0 + '@azure/msal-common': 7.6.0 + '@azure/msal-node': 1.15.0 + events: 3.3.0 + jws: 4.0.0 + open: 8.4.1 + stoppable: 1.1.0 + tslib: 2.5.0 + uuid: 8.3.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@azure/keyvault-keys/4.6.0: + resolution: {integrity: sha512-0112LegxeR03L8J4k+q6HwBVvrpd9y+oInG0FG3NaHXN7YUubVBon/eb5jFI6edGrvNigpxSR0XIsprFXdkzCQ==} + engines: {node: '>=12.0.0'} + dependencies: + '@azure/abort-controller': 1.1.0 + '@azure/core-auth': 1.4.0 + '@azure/core-client': 1.7.1 + '@azure/core-http-compat': 1.3.0 + '@azure/core-lro': 2.5.1 + '@azure/core-paging': 1.5.0 + '@azure/core-rest-pipeline': 1.10.1 + '@azure/core-tracing': 1.0.1 + '@azure/core-util': 1.1.1 + '@azure/logger': 1.0.3 + tslib: 2.5.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@azure/logger/1.0.3: + resolution: {integrity: sha512-aK4s3Xxjrx3daZr3VylxejK3vG5ExXck5WOHDJ8in/k9AqlfIyFMMT1uG7u8mNjX+QRILTIn0/Xgschfh/dQ9g==} + engines: {node: '>=12.0.0'} + dependencies: + tslib: 2.5.0 + dev: false + + /@azure/msal-browser/2.33.0: + resolution: {integrity: sha512-c7CVh1tfUfxiWkEIhoIb11hL4PGo4hz0M+gMy34ATagAKdLK7qyEu/5AXJWAf5lz5eE+vQhm7+LKiuETrcXXGw==} + engines: {node: '>=0.8.0'} + dependencies: + '@azure/msal-common': 10.0.0 + dev: false + + /@azure/msal-common/10.0.0: + resolution: {integrity: sha512-/LghpT93jsZLy55QzTsRZWMx6R1Mjc1Aktwps8sKSGE3WbrGwbSsh2uhDlpl6FMcKChYjJ0ochThWwwOodrQNg==} + engines: {node: '>=0.8.0'} + dev: false + + /@azure/msal-common/7.6.0: + resolution: {integrity: sha512-XqfbglUTVLdkHQ8F9UQJtKseRr3sSnr9ysboxtoswvaMVaEfvyLtMoHv9XdKUfOc0qKGzNgRFd9yRjIWVepl6Q==} + engines: {node: '>=0.8.0'} + dev: false + + /@azure/msal-node/1.15.0: + resolution: {integrity: sha512-fwC5M0c8pxOAzmScPbpx7j28YVTDebUaizlVF7bR0xvlU0r3VWW5OobCcr9ybqKS6wGyO7u4EhXJS9rjRWAuwA==} + engines: {node: 10 || 12 || 14 || 16 || 18} + dependencies: + '@azure/msal-common': 10.0.0 + jsonwebtoken: 9.0.0 + uuid: 8.3.2 + dev: false + + /@azure/storage-blob/12.12.0: + resolution: {integrity: sha512-o/Mf6lkyYG/eBW4/hXB9864RxVNmAkcKHjsGR6Inlp5hupa3exjSyH2KjO3tLO//YGA+tS+17hM2bxRl9Sn16g==} + engines: {node: '>=12.0.0'} + dependencies: + '@azure/abort-controller': 1.1.0 + '@azure/core-http': 2.3.1 + '@azure/core-lro': 2.5.1 + '@azure/core-paging': 1.5.0 + '@azure/core-tracing': 1.0.0-preview.13 + '@azure/logger': 1.0.3 + events: 3.3.0 + tslib: 2.5.0 + transitivePeerDependencies: + - encoding + dev: false + + /@babel/code-frame/7.18.6: + resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.18.6 + dev: false + + /@babel/helper-string-parser/7.19.4: + resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/helper-validator-identifier/7.19.1: + resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/highlight/7.18.6: + resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.19.1 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: false + + /@babel/parser/7.20.15: + resolution: {integrity: sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.20.7 + dev: false + + /@babel/runtime/7.20.13: + resolution: {integrity: sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.13.11 + dev: false + + /@babel/types/7.20.7: + resolution: {integrity: sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.19.4 + '@babel/helper-validator-identifier': 7.19.1 + to-fast-properties: 2.0.0 + dev: false + + /@bazel/hide-bazel-files/1.0.0: + resolution: {integrity: sha512-dfw2W7xDUPlRMcDMVO8gDkX9Xb7Thy3sP4PDODv+eiHOvwIi116X/wwy7mQUZISkJdEJ1zWy9ydpzvfetpYh4w==} + deprecated: This package is a workaround for an issue prior to Bazel 2.1. If you are on Bazel 2.1 or later, you should not need this, because the .bazelignore file contains node_modules so that Bazel doesn't try to read packages from this directory. + hasBin: true + requiresBuild: true + dev: false + + /@bazel/ibazel/0.9.1: + resolution: {integrity: sha512-twdytcFr+zj7CQcJCDegrAAI2soRyL34yaxD+3g59W8u188iOsZ392gscFJufysoEQKvAon1UiI3DqCrS+qYDw==} + hasBin: true + dev: false + + /@bazel/labs/0.42.3_webpack@4.20.2: + resolution: {integrity: sha512-dWTr8czg96i7rGQI6Jg/l5JsikWNWQCusDJ5db256NFKL+lbB6ii16+4zjKw/Ge3YmcMNZBP3481+4ahRCzTkA==} + hasBin: true + peerDependencies: + webpack: '>=4.0.0' + dependencies: + webpack: 4.20.2_webpack-cli@3.3.12 + dev: false + + /@bazel/rollup/1.7.0_rollup@2.79.1: + resolution: {integrity: sha512-Pp5aCJw3gwu77zn6/fQgZ39ArrWEI5O3dja5wKadBnfOQ66PImIEr+bf7JgROoWvACH1kGxaS423rq51fiuCsA==} + hasBin: true + requiresBuild: true + peerDependencies: + rollup: '>=1.0.0 <2.0.0' + dependencies: + rollup: 2.79.1 + dev: false + + /@bazel/typescript/1.7.0_typescript@3.9.10: + resolution: {integrity: sha512-M6JPXJZ+W6457QZfPHmGg/Mejnp7//YTnffGmnmeK9vDqybXeCCRWW1/iEOwopLJYQViBHfaoulde0VXelx9sA==} + deprecated: This package is no longer maintained, see https://github.com/aspect-build/rules_ts for replacement + hasBin: true + requiresBuild: true + peerDependencies: + typescript: '>=3.0.0 <4.0' + dependencies: + protobufjs: 6.8.8 + semver: 5.6.0 + source-map-support: 0.5.9 + tsutils: 2.27.2_typescript@3.9.10 + typescript: 3.9.10 + dev: false + + /@blueprintjs/colors/4.1.15: + resolution: {integrity: sha512-iOwfwE3tOXiM+dmwkdK7fY6dCGqg7yBLYAUHrmPUeYscrqZ8gJqUXAtDumuWMoLvm1SEz5SVIEfm16QnHd4efw==} + dev: false + + /@blueprintjs/core/3.54.0_wcqkhtmu7mswc6yz4uyexck3ty: + resolution: {integrity: sha512-u2c1s6MNn0ocxhnC6CuiG5g3KV6b4cKUvSobznepA9SC3/AL1s3XOvT7DLWoHRv2B/vBOHFYEDzLw2/vlcGGZg==} + hasBin: true + peerDependencies: + react: ^15.3.0 || 16 || 17 + react-dom: ^15.3.0 || 16 || 17 + dependencies: + '@blueprintjs/colors': 4.1.15 + '@blueprintjs/icons': 3.33.0 + '@juggle/resize-observer': 3.4.0 + '@types/dom4': 2.0.2 + classnames: 2.3.2 + dom4: 2.1.6 + normalize.css: 8.0.1 + popper.js: 1.16.1 + react: 16.14.0 + react-dom: 16.14.0_react@16.14.0 + react-lifecycles-compat: 3.0.4 + react-popper: 1.3.11_react@16.14.0 + react-transition-group: 2.9.0_wcqkhtmu7mswc6yz4uyexck3ty + tslib: 2.3.1 + dev: false + + /@blueprintjs/icons/3.33.0: + resolution: {integrity: sha512-Q6qoSDIm0kRYQZISm59UUcDCpV3oeHulkLuh3bSlw0HhcSjvEQh2PSYbtaifM60Q4aK4PCd6bwJHg7lvF1x5fQ==} + dependencies: + classnames: 2.3.2 + tslib: 2.3.1 + dev: false + + /@blueprintjs/select/3.19.1_wcqkhtmu7mswc6yz4uyexck3ty: + resolution: {integrity: sha512-8UJIZMaWXRMQHr14wbmzJc/CklcSKxOU5JUux0xXKQz/hDW/g1a650tlwJmnxufvRdShbGinlVfHupCs0EL6sw==} + peerDependencies: + react: ^15.3.0 || 16 || 17 + react-dom: ^15.3.0 || 16 || 17 + dependencies: + '@blueprintjs/core': 3.54.0_wcqkhtmu7mswc6yz4uyexck3ty + classnames: 2.3.2 + react: 16.14.0 + react-dom: 16.14.0_react@16.14.0 + tslib: 2.3.1 + dev: false + + /@colors/colors/1.5.0: + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + dev: false + + /@dabh/diagnostics/2.0.3: + resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} + dependencies: + colorspace: 1.1.4 + enabled: 2.0.0 + kuler: 2.0.0 + dev: false + + /@google-cloud/bigquery/5.12.0: + resolution: {integrity: sha512-UaIvvuKpyJhCRBkxEJXnJwvxOxkGoZHvSs9IsS0MNUS4YphcbWYOyzRMufV5gxdsr7XNSd+36Nj/n/7vyZiCqQ==} + engines: {node: '>=10'} + dependencies: + '@google-cloud/common': 3.10.0 + '@google-cloud/paginator': 3.0.7 + '@google-cloud/promisify': 2.0.4 + arrify: 2.0.1 + big.js: 6.2.1 + duplexify: 4.1.2 + extend: 3.0.2 + is: 3.3.0 + p-event: 4.2.0 + readable-stream: 3.6.0 + stream-events: 1.0.5 + uuid: 8.3.2 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /@google-cloud/common/3.10.0: + resolution: {integrity: sha512-XMbJYMh/ZSaZnbnrrOFfR/oQrb0SxG4qh6hDisWCoEbFcBHV0qHQo4uXfeMCzolx2Mfkh6VDaOGg+hyJsmxrlw==} + engines: {node: '>=10'} + dependencies: + '@google-cloud/projectify': 2.1.1 + '@google-cloud/promisify': 2.0.4 + arrify: 2.0.1 + duplexify: 4.1.2 + ent: 2.2.0 + extend: 3.0.2 + google-auth-library: 7.14.1 + retry-request: 4.2.2 + teeny-request: 7.2.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /@google-cloud/paginator/3.0.7: + resolution: {integrity: sha512-jJNutk0arIQhmpUUQJPJErsojqo834KcyB6X7a1mxuic8i1tKXxde8E69IZxNZawRIlZdIK2QY4WALvlK5MzYQ==} + engines: {node: '>=10'} + dependencies: + arrify: 2.0.1 + extend: 3.0.2 + dev: false + + /@google-cloud/projectify/2.1.1: + resolution: {integrity: sha512-+rssMZHnlh0twl122gXY4/aCrk0G1acBqkHFfYddtsqpYXGxA29nj9V5V9SfC+GyOG00l650f6lG9KL+EpFEWQ==} + engines: {node: '>=10'} + dev: false + + /@google-cloud/promisify/2.0.4: + resolution: {integrity: sha512-j8yRSSqswWi1QqUGKVEKOG03Q7qOoZP6/h2zN2YO+F5h2+DHU0bSrHCK9Y7lo2DI9fBd8qGAw795sf+3Jva4yA==} + engines: {node: '>=10'} + dev: false + + /@google-cloud/storage/5.20.5: + resolution: {integrity: sha512-lOs/dCyveVF8TkVFnFSF7IGd0CJrTm91qiK6JLu+Z8qiT+7Ag0RyVhxZIWkhiACqwABo7kSHDm8FdH8p2wxSSw==} + engines: {node: '>=10'} + dependencies: + '@google-cloud/paginator': 3.0.7 + '@google-cloud/projectify': 2.1.1 + '@google-cloud/promisify': 2.0.4 + abort-controller: 3.0.0 + arrify: 2.0.1 + async-retry: 1.3.3 + compressible: 2.0.18 + configstore: 5.0.1 + duplexify: 4.1.2 + ent: 2.2.0 + extend: 3.0.2 + gaxios: 4.3.3 + google-auth-library: 7.14.1 + hash-stream-validation: 0.2.4 + mime: 3.0.0 + mime-types: 2.1.35 + p-limit: 3.1.0 + pumpify: 2.0.1 + retry-request: 4.2.2 + stream-events: 1.0.5 + teeny-request: 7.2.0 + uuid: 8.3.2 + xdg-basedir: 4.0.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /@hypnosphi/create-react-context/0.3.1_4vyaxm4rsh2mpfdenvlqy7kmya: + resolution: {integrity: sha512-V1klUed202XahrWJLLOT3EXNeCpFHCcJntdFGI15ntCwau+jfT386w7OFTMaCqOgXUH1fa0w/I1oZs+i/Rfr0A==} + peerDependencies: + prop-types: ^15.0.0 + react: '>=0.14.0' + dependencies: + gud: 1.0.0 + prop-types: 15.8.1 + react: 16.14.0 + warning: 4.0.3 + dev: false + + /@js-joda/core/5.5.2: + resolution: {integrity: sha512-retLUN4TwCJ0QJDi9OCJwYVaXAz93NeOkEtEQL98M2bykBOxmURlP0YlfsuE46kItOOVZIWRYC3KsSLhQ1R2Qw==} + dev: false + + /@jsdoc/salty/0.2.3: + resolution: {integrity: sha512-bbtCxCkxcnWhi50I+4Lj6mdz9w3pOXOgEQrID8TCZ/DF51fW7M9GCQW2y45SpBDdHd1Eirm1X/Cf6CkAAe8HPg==} + engines: {node: '>=v12.0.0'} + dependencies: + lodash: 4.17.21 + dev: false + + /@juggle/resize-observer/3.4.0: + resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==} + dev: false + + /@mapbox/hast-util-table-cell-style/0.2.0: + resolution: {integrity: sha512-gqaTIGC8My3LVSnU38IwjHVKJC94HSonjvFHDk8/aSrApL8v4uWgm8zJkK7MJIIbHuNOr/+Mv2KkQKcxs6LEZA==} + engines: {node: '>=12'} + dependencies: + unist-util-visit: 1.4.1 + dev: false + + /@mapbox/node-pre-gyp/1.0.10: + resolution: {integrity: sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==} + hasBin: true + dependencies: + detect-libc: 2.0.1 + https-proxy-agent: 5.0.1 + make-dir: 3.1.0 + node-fetch: 2.6.9 + nopt: 5.0.0 + npmlog: 5.0.1 + rimraf: 3.0.2 + semver: 7.3.8 + tar: 6.1.13 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /@mapbox/rehype-prism/0.6.0: + resolution: {integrity: sha512-/0Ev/PB4fXdKPT6VDzVpnAPxGpWFIc4Yz3mf/DzLEMxlpIPZpZlCzaFk4V4NGFofQXPc41+GpEcZtWP3VuFWVA==} + engines: {node: '>=10'} + dependencies: + hast-util-to-string: 1.0.4 + refractor: 3.6.0 + unist-util-visit: 2.0.3 + dev: false + + /@nivo/annotations/0.61.0_wcqkhtmu7mswc6yz4uyexck3ty: + resolution: {integrity: sha512-i2JKYeMEPC+zwgN/p+hVRWUJ4aee+kE8BfMzCLt1/a+rsfT+v2v5kj12zx072teoaQt53lOi1GdV2lEYA6HJpg==} + peerDependencies: + prop-types: '>= 15.5.10 < 16.0.0' + react: '>= 16.8.4 < 17.0.0' + dependencies: + '@nivo/colors': 0.61.0_react@16.14.0 + '@nivo/core': 0.61.0_wcqkhtmu7mswc6yz4uyexck3ty + lodash: 4.17.21 + react: 16.14.0 + react-motion: 0.5.2_react@16.14.0 + transitivePeerDependencies: + - react-dom + dev: false + + /@nivo/axes/0.61.0_wcqkhtmu7mswc6yz4uyexck3ty: + resolution: {integrity: sha512-U0rHIYNnwt03dFFBz0aosfd5nFIRVD1Wff5DwVeM7PouBZM3AsLVWeLlUWLWOmg+BHftqhbOGTOoZN2SjU7bwA==} + peerDependencies: + prop-types: '>= 15.5.10 < 16.0.0' + react: '>= 16.8.4 < 17.0.0' + dependencies: + '@nivo/core': 0.61.0_wcqkhtmu7mswc6yz4uyexck3ty + d3-format: 1.4.5 + d3-time: 1.1.0 + d3-time-format: 2.3.0 + lodash: 4.17.21 + react: 16.14.0 + react-motion: 0.5.2_react@16.14.0 + transitivePeerDependencies: + - react-dom + dev: false + + /@nivo/bar/0.61.1_wcqkhtmu7mswc6yz4uyexck3ty: + resolution: {integrity: sha512-MYdjeFt6HqEyIBFwbVHKPjpw8+DPirAZwJDZi7dPXT0F7WcwJOnRITlRHhmQEGq5u71h26UN+M0z/ZQkB54mvw==} + peerDependencies: + prop-types: '>= 15.5.10 < 16.0.0' + react: '>= 16.8.4 < 17.0.0' + dependencies: + '@nivo/annotations': 0.61.0_wcqkhtmu7mswc6yz4uyexck3ty + '@nivo/axes': 0.61.0_wcqkhtmu7mswc6yz4uyexck3ty + '@nivo/colors': 0.61.0_react@16.14.0 + '@nivo/core': 0.61.0_wcqkhtmu7mswc6yz4uyexck3ty + '@nivo/legends': 0.61.1_wcqkhtmu7mswc6yz4uyexck3ty + '@nivo/tooltip': 0.61.0_wcqkhtmu7mswc6yz4uyexck3ty + d3-scale: 3.3.0 + d3-shape: 1.3.7 + lodash: 4.17.21 + react: 16.14.0 + react-motion: 0.5.2_react@16.14.0 + recompose: 0.30.0_react@16.14.0 + transitivePeerDependencies: + - react-dom + dev: false + + /@nivo/colors/0.61.0_react@16.14.0: + resolution: {integrity: sha512-yeb5YsQDoN7D5DbBIhHTnVn0bX+4ObNVGyJAepSn64zNPiskO3/o1FnQw70aIkN4O7BDXb/vVPrftq6wSwQtvQ==} + peerDependencies: + prop-types: '>= 15.5.10 < 16.0.0' + react: '>= 16.8.4 < 17.0.0' + dependencies: + d3-color: 1.4.1 + d3-scale: 3.3.0 + d3-scale-chromatic: 1.5.0 + lodash.get: 4.4.2 + lodash.isplainobject: 4.0.6 + react: 16.14.0 + react-motion: 0.5.2_react@16.14.0 + dev: false + + /@nivo/core/0.61.0_wcqkhtmu7mswc6yz4uyexck3ty: + resolution: {integrity: sha512-7DGsTW12vfUvMIr9jl28KZaJMJqMMhEJi1lW1R2TPMTg+qSG01v6tqMtcEwUp4bdAdr3n57ytLWSgqKWXkwjvw==} + peerDependencies: + prop-types: '>= 15.5.10 < 16.0.0' + react: '>= 16.8.4 < 17.0.0' + dependencies: + '@nivo/tooltip': 0.61.0_wcqkhtmu7mswc6yz4uyexck3ty + d3-color: 1.4.1 + d3-format: 1.4.5 + d3-hierarchy: 1.1.9 + d3-interpolate: 1.4.0 + d3-scale: 3.3.0 + d3-scale-chromatic: 1.5.0 + d3-shape: 1.3.7 + d3-time-format: 2.3.0 + lodash: 4.17.21 + react: 16.14.0 + react-measure: 2.5.2_wcqkhtmu7mswc6yz4uyexck3ty + react-motion: 0.5.2_react@16.14.0 + recompose: 0.30.0_react@16.14.0 + transitivePeerDependencies: + - react-dom + dev: false + + /@nivo/legends/0.61.1_wcqkhtmu7mswc6yz4uyexck3ty: + resolution: {integrity: sha512-bKVXffFwTKGySZRUf6sdVzWUb5jjGffuvRczs0giQCu8OUgeJIi0IOOyYhHtww+rTVGIKAi0xPGQTQnF4kpufA==} + peerDependencies: + prop-types: '>= 15.5.10 < 16.0.0' + react: '>= 16.8.4 < 17.0.0' + dependencies: + '@nivo/core': 0.61.0_wcqkhtmu7mswc6yz4uyexck3ty + lodash: 4.17.21 + react: 16.14.0 + recompose: 0.30.0_react@16.14.0 + transitivePeerDependencies: + - react-dom + dev: false + + /@nivo/line/0.61.1_wcqkhtmu7mswc6yz4uyexck3ty: + resolution: {integrity: sha512-PZFGgcj+IlDtZG6kTdBrGJ5cJvs1w5kaAI86IaH5AXJ0MQqVIZYWgbXdf5Vg6Hv2ouLmwNwONA/ORACKVkG+YA==} + peerDependencies: + prop-types: '>= 15.5.10 < 16.0.0' + react: '>= 16.8.4 < 17.0.0' + dependencies: + '@nivo/annotations': 0.61.0_wcqkhtmu7mswc6yz4uyexck3ty + '@nivo/axes': 0.61.0_wcqkhtmu7mswc6yz4uyexck3ty + '@nivo/colors': 0.61.0_react@16.14.0 + '@nivo/core': 0.61.0_wcqkhtmu7mswc6yz4uyexck3ty + '@nivo/legends': 0.61.1_wcqkhtmu7mswc6yz4uyexck3ty + '@nivo/scales': 0.61.0 + '@nivo/tooltip': 0.61.0_wcqkhtmu7mswc6yz4uyexck3ty + '@nivo/voronoi': 0.61.0_wcqkhtmu7mswc6yz4uyexck3ty + d3-shape: 1.3.7 + lodash: 4.17.21 + react: 16.14.0 + react-motion: 0.5.2_react@16.14.0 + transitivePeerDependencies: + - react-dom + dev: false + + /@nivo/scales/0.61.0: + resolution: {integrity: sha512-7MoxxecMDvpK9L0Py/drEQxG/4YAzo9KBvLzo3/KjInc1VEscpDkpVSSN5tmg1qbQE3WCrziec4JuH9q1V/Q7g==} + peerDependencies: + prop-types: '>= 15.5.10 < 16.0.0' + dependencies: + d3-scale: 3.3.0 + d3-time-format: 2.3.0 + lodash: 4.17.21 + dev: false + + /@nivo/tooltip/0.61.0_wcqkhtmu7mswc6yz4uyexck3ty: + resolution: {integrity: sha512-CqEJ4v1jSikZ3fmuSJVb1UYF8fuCo/c7JFB+LsNH9X01IERSufO3tSNBTzJ3JugCminQpbo6/R7oBhNwZFqSxw==} + peerDependencies: + prop-types: '>= 15.5.10 < 16.0.0' + dependencies: + '@nivo/core': 0.61.0_wcqkhtmu7mswc6yz4uyexck3ty + react-measure: 2.5.2_wcqkhtmu7mswc6yz4uyexck3ty + react-motion: 0.5.2_react@16.14.0 + transitivePeerDependencies: + - react + - react-dom + dev: false + + /@nivo/voronoi/0.61.0_wcqkhtmu7mswc6yz4uyexck3ty: + resolution: {integrity: sha512-VVB7BW8GX8Gq9kTf/L52HrCD//4PAT6RTeDwb4N8BpSNfyfmBXacU9U9RMK7HAJjxICzEuxam75/oTCjX6iVBg==} + peerDependencies: + prop-types: '>= 15.5.10 < 16.0.0' + react: '>= 16.8.4 < 17.0.0' + dependencies: + '@nivo/core': 0.61.0_wcqkhtmu7mswc6yz4uyexck3ty + d3-delaunay: 5.3.0 + d3-scale: 3.3.0 + react: 16.14.0 + recompose: 0.30.0_react@16.14.0 + transitivePeerDependencies: + - react-dom + dev: false + + /@octokit/auth-token/2.5.0: + resolution: {integrity: sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==} + dependencies: + '@octokit/types': 6.41.0 + dev: false + + /@octokit/endpoint/6.0.12: + resolution: {integrity: sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==} + dependencies: + '@octokit/types': 6.41.0 + is-plain-object: 5.0.0 + universal-user-agent: 6.0.0 + dev: false + + /@octokit/openapi-types/12.11.0: + resolution: {integrity: sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==} + dev: false + + /@octokit/plugin-paginate-rest/1.1.2: + resolution: {integrity: sha512-jbsSoi5Q1pj63sC16XIUboklNw+8tL9VOnJsWycWYR78TKss5PVpIPb1TUUcMQ+bBh7cY579cVAWmf5qG+dw+Q==} + dependencies: + '@octokit/types': 2.16.2 + dev: false + + /@octokit/plugin-request-log/1.0.4: + resolution: {integrity: sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==} + peerDependencies: + '@octokit/core': '>=3' + dev: false + + /@octokit/plugin-rest-endpoint-methods/2.4.0: + resolution: {integrity: sha512-EZi/AWhtkdfAYi01obpX0DF7U6b1VRr30QNQ5xSFPITMdLSfhcBqjamE3F+sKcxPbD7eZuMHu3Qkk2V+JGxBDQ==} + dependencies: + '@octokit/types': 2.16.2 + deprecation: 2.3.1 + dev: false + + /@octokit/request-error/1.2.1: + resolution: {integrity: sha512-+6yDyk1EES6WK+l3viRDElw96MvwfJxCt45GvmjDUKWjYIb3PJZQkq3i46TwGwoPD4h8NmTrENmtyA1FwbmhRA==} + dependencies: + '@octokit/types': 2.16.2 + deprecation: 2.3.1 + once: 1.4.0 + dev: false + + /@octokit/request-error/2.1.0: + resolution: {integrity: sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==} + dependencies: + '@octokit/types': 6.41.0 + deprecation: 2.3.1 + once: 1.4.0 + dev: false + + /@octokit/request/5.6.3: + resolution: {integrity: sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==} + dependencies: + '@octokit/endpoint': 6.0.12 + '@octokit/request-error': 2.1.0 + '@octokit/types': 6.41.0 + is-plain-object: 5.0.0 + node-fetch: 2.6.9 + universal-user-agent: 6.0.0 + transitivePeerDependencies: + - encoding + dev: false + + /@octokit/rest/16.43.2: + resolution: {integrity: sha512-ngDBevLbBTFfrHZeiS7SAMAZ6ssuVmXuya+F/7RaVvlysgGa1JKJkKWY+jV6TCJYcW0OALfJ7nTIGXcBXzycfQ==} + dependencies: + '@octokit/auth-token': 2.5.0 + '@octokit/plugin-paginate-rest': 1.1.2 + '@octokit/plugin-request-log': 1.0.4 + '@octokit/plugin-rest-endpoint-methods': 2.4.0 + '@octokit/request': 5.6.3 + '@octokit/request-error': 1.2.1 + atob-lite: 2.0.0 + before-after-hook: 2.2.3 + btoa-lite: 1.0.0 + deprecation: 2.3.1 + lodash.get: 4.4.2 + lodash.set: 4.3.2 + lodash.uniq: 4.5.0 + octokit-pagination-methods: 1.1.0 + once: 1.4.0 + universal-user-agent: 4.0.1 + transitivePeerDependencies: + - '@octokit/core' + - encoding + dev: false + + /@octokit/types/2.16.2: + resolution: {integrity: sha512-O75k56TYvJ8WpAakWwYRN8Bgu60KrmX0z1KqFp1kNiFNkgW+JW+9EBKZ+S33PU6SLvbihqd+3drvPxKK68Ee8Q==} + dependencies: + '@types/node': 12.20.55 + dev: false + + /@octokit/types/6.41.0: + resolution: {integrity: sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==} + dependencies: + '@octokit/openapi-types': 12.11.0 + dev: false + + /@opentelemetry/api/1.4.0: + resolution: {integrity: sha512-IgMK9i3sFGNUqPMbjABm0G26g0QCKCUBfglhQ7rQq6WcxbKfEHRcmwsoER4hZcuYqJgkYn2OeuoJIv7Jsftp7g==} + engines: {node: '>=8.0.0'} + dev: false + + /@protobufjs/aspromise/1.1.2: + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + dev: false + + /@protobufjs/base64/1.1.2: + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + dev: false + + /@protobufjs/codegen/2.0.4: + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + dev: false + + /@protobufjs/eventemitter/1.1.0: + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + dev: false + + /@protobufjs/fetch/1.1.0: + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 + dev: false + + /@protobufjs/float/1.0.2: + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + dev: false + + /@protobufjs/inquire/1.1.0: + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + dev: false + + /@protobufjs/path/1.1.2: + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + dev: false + + /@protobufjs/pool/1.1.0: + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + dev: false + + /@protobufjs/utf8/1.1.0: + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + dev: false + + /@rollup/plugin-node-resolve/7.1.3_rollup@2.79.1: + resolution: {integrity: sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@2.79.1 + '@types/resolve': 0.0.8 + builtin-modules: 3.3.0 + is-module: 1.0.0 + resolve: 1.22.1 + rollup: 2.79.1 + dev: false + + /@rollup/pluginutils/3.1.0_rollup@2.79.1: + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + rollup: 2.79.1 + dev: false + + /@segment/loosely-validate-event/2.0.0: + resolution: {integrity: sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==} + dependencies: + component-type: 1.2.1 + join-component: 1.1.0 + dev: false + + /@techteamer/ocsp/1.0.0: + resolution: {integrity: sha512-lNAOoFHaZN+4huo30ukeqVrUmfC+avoEBYQ11QAnAw1PFhnI5oBCg8O/TNiCoEWix7gNGBIEjrQwtPREqKMPog==} + dependencies: + asn1.js: 5.4.1 + asn1.js-rfc2560: 5.0.1_asn1.js@5.4.1 + asn1.js-rfc5280: 3.0.0 + async: 3.2.4 + simple-lru-cache: 0.0.2 + dev: false + + /@tediousjs/connection-string/0.3.0: + resolution: {integrity: sha512-d/keJiNKfpHo+GmSB8QcsAwBx8h+V1UbdozA5TD+eSLXprNY53JAYub47J9evsSKWDdNG5uVj0FiMozLKuzowQ==} + dev: false + + /@tootallnate/once/1.1.2: + resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} + engines: {node: '>= 6'} + dev: false + + /@tootallnate/once/2.0.0: + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + dev: false + + /@types/analytics-node/3.1.10: + resolution: {integrity: sha512-dvn8iy2EQZDlQGgRNT9SW2Ljn9L3VgwcrpJvonufnNygZWB1XEufXNvDhUtwNUqNyHhD0hbDCCFb9j+B7vE5cA==} + dev: false + + /@types/body-parser/1.19.2: + resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} + dependencies: + '@types/connect': 3.4.35 + '@types/node': 12.20.55 + dev: false + + /@types/bunyan/1.8.8: + resolution: {integrity: sha512-Cblq+Yydg3u+sGiz2mjHjC5MPmdjY+No4qvHrF+BUhblsmSfMvsHLbOG62tPbonsqBj6sbWv1LHcsoe5Jw+/Ow==} + dependencies: + '@types/node': 12.20.55 + dev: false + + /@types/bytebuffer/5.0.44: + resolution: {integrity: sha512-k1qonHga/SfQT02NF633i+7tIfKd+cfC/8pjnedcfuXJNMWooss/FkCgRMSnLf2WorLjbuH4bfgAZEbtyHBDoQ==} + dependencies: + '@types/long': 3.0.32 + '@types/node': 12.20.55 + dev: false + + /@types/caseless/0.12.2: + resolution: {integrity: sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==} + dev: false + + /@types/chai/4.3.4: + resolution: {integrity: sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==} + dev: false + + /@types/connect-history-api-fallback/1.3.5: + resolution: {integrity: sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==} + dependencies: + '@types/express-serve-static-core': 4.17.33 + '@types/node': 12.20.55 + dev: false + + /@types/connect/3.4.35: + resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} + dependencies: + '@types/node': 12.20.55 + dev: false + + /@types/css-modules-loader-core/1.1.0: + resolution: {integrity: sha512-LMbyf7THPqLCPHIXAj79v9Pa193MeOHgp1fBFRR6s6VvEVHUFIcM5bc/WttslOf+lao4TURNN1X1zfW5wr2CHQ==} + dependencies: + postcss: 7.0.39 + dev: false + + /@types/diff/4.0.2: + resolution: {integrity: sha512-mIenTfsIe586/yzsyfql69KRnA75S8SVXQbTLpDejRrjH0QSJcpu3AUOi/Vjnt9IOsXKxPhJfGpQUNMueIU1fQ==} + dev: false + + /@types/dom4/2.0.2: + resolution: {integrity: sha512-Rt4IC1T7xkCWa0OG1oSsPa0iqnxlDeQqKXZAHrQGLb7wFGncWm85MaxKUjAGejOrUynOgWlFi4c6S6IyJwoK4g==} + dev: false + + /@types/es-aggregate-error/1.0.2: + resolution: {integrity: sha512-erqUpFXksaeR2kejKnhnjZjbFxUpGZx4Z7ydNL9ie8tEhXPiZTsLeUDJ6aR1F8j5wWUAtOAQWUqkc7givBJbBA==} + dependencies: + '@types/node': 12.20.55 + dev: false + + /@types/es6-shim/0.31.42: + resolution: {integrity: sha512-GS3EuEgiGv/TP7bwPLOlkSiTfdSL4XHOj0jJuvz4/UbR89QrC4Py3lYlMlH/7w0dKfJ8fIori0rVIl2gQ7lb5A==} + dev: false + + /@types/estree/0.0.39: + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + dev: false + + /@types/express-serve-static-core/4.17.33: + resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==} + dependencies: + '@types/node': 12.20.55 + '@types/qs': 6.9.7 + '@types/range-parser': 1.2.4 + dev: false + + /@types/express/4.17.17: + resolution: {integrity: sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==} + dependencies: + '@types/body-parser': 1.19.2 + '@types/express-serve-static-core': 4.17.33 + '@types/qs': 6.9.7 + '@types/serve-static': 1.15.0 + dev: false + + /@types/fs-extra/8.1.2: + resolution: {integrity: sha512-SvSrYXfWSc7R4eqnOzbQF4TZmfpNSM9FrSWLU3EUnWBuyZqNBOrv1B1JA3byUDPUl9z4Ab3jeZG2eDdySlgNMg==} + dependencies: + '@types/node': 12.20.55 + dev: false + + /@types/glob/7.2.0: + resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + dependencies: + '@types/minimatch': 5.1.2 + '@types/node': 12.20.55 + dev: false + + /@types/google-protobuf/3.15.6: + resolution: {integrity: sha512-pYVNNJ+winC4aek+lZp93sIKxnXt5qMkuKmaqS3WGuTq0Bw1ZDYNBgzG5kkdtwcv+GmYJGo3yEg6z2cKKAiEdw==} + dev: false + + /@types/hast/2.3.4: + resolution: {integrity: sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==} + dependencies: + '@types/unist': 2.0.6 + dev: false + + /@types/history/3.2.5: + resolution: {integrity: sha512-TqWYI0mlqS5qhH8MHgJJs0RcgvvZLxkn0bi2qK07liZqP7M9rl1kpJ6TCAUo5Cp4vP5DObIqHcky0MWyyQojVQ==} + dev: false + + /@types/http-proxy/1.17.9: + resolution: {integrity: sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==} + dependencies: + '@types/node': 12.20.55 + dev: false + + /@types/js-beautify/1.13.3: + resolution: {integrity: sha512-ucIPw5gmNyvRKi6mpeojlqp+T+6ZBJeU+kqMDnIEDlijEU4QhLTon90sZ3cz9HZr+QTwXILjNsMZImzA7+zuJA==} + dev: false + + /@types/json-schema/7.0.11: + resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} + dev: false + + /@types/json-stable-stringify/1.0.34: + resolution: {integrity: sha512-s2cfwagOQAS8o06TcwKfr9Wx11dNGbH2E9vJz1cqV+a/LOyhWNLUNd6JSRYNzvB4d29UuJX2M0Dj9vE1T8fRXw==} + dev: false + + /@types/linkify-it/3.0.2: + resolution: {integrity: sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==} + dev: false + + /@types/lodash/4.14.191: + resolution: {integrity: sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==} + dev: false + + /@types/long/3.0.32: + resolution: {integrity: sha512-ZXyOOm83p7X8p3s0IYM3VeueNmHpkk/yMlP8CLeOnEcu6hIwPH7YjZBvhQkR0ZFS2DqZAxKtJ/M5fcuv3OU5BA==} + dev: false + + /@types/long/4.0.2: + resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} + dev: false + + /@types/markdown-it/12.2.3: + resolution: {integrity: sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==} + dependencies: + '@types/linkify-it': 3.0.2 + '@types/mdurl': 1.0.2 + dev: false + + /@types/mdast/3.0.10: + resolution: {integrity: sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==} + dependencies: + '@types/unist': 2.0.6 + dev: false + + /@types/mdurl/1.0.2: + resolution: {integrity: sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==} + dev: false + + /@types/mime/3.0.1: + resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} + dev: false + + /@types/minimatch/5.1.2: + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} + dev: false + + /@types/moo/0.5.5: + resolution: {integrity: sha512-eXQpwnkI4Ntw5uJg6i2PINdRFWLr55dqjuYQaLHNjvqTzF14QdNWbCbml9sza0byyXNA0hZlHtcdN+VNDcgVHA==} + dev: false + + /@types/mssql/6.0.8: + resolution: {integrity: sha512-N3dr3o1c6EXhHhhNRaKpLTdAoXT/s6qDEJET5FID2gFCj58vIV9q/7RtkvYdE6ntpkJF5F9hpURhxT/oC62yLw==} + dependencies: + '@types/node': 12.20.55 + '@types/tedious': 4.0.9 + dev: false + + /@types/node-cache/4.2.5: + resolution: {integrity: sha512-faK2Owokboz53g8ooq2dw3iDJ6/HMTCIa2RvMte5WMTiABy+wA558K+iuyRtlR67Un5q9gEKysSDtqZYbSa0Pg==} + deprecated: This is a stub types definition. node-cache provides its own type definitions, so you do not need this installed. + dependencies: + node-cache: 5.1.2 + dev: false + + /@types/node-fetch/2.6.2: + resolution: {integrity: sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==} + dependencies: + '@types/node': 12.20.55 + form-data: 3.0.1 + dev: false + + /@types/node/10.17.60: + resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} + dev: false + + /@types/node/12.20.55: + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + dev: false + + /@types/node/18.13.0: + resolution: {integrity: sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg==} + dev: false + + /@types/object-hash/1.3.4: + resolution: {integrity: sha512-xFdpkAkikBgqBdG9vIlsqffDV8GpvnPEzs0IUtr1v3BEB97ijsFQ4RXVbUZwjFThhB4MDSTUfvmxUD5PGx0wXA==} + dev: false + + /@types/parse5/5.0.3: + resolution: {integrity: sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==} + dev: false + + /@types/pg-query-stream/1.0.3: + resolution: {integrity: sha512-39/vyj0pyaaUyqjvA4siTZV9eqqM8+OkI+bd66BSpPc+8BxHP5CCCh8z+N04Td4xqeyX10+YJQIYCtLHo0ywjA==} + dependencies: + '@types/node': 12.20.55 + '@types/pg': 7.14.11 + dev: false + + /@types/pg/7.14.11: + resolution: {integrity: sha512-EnZkZ1OMw9DvNfQkn2MTJrwKmhJYDEs5ujWrPfvseWNoI95N8B4HzU/Ltrq5ZfYxDX/Zg8mTzwr6UAyTjjFvXA==} + dependencies: + '@types/node': 12.20.55 + pg-protocol: 1.6.0 + pg-types: 2.2.0 + dev: false + + /@types/prop-types/15.7.5: + resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} + dev: false + + /@types/qs/6.9.7: + resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} + dev: false + + /@types/range-parser/1.2.4: + resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} + dev: false + + /@types/react-dom/16.9.18: + resolution: {integrity: sha512-lmNARUX3+rNF/nmoAFqasG0jAA7q6MeGZK/fdeLwY3kAA4NPgHHrG5bNQe2B5xmD4B+x6Z6h0rEJQ7MEEgQxsw==} + dependencies: + '@types/react': 16.14.35 + dev: false + + /@types/react-router/3.0.28: + resolution: {integrity: sha512-cf3V8fSBLAzmICC8l5qbnrJhdjF0ia8K0EZwL8IpJDBQN6ieHDdw8t1+9regufQxEVip1T4tCQRwhAmy26Zn2A==} + dependencies: + '@types/history': 3.2.5 + '@types/react': 16.14.35 + dev: false + + /@types/react-syntax-highlighter/13.5.2: + resolution: {integrity: sha512-sRZoKZBGKaE7CzMvTTgz+0x/aVR58ZYUTfB7HN76vC+yQnvo1FWtzNARBt0fGqcLGEVakEzMu/CtPzssmanu8Q==} + dependencies: + '@types/react': 16.14.35 + dev: false + + /@types/react/16.14.35: + resolution: {integrity: sha512-NUEiwmSS1XXtmBcsm1NyRRPYjoZF2YTE89/5QiLt5mlGffYK9FQqOKuOLuXNrjPQV04oQgaZG+Yq02ZfHoFyyg==} + dependencies: + '@types/prop-types': 15.7.5 + '@types/scheduler': 0.16.2 + csstype: 3.1.1 + dev: false + + /@types/readline-sync/1.4.4: + resolution: {integrity: sha512-cFjVIoiamX7U6zkO2VPvXyTxbFDdiRo902IarJuPVxBhpDnXhwSaVE86ip+SCuyWBbEioKCkT4C88RNTxBM1Dw==} + dev: false + + /@types/redis/2.8.32: + resolution: {integrity: sha512-7jkMKxcGq9p242exlbsVzuJb57KqHRhNl4dHoQu2Y5v9bCAbtIXXH0R3HleSQW4CTOqpHIYUW3t6tpUj4BVQ+w==} + dependencies: + '@types/node': 12.20.55 + dev: false + + /@types/request/2.48.8: + resolution: {integrity: sha512-whjk1EDJPcAR2kYHRbFl/lKeeKYTi05A15K9bnLInCVroNDCtXce57xKdI0/rQaA3K+6q0eFyUBPmqfSndUZdQ==} + dependencies: + '@types/caseless': 0.12.2 + '@types/node': 12.20.55 + '@types/tough-cookie': 4.0.2 + form-data: 2.5.1 + dev: false + + /@types/resolve/0.0.8: + resolution: {integrity: sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==} + dependencies: + '@types/node': 12.20.55 + dev: false + + /@types/rimraf/2.0.5: + resolution: {integrity: sha512-YyP+VfeaqAyFmXoTh3HChxOQMyjByRMsHU7kc5KOJkSlXudhMhQIALbYV7rHh/l8d2lX3VUQzprrcAgWdRuU8g==} + dependencies: + '@types/glob': 7.2.0 + '@types/node': 12.20.55 + dev: false + + /@types/scheduler/0.16.2: + resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==} + dev: false + + /@types/semver/7.3.13: + resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} + dev: false + + /@types/serve-static/1.15.0: + resolution: {integrity: sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==} + dependencies: + '@types/mime': 3.0.1 + '@types/node': 12.20.55 + dev: false + + /@types/source-list-map/0.1.2: + resolution: {integrity: sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==} + dev: false + + /@types/ssh2-streams/0.1.9: + resolution: {integrity: sha512-I2J9jKqfmvXLR5GomDiCoHrEJ58hAOmFrekfFqmCFd+A6gaEStvWnPykoWUwld1PNg4G5ag1LwdA+Lz1doRJqg==} + dependencies: + '@types/node': 12.20.55 + dev: false + + /@types/ssh2/0.5.52: + resolution: {integrity: sha512-lbLLlXxdCZOSJMCInKH2+9V/77ET2J6NPQHpFI0kda61Dd1KglJs+fPQBchizmzYSOJBgdTajhPqBO1xxLywvg==} + dependencies: + '@types/node': 12.20.55 + '@types/ssh2-streams': 0.1.9 + dev: false + + /@types/stack-trace/0.0.29: + resolution: {integrity: sha512-TgfOX+mGY/NyNxJLIbDWrO9DjGoVSW9+aB8H2yy1fy32jsvxijhmyJI9fDFgvz3YP4lvJaq9DzdR/M1bOgVc9g==} + dev: false + + /@types/swagger-schema-official/2.0.22: + resolution: {integrity: sha512-7yQiX6MWSFSvc/1wW5smJMZTZ4fHOd+hqLr3qr/HONDxHEa2bnYAsOcGBOEqFIjd4yetwMOdEDdeW+udRAQnHA==} + dev: false + + /@types/tapable/1.0.8: + resolution: {integrity: sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==} + dev: false + + /@types/tedious/4.0.9: + resolution: {integrity: sha512-ipwFvfy9b2m0gjHsIX0D6NAAwGCKokzf5zJqUZHUGt+7uWVlBIy6n2eyMgiKQ8ChLFVxic/zwQUhjLYNzbHDRA==} + dependencies: + '@types/node': 12.20.55 + dev: false + + /@types/tough-cookie/4.0.2: + resolution: {integrity: sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==} + dev: false + + /@types/triple-beam/1.3.2: + resolution: {integrity: sha512-txGIh+0eDFzKGC25zORnswy+br1Ha7hj5cMVwKIU7+s0U2AxxJru/jZSMU6OC9MJWP6+pc/hc6ZjyZShpsyY2g==} + dev: false + + /@types/tunnel/0.0.3: + resolution: {integrity: sha512-sOUTGn6h1SfQ+gbgqC364jLFBw2lnFqkgF3q0WovEHRLMrVD1sd5aufqi/aJObLekJO+Aq5z646U4Oxy6shXMA==} + dependencies: + '@types/node': 12.20.55 + dev: false + + /@types/uglify-js/3.17.1: + resolution: {integrity: sha512-GkewRA4i5oXacU/n4MA9+bLgt5/L3F1mKrYvFGm7r2ouLXhRKjuWwo9XHNnbx6WF3vlGW21S3fCvgqxvxXXc5g==} + dependencies: + source-map: 0.6.1 + dev: false + + /@types/unist/2.0.6: + resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==} + dev: false + + /@types/uuid/7.0.5: + resolution: {integrity: sha512-hKB88y3YHL8oPOs/CNlaXtjWn93+Bs48sDQR37ZUqG2tLeCS7EA1cmnkKsuQsub9OKEB/y/Rw9zqJqqNSbqVlQ==} + dev: false + + /@types/validator/13.7.12: + resolution: {integrity: sha512-YVtyAPqpefU+Mm/qqnOANW6IkqKpCSrarcyV269C8MA8Ux0dbkEuQwM/4CjL47kVEM2LgBef/ETfkH+c6+moFA==} + dev: false + + /@types/vscode/1.75.1: + resolution: {integrity: sha512-emg7wdsTFzdi+elvoyoA+Q8keEautdQHyY5LNmHVM4PTpY8JgOTVADrGVyXGepJ6dVW2OS5/xnLUWh+nZxvdiA==} + dev: false + + /@types/webpack-dev-server/3.11.6: + resolution: {integrity: sha512-XCph0RiiqFGetukCTC3KVnY1jwLcZ84illFRMbyFzCcWl90B/76ew0tSqF46oBhnLC4obNDG7dMO0JfTN0MgMQ==} + dependencies: + '@types/connect-history-api-fallback': 1.3.5 + '@types/express': 4.17.17 + '@types/serve-static': 1.15.0 + '@types/webpack': 4.41.33 + http-proxy-middleware: 1.3.1 + transitivePeerDependencies: + - debug + dev: false + + /@types/webpack-sources/3.2.0: + resolution: {integrity: sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==} + dependencies: + '@types/node': 12.20.55 + '@types/source-list-map': 0.1.2 + source-map: 0.7.4 + dev: false + + /@types/webpack/4.41.33: + resolution: {integrity: sha512-PPajH64Ft2vWevkerISMtnZ8rTs4YmRbs+23c402J0INmxDKCrhZNvwZYtzx96gY2wAtXdrK1BS2fiC8MlLr3g==} + dependencies: + '@types/node': 12.20.55 + '@types/tapable': 1.0.8 + '@types/uglify-js': 3.17.1 + '@types/webpack-sources': 3.2.0 + anymatch: 3.1.3 + source-map: 0.6.1 + dev: false + + /@types/yargs-parser/21.0.0: + resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} + dev: false + + /@types/yargs/15.0.15: + resolution: {integrity: sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==} + dependencies: + '@types/yargs-parser': 21.0.0 + dev: false + + /@webassemblyjs/ast/1.7.8: + resolution: {integrity: sha512-dOrtdtEyB8sInpl75yLPNksY4sRl0j/+t6aHyB/YA+ab9hV3Fo7FmG12FHzP+2MvWVAJtDb+6eXR5EZbZJ+uVg==} + dependencies: + '@webassemblyjs/helper-module-context': 1.7.8 + '@webassemblyjs/helper-wasm-bytecode': 1.7.8 + '@webassemblyjs/wast-parser': 1.7.8 + dev: false + + /@webassemblyjs/floating-point-hex-parser/1.7.8: + resolution: {integrity: sha512-kn2zNKGsbql5i56VAgRYkpG+VazqHhQQZQycT2uXAazrAEDs23gy+Odkh5VblybjnwX2/BITkDtNmSO76hdIvQ==} + dev: false + + /@webassemblyjs/helper-api-error/1.7.8: + resolution: {integrity: sha512-xUwxDXsd1dUKArJEP5wWM5zxgCSwZApSOJyP1XO7M8rNUChUDblcLQ4FpzTpWG2YeylMwMl1MlP5Ztryiz1x4g==} + dev: false + + /@webassemblyjs/helper-buffer/1.7.8: + resolution: {integrity: sha512-WXiIMnuvuwlhWvVOm8xEXU9DnHaa3AgAU0ZPfvY8vO1cSsmYb2WbGbHnMLgs43vXnA7XAob9b56zuZaMkxpCBg==} + dev: false + + /@webassemblyjs/helper-code-frame/1.7.8: + resolution: {integrity: sha512-TLQxyD9qGOIdX5LPQOPo0Ernd88U5rHkFb8WAjeMIeA0sPjCHeVPaGqUGGIXjUcblUkjuDAc07bruCcNHUrHDA==} + dependencies: + '@webassemblyjs/wast-printer': 1.7.8 + dev: false + + /@webassemblyjs/helper-fsm/1.7.8: + resolution: {integrity: sha512-TjK0CnD8hAPkV5mbSp5aWl6SO1+H3WFcjWtixWoy8EMA99YnNzYhpc/WSYWhf7yrhpzkq5tZB0tvLK3Svr3IXA==} + dev: false + + /@webassemblyjs/helper-module-context/1.7.8: + resolution: {integrity: sha512-uCutAKR7Nm0VsFixcvnB4HhAyHouNbj0Dx1p7eRjFjXGGZ+N7ftTaG1ZbWCasAEbtwGj54LP8+lkBZdTCPmLGg==} + dev: false + + /@webassemblyjs/helper-wasm-bytecode/1.7.8: + resolution: {integrity: sha512-AdCCE3BMW6V34WYaKUmPgVHa88t2Z14P4/0LjLwuGkI0X6pf7nzp0CehzVVk51cKm2ymVXjl9dCG+gR1yhITIQ==} + dev: false + + /@webassemblyjs/helper-wasm-section/1.7.8: + resolution: {integrity: sha512-BkBhYQuzyl4hgTGOKo87Vdw6f9nj8HhI7WYpI0MCC5qFa5ahrAPOGgyETVdnRbv+Rjukl9MxxfDmVcVC435lDg==} + dependencies: + '@webassemblyjs/ast': 1.7.8 + '@webassemblyjs/helper-buffer': 1.7.8 + '@webassemblyjs/helper-wasm-bytecode': 1.7.8 + '@webassemblyjs/wasm-gen': 1.7.8 + dev: false + + /@webassemblyjs/ieee754/1.7.8: + resolution: {integrity: sha512-tOarWChdG1a3y1yqCX0JMDKzrat5tQe4pV6K/TX19BcXsBLYxFQOL1DEDa5KG9syeyvCrvZ+i1+Mv1ExngvktQ==} + dependencies: + '@xtuc/ieee754': 1.2.0 + dev: false + + /@webassemblyjs/leb128/1.7.8: + resolution: {integrity: sha512-GCYeGPgUFWJiZuP4NICbcyUQNxNLJIf476Ei+K+jVuuebtLpfvwkvYT6iTUE7oZYehhkor4Zz2g7SJ/iZaPudQ==} + dependencies: + '@xtuc/long': 4.2.1 + dev: false + + /@webassemblyjs/utf8/1.7.8: + resolution: {integrity: sha512-9X+f0VV+xNXW2ujfIRSXBJENGE6Qh7bNVKqu3yDjTFB3ar3nsThsGBBKdTG58aXOm2iUH6v28VIf88ymPXODHA==} + dev: false + + /@webassemblyjs/wasm-edit/1.7.8: + resolution: {integrity: sha512-6D3Hm2gFixrfyx9XjSON4ml1FZTugqpkIz5Awvrou8fnpyprVzcm4X8pyGRtA2Piixjl3DqmX/HB1xdWyE097A==} + dependencies: + '@webassemblyjs/ast': 1.7.8 + '@webassemblyjs/helper-buffer': 1.7.8 + '@webassemblyjs/helper-wasm-bytecode': 1.7.8 + '@webassemblyjs/helper-wasm-section': 1.7.8 + '@webassemblyjs/wasm-gen': 1.7.8 + '@webassemblyjs/wasm-opt': 1.7.8 + '@webassemblyjs/wasm-parser': 1.7.8 + '@webassemblyjs/wast-printer': 1.7.8 + dev: false + + /@webassemblyjs/wasm-gen/1.7.8: + resolution: {integrity: sha512-a7O/wE6eBeVKKUYgpMK7NOHmMADD85rSXLe3CqrWRDwWff5y3cSVbzpN6Qv3z6C4hdkpq9qyij1Ga1kemOZGvQ==} + dependencies: + '@webassemblyjs/ast': 1.7.8 + '@webassemblyjs/helper-wasm-bytecode': 1.7.8 + '@webassemblyjs/ieee754': 1.7.8 + '@webassemblyjs/leb128': 1.7.8 + '@webassemblyjs/utf8': 1.7.8 + dev: false + + /@webassemblyjs/wasm-opt/1.7.8: + resolution: {integrity: sha512-3lbQ0PT81NHCdi1sR/7+SNpZadM4qYcTSr62nFFAA7e5lFwJr14M1Gi+A/Y3PgcDWOHYjsaNGPpPU0H03N6Blg==} + dependencies: + '@webassemblyjs/ast': 1.7.8 + '@webassemblyjs/helper-buffer': 1.7.8 + '@webassemblyjs/wasm-gen': 1.7.8 + '@webassemblyjs/wasm-parser': 1.7.8 + dev: false + + /@webassemblyjs/wasm-parser/1.7.8: + resolution: {integrity: sha512-rZ/zlhp9DHR/05zh1MbAjT2t624sjrPP/OkJCjXqzm7ynH+nIdNcn9Ixc+qzPMFXhIrk0rBoQ3to6sEIvHh9jQ==} + dependencies: + '@webassemblyjs/ast': 1.7.8 + '@webassemblyjs/helper-api-error': 1.7.8 + '@webassemblyjs/helper-wasm-bytecode': 1.7.8 + '@webassemblyjs/ieee754': 1.7.8 + '@webassemblyjs/leb128': 1.7.8 + '@webassemblyjs/utf8': 1.7.8 + dev: false + + /@webassemblyjs/wast-parser/1.7.8: + resolution: {integrity: sha512-Q/zrvtUvzWuSiJMcSp90fi6gp2nraiHXjTV2VgAluVdVapM4gy1MQn7akja2p6eSBDQpKJPJ6P4TxRkghRS5dg==} + dependencies: + '@webassemblyjs/ast': 1.7.8 + '@webassemblyjs/floating-point-hex-parser': 1.7.8 + '@webassemblyjs/helper-api-error': 1.7.8 + '@webassemblyjs/helper-code-frame': 1.7.8 + '@webassemblyjs/helper-fsm': 1.7.8 + '@xtuc/long': 4.2.1 + dev: false + + /@webassemblyjs/wast-printer/1.7.8: + resolution: {integrity: sha512-GllIthRtwTxRDAURRNXscu7Napzmdf1jt1gpiZiK/QN4fH0lSGs3OTmvdfsMNP7tqI4B3ZtfaaWRlNIQug6Xyg==} + dependencies: + '@webassemblyjs/ast': 1.7.8 + '@webassemblyjs/wast-parser': 1.7.8 + '@xtuc/long': 4.2.1 + dev: false + + /@xtuc/ieee754/1.2.0: + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + dev: false + + /@xtuc/long/4.2.1: + resolution: {integrity: sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==} + dev: false + + /@zeit/next-css/1.0.1_webpack@4.20.2: + resolution: {integrity: sha512-yfHPRy/ne/5SddVClsoy+fpU7e0Cs1gkWA67/wm2uIu+9rznF45yQLxHEt5dPGF3h6IiIh7ZtIgA8VV8YKq87A==} + deprecated: 'Next.js now has built-in support for CSS: https://nextjs.org/docs/basic-features/built-in-css-support. The built-in support solves many bugs and painpoints that the next-css plugin had.' + dependencies: + css-loader: 1.0.0_webpack@4.20.2 + extracted-loader: 1.0.4 + find-up: 2.1.0 + ignore-loader: 0.1.2 + mini-css-extract-plugin: 0.4.3_webpack@4.20.2 + postcss-loader: 3.0.0 + transitivePeerDependencies: + - webpack + dev: false + + /abbrev/1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + dev: false + + /abort-controller/3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + dependencies: + event-target-shim: 5.0.1 + dev: false + + /accepts/1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + dev: false + + /acorn-dynamic-import/3.0.0: + resolution: {integrity: sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==} + deprecated: This is probably built in to whatever tool you're using. If you still need it... idk + dependencies: + acorn: 5.7.4 + dev: false + + /acorn-jsx/5.3.2_acorn@7.4.1: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 7.4.1 + dev: false + + /acorn-jsx/5.3.2_acorn@8.8.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.8.2 + dev: false + + /acorn-walk/8.2.0: + resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + engines: {node: '>=0.4.0'} + dev: false + + /acorn/5.7.4: + resolution: {integrity: sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: false + + /acorn/7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: false + + /acorn/8.8.2: + resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: false + + /agent-base/6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /agentkeepalive/2.2.0: + resolution: {integrity: sha512-TnB6ziK363p7lR8QpeLC8aMr8EGYBKZTpgzQLfqTs3bR0Oo5VbKdwKf8h0dSzsYrB7lSCgfJnMZKqShvlq5Oyg==} + engines: {node: '>= 0.10.0'} + dev: false + + /ajv-errors/1.0.1_ajv@6.12.6: + resolution: {integrity: sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==} + peerDependencies: + ajv: '>=5.0.0' + dependencies: + ajv: 6.12.6 + dev: false + + /ajv-keywords/3.5.2_ajv@6.12.6: + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + dependencies: + ajv: 6.12.6 + dev: false + + /ajv/6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: false + + /algoliasearch/3.35.1: + resolution: {integrity: sha512-K4yKVhaHkXfJ/xcUnil04xiSrB8B8yHZoFEhWNpXg23eiCnqvTZw1tn/SqvdsANlYHLJlKl0qi3I/Q2Sqo7LwQ==} + engines: {node: '>=0.8'} + dependencies: + agentkeepalive: 2.2.0 + debug: 2.6.9 + envify: 4.1.0 + es6-promise: 4.2.8 + events: 1.1.1 + foreach: 2.0.6 + global: 4.4.0 + inherits: 2.0.4 + isarray: 2.0.5 + load-script: 1.0.0 + object-keys: 1.1.1 + querystring-es3: 0.2.1 + reduce: 1.0.2 + semver: 5.6.0 + tunnel-agent: 0.6.0 + transitivePeerDependencies: + - supports-color + dev: false + + /analytics-node/3.5.0: + resolution: {integrity: sha512-XgQq6ejZHCehUSnZS4V7QJPLIP7S9OAWwQDYl4WTLtsRvc5fCxIwzK/yihzmIW51v9PnyBmrl9dMcqvwfOE8WA==} + engines: {node: '>=4'} + dependencies: + '@segment/loosely-validate-event': 2.0.0 + axios: 0.21.4 + axios-retry: 3.4.0 + lodash.isstring: 4.0.1 + md5: 2.3.0 + ms: 2.1.3 + remove-trailing-slash: 0.1.1 + uuid: 3.4.0 + transitivePeerDependencies: + - debug + dev: false + + /ansi-colors/3.2.4: + resolution: {integrity: sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==} + engines: {node: '>=6'} + dev: false + + /ansi-html-community/0.0.8: + resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} + engines: {'0': node >= 0.8.0} + hasBin: true + dev: false + + /ansi-regex/2.1.1: + resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} + engines: {node: '>=0.10.0'} + dev: false + + /ansi-regex/4.1.1: + resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} + engines: {node: '>=6'} + dev: false + + /ansi-regex/5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: false + + /ansi-styles/2.2.1: + resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} + engines: {node: '>=0.10.0'} + dev: false + + /ansi-styles/3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + dev: false + + /ansi-styles/4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: false + + /any-promise/1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: false + + /anymatch/2.0.0: + resolution: {integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==} + dependencies: + micromatch: 3.1.10 + normalize-path: 2.1.1 + transitivePeerDependencies: + - supports-color + dev: false + + /anymatch/2.0.0_supports-color@6.1.0: + resolution: {integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==} + dependencies: + micromatch: 3.1.10_supports-color@6.1.0 + normalize-path: 2.1.1 + transitivePeerDependencies: + - supports-color + dev: false + + /anymatch/3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: false + + /aproba/1.2.0: + resolution: {integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==} + dev: false + + /aproba/2.0.0: + resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} + dev: false + + /are-we-there-yet/2.0.0: + resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} + engines: {node: '>=10'} + dependencies: + delegates: 1.0.0 + readable-stream: 3.6.0 + dev: false + + /argparse/1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + dependencies: + sprintf-js: 1.0.3 + dev: false + + /argparse/2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: false + + /arr-diff/4.0.0: + resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} + engines: {node: '>=0.10.0'} + dev: false + + /arr-flatten/1.1.0: + resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==} + engines: {node: '>=0.10.0'} + dev: false + + /arr-union/3.1.0: + resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} + engines: {node: '>=0.10.0'} + dev: false + + /array-flatten/1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + dev: false + + /array-flatten/2.1.2: + resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==} + dev: false + + /array-union/1.0.2: + resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} + engines: {node: '>=0.10.0'} + dependencies: + array-uniq: 1.0.3 + dev: false + + /array-uniq/1.0.3: + resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} + engines: {node: '>=0.10.0'} + dev: false + + /array-unique/0.3.2: + resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} + engines: {node: '>=0.10.0'} + dev: false + + /arrify/2.0.1: + resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} + engines: {node: '>=8'} + dev: false + + /asap/2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + dev: false + + /ascli/1.0.1: + resolution: {integrity: sha512-JGQaNxpaCJz9Bd1JvVaFIHuWn9S+l3xhN17R0V/vmUDiGE0QngNMXhjlqpwqV+91plWz9Fg+Lt28Lj7p5vjs8A==} + dependencies: + colour: 0.7.1 + optjs: 3.2.2 + dev: false + + /asn1.js-rfc2560/5.0.1: + resolution: {integrity: sha512-1PrVg6kuBziDN3PGFmRk3QrjpKvP9h/Hv5yMrFZvC1kpzP6dQRzf5BpKstANqHBkaOUmTpakJWhicTATOA/SbA==} + peerDependencies: + asn1.js: ^5.0.0 + dependencies: + asn1.js-rfc5280: 3.0.0 + dev: false + + /asn1.js-rfc2560/5.0.1_asn1.js@5.4.1: + resolution: {integrity: sha512-1PrVg6kuBziDN3PGFmRk3QrjpKvP9h/Hv5yMrFZvC1kpzP6dQRzf5BpKstANqHBkaOUmTpakJWhicTATOA/SbA==} + peerDependencies: + asn1.js: ^5.0.0 + dependencies: + asn1.js: 5.4.1 + asn1.js-rfc5280: 3.0.0 + dev: false + + /asn1.js-rfc5280/3.0.0: + resolution: {integrity: sha512-Y2LZPOWeZ6qehv698ZgOGGCZXBQShObWnGthTrIFlIQjuV1gg2B8QOhWFRExq/MR1VnPpIIe7P9vX2vElxv+Pg==} + dependencies: + asn1.js: 5.4.1 + dev: false + + /asn1.js/5.4.1: + resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} + dependencies: + bn.js: 4.12.0 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + safer-buffer: 2.1.2 + dev: false + + /asn1/0.2.6: + resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + dependencies: + safer-buffer: 2.1.2 + dev: false + + /assert-plus/1.0.0: + resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} + engines: {node: '>=0.8'} + dev: false + + /assert/1.5.0: + resolution: {integrity: sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==} + dependencies: + object-assign: 4.1.1 + util: 0.10.3 + dev: false + + /assertion-error/1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + dev: false + + /assign-symbols/1.0.0: + resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} + engines: {node: '>=0.10.0'} + dev: false + + /ast-types/0.13.4: + resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} + engines: {node: '>=4'} + dependencies: + tslib: 2.5.0 + dev: false + + /async-each/1.0.6: + resolution: {integrity: sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==} + dev: false + + /async-limiter/1.0.1: + resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} + dev: false + + /async-retry/1.3.3: + resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} + dependencies: + retry: 0.13.1 + dev: false + + /async/2.6.4: + resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} + dependencies: + lodash: 4.17.21 + dev: false + + /async/3.2.4: + resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} + dev: false + + /asynckit/0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: false + + /at-least-node/1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + dev: false + + /atob-lite/2.0.0: + resolution: {integrity: sha512-LEeSAWeh2Gfa2FtlQE1shxQ8zi5F9GHarrGKz08TMdODD5T4eH6BMsvtnhbWZ+XQn+Gb6om/917ucvRu7l7ukw==} + dev: false + + /atob/2.1.2: + resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} + engines: {node: '>= 4.5.0'} + hasBin: true + dev: false + + /available-typed-arrays/1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + dev: false + + /aws-sdk/2.1315.0: + resolution: {integrity: sha512-fDlK3iqA0bpXW6azVBAB8RTKhJ5YUjfe6sqKQF1lKT2cYT5qU4rtH5qUlMixlWkb8oKeSMA2voW3wZZtSpBFKQ==} + engines: {node: '>= 10.0.0'} + dependencies: + buffer: 4.9.2 + events: 1.1.1 + ieee754: 1.1.13 + jmespath: 0.16.0 + querystring: 0.2.0 + sax: 1.2.1 + url: 0.10.3 + util: 0.12.5 + uuid: 8.0.0 + xml2js: 0.4.19 + dev: false + + /aws-sign2/0.7.0: + resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} + dev: false + + /aws4/1.12.0: + resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} + dev: false + + /axios-retry/3.4.0: + resolution: {integrity: sha512-VdgaP+gHH4iQYCCNUWF2pcqeciVOdGrBBAYUfTY+wPcO5Ltvp/37MLFNCmJKo7Gj3SHvCSdL8ouI1qLYJN3liA==} + dependencies: + '@babel/runtime': 7.20.13 + is-retry-allowed: 2.2.0 + dev: false + + /axios/0.21.4: + resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} + dependencies: + follow-redirects: 1.15.2 + transitivePeerDependencies: + - debug + dev: false + + /axios/0.27.2_debug@3.2.7: + resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==} + dependencies: + follow-redirects: 1.15.2_debug@3.2.7 + form-data: 4.0.0 + transitivePeerDependencies: + - debug + dev: false + + /azure-devops-node-api/11.2.0: + resolution: {integrity: sha512-XdiGPhrpaT5J8wdERRKs5g8E0Zy1pvOYTli7z9E8nmOn3YGp4FhtjhrOyFmX/8veWCwdI69mCHKJw6l+4J/bHA==} + dependencies: + tunnel: 0.0.6 + typed-rest-client: 1.8.9 + dev: false + + /babel-code-frame/6.26.0: + resolution: {integrity: sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==} + dependencies: + chalk: 1.1.3 + esutils: 2.0.3 + js-tokens: 3.0.2 + dev: false + + /babel-helper-builder-binary-assignment-operator-visitor/6.24.1: + resolution: {integrity: sha512-gCtfYORSG1fUMX4kKraymq607FWgMWg+j42IFPc18kFQEsmtaibP4UrqsXt8FlEJle25HUd4tsoDR7H2wDhe9Q==} + dependencies: + babel-helper-explode-assignable-expression: 6.24.1 + babel-runtime: 6.26.0 + babel-types: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-helper-call-delegate/6.24.1: + resolution: {integrity: sha512-RL8n2NiEj+kKztlrVJM9JT1cXzzAdvWFh76xh/H1I4nKwunzE4INBXn8ieCZ+wh4zWszZk7NBS1s/8HR5jDkzQ==} + dependencies: + babel-helper-hoist-variables: 6.24.1 + babel-runtime: 6.26.0 + babel-traverse: 6.26.0 + babel-types: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-helper-define-map/6.26.0: + resolution: {integrity: sha512-bHkmjcC9lM1kmZcVpA5t2om2nzT/xiZpo6TJq7UlZ3wqKfzia4veeXbIhKvJXAMzhhEBd3cR1IElL5AenWEUpA==} + dependencies: + babel-helper-function-name: 6.24.1 + babel-runtime: 6.26.0 + babel-types: 6.26.0 + lodash: 4.17.21 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-helper-explode-assignable-expression/6.24.1: + resolution: {integrity: sha512-qe5csbhbvq6ccry9G7tkXbzNtcDiH4r51rrPUbwwoTzZ18AqxWYRZT6AOmxrpxKnQBW0pYlBI/8vh73Z//78nQ==} + dependencies: + babel-runtime: 6.26.0 + babel-traverse: 6.26.0 + babel-types: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-helper-function-name/6.24.1: + resolution: {integrity: sha512-Oo6+e2iX+o9eVvJ9Y5eKL5iryeRdsIkwRYheCuhYdVHsdEQysbc2z2QkqCLIYnNxkT5Ss3ggrHdXiDI7Dhrn4Q==} + dependencies: + babel-helper-get-function-arity: 6.24.1 + babel-runtime: 6.26.0 + babel-template: 6.26.0 + babel-traverse: 6.26.0 + babel-types: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-helper-get-function-arity/6.24.1: + resolution: {integrity: sha512-WfgKFX6swFB1jS2vo+DwivRN4NB8XUdM3ij0Y1gnC21y1tdBoe6xjVnd7NSI6alv+gZXCtJqvrTeMW3fR/c0ng==} + dependencies: + babel-runtime: 6.26.0 + babel-types: 6.26.0 + dev: false + + /babel-helper-hoist-variables/6.24.1: + resolution: {integrity: sha512-zAYl3tqerLItvG5cKYw7f1SpvIxS9zi7ohyGHaI9cgDUjAT6YcY9jIEH5CstetP5wHIVSceXwNS7Z5BpJg+rOw==} + dependencies: + babel-runtime: 6.26.0 + babel-types: 6.26.0 + dev: false + + /babel-helper-optimise-call-expression/6.24.1: + resolution: {integrity: sha512-Op9IhEaxhbRT8MDXx2iNuMgciu2V8lDvYCNQbDGjdBNCjaMvyLf4wl4A3b8IgndCyQF8TwfgsQ8T3VD8aX1/pA==} + dependencies: + babel-runtime: 6.26.0 + babel-types: 6.26.0 + dev: false + + /babel-helper-regex/6.26.0: + resolution: {integrity: sha512-VlPiWmqmGJp0x0oK27Out1D+71nVVCTSdlbhIVoaBAj2lUgrNjBCRR9+llO4lTSb2O4r7PJg+RobRkhBrf6ofg==} + dependencies: + babel-runtime: 6.26.0 + babel-types: 6.26.0 + lodash: 4.17.21 + dev: false + + /babel-helper-remap-async-to-generator/6.24.1: + resolution: {integrity: sha512-RYqaPD0mQyQIFRu7Ho5wE2yvA/5jxqCIj/Lv4BXNq23mHYu/vxikOy2JueLiBxQknwapwrJeNCesvY0ZcfnlHg==} + dependencies: + babel-helper-function-name: 6.24.1 + babel-runtime: 6.26.0 + babel-template: 6.26.0 + babel-traverse: 6.26.0 + babel-types: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-helper-replace-supers/6.24.1: + resolution: {integrity: sha512-sLI+u7sXJh6+ToqDr57Bv973kCepItDhMou0xCP2YPVmR1jkHSCY+p1no8xErbV1Siz5QE8qKT1WIwybSWlqjw==} + dependencies: + babel-helper-optimise-call-expression: 6.24.1 + babel-messages: 6.23.0 + babel-runtime: 6.26.0 + babel-template: 6.26.0 + babel-traverse: 6.26.0 + babel-types: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-loader/8.3.0_webpack@4.20.2: + resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} + engines: {node: '>= 8.9'} + peerDependencies: + '@babel/core': ^7.0.0 + webpack: '>=2' + dependencies: + find-cache-dir: 3.3.2 + loader-utils: 2.0.4 + make-dir: 3.1.0 + schema-utils: 2.7.1 + webpack: 4.20.2_webpack-cli@3.3.12 + dev: false + + /babel-messages/6.23.0: + resolution: {integrity: sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==} + dependencies: + babel-runtime: 6.26.0 + dev: false + + /babel-plugin-check-es2015-constants/6.22.0: + resolution: {integrity: sha512-B1M5KBP29248dViEo1owyY32lk1ZSH2DaNNrXLGt8lyjjHm7pBqAdQ7VKUPR6EEDO323+OvT3MQXbCin8ooWdA==} + dependencies: + babel-runtime: 6.26.0 + dev: false + + /babel-plugin-syntax-async-functions/6.13.0: + resolution: {integrity: sha512-4Zp4unmHgw30A1eWI5EpACji2qMocisdXhAftfhXoSV9j0Tvj6nRFE3tOmRY912E0FMRm/L5xWE7MGVT2FoLnw==} + dev: false + + /babel-plugin-syntax-exponentiation-operator/6.13.0: + resolution: {integrity: sha512-Z/flU+T9ta0aIEKl1tGEmN/pZiI1uXmCiGFRegKacQfEJzp7iNsKloZmyJlQr+75FCJtiFfGIK03SiCvCt9cPQ==} + dev: false + + /babel-plugin-syntax-trailing-function-commas/6.22.0: + resolution: {integrity: sha512-Gx9CH3Q/3GKbhs07Bszw5fPTlU+ygrOGfAhEt7W2JICwufpC4SuO0mG0+4NykPBSYPMJhqvVlDBU17qB1D+hMQ==} + dev: false + + /babel-plugin-transform-async-to-generator/6.24.1: + resolution: {integrity: sha512-7BgYJujNCg0Ti3x0c/DL3tStvnKS6ktIYOmo9wginv/dfZOrbSZ+qG4IRRHMBOzZ5Awb1skTiAsQXg/+IWkZYw==} + dependencies: + babel-helper-remap-async-to-generator: 6.24.1 + babel-plugin-syntax-async-functions: 6.13.0 + babel-runtime: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-transform-es2015-arrow-functions/6.22.0: + resolution: {integrity: sha512-PCqwwzODXW7JMrzu+yZIaYbPQSKjDTAsNNlK2l5Gg9g4rz2VzLnZsStvp/3c46GfXpwkyufb3NCyG9+50FF1Vg==} + dependencies: + babel-runtime: 6.26.0 + dev: false + + /babel-plugin-transform-es2015-block-scoped-functions/6.22.0: + resolution: {integrity: sha512-2+ujAT2UMBzYFm7tidUsYh+ZoIutxJ3pN9IYrF1/H6dCKtECfhmB8UkHVpyxDwkj0CYbQG35ykoz925TUnBc3A==} + dependencies: + babel-runtime: 6.26.0 + dev: false + + /babel-plugin-transform-es2015-block-scoping/6.26.0: + resolution: {integrity: sha512-YiN6sFAQ5lML8JjCmr7uerS5Yc/EMbgg9G8ZNmk2E3nYX4ckHR01wrkeeMijEf5WHNK5TW0Sl0Uu3pv3EdOJWw==} + dependencies: + babel-runtime: 6.26.0 + babel-template: 6.26.0 + babel-traverse: 6.26.0 + babel-types: 6.26.0 + lodash: 4.17.21 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-transform-es2015-classes/6.24.1: + resolution: {integrity: sha512-5Dy7ZbRinGrNtmWpquZKZ3EGY8sDgIVB4CU8Om8q8tnMLrD/m94cKglVcHps0BCTdZ0TJeeAWOq2TK9MIY6cag==} + dependencies: + babel-helper-define-map: 6.26.0 + babel-helper-function-name: 6.24.1 + babel-helper-optimise-call-expression: 6.24.1 + babel-helper-replace-supers: 6.24.1 + babel-messages: 6.23.0 + babel-runtime: 6.26.0 + babel-template: 6.26.0 + babel-traverse: 6.26.0 + babel-types: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-transform-es2015-computed-properties/6.24.1: + resolution: {integrity: sha512-C/uAv4ktFP/Hmh01gMTvYvICrKze0XVX9f2PdIXuriCSvUmV9j+u+BB9f5fJK3+878yMK6dkdcq+Ymr9mrcLzw==} + dependencies: + babel-runtime: 6.26.0 + babel-template: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-transform-es2015-destructuring/6.23.0: + resolution: {integrity: sha512-aNv/GDAW0j/f4Uy1OEPZn1mqD+Nfy9viFGBfQ5bZyT35YqOiqx7/tXdyfZkJ1sC21NyEsBdfDY6PYmLHF4r5iA==} + dependencies: + babel-runtime: 6.26.0 + dev: false + + /babel-plugin-transform-es2015-duplicate-keys/6.24.1: + resolution: {integrity: sha512-ossocTuPOssfxO2h+Z3/Ea1Vo1wWx31Uqy9vIiJusOP4TbF7tPs9U0sJ9pX9OJPf4lXRGj5+6Gkl/HHKiAP5ug==} + dependencies: + babel-runtime: 6.26.0 + babel-types: 6.26.0 + dev: false + + /babel-plugin-transform-es2015-for-of/6.23.0: + resolution: {integrity: sha512-DLuRwoygCoXx+YfxHLkVx5/NpeSbVwfoTeBykpJK7JhYWlL/O8hgAK/reforUnZDlxasOrVPPJVI/guE3dCwkw==} + dependencies: + babel-runtime: 6.26.0 + dev: false + + /babel-plugin-transform-es2015-function-name/6.24.1: + resolution: {integrity: sha512-iFp5KIcorf11iBqu/y/a7DK3MN5di3pNCzto61FqCNnUX4qeBwcV1SLqe10oXNnCaxBUImX3SckX2/o1nsrTcg==} + dependencies: + babel-helper-function-name: 6.24.1 + babel-runtime: 6.26.0 + babel-types: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-transform-es2015-literals/6.22.0: + resolution: {integrity: sha512-tjFl0cwMPpDYyoqYA9li1/7mGFit39XiNX5DKC/uCNjBctMxyL1/PT/l4rSlbvBG1pOKI88STRdUsWXB3/Q9hQ==} + dependencies: + babel-runtime: 6.26.0 + dev: false + + /babel-plugin-transform-es2015-modules-amd/6.24.1: + resolution: {integrity: sha512-LnIIdGWIKdw7zwckqx+eGjcS8/cl8D74A3BpJbGjKTFFNJSMrjN4bIh22HY1AlkUbeLG6X6OZj56BDvWD+OeFA==} + dependencies: + babel-plugin-transform-es2015-modules-commonjs: 6.26.2 + babel-runtime: 6.26.0 + babel-template: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-transform-es2015-modules-commonjs/6.26.2: + resolution: {integrity: sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==} + dependencies: + babel-plugin-transform-strict-mode: 6.24.1 + babel-runtime: 6.26.0 + babel-template: 6.26.0 + babel-types: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-transform-es2015-modules-systemjs/6.24.1: + resolution: {integrity: sha512-ONFIPsq8y4bls5PPsAWYXH/21Hqv64TBxdje0FvU3MhIV6QM2j5YS7KvAzg/nTIVLot2D2fmFQrFWCbgHlFEjg==} + dependencies: + babel-helper-hoist-variables: 6.24.1 + babel-runtime: 6.26.0 + babel-template: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-transform-es2015-modules-umd/6.24.1: + resolution: {integrity: sha512-LpVbiT9CLsuAIp3IG0tfbVo81QIhn6pE8xBJ7XSeCtFlMltuar5VuBV6y6Q45tpui9QWcy5i0vLQfCfrnF7Kiw==} + dependencies: + babel-plugin-transform-es2015-modules-amd: 6.24.1 + babel-runtime: 6.26.0 + babel-template: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-transform-es2015-object-super/6.24.1: + resolution: {integrity: sha512-8G5hpZMecb53vpD3mjs64NhI1au24TAmokQ4B+TBFBjN9cVoGoOvotdrMMRmHvVZUEvqGUPWL514woru1ChZMA==} + dependencies: + babel-helper-replace-supers: 6.24.1 + babel-runtime: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-transform-es2015-parameters/6.24.1: + resolution: {integrity: sha512-8HxlW+BB5HqniD+nLkQ4xSAVq3bR/pcYW9IigY+2y0dI+Y7INFeTbfAQr+63T3E4UDsZGjyb+l9txUnABWxlOQ==} + dependencies: + babel-helper-call-delegate: 6.24.1 + babel-helper-get-function-arity: 6.24.1 + babel-runtime: 6.26.0 + babel-template: 6.26.0 + babel-traverse: 6.26.0 + babel-types: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-transform-es2015-shorthand-properties/6.24.1: + resolution: {integrity: sha512-mDdocSfUVm1/7Jw/FIRNw9vPrBQNePy6wZJlR8HAUBLybNp1w/6lr6zZ2pjMShee65t/ybR5pT8ulkLzD1xwiw==} + dependencies: + babel-runtime: 6.26.0 + babel-types: 6.26.0 + dev: false + + /babel-plugin-transform-es2015-spread/6.22.0: + resolution: {integrity: sha512-3Ghhi26r4l3d0Js933E5+IhHwk0A1yiutj9gwvzmFbVV0sPMYk2lekhOufHBswX7NCoSeF4Xrl3sCIuSIa+zOg==} + dependencies: + babel-runtime: 6.26.0 + dev: false + + /babel-plugin-transform-es2015-sticky-regex/6.24.1: + resolution: {integrity: sha512-CYP359ADryTo3pCsH0oxRo/0yn6UsEZLqYohHmvLQdfS9xkf+MbCzE3/Kolw9OYIY4ZMilH25z/5CbQbwDD+lQ==} + dependencies: + babel-helper-regex: 6.26.0 + babel-runtime: 6.26.0 + babel-types: 6.26.0 + dev: false + + /babel-plugin-transform-es2015-template-literals/6.22.0: + resolution: {integrity: sha512-x8b9W0ngnKzDMHimVtTfn5ryimars1ByTqsfBDwAqLibmuuQY6pgBQi5z1ErIsUOWBdw1bW9FSz5RZUojM4apg==} + dependencies: + babel-runtime: 6.26.0 + dev: false + + /babel-plugin-transform-es2015-typeof-symbol/6.23.0: + resolution: {integrity: sha512-fz6J2Sf4gYN6gWgRZaoFXmq93X+Li/8vf+fb0sGDVtdeWvxC9y5/bTD7bvfWMEq6zetGEHpWjtzRGSugt5kNqw==} + dependencies: + babel-runtime: 6.26.0 + dev: false + + /babel-plugin-transform-es2015-unicode-regex/6.24.1: + resolution: {integrity: sha512-v61Dbbihf5XxnYjtBN04B/JBvsScY37R1cZT5r9permN1cp+b70DY3Ib3fIkgn1DI9U3tGgBJZVD8p/mE/4JbQ==} + dependencies: + babel-helper-regex: 6.26.0 + babel-runtime: 6.26.0 + regexpu-core: 2.0.0 + dev: false + + /babel-plugin-transform-exponentiation-operator/6.24.1: + resolution: {integrity: sha512-LzXDmbMkklvNhprr20//RStKVcT8Cu+SQtX18eMHLhjHf2yFzwtQ0S2f0jQ+89rokoNdmwoSqYzAhq86FxlLSQ==} + dependencies: + babel-helper-builder-binary-assignment-operator-visitor: 6.24.1 + babel-plugin-syntax-exponentiation-operator: 6.13.0 + babel-runtime: 6.26.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-transform-regenerator/6.26.0: + resolution: {integrity: sha512-LS+dBkUGlNR15/5WHKe/8Neawx663qttS6AGqoOUhICc9d1KciBvtrQSuc0PI+CxQ2Q/S1aKuJ+u64GtLdcEZg==} + dependencies: + regenerator-transform: 0.10.1 + dev: false + + /babel-plugin-transform-runtime/6.23.0: + resolution: {integrity: sha512-cpGMVC1vt/772y3jx1gwSaTitQVZuFDlllgreMsZ+rTYC6jlYXRyf5FQOgSnckOiA5QmzbXTyBY2A5AmZXF1fA==} + dependencies: + babel-runtime: 6.26.0 + dev: false + + /babel-plugin-transform-strict-mode/6.24.1: + resolution: {integrity: sha512-j3KtSpjyLSJxNoCDrhwiJad8kw0gJ9REGj8/CqL0HeRyLnvUNYV9zcqluL6QJSXh3nfsLEmSLvwRfGzrgR96Pw==} + dependencies: + babel-runtime: 6.26.0 + babel-types: 6.26.0 + dev: false + + /babel-preset-env/1.7.0: + resolution: {integrity: sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==} + dependencies: + babel-plugin-check-es2015-constants: 6.22.0 + babel-plugin-syntax-trailing-function-commas: 6.22.0 + babel-plugin-transform-async-to-generator: 6.24.1 + babel-plugin-transform-es2015-arrow-functions: 6.22.0 + babel-plugin-transform-es2015-block-scoped-functions: 6.22.0 + babel-plugin-transform-es2015-block-scoping: 6.26.0 + babel-plugin-transform-es2015-classes: 6.24.1 + babel-plugin-transform-es2015-computed-properties: 6.24.1 + babel-plugin-transform-es2015-destructuring: 6.23.0 + babel-plugin-transform-es2015-duplicate-keys: 6.24.1 + babel-plugin-transform-es2015-for-of: 6.23.0 + babel-plugin-transform-es2015-function-name: 6.24.1 + babel-plugin-transform-es2015-literals: 6.22.0 + babel-plugin-transform-es2015-modules-amd: 6.24.1 + babel-plugin-transform-es2015-modules-commonjs: 6.26.2 + babel-plugin-transform-es2015-modules-systemjs: 6.24.1 + babel-plugin-transform-es2015-modules-umd: 6.24.1 + babel-plugin-transform-es2015-object-super: 6.24.1 + babel-plugin-transform-es2015-parameters: 6.24.1 + babel-plugin-transform-es2015-shorthand-properties: 6.24.1 + babel-plugin-transform-es2015-spread: 6.22.0 + babel-plugin-transform-es2015-sticky-regex: 6.24.1 + babel-plugin-transform-es2015-template-literals: 6.22.0 + babel-plugin-transform-es2015-typeof-symbol: 6.23.0 + babel-plugin-transform-es2015-unicode-regex: 6.24.1 + babel-plugin-transform-exponentiation-operator: 6.24.1 + babel-plugin-transform-regenerator: 6.26.0 + browserslist: 3.2.8 + invariant: 2.2.4 + semver: 5.6.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-runtime/6.26.0: + resolution: {integrity: sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==} + dependencies: + core-js: 2.6.12 + regenerator-runtime: 0.11.1 + dev: false + + /babel-template/6.26.0: + resolution: {integrity: sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg==} + dependencies: + babel-runtime: 6.26.0 + babel-traverse: 6.26.0 + babel-types: 6.26.0 + babylon: 6.18.0 + lodash: 4.17.21 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-traverse/6.26.0: + resolution: {integrity: sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA==} + dependencies: + babel-code-frame: 6.26.0 + babel-messages: 6.23.0 + babel-runtime: 6.26.0 + babel-types: 6.26.0 + babylon: 6.18.0 + debug: 2.6.9 + globals: 9.18.0 + invariant: 2.2.4 + lodash: 4.17.21 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-types/6.26.0: + resolution: {integrity: sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==} + dependencies: + babel-runtime: 6.26.0 + esutils: 2.0.3 + lodash: 4.17.21 + to-fast-properties: 1.0.3 + dev: false + + /babylon/6.18.0: + resolution: {integrity: sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==} + hasBin: true + dev: false + + /bail/1.0.5: + resolution: {integrity: sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==} + dev: false + + /balanced-match/1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: false + + /base/0.11.2: + resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} + engines: {node: '>=0.10.0'} + dependencies: + cache-base: 1.0.1 + class-utils: 0.3.6 + component-emitter: 1.3.0 + define-property: 1.0.0 + isobject: 3.0.1 + mixin-deep: 1.3.2 + pascalcase: 0.1.1 + dev: false + + /base64-js/1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: false + + /batch/0.6.1: + resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} + dev: false + + /bcrypt-pbkdf/1.0.2: + resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + dependencies: + tweetnacl: 0.14.5 + dev: false + + /before-after-hook/2.2.3: + resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} + dev: false + + /big-integer/1.6.51: + resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} + engines: {node: '>=0.6'} + dev: false + + /big.js/5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + dev: false + + /big.js/6.2.1: + resolution: {integrity: sha512-bCtHMwL9LeDIozFn+oNhhFoq+yQ3BNdnsLSASUxLciOb1vgvpHsIO1dsENiGMgbb4SkP5TrzWzRiLddn8ahVOQ==} + dev: false + + /bignumber.js/2.4.0: + resolution: {integrity: sha512-uw4ra6Cv483Op/ebM0GBKKfxZlSmn6NgFRby5L3yGTlunLj53KQgndDlqy2WVFOwgvurocApYkSud0aO+mvrpQ==} + dev: false + + /bignumber.js/9.1.1: + resolution: {integrity: sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==} + dev: false + + /binary-extensions/1.13.1: + resolution: {integrity: sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==} + engines: {node: '>=0.10.0'} + dev: false + + /binary-extensions/2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: false + + /binascii/0.0.2: + resolution: {integrity: sha512-rA2CrUl1+6yKrn+XgLs8Hdy18OER1UW146nM+ixzhQXDY+Bd3ySkyIJGwF2a4I45JwbvF1mDL/nWkqBwpOcdBA==} + dev: false + + /bindings/1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + requiresBuild: true + dependencies: + file-uri-to-path: 1.0.0 + dev: false + optional: true + + /bl/4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.0 + dev: false + + /bl/5.1.0: + resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==} + dependencies: + buffer: 6.0.3 + inherits: 2.0.4 + readable-stream: 3.6.0 + dev: false + + /bluebird/3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + dev: false + + /bn.js/4.12.0: + resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} + dev: false + + /bn.js/5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + dev: false + + /body-parser/1.20.1: + resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.11.0 + raw-body: 2.5.1 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /body-parser/1.20.1_supports-color@6.1.0: + resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9_supports-color@6.1.0 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.11.0 + raw-body: 2.5.1 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /bonjour/3.5.0: + resolution: {integrity: sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==} + dependencies: + array-flatten: 2.1.2 + deep-equal: 1.1.1 + dns-equal: 1.0.0 + dns-txt: 2.0.2 + multicast-dns: 6.2.3 + multicast-dns-service-types: 1.1.0 + dev: false + + /boolbase/1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + dev: false + + /brace-expansion/1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: false + + /brace-expansion/2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: false + + /braces/2.3.2: + resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} + engines: {node: '>=0.10.0'} + dependencies: + arr-flatten: 1.1.0 + array-unique: 0.3.2 + extend-shallow: 2.0.1 + fill-range: 4.0.0 + isobject: 3.0.1 + repeat-element: 1.1.4 + snapdragon: 0.8.2 + snapdragon-node: 2.1.1 + split-string: 3.1.0 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /braces/2.3.2_supports-color@6.1.0: + resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} + engines: {node: '>=0.10.0'} + dependencies: + arr-flatten: 1.1.0 + array-unique: 0.3.2 + extend-shallow: 2.0.1 + fill-range: 4.0.0 + isobject: 3.0.1 + repeat-element: 1.1.4 + snapdragon: 0.8.2_supports-color@6.1.0 + snapdragon-node: 2.1.1 + split-string: 3.1.0 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /braces/3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: false + + /brorand/1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + dev: false + + /browser-headers/0.4.1: + resolution: {integrity: sha512-CA9hsySZVo9371qEHjHZtYxV2cFtVj5Wj/ZHi8ooEsrtm4vOnl9Y9HmyYWk9q+05d7K3rdoAE0j3MVEFVvtQtg==} + dev: false + + /browser-request/0.3.3: + resolution: {integrity: sha512-YyNI4qJJ+piQG6MMEuo7J3Bzaqssufx04zpEKYfSrl/1Op59HWali9zMtBpXnkmqMcOuWJPZvudrm9wISmnCbg==} + engines: {'0': node} + dev: false + + /browserify-aes/1.2.0: + resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} + dependencies: + buffer-xor: 1.0.3 + cipher-base: 1.0.4 + create-hash: 1.2.0 + evp_bytestokey: 1.0.3 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: false + + /browserify-cipher/1.0.1: + resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} + dependencies: + browserify-aes: 1.2.0 + browserify-des: 1.0.2 + evp_bytestokey: 1.0.3 + dev: false + + /browserify-des/1.0.2: + resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} + dependencies: + cipher-base: 1.0.4 + des.js: 1.0.1 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: false + + /browserify-rsa/4.1.0: + resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==} + dependencies: + bn.js: 5.2.1 + randombytes: 2.1.0 + dev: false + + /browserify-sign/4.2.1: + resolution: {integrity: sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==} + dependencies: + bn.js: 5.2.1 + browserify-rsa: 4.1.0 + create-hash: 1.2.0 + create-hmac: 1.1.7 + elliptic: 6.5.4 + inherits: 2.0.4 + parse-asn1: 5.1.6 + readable-stream: 3.6.0 + safe-buffer: 5.2.1 + dev: false + + /browserify-zlib/0.2.0: + resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} + dependencies: + pako: 1.0.11 + dev: false + + /browserslist/3.2.8: + resolution: {integrity: sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001452 + electron-to-chromium: 1.4.296 + dev: false + + /btoa-lite/1.0.0: + resolution: {integrity: sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA==} + dev: false + + /buffer-crc32/0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + dev: false + + /buffer-equal-constant-time/1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + dev: false + + /buffer-from/1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: false + + /buffer-indexof/1.1.1: + resolution: {integrity: sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==} + dev: false + + /buffer-writer/2.0.0: + resolution: {integrity: sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==} + engines: {node: '>=4'} + dev: false + + /buffer-xor/1.0.3: + resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} + dev: false + + /buffer/4.9.2: + resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.1.13 + isarray: 1.0.0 + dev: false + + /buffer/5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: false + + /buffer/6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: false + + /buildcheck/0.0.3: + resolution: {integrity: sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA==} + engines: {node: '>=10.0.0'} + dev: false + optional: true + + /builtin-modules/1.1.1: + resolution: {integrity: sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==} + engines: {node: '>=0.10.0'} + dev: false + + /builtin-modules/3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + dev: false + + /builtin-status-codes/3.0.0: + resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} + dev: false + + /bunyan/1.8.15: + resolution: {integrity: sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==} + engines: {'0': node >=0.10.0} + hasBin: true + optionalDependencies: + dtrace-provider: 0.8.8 + moment: 2.29.4 + mv: 2.1.1 + safe-json-stringify: 1.2.0 + dev: false + + /bytebuffer/5.0.1: + resolution: {integrity: sha512-IuzSdmADppkZ6DlpycMkm8l9zeEq16fWtLvunEwFiYciR/BHo4E8/xs5piFquG+Za8OWmMqHF8zuRviz2LHvRQ==} + engines: {node: '>=0.8'} + dependencies: + long: 3.2.0 + dev: false + + /bytes/3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} + dev: false + + /bytes/3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + dev: false + + /cacache/10.0.4: + resolution: {integrity: sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==} + dependencies: + bluebird: 3.7.2 + chownr: 1.1.4 + glob: 7.2.3 + graceful-fs: 4.2.10 + lru-cache: 4.1.5 + mississippi: 2.0.0 + mkdirp: 0.5.6 + move-concurrently: 1.0.1 + promise-inflight: 1.0.1_bluebird@3.7.2 + rimraf: 2.7.1 + ssri: 5.3.0 + unique-filename: 1.1.1 + y18n: 4.0.3 + dev: false + + /cache-base/1.0.1: + resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} + engines: {node: '>=0.10.0'} + dependencies: + collection-visit: 1.0.0 + component-emitter: 1.3.0 + get-value: 2.0.6 + has-value: 1.0.0 + isobject: 3.0.1 + set-value: 2.0.1 + to-object-path: 0.3.0 + union-value: 1.0.1 + unset-value: 1.0.0 + dev: false + + /call-bind/1.0.2: + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + dependencies: + function-bind: 1.1.1 + get-intrinsic: 1.2.0 + dev: false + + /caller-callsite/2.0.0: + resolution: {integrity: sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==} + engines: {node: '>=4'} + dependencies: + callsites: 2.0.0 + dev: false + + /caller-path/2.0.0: + resolution: {integrity: sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==} + engines: {node: '>=4'} + dependencies: + caller-callsite: 2.0.0 + dev: false + + /callsites/2.0.0: + resolution: {integrity: sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==} + engines: {node: '>=4'} + dev: false + + /camelcase/2.1.1: + resolution: {integrity: sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==} + engines: {node: '>=0.10.0'} + dev: false + + /camelcase/5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + dev: false + + /caniuse-lite/1.0.30001452: + resolution: {integrity: sha512-Lkp0vFjMkBB3GTpLR8zk4NwW5EdRdnitwYJHDOOKIU85x4ckYCPQ+9WlVvSVClHxVReefkUMtWZH2l9KGlD51w==} + dev: false + + /caseless/0.12.0: + resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} + dev: false + + /catharsis/0.9.0: + resolution: {integrity: sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==} + engines: {node: '>= 10'} + dependencies: + lodash: 4.17.21 + dev: false + + /chai/4.3.7: + resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==} + engines: {node: '>=4'} + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.2 + deep-eql: 4.1.3 + get-func-name: 2.0.0 + loupe: 2.3.6 + pathval: 1.1.1 + type-detect: 4.0.8 + dev: false + + /chalk/1.1.3: + resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-styles: 2.2.1 + escape-string-regexp: 1.0.5 + has-ansi: 2.0.0 + strip-ansi: 3.0.1 + supports-color: 2.0.0 + dev: false + + /chalk/2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: false + + /chalk/4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: false + + /change-emitter/0.1.6: + resolution: {integrity: sha512-YXzt1cQ4a2jqazhcuSWEOc1K2q8g9H6eWNsyZgi640LDzRWVQ2eDe+Y/kVdftH+vYdPF2rgDb3dLdpxE1jvAxw==} + dev: false + + /character-entities-legacy/1.1.4: + resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} + dev: false + + /character-entities/1.2.4: + resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} + dev: false + + /character-reference-invalid/1.1.4: + resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} + dev: false + + /charenc/0.0.2: + resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} + dev: false + + /check-error/1.0.2: + resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} + dev: false + + /cheerio-select/2.1.0: + resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} + dependencies: + boolbase: 1.0.0 + css-select: 5.1.0 + css-what: 6.1.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.0.1 + dev: false + + /cheerio/1.0.0-rc.12: + resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==} + engines: {node: '>= 6'} + dependencies: + cheerio-select: 2.1.0 + dom-serializer: 2.0.0 + domhandler: 5.0.3 + domutils: 3.0.1 + htmlparser2: 8.0.1 + parse5: 7.1.2 + parse5-htmlparser2-tree-adapter: 7.0.0 + dev: false + + /chokidar/2.1.8: + resolution: {integrity: sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==} + deprecated: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies + dependencies: + anymatch: 2.0.0 + async-each: 1.0.6 + braces: 2.3.2 + glob-parent: 3.1.0 + inherits: 2.0.4 + is-binary-path: 1.0.1 + is-glob: 4.0.3 + normalize-path: 3.0.0 + path-is-absolute: 1.0.1 + readdirp: 2.2.1 + upath: 1.2.0 + optionalDependencies: + fsevents: 1.2.13 + transitivePeerDependencies: + - supports-color + dev: false + + /chokidar/2.1.8_supports-color@6.1.0: + resolution: {integrity: sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==} + deprecated: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies + dependencies: + anymatch: 2.0.0_supports-color@6.1.0 + async-each: 1.0.6 + braces: 2.3.2_supports-color@6.1.0 + glob-parent: 3.1.0 + inherits: 2.0.4 + is-binary-path: 1.0.1 + is-glob: 4.0.3 + normalize-path: 3.0.0 + path-is-absolute: 1.0.1 + readdirp: 2.2.1_supports-color@6.1.0 + upath: 1.2.0 + optionalDependencies: + fsevents: 1.2.13 + transitivePeerDependencies: + - supports-color + dev: false + + /chokidar/3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.2 + dev: false + + /chownr/1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + dev: false + + /chownr/2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + dev: false + + /chrome-trace-event/1.0.3: + resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} + engines: {node: '>=6.0'} + dev: false + + /cipher-base/1.0.4: + resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: false + + /class-utils/0.3.6: + resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} + engines: {node: '>=0.10.0'} + dependencies: + arr-union: 3.1.0 + define-property: 0.2.5 + isobject: 3.0.1 + static-extend: 0.1.2 + dev: false + + /classnames/2.3.2: + resolution: {integrity: sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==} + dev: false + + /cliui/3.2.0: + resolution: {integrity: sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==} + dependencies: + string-width: 1.0.2 + strip-ansi: 3.0.1 + wrap-ansi: 2.1.0 + dev: false + + /cliui/5.0.0: + resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==} + dependencies: + string-width: 3.1.0 + strip-ansi: 5.2.0 + wrap-ansi: 5.1.0 + dev: false + + /cliui/6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + dev: false + + /cliui/7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: false + + /clone/2.1.2: + resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} + engines: {node: '>=0.8'} + dev: false + + /code-point-at/1.1.0: + resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==} + engines: {node: '>=0.10.0'} + dev: false + + /collection-visit/1.0.0: + resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} + engines: {node: '>=0.10.0'} + dependencies: + map-visit: 1.0.0 + object-visit: 1.0.1 + dev: false + + /color-convert/1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + dev: false + + /color-convert/2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: false + + /color-name/1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: false + + /color-name/1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: false + + /color-string/1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + dev: false + + /color-support/1.1.3: + resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} + hasBin: true + dev: false + + /color/3.2.1: + resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} + dependencies: + color-convert: 1.9.3 + color-string: 1.9.1 + dev: false + + /colorspace/1.1.4: + resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} + dependencies: + color: 3.2.1 + text-hex: 1.0.0 + dev: false + + /colour/0.7.1: + resolution: {integrity: sha512-Rel466v0EnmKPcsxHo91L4kgPs/6XF7Pu2LJNszq9lXYwi5CFWEeIiRaTX5ym7PPMdj4udDHkLSVC1//JVkZQg==} + engines: {node: '>=0.8'} + dev: false + + /combined-stream/1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + dev: false + + /comma-separated-tokens/1.0.8: + resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==} + dev: false + + /commander/2.13.0: + resolution: {integrity: sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==} + dev: false + + /commander/2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: false + + /commander/6.2.1: + resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} + engines: {node: '>= 6'} + dev: false + + /commander/9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + dev: false + + /commondir/1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + dev: false + + /component-emitter/1.3.0: + resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==} + dev: false + + /component-type/1.2.1: + resolution: {integrity: sha512-Kgy+2+Uwr75vAi6ChWXgHuLvd+QLD7ssgpaRq2zCvt80ptvAfMc/hijcJxXkBa2wMlEZcJvC2H8Ubo+A9ATHIg==} + dev: false + + /compressible/2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: false + + /compression/1.7.4_supports-color@6.1.0: + resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} + engines: {node: '>= 0.8.0'} + dependencies: + accepts: 1.3.8 + bytes: 3.0.0 + compressible: 2.0.18 + debug: 2.6.9_supports-color@6.1.0 + on-headers: 1.0.2 + safe-buffer: 5.1.2 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /concat-map/0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: false + + /concat-stream/1.6.2: + resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} + engines: {'0': node >= 0.8} + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 2.3.7 + typedarray: 0.0.6 + dev: false + + /config-chain/1.1.13: + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + dependencies: + ini: 1.3.8 + proto-list: 1.2.4 + dev: false + + /configstore/5.0.1: + resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==} + engines: {node: '>=8'} + dependencies: + dot-prop: 5.3.0 + graceful-fs: 4.2.10 + make-dir: 3.1.0 + unique-string: 2.0.0 + write-file-atomic: 3.0.3 + xdg-basedir: 4.0.0 + dev: false + + /connect-history-api-fallback/1.6.0: + resolution: {integrity: sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==} + engines: {node: '>=0.8'} + dev: false + + /console-browserify/1.2.0: + resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} + dev: false + + /console-control-strings/1.1.0: + resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} + dev: false + + /constants-browserify/1.0.0: + resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} + dev: false + + /content-disposition/0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /content-type/1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + dev: false + + /cookie-signature/1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + dev: false + + /cookie/0.5.0: + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + engines: {node: '>= 0.6'} + dev: false + + /copy-concurrently/1.0.5: + resolution: {integrity: sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==} + dependencies: + aproba: 1.2.0 + fs-write-stream-atomic: 1.0.10 + iferr: 0.1.5 + mkdirp: 0.5.6 + rimraf: 2.7.1 + run-queue: 1.0.3 + dev: false + + /copy-descriptor/0.1.1: + resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} + engines: {node: '>=0.10.0'} + dev: false + + /copy-to/2.0.1: + resolution: {integrity: sha512-3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w==} + dev: false + + /core-js/1.2.7: + resolution: {integrity: sha512-ZiPp9pZlgxpWRu0M+YWbm6+aQ84XEfH1JRXvfOc/fILWI0VKhLC2LX13X1NYq4fULzLMq7Hfh43CSo2/aIaUPA==} + deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js. + dev: false + + /core-js/2.6.12: + resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==} + deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js. + requiresBuild: true + dev: false + + /core-util-is/1.0.2: + resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} + dev: false + + /core-util-is/1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + dev: false + + /cosmiconfig/5.2.1: + resolution: {integrity: sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==} + engines: {node: '>=4'} + dependencies: + import-fresh: 2.0.0 + is-directory: 0.3.1 + js-yaml: 3.14.1 + parse-json: 4.0.0 + dev: false + + /cpu-features/0.0.4: + resolution: {integrity: sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A==} + engines: {node: '>=10.0.0'} + requiresBuild: true + dependencies: + buildcheck: 0.0.3 + nan: 2.17.0 + dev: false + optional: true + + /create-ecdh/4.0.4: + resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} + dependencies: + bn.js: 4.12.0 + elliptic: 6.5.4 + dev: false + + /create-hash/1.2.0: + resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} + dependencies: + cipher-base: 1.0.4 + inherits: 2.0.4 + md5.js: 1.3.5 + ripemd160: 2.0.2 + sha.js: 2.4.11 + dev: false + + /create-hmac/1.1.7: + resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + dependencies: + cipher-base: 1.0.4 + create-hash: 1.2.0 + inherits: 2.0.4 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + dev: false + + /create-react-class/15.7.0: + resolution: {integrity: sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng==} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + dev: false + + /cron-parser/2.18.0: + resolution: {integrity: sha512-s4odpheTyydAbTBQepsqd2rNWGa2iV3cyo8g7zbI2QQYGLVsfbhmwukayS1XHppe02Oy1fg7mg6xoaraVJeEcg==} + engines: {node: '>=0.8'} + dependencies: + is-nan: 1.3.2 + moment-timezone: 0.5.40 + dev: false + + /cross-spawn/6.0.5: + resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} + engines: {node: '>=4.8'} + dependencies: + nice-try: 1.0.5 + path-key: 2.0.1 + semver: 5.6.0 + shebang-command: 1.2.0 + which: 1.3.1 + dev: false + + /crypt/0.0.2: + resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} + dev: false + + /crypto-browserify/3.12.0: + resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} + dependencies: + browserify-cipher: 1.0.1 + browserify-sign: 4.2.1 + create-ecdh: 4.0.4 + create-hash: 1.2.0 + create-hmac: 1.1.7 + diffie-hellman: 5.0.3 + inherits: 2.0.4 + pbkdf2: 3.1.2 + public-encrypt: 4.0.3 + randombytes: 2.1.0 + randomfill: 1.0.4 + dev: false + + /crypto-random-string/2.0.0: + resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} + engines: {node: '>=8'} + dev: false + + /css-loader/1.0.0_webpack@4.20.2: + resolution: {integrity: sha512-tMXlTYf3mIMt3b0dDCOQFJiVvxbocJ5Ho577WiGPYPZcqVEO218L2iU22pDXzkTZCLDE+9AmGSUkWxeh/nZReA==} + engines: {node: '>= 6.9.0 <7.0.0 || >= 8.9.0'} + peerDependencies: + webpack: ^4.0.0 + dependencies: + babel-code-frame: 6.26.0 + css-selector-tokenizer: 0.7.3 + icss-utils: 2.1.0 + loader-utils: 1.4.2 + lodash.camelcase: 4.3.0 + postcss: 6.0.23 + postcss-modules-extract-imports: 1.2.1 + postcss-modules-local-by-default: 1.2.0 + postcss-modules-scope: 1.1.0 + postcss-modules-values: 1.3.0 + postcss-value-parser: 3.3.1 + source-list-map: 2.0.1 + webpack: 4.20.2_webpack-cli@3.3.12 + dev: false + + /css-loader/3.6.0_webpack@4.20.2: + resolution: {integrity: sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==} + engines: {node: '>= 8.9.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + camelcase: 5.3.1 + cssesc: 3.0.0 + icss-utils: 4.1.1 + loader-utils: 1.4.2 + normalize-path: 3.0.0 + postcss: 7.0.39 + postcss-modules-extract-imports: 2.0.0 + postcss-modules-local-by-default: 3.0.3 + postcss-modules-scope: 2.2.0 + postcss-modules-values: 3.0.0 + postcss-value-parser: 4.2.0 + schema-utils: 2.7.1 + semver: 6.3.0 + webpack: 4.20.2_webpack-cli@3.3.12 + dev: false + + /css-modules-loader-core/1.1.0: + resolution: {integrity: sha512-XWOBwgy5nwBn76aA+6ybUGL/3JBnCtBX9Ay9/OWIpzKYWlVHMazvJ+WtHumfi+xxdPF440cWK7JCYtt8xDifew==} + dependencies: + icss-replace-symbols: 1.1.0 + postcss: 6.0.1 + postcss-modules-extract-imports: 1.1.0 + postcss-modules-local-by-default: 1.2.0 + postcss-modules-scope: 1.1.0 + postcss-modules-values: 1.3.0 + dev: false + + /css-select/5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 5.0.3 + domutils: 3.0.1 + nth-check: 2.1.1 + dev: false + + /css-selector-tokenizer/0.7.3: + resolution: {integrity: sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==} + dependencies: + cssesc: 3.0.0 + fastparse: 1.1.2 + dev: false + + /css-what/6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + dev: false + + /cssesc/3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /csstype/3.1.1: + resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} + dev: false + + /cyclist/1.0.1: + resolution: {integrity: sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==} + dev: false + + /d3-array/2.12.1: + resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==} + dependencies: + internmap: 1.0.1 + dev: false + + /d3-color/1.4.1: + resolution: {integrity: sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==} + dev: false + + /d3-color/2.0.0: + resolution: {integrity: sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ==} + dev: false + + /d3-delaunay/5.3.0: + resolution: {integrity: sha512-amALSrOllWVLaHTnDLHwMIiz0d1bBu9gZXd1FiLfXf8sHcX9jrcj81TVZOqD4UX7MgBZZ07c8GxzEgBpJqc74w==} + dependencies: + delaunator: 4.0.1 + dev: false + + /d3-format/1.4.5: + resolution: {integrity: sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==} + dev: false + + /d3-format/2.0.0: + resolution: {integrity: sha512-Ab3S6XuE/Q+flY96HXT0jOXcM4EAClYFnRGY5zsjRGNy6qCYrQsMffs7cV5Q9xejb35zxW5hf/guKw34kvIKsA==} + dev: false + + /d3-hierarchy/1.1.9: + resolution: {integrity: sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==} + dev: false + + /d3-interpolate/1.4.0: + resolution: {integrity: sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==} + dependencies: + d3-color: 1.4.1 + dev: false + + /d3-interpolate/2.0.1: + resolution: {integrity: sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ==} + dependencies: + d3-color: 2.0.0 + dev: false + + /d3-path/1.0.9: + resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==} + dev: false + + /d3-scale-chromatic/1.5.0: + resolution: {integrity: sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==} + dependencies: + d3-color: 1.4.1 + d3-interpolate: 1.4.0 + dev: false + + /d3-scale/3.3.0: + resolution: {integrity: sha512-1JGp44NQCt5d1g+Yy+GeOnZP7xHo0ii8zsQp6PGzd+C1/dl0KGsp9A7Mxwp+1D1o4unbTTxVdU/ZOIEBoeZPbQ==} + dependencies: + d3-array: 2.12.1 + d3-format: 2.0.0 + d3-interpolate: 2.0.1 + d3-time: 2.1.1 + d3-time-format: 3.0.0 + dev: false + + /d3-shape/1.3.7: + resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==} + dependencies: + d3-path: 1.0.9 + dev: false + + /d3-time-format/2.3.0: + resolution: {integrity: sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==} + dependencies: + d3-time: 1.1.0 + dev: false + + /d3-time-format/3.0.0: + resolution: {integrity: sha512-UXJh6EKsHBTjopVqZBhFysQcoXSv/5yLONZvkQ5Kk3qbwiUYkdX17Xa1PT6U1ZWXGGfB1ey5L8dKMlFq2DO0Ag==} + dependencies: + d3-time: 2.1.1 + dev: false + + /d3-time/1.1.0: + resolution: {integrity: sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==} + dev: false + + /d3-time/2.1.1: + resolution: {integrity: sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ==} + dependencies: + d3-array: 2.12.1 + dev: false + + /dashdash/1.14.1: + resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} + engines: {node: '>=0.10'} + dependencies: + assert-plus: 1.0.0 + dev: false + + /data-uri-to-buffer/3.0.1: + resolution: {integrity: sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==} + engines: {node: '>= 6'} + dev: false + + /debug/2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + dev: false + + /debug/2.6.9_supports-color@6.1.0: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + supports-color: 6.1.0 + dev: false + + /debug/3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: false + + /debug/3.2.7_supports-color@6.1.0: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + supports-color: 6.1.0 + dev: false + + /debug/4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: false + + /debug/4.3.4_supports-color@6.1.0: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + supports-color: 6.1.0 + dev: false + + /decamelize/1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + dev: false + + /decode-uri-component/0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + dev: false + + /decompress-response/6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + dependencies: + mimic-response: 3.1.0 + dev: false + + /deep-eql/4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + dependencies: + type-detect: 4.0.8 + dev: false + + /deep-equal/1.1.1: + resolution: {integrity: sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==} + dependencies: + is-arguments: 1.1.1 + is-date-object: 1.0.5 + is-regex: 1.1.4 + object-is: 1.1.5 + object-keys: 1.1.1 + regexp.prototype.flags: 1.4.3 + dev: false + + /deep-extend/0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + dev: false + + /deep-is/0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: false + + /deepmerge/4.3.0: + resolution: {integrity: sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==} + engines: {node: '>=0.10.0'} + dev: false + + /default-gateway/4.2.0: + resolution: {integrity: sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==} + engines: {node: '>=6'} + dependencies: + execa: 1.0.0 + ip-regex: 2.1.0 + dev: false + + /default-user-agent/1.0.0: + resolution: {integrity: sha512-bDF7bg6OSNcSwFWPu4zYKpVkJZQYVrAANMYB8bc9Szem1D0yKdm4sa/rOCs2aC9+2GMqQ7KnwtZRvDhmLF0dXw==} + engines: {node: '>= 0.10.0'} + dependencies: + os-name: 1.0.3 + dev: false + + /define-lazy-prop/2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + dev: false + + /define-properties/1.2.0: + resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} + engines: {node: '>= 0.4'} + dependencies: + has-property-descriptors: 1.0.0 + object-keys: 1.1.1 + dev: false + + /define-property/0.2.5: + resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==} + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: 0.1.6 + dev: false + + /define-property/1.0.0: + resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==} + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: 1.0.2 + dev: false + + /define-property/2.0.2: + resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: 1.0.2 + isobject: 3.0.1 + dev: false + + /degenerator/3.0.2: + resolution: {integrity: sha512-c0mef3SNQo56t6urUU6tdQAs+ThoD0o9B9MJ8HEt7NQcGEILCRFqQb7ZbP9JAv+QF1Ky5plydhMR/IrqWDm+TQ==} + engines: {node: '>= 6'} + dependencies: + ast-types: 0.13.4 + escodegen: 1.14.3 + esprima: 4.0.1 + vm2: 3.9.13 + dev: false + + /del/4.1.1: + resolution: {integrity: sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==} + engines: {node: '>=6'} + dependencies: + '@types/glob': 7.2.0 + globby: 6.1.0 + is-path-cwd: 2.2.0 + is-path-in-cwd: 2.1.0 + p-map: 2.1.0 + pify: 4.0.1 + rimraf: 2.7.1 + dev: false + + /delaunator/4.0.1: + resolution: {integrity: sha512-WNPWi1IRKZfCt/qIDMfERkDp93+iZEmOxN2yy4Jg+Xhv8SLk2UTqqbe1sfiipn0and9QrE914/ihdx82Y/Giag==} + dev: false + + /delayed-stream/1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: false + + /delegates/1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + dev: false + + /denodeify/1.2.1: + resolution: {integrity: sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg==} + dev: false + + /denque/1.5.1: + resolution: {integrity: sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==} + engines: {node: '>=0.10'} + dev: false + + /depd/1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} + dev: false + + /depd/2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + dev: false + + /deprecation/2.3.1: + resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} + dev: false + + /des.js/1.0.1: + resolution: {integrity: sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==} + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + dev: false + + /destroy/1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dev: false + + /detect-file/1.0.0: + resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==} + engines: {node: '>=0.10.0'} + dev: false + + /detect-libc/2.0.1: + resolution: {integrity: sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==} + engines: {node: '>=8'} + dev: false + + /detect-node/2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + dev: false + + /diff/4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + dev: false + + /diffie-hellman/5.0.3: + resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} + dependencies: + bn.js: 4.12.0 + miller-rabin: 4.0.1 + randombytes: 2.1.0 + dev: false + + /digest-header/1.0.0: + resolution: {integrity: sha512-sRTuakZ2PkOUCuAaVv+SLjhr/hRf8ldZP0XnGEQ69RFGxmll5fVaMsnRXWKKK4XsUTnJf8+eRPSFNgE/lWa9wQ==} + engines: {node: '>= 8.0.0'} + dependencies: + utility: 1.17.0 + dev: false + + /dns-equal/1.0.0: + resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} + dev: false + + /dns-packet/1.3.4: + resolution: {integrity: sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==} + dependencies: + ip: 1.1.8 + safe-buffer: 5.2.1 + dev: false + + /dns-txt/2.0.2: + resolution: {integrity: sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ==} + dependencies: + buffer-indexof: 1.1.1 + dev: false + + /dom-helpers/3.4.0: + resolution: {integrity: sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==} + dependencies: + '@babel/runtime': 7.20.13 + dev: false + + /dom-serializer/2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.4.0 + dev: false + + /dom-walk/0.1.2: + resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} + dev: false + + /dom4/2.1.6: + resolution: {integrity: sha512-JkCVGnN4ofKGbjf5Uvc8mmxaATIErKQKSgACdBXpsQ3fY6DlIpAyWfiBSrGkttATssbDCp3psiAKWXk5gmjycA==} + dev: false + + /domain-browser/1.2.0: + resolution: {integrity: sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==} + engines: {node: '>=0.4', npm: '>=1.2'} + dev: false + + /domelementtype/2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + dev: false + + /domhandler/5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.3.0 + dev: false + + /domutils/3.0.1: + resolution: {integrity: sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==} + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + dev: false + + /dot-prop/5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} + dependencies: + is-obj: 2.0.0 + dev: false + + /dtrace-provider/0.8.8: + resolution: {integrity: sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==} + engines: {node: '>=0.10'} + requiresBuild: true + dependencies: + nan: 2.17.0 + dev: false + optional: true + + /duplexify/3.7.1: + resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==} + dependencies: + end-of-stream: 1.4.4 + inherits: 2.0.4 + readable-stream: 2.3.7 + stream-shift: 1.0.1 + dev: false + + /duplexify/4.1.2: + resolution: {integrity: sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==} + dependencies: + end-of-stream: 1.4.4 + inherits: 2.0.4 + readable-stream: 3.6.0 + stream-shift: 1.0.1 + dev: false + + /ecc-jsbn/0.1.2: + resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} + dependencies: + jsbn: 0.1.1 + safer-buffer: 2.1.2 + dev: false + + /ecdsa-sig-formatter/1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /editorconfig/0.15.3: + resolution: {integrity: sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==} + hasBin: true + dependencies: + commander: 2.20.3 + lru-cache: 4.1.5 + semver: 5.6.0 + sigmund: 1.0.1 + dev: false + + /ee-first/1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + dev: false + + /electron-to-chromium/1.4.296: + resolution: {integrity: sha512-i/6Q+Y9bluDa2a0NbMvdtG5TuS/1Fr3TKK8L+7UUL9QjRS5iFJzCC3r70xjyOnLiYG8qGV4/mMpe6HuAbdJW4w==} + dev: false + + /elliptic/6.5.4: + resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + dev: false + + /emoji-regex/7.0.3: + resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} + dev: false + + /emoji-regex/8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: false + + /emojis-list/3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + dev: false + + /enabled/2.0.0: + resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} + dev: false + + /encodeurl/1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + dev: false + + /encoding/0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + dependencies: + iconv-lite: 0.6.3 + dev: false + + /end-of-stream/1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + dependencies: + once: 1.4.0 + dev: false + + /enhanced-resolve/4.5.0: + resolution: {integrity: sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==} + engines: {node: '>=6.9.0'} + dependencies: + graceful-fs: 4.2.10 + memory-fs: 0.5.0 + tapable: 1.1.3 + dev: false + + /ent/2.2.0: + resolution: {integrity: sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==} + dev: false + + /entities/2.0.3: + resolution: {integrity: sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==} + dev: false + + /entities/2.1.0: + resolution: {integrity: sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==} + dev: false + + /entities/4.4.0: + resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==} + engines: {node: '>=0.12'} + dev: false + + /envify/4.1.0: + resolution: {integrity: sha512-IKRVVoAYr4pIx4yIWNsz9mOsboxlNXiu7TNBnem/K/uTHdkyzXWDzHCK7UTolqBbgaBz0tQHsD3YNls0uIIjiw==} + hasBin: true + dependencies: + esprima: 4.0.1 + through: 2.3.8 + dev: false + + /errno/0.1.8: + resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} + hasBin: true + dependencies: + prr: 1.0.1 + dev: false + + /error-ex/1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + dev: false + + /es-abstract/1.21.1: + resolution: {integrity: sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + es-set-tostringtag: 2.0.1 + es-to-primitive: 1.2.1 + function-bind: 1.1.1 + function.prototype.name: 1.1.5 + get-intrinsic: 1.2.0 + get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 + has: 1.0.3 + has-property-descriptors: 1.0.0 + has-proto: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.5 + is-array-buffer: 3.0.1 + is-callable: 1.2.7 + is-negative-zero: 2.0.2 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + is-string: 1.0.7 + is-typed-array: 1.1.10 + is-weakref: 1.0.2 + object-inspect: 1.12.3 + object-keys: 1.1.1 + object.assign: 4.1.4 + regexp.prototype.flags: 1.4.3 + safe-regex-test: 1.0.0 + string.prototype.trimend: 1.0.6 + string.prototype.trimstart: 1.0.6 + typed-array-length: 1.0.4 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.9 + dev: false + + /es-aggregate-error/1.0.9: + resolution: {integrity: sha512-fvnX40sb538wdU6r4s35cq4EY6Lr09Upj40BEVem4LEsuW8XgQep9yD5Q1U2KftokNp1rWODFJ2qwZSsAjFpbg==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.0 + es-abstract: 1.21.1 + function-bind: 1.1.1 + functions-have-names: 1.2.3 + get-intrinsic: 1.2.0 + globalthis: 1.0.3 + has-property-descriptors: 1.0.0 + dev: false + + /es-set-tostringtag/2.0.1: + resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.0 + has: 1.0.3 + has-tostringtag: 1.0.0 + dev: false + + /es-to-primitive/1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: false + + /es6-promise/4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + dev: false + + /escalade/3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: false + + /escape-html/1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + dev: false + + /escape-string-regexp/1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + dev: false + + /escape-string-regexp/2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + dev: false + + /escodegen/1.14.3: + resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} + engines: {node: '>=4.0'} + hasBin: true + dependencies: + esprima: 4.0.1 + estraverse: 4.3.0 + esutils: 2.0.3 + optionator: 0.8.3 + optionalDependencies: + source-map: 0.6.1 + dev: false + + /eslint-scope/4.0.3: + resolution: {integrity: sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==} + engines: {node: '>=4.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: false + + /eslint-visitor-keys/1.3.0: + resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} + engines: {node: '>=4'} + dev: false + + /eslint-visitor-keys/3.3.0: + resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: false + + /espree/7.3.1: + resolution: {integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + acorn: 7.4.1 + acorn-jsx: 5.3.2_acorn@7.4.1 + eslint-visitor-keys: 1.3.0 + dev: false + + /espree/9.4.1: + resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.8.2 + acorn-jsx: 5.3.2_acorn@8.8.2 + eslint-visitor-keys: 3.3.0 + dev: false + + /esprima/4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /esrecurse/4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: false + + /estraverse/4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + dev: false + + /estraverse/5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: false + + /estree-walker/1.0.1: + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + dev: false + + /esutils/2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: false + + /etag/1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + dev: false + + /event-target-shim/5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + dev: false + + /eventemitter3/4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + dev: false + + /events/1.1.1: + resolution: {integrity: sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==} + engines: {node: '>=0.4.x'} + dev: false + + /events/3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + dev: false + + /eventsource/2.0.2: + resolution: {integrity: sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==} + engines: {node: '>=12.0.0'} + dev: false + + /evp_bytestokey/1.0.3: + resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} + dependencies: + md5.js: 1.3.5 + safe-buffer: 5.2.1 + dev: false + + /execa/1.0.0: + resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} + engines: {node: '>=6'} + dependencies: + cross-spawn: 6.0.5 + get-stream: 4.1.0 + is-stream: 1.1.0 + npm-run-path: 2.0.2 + p-finally: 1.0.0 + signal-exit: 3.0.7 + strip-eof: 1.0.0 + dev: false + + /expand-brackets/2.1.4: + resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==} + engines: {node: '>=0.10.0'} + dependencies: + debug: 2.6.9 + define-property: 0.2.5 + extend-shallow: 2.0.1 + posix-character-classes: 0.1.1 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /expand-brackets/2.1.4_supports-color@6.1.0: + resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==} + engines: {node: '>=0.10.0'} + dependencies: + debug: 2.6.9_supports-color@6.1.0 + define-property: 0.2.5 + extend-shallow: 2.0.1 + posix-character-classes: 0.1.1 + regex-not: 1.0.2 + snapdragon: 0.8.2_supports-color@6.1.0 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /expand-template/2.0.3: + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} + engines: {node: '>=6'} + dev: false + + /expand-tilde/2.0.2: + resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} + engines: {node: '>=0.10.0'} + dependencies: + homedir-polyfill: 1.0.3 + dev: false + + /express/4.18.2: + resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} + engines: {node: '>= 0.10.0'} + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.1 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.5.0 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.2.0 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.1 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: 2.0.7 + qs: 6.11.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.18.0 + serve-static: 1.15.0 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /express/4.18.2_supports-color@6.1.0: + resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} + engines: {node: '>= 0.10.0'} + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.1_supports-color@6.1.0 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.5.0 + cookie-signature: 1.0.6 + debug: 2.6.9_supports-color@6.1.0 + depd: 2.0.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.2.0_supports-color@6.1.0 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.1 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: 2.0.7 + qs: 6.11.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.18.0_supports-color@6.1.0 + serve-static: 1.15.0_supports-color@6.1.0 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /extend-shallow/2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} + dependencies: + is-extendable: 0.1.1 + dev: false + + /extend-shallow/3.0.2: + resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==} + engines: {node: '>=0.10.0'} + dependencies: + assign-symbols: 1.0.0 + is-extendable: 1.0.1 + dev: false + + /extend/3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + dev: false + + /extglob/2.0.4: + resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} + engines: {node: '>=0.10.0'} + dependencies: + array-unique: 0.3.2 + define-property: 1.0.0 + expand-brackets: 2.1.4 + extend-shallow: 2.0.1 + fragment-cache: 0.2.1 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /extglob/2.0.4_supports-color@6.1.0: + resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} + engines: {node: '>=0.10.0'} + dependencies: + array-unique: 0.3.2 + define-property: 1.0.0 + expand-brackets: 2.1.4_supports-color@6.1.0 + extend-shallow: 2.0.1 + fragment-cache: 0.2.1 + regex-not: 1.0.2 + snapdragon: 0.8.2_supports-color@6.1.0 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /extracted-loader/1.0.4: + resolution: {integrity: sha512-G8A0hT/WCWIjesZm7BwbWdST5dQ08GNnCpTrJT/k/FYzuiJwlV1gyWjnuoizOzAR4jpEYXG2J++JyEKN/EB26Q==} + dev: false + + /extsprintf/1.3.0: + resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} + engines: {'0': node >=0.6.0} + dev: false + + /fast-deep-equal/3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: false + + /fast-json-stable-stringify/2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: false + + /fast-levenshtein/2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: false + + /fast-text-encoding/1.0.6: + resolution: {integrity: sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==} + dev: false + + /fastparse/1.1.2: + resolution: {integrity: sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==} + dev: false + + /fault/1.0.4: + resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} + dependencies: + format: 0.2.2 + dev: false + + /faye-websocket/0.11.4: + resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} + engines: {node: '>=0.8.0'} + dependencies: + websocket-driver: 0.7.4 + dev: false + + /fbjs/0.8.18: + resolution: {integrity: sha512-EQaWFK+fEPSoibjNy8IxUtaFOMXcWsY0JaVrQoZR9zC8N2Ygf9iDITPWjUTVIax95b6I742JFLqASHfsag/vKA==} + dependencies: + core-js: 1.2.7 + isomorphic-fetch: 2.2.1 + loose-envify: 1.4.0 + object-assign: 4.1.1 + promise: 7.3.1 + setimmediate: 1.0.5 + ua-parser-js: 0.7.33 + dev: false + + /fd-slicer/1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + dependencies: + pend: 1.2.0 + dev: false + + /fecha/4.2.3: + resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} + dev: false + + /file-loader/6.2.0_webpack@4.20.2: + resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} + engines: {node: '>= 10.13.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + loader-utils: 2.0.4 + schema-utils: 3.1.1 + webpack: 4.20.2_webpack-cli@3.3.12 + dev: false + + /file-uri-to-path/1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + requiresBuild: true + dev: false + optional: true + + /file-uri-to-path/2.0.0: + resolution: {integrity: sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==} + engines: {node: '>= 6'} + dev: false + + /fill-range/4.0.0: + resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 2.0.1 + is-number: 3.0.0 + repeat-string: 1.6.1 + to-regex-range: 2.1.1 + dev: false + + /fill-range/7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: false + + /finalhandler/1.2.0: + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /finalhandler/1.2.0_supports-color@6.1.0: + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} + dependencies: + debug: 2.6.9_supports-color@6.1.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /find-cache-dir/1.0.0: + resolution: {integrity: sha512-46TFiBOzX7xq/PcSWfFwkyjpemdRnMe31UQF+os0y+1W3k95f6R4SEt02Hj4p3X0Mir9gfrkmOtshFidS0VPUg==} + engines: {node: '>=4'} + dependencies: + commondir: 1.0.1 + make-dir: 1.3.0 + pkg-dir: 2.0.0 + dev: false + + /find-cache-dir/3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 + dev: false + + /find-up/2.1.0: + resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} + engines: {node: '>=4'} + dependencies: + locate-path: 2.0.0 + dev: false + + /find-up/3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} + dependencies: + locate-path: 3.0.0 + dev: false + + /find-up/4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: false + + /findup-sync/3.0.0_supports-color@6.1.0: + resolution: {integrity: sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==} + engines: {node: '>= 0.10'} + dependencies: + detect-file: 1.0.0 + is-glob: 4.0.3 + micromatch: 3.1.10_supports-color@6.1.0 + resolve-dir: 1.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /flush-write-stream/1.1.1: + resolution: {integrity: sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==} + dependencies: + inherits: 2.0.4 + readable-stream: 2.3.7 + dev: false + + /fn.name/1.1.0: + resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} + dev: false + + /follow-redirects/1.15.2: + resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: false + + /follow-redirects/1.15.2_debug@3.2.7: + resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dependencies: + debug: 3.2.7 + dev: false + + /follow-redirects/1.15.2_debug@4.3.4: + resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dependencies: + debug: 4.3.4_supports-color@6.1.0 + dev: false + + /for-each/0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: false + + /for-in/1.0.2: + resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} + engines: {node: '>=0.10.0'} + dev: false + + /foreach/2.0.6: + resolution: {integrity: sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==} + dev: false + + /forever-agent/0.6.1: + resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} + dev: false + + /form-data/2.3.3: + resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} + engines: {node: '>= 0.12'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: false + + /form-data/2.5.1: + resolution: {integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==} + engines: {node: '>= 0.12'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: false + + /form-data/3.0.1: + resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: false + + /form-data/4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: false + + /format/0.2.2: + resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} + engines: {node: '>=0.4.x'} + dev: false + + /formstream/1.1.1: + resolution: {integrity: sha512-yHRxt3qLFnhsKAfhReM4w17jP+U1OlhUjnKPPtonwKbIJO7oBP0MvoxkRUwb8AU9n0MIkYy5X5dK6pQnbj+R2Q==} + dependencies: + destroy: 1.2.0 + mime: 2.6.0 + pause-stream: 0.0.11 + dev: false + + /forwarded/0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + dev: false + + /fragment-cache/0.2.1: + resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==} + engines: {node: '>=0.10.0'} + dependencies: + map-cache: 0.2.2 + dev: false + + /fresh/0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + dev: false + + /from2/2.3.0: + resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==} + dependencies: + inherits: 2.0.4 + readable-stream: 2.3.7 + dev: false + + /front-matter/4.0.2: + resolution: {integrity: sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==} + dependencies: + js-yaml: 3.14.1 + dev: false + + /fs-constants/1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + dev: false + + /fs-extra/8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + dependencies: + graceful-fs: 4.2.10 + jsonfile: 4.0.0 + universalify: 0.1.2 + dev: false + + /fs-extra/9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.10 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: false + + /fs-minipass/2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + dev: false + + /fs-write-stream-atomic/1.0.10: + resolution: {integrity: sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==} + dependencies: + graceful-fs: 4.2.10 + iferr: 0.1.5 + imurmurhash: 0.1.4 + readable-stream: 2.3.7 + dev: false + + /fs.realpath/1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: false + + /fsevents/1.2.13: + resolution: {integrity: sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==} + engines: {node: '>= 4.0'} + os: [darwin] + deprecated: fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2. + requiresBuild: true + dependencies: + bindings: 1.5.0 + nan: 2.17.0 + dev: false + optional: true + + /fsevents/2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /ftp/0.3.10: + resolution: {integrity: sha512-faFVML1aBx2UoDStmLwv2Wptt4vw5x03xxX172nhA5Y5HBshW5JweqQ2W4xL4dezQTG8inJsuYcpPHHU3X5OTQ==} + engines: {node: '>=0.8.0'} + dependencies: + readable-stream: 1.1.14 + xregexp: 2.0.0 + dev: false + + /function-bind/1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + dev: false + + /function.prototype.name/1.1.5: + resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.1 + functions-have-names: 1.2.3 + dev: false + + /functions-have-names/1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: false + + /gauge/3.0.2: + resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} + engines: {node: '>=10'} + dependencies: + aproba: 2.0.0 + color-support: 1.1.3 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + object-assign: 4.1.1 + signal-exit: 3.0.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wide-align: 1.1.5 + dev: false + + /gaxios/4.3.3: + resolution: {integrity: sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==} + engines: {node: '>=10'} + dependencies: + abort-controller: 3.0.0 + extend: 3.0.2 + https-proxy-agent: 5.0.1 + is-stream: 2.0.1 + node-fetch: 2.6.9 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /gcp-metadata/4.3.1: + resolution: {integrity: sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==} + engines: {node: '>=10'} + dependencies: + gaxios: 4.3.3 + json-bigint: 1.0.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /generic-pool/3.9.0: + resolution: {integrity: sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==} + engines: {node: '>= 4'} + dev: false + + /get-caller-file/1.0.3: + resolution: {integrity: sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==} + dev: false + + /get-caller-file/2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: false + + /get-func-name/2.0.0: + resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} + dev: false + + /get-intrinsic/1.2.0: + resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} + dependencies: + function-bind: 1.1.1 + has: 1.0.3 + has-symbols: 1.0.3 + dev: false + + /get-node-dimensions/1.2.1: + resolution: {integrity: sha512-2MSPMu7S1iOTL+BOa6K1S62hB2zUAYNF/lV0gSVlOaacd087lc6nR1H1r0e3B1CerTo+RceOmi1iJW+vp21xcQ==} + dev: false + + /get-port/5.1.1: + resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} + engines: {node: '>=8'} + dev: false + + /get-stream/4.1.0: + resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} + engines: {node: '>=6'} + dependencies: + pump: 3.0.0 + dev: false + + /get-symbol-description/1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + dev: false + + /get-uri/3.0.2: + resolution: {integrity: sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==} + engines: {node: '>= 6'} + dependencies: + '@tootallnate/once': 1.1.2 + data-uri-to-buffer: 3.0.1 + debug: 4.3.4 + file-uri-to-path: 2.0.0 + fs-extra: 8.1.0 + ftp: 0.3.10 + transitivePeerDependencies: + - supports-color + dev: false + + /get-value/2.0.6: + resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} + engines: {node: '>=0.10.0'} + dev: false + + /getpass/0.1.7: + resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} + dependencies: + assert-plus: 1.0.0 + dev: false + + /github-from-package/0.0.0: + resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} + dev: false + + /github-slugger/1.5.0: + resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} + dev: false + + /glob-parent/3.1.0: + resolution: {integrity: sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==} + dependencies: + is-glob: 3.1.0 + path-dirname: 1.0.2 + dev: false + + /glob-parent/5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: false + + /glob/6.0.4: + resolution: {integrity: sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==} + dependencies: + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: false + optional: true + + /glob/7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: false + + /glob/8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + dev: false + + /global-modules/1.0.0: + resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} + engines: {node: '>=0.10.0'} + dependencies: + global-prefix: 1.0.2 + is-windows: 1.0.2 + resolve-dir: 1.0.1 + dev: false + + /global-modules/2.0.0: + resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} + engines: {node: '>=6'} + dependencies: + global-prefix: 3.0.0 + dev: false + + /global-prefix/1.0.2: + resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} + engines: {node: '>=0.10.0'} + dependencies: + expand-tilde: 2.0.2 + homedir-polyfill: 1.0.3 + ini: 1.3.8 + is-windows: 1.0.2 + which: 1.3.1 + dev: false + + /global-prefix/3.0.0: + resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} + engines: {node: '>=6'} + dependencies: + ini: 1.3.8 + kind-of: 6.0.3 + which: 1.3.1 + dev: false + + /global/4.4.0: + resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} + dependencies: + min-document: 2.19.0 + process: 0.11.10 + dev: false + + /globals/9.18.0: + resolution: {integrity: sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==} + engines: {node: '>=0.10.0'} + dev: false + + /globalthis/1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.0 + dev: false + + /globby/6.1.0: + resolution: {integrity: sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==} + engines: {node: '>=0.10.0'} + dependencies: + array-union: 1.0.2 + glob: 7.2.3 + object-assign: 4.1.1 + pify: 2.3.0 + pinkie-promise: 2.0.1 + dev: false + + /google-auth-library/7.14.1: + resolution: {integrity: sha512-5Rk7iLNDFhFeBYc3s8l1CqzbEBcdhwR193RlD4vSNFajIcINKI8W8P0JLmBpwymHqqWbX34pJDQu39cSy/6RsA==} + engines: {node: '>=10'} + dependencies: + arrify: 2.0.1 + base64-js: 1.5.1 + ecdsa-sig-formatter: 1.0.11 + fast-text-encoding: 1.0.6 + gaxios: 4.3.3 + gcp-metadata: 4.3.1 + gtoken: 5.3.2 + jws: 4.0.0 + lru-cache: 6.0.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /google-p12-pem/3.1.4: + resolution: {integrity: sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==} + engines: {node: '>=10'} + hasBin: true + dependencies: + node-forge: 1.3.1 + dev: false + + /google-protobuf/3.21.2: + resolution: {integrity: sha512-3MSOYFO5U9mPGikIYCzK0SaThypfGgS6bHqrUGXG3DPHCrb+txNqeEcns1W0lkGfk0rCyNXm7xB9rMxnCiZOoA==} + dev: false + + /gopd/1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.0 + dev: false + + /graceful-fs/4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + dev: false + + /grpc-web-client/0.5.0_7ouq2zvsbdf2dwgb66cbbrd6aq: + resolution: {integrity: sha512-AcLecuqaDp5STYXGViTQmNTCoZVfM6gi3+hvfTGXGP5YTIimASesNi39jnP8dox3x8QBelMWDdOck5/4UJaZdg==} + deprecated: This package has been deprecated in favor of @improbable-eng/grpc-web + peerDependencies: + '@types/google-protobuf': ^3.2.5 + google-protobuf: ^3.2.0 + dependencies: + '@types/google-protobuf': 3.15.6 + browser-headers: 0.4.1 + google-protobuf: 3.21.2 + dev: false + + /grpc/1.24.11: + resolution: {integrity: sha512-8/AQdFCzCeCDWW3SoaMNp6ccbRvTQEH1O1u1uFtt29eWsg5gSZCJ3m6fbkduEIh3smY7WAPP+LgVJ5n3nZRxcA==} + engines: {node: '>=4'} + deprecated: This library will not receive further updates other than security fixes. We recommend using @grpc/grpc-js instead. + requiresBuild: true + dependencies: + '@mapbox/node-pre-gyp': 1.0.10 + '@types/bytebuffer': 5.0.44 + lodash.camelcase: 4.3.0 + lodash.clone: 4.5.0 + nan: 2.17.0 + protobufjs: 5.0.3 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /gtoken/5.3.2: + resolution: {integrity: sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==} + engines: {node: '>=10'} + dependencies: + gaxios: 4.3.3 + google-p12-pem: 3.1.4 + jws: 4.0.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /gud/1.0.0: + resolution: {integrity: sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==} + dev: false + + /handle-thing/2.0.1: + resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} + dev: false + + /handlebars/4.7.7: + resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==} + engines: {node: '>=0.4.7'} + hasBin: true + dependencies: + minimist: 1.2.8 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.17.4 + dev: false + + /handy-redis/1.8.3: + resolution: {integrity: sha512-TMC47NAaKuUC5jDMlCLNvNDIiNhyUO/ONEM7Xsbv3kiTwR9E1hsx7zctPH4fEoSKvro2gPs8bBb4+Nwscigz2A==} + engines: {node: '>= 8.0.0'} + dependencies: + '@types/redis': 2.8.32 + redis: 3.1.2 + dev: false + + /har-schema/2.0.0: + resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} + engines: {node: '>=4'} + dev: false + + /har-validator/5.1.5: + resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} + engines: {node: '>=6'} + deprecated: this library is no longer supported + dependencies: + ajv: 6.12.6 + har-schema: 2.0.0 + dev: false + + /has-ansi/2.0.0: + resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-regex: 2.1.1 + dev: false + + /has-bigints/1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: false + + /has-flag/1.0.0: + resolution: {integrity: sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==} + engines: {node: '>=0.10.0'} + dev: false + + /has-flag/3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + dev: false + + /has-flag/4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: false + + /has-property-descriptors/1.0.0: + resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + dependencies: + get-intrinsic: 1.2.0 + dev: false + + /has-proto/1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + dev: false + + /has-symbols/1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: false + + /has-tostringtag/1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: false + + /has-unicode/2.0.1: + resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} + dev: false + + /has-value/0.3.1: + resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} + engines: {node: '>=0.10.0'} + dependencies: + get-value: 2.0.6 + has-values: 0.1.4 + isobject: 2.1.0 + dev: false + + /has-value/1.0.0: + resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==} + engines: {node: '>=0.10.0'} + dependencies: + get-value: 2.0.6 + has-values: 1.0.0 + isobject: 3.0.1 + dev: false + + /has-values/0.1.4: + resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==} + engines: {node: '>=0.10.0'} + dev: false + + /has-values/1.0.0: + resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-number: 3.0.0 + kind-of: 4.0.0 + dev: false + + /has/1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: 1.1.1 + dev: false + + /hash-base/3.1.0: + resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} + engines: {node: '>=4'} + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.0 + safe-buffer: 5.2.1 + dev: false + + /hash-stream-validation/0.2.4: + resolution: {integrity: sha512-Gjzu0Xn7IagXVkSu9cSFuK1fqzwtLwFhNhVL8IFJijRNMgUttFbBSIAzKuSIrsFMO1+g1RlsoN49zPIbwPDMGQ==} + dev: false + + /hash.js/1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + dev: false + + /hast-to-hyperscript/9.0.1: + resolution: {integrity: sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==} + dependencies: + '@types/unist': 2.0.6 + comma-separated-tokens: 1.0.8 + property-information: 5.6.0 + space-separated-tokens: 1.1.5 + style-to-object: 0.3.0 + unist-util-is: 4.1.0 + web-namespaces: 1.1.4 + dev: false + + /hast-util-from-parse5/6.0.1: + resolution: {integrity: sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==} + dependencies: + '@types/parse5': 5.0.3 + hastscript: 6.0.0 + property-information: 5.6.0 + vfile: 4.2.1 + vfile-location: 3.2.0 + web-namespaces: 1.1.4 + dev: false + + /hast-util-has-property/1.0.4: + resolution: {integrity: sha512-ghHup2voGfgFoHMGnaLHOjbYFACKrRh9KFttdCzMCbFoBMJXiNi2+XTrPP8+q6cDJM/RSqlCfVWrjp1H201rZg==} + dev: false + + /hast-util-heading-rank/1.0.1: + resolution: {integrity: sha512-P6Hq7RCky9syMevlrN90QWpqWDXCxwIVOfQR2rK6P4GpY4bqjKEuCzoWSRORZ7vz+VgRpLnXimh+mkwvVFjbyQ==} + dev: false + + /hast-util-parse-selector/2.2.5: + resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==} + dev: false + + /hast-util-raw/6.1.0: + resolution: {integrity: sha512-5FoZLDHBpka20OlZZ4I/+RBw5piVQ8iI1doEvffQhx5CbCyTtP8UCq8Tw6NmTAMtXgsQxmhW7Ly8OdFre5/YMQ==} + dependencies: + '@types/hast': 2.3.4 + hast-util-from-parse5: 6.0.1 + hast-util-to-parse5: 6.0.0 + html-void-elements: 1.0.5 + parse5: 6.0.1 + unist-util-position: 3.1.0 + unist-util-visit: 2.0.3 + vfile: 4.2.1 + web-namespaces: 1.1.4 + xtend: 4.0.2 + zwitch: 1.0.5 + dev: false + + /hast-util-to-parse5/6.0.0: + resolution: {integrity: sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==} + dependencies: + hast-to-hyperscript: 9.0.1 + property-information: 5.6.0 + web-namespaces: 1.1.4 + xtend: 4.0.2 + zwitch: 1.0.5 + dev: false + + /hast-util-to-string/1.0.4: + resolution: {integrity: sha512-eK0MxRX47AV2eZ+Lyr18DCpQgodvaS3fAQO2+b9Two9F5HEoRPhiUMNzoXArMJfZi2yieFzUBMRl3HNJ3Jus3w==} + dev: false + + /hastscript/6.0.0: + resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==} + dependencies: + '@types/hast': 2.3.4 + comma-separated-tokens: 1.0.8 + hast-util-parse-selector: 2.2.5 + property-information: 5.6.0 + space-separated-tokens: 1.1.5 + dev: false + + /highlight.js/10.7.3: + resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + dev: false + + /history/3.3.0: + resolution: {integrity: sha512-ABLnJwKEZGXGqWsXaKYD8NNle49ZbKs1WEBlxrFsQ8dIudZpO5NJaH8WJOqh5lXVhAq7bHksfirrobBmrT7qBw==} + dependencies: + invariant: 2.2.4 + loose-envify: 1.4.0 + query-string: 4.3.4 + warning: 3.0.0 + dev: false + + /hmac-drbg/1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + dev: false + + /hoist-non-react-statics/2.5.5: + resolution: {integrity: sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==} + dev: false + + /hoist-non-react-statics/3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + dependencies: + react-is: 16.13.1 + dev: false + + /homedir-polyfill/1.0.3: + resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} + engines: {node: '>=0.10.0'} + dependencies: + parse-passwd: 1.0.0 + dev: false + + /hosted-git-info/4.1.0: + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} + engines: {node: '>=10'} + dependencies: + lru-cache: 6.0.0 + dev: false + + /hpack.js/2.1.6: + resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} + dependencies: + inherits: 2.0.4 + obuf: 1.1.2 + readable-stream: 2.3.7 + wbuf: 1.7.3 + dev: false + + /html-entities/1.4.0: + resolution: {integrity: sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==} + dev: false + + /html-void-elements/1.0.5: + resolution: {integrity: sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==} + dev: false + + /htmlparser2/8.0.1: + resolution: {integrity: sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==} + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.0.1 + entities: 4.4.0 + dev: false + + /http-deceiver/1.2.7: + resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} + dev: false + + /http-errors/1.6.3: + resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} + engines: {node: '>= 0.6'} + dependencies: + depd: 1.1.2 + inherits: 2.0.3 + setprototypeof: 1.1.0 + statuses: 1.5.0 + dev: false + + /http-errors/2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + dev: false + + /http-parser-js/0.5.8: + resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} + dev: false + + /http-proxy-agent/4.0.1: + resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} + engines: {node: '>= 6'} + dependencies: + '@tootallnate/once': 1.1.2 + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /http-proxy-agent/5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} + dependencies: + '@tootallnate/once': 2.0.0 + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /http-proxy-middleware/0.19.1_tmpgdztspuwvsxzgjkhoqk7duq: + resolution: {integrity: sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==} + engines: {node: '>=4.0.0'} + dependencies: + http-proxy: 1.18.1_debug@4.3.4 + is-glob: 4.0.3 + lodash: 4.17.21 + micromatch: 3.1.10_supports-color@6.1.0 + transitivePeerDependencies: + - debug + - supports-color + dev: false + + /http-proxy-middleware/1.3.1: + resolution: {integrity: sha512-13eVVDYS4z79w7f1+NPllJtOQFx/FdUW4btIvVRMaRlUY9VGstAbo5MOhLEuUgZFRHn3x50ufn25zkj/boZnEg==} + engines: {node: '>=8.0.0'} + dependencies: + '@types/http-proxy': 1.17.9 + http-proxy: 1.18.1 + is-glob: 4.0.3 + is-plain-obj: 3.0.0 + micromatch: 4.0.5 + transitivePeerDependencies: + - debug + dev: false + + /http-proxy/1.18.1: + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} + dependencies: + eventemitter3: 4.0.7 + follow-redirects: 1.15.2_debug@3.2.7 + requires-port: 1.0.0 + transitivePeerDependencies: + - debug + dev: false + + /http-proxy/1.18.1_debug@4.3.4: + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} + dependencies: + eventemitter3: 4.0.7 + follow-redirects: 1.15.2_debug@4.3.4 + requires-port: 1.0.0 + transitivePeerDependencies: + - debug + dev: false + + /http-signature/1.2.0: + resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} + engines: {node: '>=0.8', npm: '>=1.3.7'} + dependencies: + assert-plus: 1.0.0 + jsprim: 1.4.2 + sshpk: 1.17.0 + dev: false + + /https-browserify/1.0.0: + resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} + dev: false + + /https-proxy-agent/5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /humanize-ms/1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + dependencies: + ms: 2.1.3 + dev: false + + /iconv-lite/0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: false + + /iconv-lite/0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: false + + /icss-replace-symbols/1.1.0: + resolution: {integrity: sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==} + dev: false + + /icss-utils/2.1.0: + resolution: {integrity: sha512-bsVoyn/1V4R1kYYjLcWLedozAM4FClZUdjE9nIr8uWY7xs78y9DATgwz2wGU7M+7z55KenmmTkN2DVJ7bqzjAA==} + dependencies: + postcss: 6.0.23 + dev: false + + /icss-utils/4.1.1: + resolution: {integrity: sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==} + engines: {node: '>= 6'} + dependencies: + postcss: 7.0.39 + dev: false + + /ieee754/1.1.13: + resolution: {integrity: sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==} + dev: false + + /ieee754/1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: false + + /iferr/0.1.5: + resolution: {integrity: sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==} + dev: false + + /ignore-loader/0.1.2: + resolution: {integrity: sha512-yOJQEKrNwoYqrWLS4DcnzM7SEQhRKis5mB+LdKKh4cPmGYlLPR0ozRzHV5jmEk2IxptqJNQA5Cc0gw8Fj12bXA==} + dev: false + + /import-cwd/2.1.0: + resolution: {integrity: sha512-Ew5AZzJQFqrOV5BTW3EIoHAnoie1LojZLXKcCQ/yTRyVZosBhK1x1ViYjHGf5pAFOq8ZyChZp6m/fSN7pJyZtg==} + engines: {node: '>=4'} + dependencies: + import-from: 2.1.0 + dev: false + + /import-fresh/2.0.0: + resolution: {integrity: sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==} + engines: {node: '>=4'} + dependencies: + caller-path: 2.0.0 + resolve-from: 3.0.0 + dev: false + + /import-from/2.1.0: + resolution: {integrity: sha512-0vdnLL2wSGnhlRmzHJAg5JHjt1l2vYhzJ7tNLGbeVg0fse56tpGaH0uzH+r9Slej+BSXXEHvBKDEnVSLLE9/+w==} + engines: {node: '>=4'} + dependencies: + resolve-from: 3.0.0 + dev: false + + /import-local/2.0.0: + resolution: {integrity: sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==} + engines: {node: '>=6'} + hasBin: true + dependencies: + pkg-dir: 3.0.0 + resolve-cwd: 2.0.0 + dev: false + + /imurmurhash/0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: false + + /inflight/1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: false + + /inherits/2.0.1: + resolution: {integrity: sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==} + dev: false + + /inherits/2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} + dev: false + + /inherits/2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: false + + /ini/1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + dev: false + + /inline-style-parser/0.1.1: + resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} + dev: false + + /internal-ip/4.3.0: + resolution: {integrity: sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==} + engines: {node: '>=6'} + dependencies: + default-gateway: 4.2.0 + ipaddr.js: 1.9.1 + dev: false + + /internal-slot/1.0.5: + resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.0 + has: 1.0.3 + side-channel: 1.0.4 + dev: false + + /internmap/1.0.1: + resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} + dev: false + + /interpret/1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} + dev: false + + /invariant/2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + dependencies: + loose-envify: 1.4.0 + dev: false + + /invert-kv/1.0.0: + resolution: {integrity: sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==} + engines: {node: '>=0.10.0'} + dev: false + + /ip-regex/2.1.0: + resolution: {integrity: sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==} + engines: {node: '>=4'} + dev: false + + /ip/1.1.8: + resolution: {integrity: sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==} + dev: false + + /ip/2.0.0: + resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} + dev: false + + /ipaddr.js/1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + dev: false + + /is-absolute-url/3.0.3: + resolution: {integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==} + engines: {node: '>=8'} + dev: false + + /is-accessor-descriptor/0.1.6: + resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: false + + /is-accessor-descriptor/1.0.0: + resolution: {integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 6.0.3 + dev: false + + /is-alphabetical/1.0.4: + resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} + dev: false + + /is-alphanumerical/1.0.4: + resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} + dependencies: + is-alphabetical: 1.0.4 + is-decimal: 1.0.4 + dev: false + + /is-arguments/1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: false + + /is-array-buffer/3.0.1: + resolution: {integrity: sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + is-typed-array: 1.1.10 + dev: false + + /is-arrayish/0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: false + + /is-arrayish/0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + dev: false + + /is-bigint/1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + dev: false + + /is-binary-path/1.0.1: + resolution: {integrity: sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==} + engines: {node: '>=0.10.0'} + dependencies: + binary-extensions: 1.13.1 + dev: false + + /is-binary-path/2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: false + + /is-boolean-object/1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: false + + /is-buffer/1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + dev: false + + /is-buffer/2.0.5: + resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} + engines: {node: '>=4'} + dev: false + + /is-callable/1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: false + + /is-core-module/2.11.0: + resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} + dependencies: + has: 1.0.3 + dev: false + + /is-data-descriptor/0.1.4: + resolution: {integrity: sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: false + + /is-data-descriptor/1.0.0: + resolution: {integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 6.0.3 + dev: false + + /is-date-object/1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: false + + /is-decimal/1.0.4: + resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} + dev: false + + /is-descriptor/0.1.6: + resolution: {integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==} + engines: {node: '>=0.10.0'} + dependencies: + is-accessor-descriptor: 0.1.6 + is-data-descriptor: 0.1.4 + kind-of: 5.1.0 + dev: false + + /is-descriptor/1.0.2: + resolution: {integrity: sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==} + engines: {node: '>=0.10.0'} + dependencies: + is-accessor-descriptor: 1.0.0 + is-data-descriptor: 1.0.0 + kind-of: 6.0.3 + dev: false + + /is-directory/0.3.1: + resolution: {integrity: sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==} + engines: {node: '>=0.10.0'} + dev: false + + /is-docker/2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + dev: false + + /is-extendable/0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + dev: false + + /is-extendable/1.0.1: + resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} + engines: {node: '>=0.10.0'} + dependencies: + is-plain-object: 2.0.4 + dev: false + + /is-extglob/2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: false + + /is-fullwidth-code-point/1.0.0: + resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==} + engines: {node: '>=0.10.0'} + dependencies: + number-is-nan: 1.0.1 + dev: false + + /is-fullwidth-code-point/2.0.0: + resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} + engines: {node: '>=4'} + dev: false + + /is-fullwidth-code-point/3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: false + + /is-generator-function/1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: false + + /is-glob/3.1.0: + resolution: {integrity: sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: false + + /is-glob/4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: false + + /is-hexadecimal/1.0.4: + resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} + dev: false + + /is-module/1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + dev: false + + /is-nan/1.3.2: + resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + dev: false + + /is-negative-zero/2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + dev: false + + /is-number-object/1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: false + + /is-number/3.0.0: + resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: false + + /is-number/7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: false + + /is-obj/2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + dev: false + + /is-path-cwd/2.2.0: + resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} + engines: {node: '>=6'} + dev: false + + /is-path-in-cwd/2.1.0: + resolution: {integrity: sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==} + engines: {node: '>=6'} + dependencies: + is-path-inside: 2.1.0 + dev: false + + /is-path-inside/2.1.0: + resolution: {integrity: sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==} + engines: {node: '>=6'} + dependencies: + path-is-inside: 1.0.2 + dev: false + + /is-plain-obj/2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + dev: false + + /is-plain-obj/3.0.0: + resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} + engines: {node: '>=10'} + dev: false + + /is-plain-object/2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: false + + /is-plain-object/5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + dev: false + + /is-regex/1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: false + + /is-retry-allowed/2.2.0: + resolution: {integrity: sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==} + engines: {node: '>=10'} + dev: false + + /is-shared-array-buffer/1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + dependencies: + call-bind: 1.0.2 + dev: false + + /is-stream/1.1.0: + resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} + engines: {node: '>=0.10.0'} + dev: false + + /is-stream/2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: false + + /is-string/1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: false + + /is-symbol/1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: false + + /is-there/4.5.1: + resolution: {integrity: sha512-vIZ7HTXAoRoIwYSsTnxb0sg9L6rth+JOulNcavsbskQkCIWoSM2cjFOWZs4wGziGZER+Xgs/HXiCQZgiL8ppxQ==} + dev: false + + /is-typed-array/1.1.10: + resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + dev: false + + /is-typedarray/1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + dev: false + + /is-weakref/1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.2 + dev: false + + /is-windows/1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + dev: false + + /is-wsl/1.1.0: + resolution: {integrity: sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==} + engines: {node: '>=4'} + dev: false + + /is-wsl/2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + dev: false + + /is/3.3.0: + resolution: {integrity: sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==} + dev: false + + /isarray/0.0.1: + resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + dev: false + + /isarray/1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + dev: false + + /isarray/2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: false + + /isexe/2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: false + + /isobject/2.1.0: + resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==} + engines: {node: '>=0.10.0'} + dependencies: + isarray: 1.0.0 + dev: false + + /isobject/3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + dev: false + + /isomorphic-fetch/2.2.1: + resolution: {integrity: sha512-9c4TNAKYXM5PRyVcwUZrF3W09nQ+sO7+jydgs4ZGW9dhsLG2VOlISJABombdQqQRXCwuYG3sYV/puGf5rp0qmA==} + dependencies: + node-fetch: 1.7.3 + whatwg-fetch: 3.6.2 + dev: false + + /isstream/0.1.2: + resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} + dev: false + + /jmespath/0.16.0: + resolution: {integrity: sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==} + engines: {node: '>= 0.6.0'} + dev: false + + /join-component/1.1.0: + resolution: {integrity: sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ==} + dev: false + + /js-beautify/1.14.7: + resolution: {integrity: sha512-5SOX1KXPFKx+5f6ZrPsIPEY7NwKeQz47n3jm2i+XeHx9MoRsfQenlOP13FQhWvg8JRS0+XLO6XYUQ2GX+q+T9A==} + engines: {node: '>=10'} + hasBin: true + dependencies: + config-chain: 1.1.13 + editorconfig: 0.15.3 + glob: 8.1.0 + nopt: 6.0.0 + dev: false + + /js-md4/0.3.2: + resolution: {integrity: sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==} + dev: false + + /js-tokens/3.0.2: + resolution: {integrity: sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==} + dev: false + + /js-tokens/4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: false + + /js-yaml/3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: false + + /js2xmlparser/4.0.2: + resolution: {integrity: sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==} + dependencies: + xmlcreate: 2.0.4 + dev: false + + /jsbi/4.3.0: + resolution: {integrity: sha512-SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g==} + dev: false + + /jsbn/0.1.1: + resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} + dev: false + + /jsdoc/3.6.11: + resolution: {integrity: sha512-8UCU0TYeIYD9KeLzEcAu2q8N/mx9O3phAGl32nmHlE0LpaJL71mMkP4d+QE5zWfNt50qheHtOZ0qoxVrsX5TUg==} + engines: {node: '>=12.0.0'} + hasBin: true + dependencies: + '@babel/parser': 7.20.15 + '@types/markdown-it': 12.2.3 + bluebird: 3.7.2 + catharsis: 0.9.0 + escape-string-regexp: 2.0.0 + js2xmlparser: 4.0.2 + klaw: 3.0.0 + markdown-it: 12.3.2 + markdown-it-anchor: 8.6.6_2zb4u3vubltivolgu556vv4aom + marked: 4.2.12 + mkdirp: 1.0.4 + requizzle: 0.2.4 + strip-json-comments: 3.1.1 + taffydb: 2.6.2 + underscore: 1.13.6 + dev: false + + /jsdoc/4.0.0: + resolution: {integrity: sha512-tzTgkklbWKrlaQL2+e3NNgLcZu3NaK2vsHRx7tyHQ+H5jcB9Gx0txSd2eJWlMC/xU1+7LQu4s58Ry0RkuaEQVg==} + engines: {node: '>=12.0.0'} + hasBin: true + dependencies: + '@babel/parser': 7.20.15 + '@jsdoc/salty': 0.2.3 + '@types/markdown-it': 12.2.3 + bluebird: 3.7.2 + catharsis: 0.9.0 + escape-string-regexp: 2.0.0 + js2xmlparser: 4.0.2 + klaw: 3.0.0 + markdown-it: 12.3.2 + markdown-it-anchor: 8.6.6_2zb4u3vubltivolgu556vv4aom + marked: 4.2.12 + mkdirp: 1.0.4 + requizzle: 0.2.4 + strip-json-comments: 3.1.1 + underscore: 1.13.6 + dev: false + + /jsesc/0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + dev: false + + /json-bigint/1.0.0: + resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} + dependencies: + bignumber.js: 9.1.1 + dev: false + + /json-parse-better-errors/1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + dev: false + + /json-schema-traverse/0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: false + + /json-schema/0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + dev: false + + /json-stable-stringify/1.0.2: + resolution: {integrity: sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g==} + dependencies: + jsonify: 0.0.1 + dev: false + + /json-stringify-safe/5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + dev: false + + /json5/1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: false + + /json5/2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + dev: false + + /jsonfile/4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + optionalDependencies: + graceful-fs: 4.2.10 + dev: false + + /jsonfile/6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.0 + optionalDependencies: + graceful-fs: 4.2.10 + dev: false + + /jsonify/0.0.1: + resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} + dev: false + + /jsonwebtoken/9.0.0: + resolution: {integrity: sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==} + engines: {node: '>=12', npm: '>=6'} + dependencies: + jws: 3.2.2 + lodash: 4.17.21 + ms: 2.1.3 + semver: 7.3.8 + dev: false + + /jsprim/1.4.2: + resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} + engines: {node: '>=0.6.0'} + dependencies: + assert-plus: 1.0.0 + extsprintf: 1.3.0 + json-schema: 0.4.0 + verror: 1.10.0 + dev: false + + /jwa/1.4.1: + resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + dev: false + + /jwa/2.0.0: + resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==} + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + dev: false + + /jws/3.2.2: + resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + dependencies: + jwa: 1.4.1 + safe-buffer: 5.2.1 + dev: false + + /jws/4.0.0: + resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} + dependencies: + jwa: 2.0.0 + safe-buffer: 5.2.1 + dev: false + + /keytar/7.9.0: + resolution: {integrity: sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==} + requiresBuild: true + dependencies: + node-addon-api: 4.3.0 + prebuild-install: 7.1.1 + dev: false + + /killable/1.0.1: + resolution: {integrity: sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==} + dev: false + + /kind-of/3.2.2: + resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-buffer: 1.1.6 + dev: false + + /kind-of/4.0.0: + resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==} + engines: {node: '>=0.10.0'} + dependencies: + is-buffer: 1.1.6 + dev: false + + /kind-of/5.1.0: + resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==} + engines: {node: '>=0.10.0'} + dev: false + + /kind-of/6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + dev: false + + /klaw/3.0.0: + resolution: {integrity: sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==} + dependencies: + graceful-fs: 4.2.10 + dev: false + + /kuler/2.0.0: + resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} + dev: false + + /lcid/1.0.0: + resolution: {integrity: sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==} + engines: {node: '>=0.10.0'} + dependencies: + invert-kv: 1.0.0 + dev: false + + /leven/3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + dev: false + + /levn/0.3.0: + resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.1.2 + type-check: 0.3.2 + dev: false + + /linkify-it/2.2.0: + resolution: {integrity: sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==} + dependencies: + uc.micro: 1.0.6 + dev: false + + /linkify-it/3.0.3: + resolution: {integrity: sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==} + dependencies: + uc.micro: 1.0.6 + dev: false + + /load-script/1.0.0: + resolution: {integrity: sha512-kPEjMFtZvwL9TaZo0uZ2ml+Ye9HUMmPwbYRJ324qF9tqMejwykJ5ggTyvzmrbBeapCAbk98BSbTeovHEEP1uCA==} + dev: false + + /loader-runner/2.4.0: + resolution: {integrity: sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==} + engines: {node: '>=4.3.0 <5.0.0 || >=5.10'} + dev: false + + /loader-utils/1.4.2: + resolution: {integrity: sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==} + engines: {node: '>=4.0.0'} + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 1.0.2 + dev: false + + /loader-utils/2.0.4: + resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} + engines: {node: '>=8.9.0'} + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 2.2.3 + dev: false + + /locate-path/2.0.0: + resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} + engines: {node: '>=4'} + dependencies: + p-locate: 2.0.0 + path-exists: 3.0.0 + dev: false + + /locate-path/3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} + dependencies: + p-locate: 3.0.0 + path-exists: 3.0.0 + dev: false + + /locate-path/5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + dev: false + + /lodash.camelcase/4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + dev: false + + /lodash.clone/4.5.0: + resolution: {integrity: sha512-GhrVeweiTD6uTmmn5hV/lzgCQhccwReIVRLHp7LT4SopOjqEZ5BbX8b5WWEtAKasjmy8hR7ZPwsYlxRCku5odg==} + dev: false + + /lodash.get/4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + dev: false + + /lodash.isplainobject/4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + dev: false + + /lodash.isstring/4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + dev: false + + /lodash.set/4.3.2: + resolution: {integrity: sha512-4hNPN5jlm/N/HLMCO43v8BXKq9Z7QdAGc/VGrRD61w8gN9g/6jF9A4L1pbUgBLCffi0w9VsXfTOij5x8iTyFvg==} + dev: false + + /lodash.uniq/4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + dev: false + + /lodash/4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: false + + /logform/2.5.1: + resolution: {integrity: sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg==} + dependencies: + '@colors/colors': 1.5.0 + '@types/triple-beam': 1.3.2 + fecha: 4.2.3 + ms: 2.1.3 + safe-stable-stringify: 2.4.2 + triple-beam: 1.3.0 + dev: false + + /loglevel/1.8.1: + resolution: {integrity: sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==} + engines: {node: '>= 0.6.0'} + dev: false + + /long/3.2.0: + resolution: {integrity: sha512-ZYvPPOMqUwPoDsbJaR10iQJYnMuZhRTvHYl62ErLIEX7RgFlziSBUUvrt3OVfc47QlHHpzPZYP17g3Fv7oeJkg==} + engines: {node: '>=0.6'} + dev: false + + /long/4.0.0: + resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} + dev: false + + /long/5.2.1: + resolution: {integrity: sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==} + dev: false + + /longest-streak/2.0.4: + resolution: {integrity: sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==} + dev: false + + /loose-envify/1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + dev: false + + /loupe/2.3.6: + resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} + dependencies: + get-func-name: 2.0.0 + dev: false + + /lowlight/1.20.0: + resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==} + dependencies: + fault: 1.0.4 + highlight.js: 10.7.3 + dev: false + + /lru-cache/4.1.5: + resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} + dependencies: + pseudomap: 1.0.2 + yallist: 2.1.2 + dev: false + + /lru-cache/5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + dev: false + + /lru-cache/6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + dev: false + + /lunr/2.3.9: + resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} + dev: false + + /macos-release/2.5.0: + resolution: {integrity: sha512-EIgv+QZ9r+814gjJj0Bt5vSLJLzswGmSUbUpbi9AIr/fsN2IWFBl2NucV9PAiek+U1STK468tEkxmVYUtuAN3g==} + engines: {node: '>=6'} + dev: false + + /make-dir/1.3.0: + resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==} + engines: {node: '>=4'} + dependencies: + pify: 3.0.0 + dev: false + + /make-dir/3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + dependencies: + semver: 6.3.0 + dev: false + + /map-cache/0.2.2: + resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} + engines: {node: '>=0.10.0'} + dev: false + + /map-visit/1.0.0: + resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==} + engines: {node: '>=0.10.0'} + dependencies: + object-visit: 1.0.1 + dev: false + + /markdown-it-anchor/8.6.6_2zb4u3vubltivolgu556vv4aom: + resolution: {integrity: sha512-jRW30YGywD2ESXDc+l17AiritL0uVaSnWsb26f+68qaW9zgbIIr1f4v2Nsvc0+s0Z2N3uX6t/yAw7BwCQ1wMsA==} + peerDependencies: + '@types/markdown-it': '*' + markdown-it: '*' + dependencies: + '@types/markdown-it': 12.2.3 + markdown-it: 12.3.2 + dev: false + + /markdown-it/10.0.0: + resolution: {integrity: sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==} + hasBin: true + dependencies: + argparse: 1.0.10 + entities: 2.0.3 + linkify-it: 2.2.0 + mdurl: 1.0.1 + uc.micro: 1.0.6 + dev: false + + /markdown-it/12.3.2: + resolution: {integrity: sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==} + hasBin: true + dependencies: + argparse: 2.0.1 + entities: 2.1.0 + linkify-it: 3.0.3 + mdurl: 1.0.1 + uc.micro: 1.0.6 + dev: false + + /marked/1.2.9: + resolution: {integrity: sha512-H8lIX2SvyitGX+TRdtS06m1jHMijKN/XjfH6Ooii9fvxMlh8QdqBfBDkGUpMWH2kQNrtixjzYUa3SH8ROTgRRw==} + engines: {node: '>= 8.16.2'} + hasBin: true + dev: false + + /marked/4.2.12: + resolution: {integrity: sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw==} + engines: {node: '>= 12'} + hasBin: true + dev: false + + /md5.js/1.3.5: + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: false + + /md5/2.3.0: + resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} + dependencies: + charenc: 0.0.2 + crypt: 0.0.2 + is-buffer: 1.1.6 + dev: false + + /mdast-util-definitions/4.0.0: + resolution: {integrity: sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==} + dependencies: + unist-util-visit: 2.0.3 + dev: false + + /mdast-util-from-markdown/0.8.5: + resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==} + dependencies: + '@types/mdast': 3.0.10 + mdast-util-to-string: 2.0.0 + micromark: 2.11.4 + parse-entities: 2.0.0 + unist-util-stringify-position: 2.0.3 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-to-hast/10.2.0: + resolution: {integrity: sha512-JoPBfJ3gBnHZ18icCwHR50orC9kNH81tiR1gs01D8Q5YpV6adHNO9nKNuFBCJQ941/32PT1a63UF/DitmS3amQ==} + dependencies: + '@types/mdast': 3.0.10 + '@types/unist': 2.0.6 + mdast-util-definitions: 4.0.0 + mdurl: 1.0.1 + unist-builder: 2.0.3 + unist-util-generated: 1.1.6 + unist-util-position: 3.1.0 + unist-util-visit: 2.0.3 + dev: false + + /mdast-util-to-markdown/0.6.5: + resolution: {integrity: sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==} + dependencies: + '@types/unist': 2.0.6 + longest-streak: 2.0.4 + mdast-util-to-string: 2.0.0 + parse-entities: 2.0.0 + repeat-string: 1.6.1 + zwitch: 1.0.5 + dev: false + + /mdast-util-to-string/2.0.0: + resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==} + dev: false + + /mdurl/1.0.1: + resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} + dev: false + + /media-typer/0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + dev: false + + /memory-fs/0.4.1: + resolution: {integrity: sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==} + dependencies: + errno: 0.1.8 + readable-stream: 2.3.7 + dev: false + + /memory-fs/0.5.0: + resolution: {integrity: sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==} + engines: {node: '>=4.3.0 <5.0.0 || >=5.10'} + dependencies: + errno: 0.1.8 + readable-stream: 2.3.7 + dev: false + + /merge-descriptors/1.0.1: + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + dev: false + + /methods/1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + dev: false + + /micromark/2.11.4: + resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} + dependencies: + debug: 4.3.4 + parse-entities: 2.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /micromatch/3.1.10: + resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==} + engines: {node: '>=0.10.0'} + dependencies: + arr-diff: 4.0.0 + array-unique: 0.3.2 + braces: 2.3.2 + define-property: 2.0.2 + extend-shallow: 3.0.2 + extglob: 2.0.4 + fragment-cache: 0.2.1 + kind-of: 6.0.3 + nanomatch: 1.2.13 + object.pick: 1.3.0 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /micromatch/3.1.10_supports-color@6.1.0: + resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==} + engines: {node: '>=0.10.0'} + dependencies: + arr-diff: 4.0.0 + array-unique: 0.3.2 + braces: 2.3.2_supports-color@6.1.0 + define-property: 2.0.2 + extend-shallow: 3.0.2 + extglob: 2.0.4_supports-color@6.1.0 + fragment-cache: 0.2.1 + kind-of: 6.0.3 + nanomatch: 1.2.13_supports-color@6.1.0 + object.pick: 1.3.0 + regex-not: 1.0.2 + snapdragon: 0.8.2_supports-color@6.1.0 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /micromatch/4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: false + + /miller-rabin/4.0.1: + resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} + hasBin: true + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + dev: false + + /mime-db/1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + dev: false + + /mime-types/2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: false + + /mime/1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /mime/2.6.0: + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} + engines: {node: '>=4.0.0'} + hasBin: true + dev: false + + /mime/3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + dev: false + + /mimic-response/3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + dev: false + + /min-document/2.19.0: + resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} + dependencies: + dom-walk: 0.1.2 + dev: false + + /mini-css-extract-plugin/0.4.3_webpack@4.20.2: + resolution: {integrity: sha512-Mxs0nxzF1kxPv4TRi2NimewgXlJqh0rGE30vviCU2WHrpbta6wklnUV9dr9FUtoAHmB3p3LeXEC+ZjgHvB0Dzg==} + engines: {node: '>= 6.9.0 <7.0.0 || >= 8.9.0'} + peerDependencies: + webpack: ^4.4.0 + dependencies: + loader-utils: 1.4.2 + schema-utils: 1.0.0 + webpack: 4.20.2_webpack-cli@3.3.12 + webpack-sources: 1.4.3 + dev: false + + /minimalistic-assert/1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + dev: false + + /minimalistic-crypto-utils/1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + dev: false + + /minimatch/3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: false + + /minimatch/5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: false + + /minimist/1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: false + + /minipass/3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + dependencies: + yallist: 4.0.0 + dev: false + + /minipass/4.0.3: + resolution: {integrity: sha512-OW2r4sQ0sI+z5ckEt5c1Tri4xTgZwYDxpE54eqWlQloQRoWtXjqt9udJ5Z4dSv7wK+nfFI7FRXyCpBSft+gpFw==} + engines: {node: '>=8'} + dev: false + + /minizlib/2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + dev: false + + /mississippi/2.0.0: + resolution: {integrity: sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==} + engines: {node: '>=4.0.0'} + dependencies: + concat-stream: 1.6.2 + duplexify: 3.7.1 + end-of-stream: 1.4.4 + flush-write-stream: 1.1.1 + from2: 2.3.0 + parallel-transform: 1.2.0 + pump: 2.0.1 + pumpify: 1.5.1 + stream-each: 1.2.3 + through2: 2.0.5 + dev: false + + /mixin-deep/1.3.2: + resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} + engines: {node: '>=0.10.0'} + dependencies: + for-in: 1.0.2 + is-extendable: 1.0.1 + dev: false + + /mkdirp-classic/0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + dev: false + + /mkdirp/0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: false + + /mkdirp/1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + dev: false + + /mock-require/3.0.3: + resolution: {integrity: sha512-lLzfLHcyc10MKQnNUCv7dMcoY/2Qxd6wJfbqCcVk3LDb8An4hF6ohk5AztrvgKhJCqj36uyzi/p5se+tvyD+Wg==} + engines: {node: '>=4.3.0'} + dependencies: + get-caller-file: 1.0.3 + normalize-path: 2.1.1 + dev: false + + /moment-timezone/0.5.40: + resolution: {integrity: sha512-tWfmNkRYmBkPJz5mr9GVDn9vRlVZOTe6yqY92rFxiOdWXbjaR0+9LwQnZGGuNR63X456NqmEkbskte8tWL5ePg==} + dependencies: + moment: 2.29.4 + dev: false + + /moment/2.29.4: + resolution: {integrity: sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==} + dev: false + + /moo/0.5.2: + resolution: {integrity: sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==} + dev: false + + /move-concurrently/1.0.1: + resolution: {integrity: sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==} + dependencies: + aproba: 1.2.0 + copy-concurrently: 1.0.5 + fs-write-stream-atomic: 1.0.10 + mkdirp: 0.5.6 + rimraf: 2.7.1 + run-queue: 1.0.3 + dev: false + + /ms/2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: false + + /ms/2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: false + + /ms/2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: false + + /mssql/8.1.4: + resolution: {integrity: sha512-nqkYYehETWVvFLB9zAGJV2kegOsdtLjUnkHA52aFhlE0ZIoOXC3BL8pLERwFicFypM4i3DX1hYeuM726EEIxjQ==} + engines: {node: '>=10'} + hasBin: true + dependencies: + '@tediousjs/connection-string': 0.3.0 + commander: 9.5.0 + debug: 4.3.4 + rfdc: 1.3.0 + tarn: 3.0.2 + tedious: 14.7.0 + transitivePeerDependencies: + - supports-color + dev: false + + /multicast-dns-service-types/1.1.0: + resolution: {integrity: sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==} + dev: false + + /multicast-dns/6.2.3: + resolution: {integrity: sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==} + hasBin: true + dependencies: + dns-packet: 1.3.4 + thunky: 1.1.0 + dev: false + + /mute-stream/0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + dev: false + + /mv/2.1.1: + resolution: {integrity: sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==} + engines: {node: '>=0.8.0'} + requiresBuild: true + dependencies: + mkdirp: 0.5.6 + ncp: 2.0.0 + rimraf: 2.4.5 + dev: false + optional: true + + /mz/2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + dev: false + + /nan/2.17.0: + resolution: {integrity: sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==} + dev: false + + /nanomatch/1.2.13: + resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} + engines: {node: '>=0.10.0'} + dependencies: + arr-diff: 4.0.0 + array-unique: 0.3.2 + define-property: 2.0.2 + extend-shallow: 3.0.2 + fragment-cache: 0.2.1 + is-windows: 1.0.2 + kind-of: 6.0.3 + object.pick: 1.3.0 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /nanomatch/1.2.13_supports-color@6.1.0: + resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} + engines: {node: '>=0.10.0'} + dependencies: + arr-diff: 4.0.0 + array-unique: 0.3.2 + define-property: 2.0.2 + extend-shallow: 3.0.2 + fragment-cache: 0.2.1 + is-windows: 1.0.2 + kind-of: 6.0.3 + object.pick: 1.3.0 + regex-not: 1.0.2 + snapdragon: 0.8.2_supports-color@6.1.0 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /napi-build-utils/1.0.2: + resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} + dev: false + + /native-duplexpair/1.0.0: + resolution: {integrity: sha512-E7QQoM+3jvNtlmyfqRZ0/U75VFgCls+fSkbml2MpgWkWyz3ox8Y58gNhfuziuQYGNNQAbFZJQck55LHCnCK6CA==} + dev: false + + /ncp/2.0.0: + resolution: {integrity: sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==} + hasBin: true + dev: false + optional: true + + /negotiator/0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + dev: false + + /neo-async/2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + dev: false + + /netmask/2.0.2: + resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} + engines: {node: '>= 0.4.0'} + dev: false + + /next-images/1.8.4_webpack@4.20.2: + resolution: {integrity: sha512-E6JV+aMxeUCh8A+cwn1xgmlh/zINSW4JC/XLNbM+PWQd5LBdfB+m1IDCAfNnGOKMo96kzw+4LsKxnX/Kldw78Q==} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + file-loader: 6.2.0_webpack@4.20.2 + url-loader: 4.1.1_2c6qqbqbasso6mdb2onhrh4axm + webpack: 4.20.2_webpack-cli@3.3.12 + dev: false + + /next-tick/1.1.0: + resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} + dev: false + + /nice-try/1.0.5: + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + dev: false + + /node-abi/3.33.0: + resolution: {integrity: sha512-7GGVawqyHF4pfd0YFybhv/eM9JwTtPqx0mAanQ146O3FlSh3pA24zf9IRQTOsfTSqXTNzPSP5iagAJ94jjuVog==} + engines: {node: '>=10'} + dependencies: + semver: 7.3.8 + dev: false + + /node-abort-controller/3.1.1: + resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} + dev: false + + /node-addon-api/4.3.0: + resolution: {integrity: sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==} + dev: false + + /node-cache/5.1.2: + resolution: {integrity: sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==} + engines: {node: '>= 8.0.0'} + dependencies: + clone: 2.1.2 + dev: false + + /node-fetch/1.7.3: + resolution: {integrity: sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==} + dependencies: + encoding: 0.1.13 + is-stream: 1.1.0 + dev: false + + /node-fetch/2.6.9: + resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: false + + /node-forge/0.10.0: + resolution: {integrity: sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==} + engines: {node: '>= 6.0.0'} + dev: false + + /node-forge/1.3.1: + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} + dev: false + + /node-libs-browser/2.2.1: + resolution: {integrity: sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==} + dependencies: + assert: 1.5.0 + browserify-zlib: 0.2.0 + buffer: 4.9.2 + console-browserify: 1.2.0 + constants-browserify: 1.0.0 + crypto-browserify: 3.12.0 + domain-browser: 1.2.0 + events: 3.3.0 + https-browserify: 1.0.0 + os-browserify: 0.3.0 + path-browserify: 0.0.1 + process: 0.11.10 + punycode: 1.4.1 + querystring-es3: 0.2.1 + readable-stream: 2.3.7 + stream-browserify: 2.0.2 + stream-http: 2.8.3 + string_decoder: 1.3.0 + timers-browserify: 2.0.12 + tty-browserify: 0.0.0 + url: 0.11.0 + util: 0.11.1 + vm-browserify: 1.1.2 + dev: false + + /nopt/5.0.0: + resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} + engines: {node: '>=6'} + hasBin: true + dependencies: + abbrev: 1.1.1 + dev: false + + /nopt/6.0.0: + resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + hasBin: true + dependencies: + abbrev: 1.1.1 + dev: false + + /normalize-path/2.1.1: + resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} + engines: {node: '>=0.10.0'} + dependencies: + remove-trailing-separator: 1.1.0 + dev: false + + /normalize-path/3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: false + + /normalize.css/8.0.1: + resolution: {integrity: sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==} + dev: false + + /npm-run-path/2.0.2: + resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} + engines: {node: '>=4'} + dependencies: + path-key: 2.0.1 + dev: false + + /npmlog/5.0.1: + resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} + dependencies: + are-we-there-yet: 2.0.0 + console-control-strings: 1.1.0 + gauge: 3.0.2 + set-blocking: 2.0.0 + dev: false + + /nth-check/2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + dependencies: + boolbase: 1.0.0 + dev: false + + /number-is-nan/1.0.1: + resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==} + engines: {node: '>=0.10.0'} + dev: false + + /oauth-sign/0.9.0: + resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} + dev: false + + /object-assign/4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: false + + /object-copy/0.1.0: + resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} + engines: {node: '>=0.10.0'} + dependencies: + copy-descriptor: 0.1.1 + define-property: 0.2.5 + kind-of: 3.2.2 + dev: false + + /object-hash/2.2.0: + resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==} + engines: {node: '>= 6'} + dev: false + + /object-inspect/1.12.3: + resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + dev: false + + /object-is/1.1.5: + resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + dev: false + + /object-keys/1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: false + + /object-sizeof/1.6.3: + resolution: {integrity: sha512-LGtilAKuDGKCcvu1Xg3UvAhAeJJlFmblo3faltmOQ80xrGwAHxnauIXucalKdTEksHp/Pq9tZGz1hfyEmjFJPQ==} + dependencies: + buffer: 5.7.1 + dev: false + + /object-visit/1.0.1: + resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: false + + /object.assign/4.1.4: + resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: false + + /object.pick/1.3.0: + resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: false + + /obuf/1.1.2: + resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} + dev: false + + /octokit-pagination-methods/1.1.0: + resolution: {integrity: sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ==} + dev: false + + /on-finished/2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + dependencies: + ee-first: 1.1.1 + dev: false + + /on-headers/1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} + dev: false + + /once/1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: false + + /one-time/1.0.0: + resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} + dependencies: + fn.name: 1.1.0 + dev: false + + /open/7.4.2: + resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + is-wsl: 2.2.0 + dev: false + + /open/8.4.1: + resolution: {integrity: sha512-/4b7qZNhv6Uhd7jjnREh1NjnPxlTq+XNWPG88Ydkj5AILcA5m3ajvcg57pB24EQjKv0dK62XnDqk9c/hkIG5Kg==} + engines: {node: '>=12'} + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + dev: false + + /opn/5.5.0: + resolution: {integrity: sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==} + engines: {node: '>=4'} + dependencies: + is-wsl: 1.1.0 + dev: false + + /optionator/0.8.3: + resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} + engines: {node: '>= 0.8.0'} + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.3.0 + prelude-ls: 1.1.2 + type-check: 0.3.2 + word-wrap: 1.2.3 + dev: false + + /optjs/3.2.2: + resolution: {integrity: sha512-f8lTJm4LKirX+45xsFhuRNjA4f46QVLQKfGoNH7e2AEWS+24eM4XNH4pQ8Tw2LISCIvbST/wNcLdtgvgcqVaxA==} + dev: false + + /os-browserify/0.3.0: + resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} + dev: false + + /os-homedir/1.0.2: + resolution: {integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==} + engines: {node: '>=0.10.0'} + dev: false + + /os-locale/1.4.0: + resolution: {integrity: sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==} + engines: {node: '>=0.10.0'} + dependencies: + lcid: 1.0.0 + dev: false + + /os-name/1.0.3: + resolution: {integrity: sha512-f5estLO2KN8vgtTRaILIgEGBoBrMnZ3JQ7W9TMZCnOIGwHe8TRGSpcagnWDo+Dfhd/z08k9Xe75hvciJJ8Qaew==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + osx-release: 1.1.0 + win-release: 1.1.1 + dev: false + + /os-name/3.1.0: + resolution: {integrity: sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg==} + engines: {node: '>=6'} + dependencies: + macos-release: 2.5.0 + windows-release: 3.3.3 + dev: false + + /os-tmpdir/1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + dev: false + + /osenv/0.1.5: + resolution: {integrity: sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==} + dependencies: + os-homedir: 1.0.2 + os-tmpdir: 1.0.2 + dev: false + + /osx-release/1.1.0: + resolution: {integrity: sha512-ixCMMwnVxyHFQLQnINhmIpWqXIfS2YOXchwQrk+OFzmo6nDjQ0E4KXAyyUh0T0MZgV4bUhkRrAbVqlE4yLVq4A==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: false + + /p-defer/1.0.0: + resolution: {integrity: sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==} + engines: {node: '>=4'} + dev: false + + /p-defer/3.0.0: + resolution: {integrity: sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==} + engines: {node: '>=8'} + dev: false + + /p-event/4.2.0: + resolution: {integrity: sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==} + engines: {node: '>=8'} + dependencies: + p-timeout: 3.2.0 + dev: false + + /p-finally/1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + dev: false + + /p-limit/1.3.0: + resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} + engines: {node: '>=4'} + dependencies: + p-try: 1.0.0 + dev: false + + /p-limit/2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + dev: false + + /p-limit/3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: false + + /p-locate/2.0.0: + resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} + engines: {node: '>=4'} + dependencies: + p-limit: 1.3.0 + dev: false + + /p-locate/3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} + dependencies: + p-limit: 2.3.0 + dev: false + + /p-locate/4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + dev: false + + /p-map/2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + dev: false + + /p-retry/3.0.1: + resolution: {integrity: sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==} + engines: {node: '>=6'} + dependencies: + retry: 0.12.0 + dev: false + + /p-timeout/3.2.0: + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} + engines: {node: '>=8'} + dependencies: + p-finally: 1.0.0 + dev: false + + /p-try/1.0.0: + resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} + engines: {node: '>=4'} + dev: false + + /p-try/2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: false + + /pac-proxy-agent/5.0.0: + resolution: {integrity: sha512-CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ==} + engines: {node: '>= 8'} + dependencies: + '@tootallnate/once': 1.1.2 + agent-base: 6.0.2 + debug: 4.3.4 + get-uri: 3.0.2 + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.1 + pac-resolver: 5.0.1 + raw-body: 2.5.1 + socks-proxy-agent: 5.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /pac-resolver/5.0.1: + resolution: {integrity: sha512-cy7u00ko2KVgBAjuhevqpPeHIkCIqPe1v24cydhWjmeuzaBfmUWFCZJ1iAh5TuVzVZoUzXIW7K8sMYOZ84uZ9Q==} + engines: {node: '>= 8'} + dependencies: + degenerator: 3.0.2 + ip: 1.1.8 + netmask: 2.0.2 + dev: false + + /packet-reader/1.0.0: + resolution: {integrity: sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==} + dev: false + + /pako/1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + dev: false + + /parallel-transform/1.2.0: + resolution: {integrity: sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==} + dependencies: + cyclist: 1.0.1 + inherits: 2.0.4 + readable-stream: 2.3.7 + dev: false + + /parse-asn1/5.1.6: + resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==} + dependencies: + asn1.js: 5.4.1 + browserify-aes: 1.2.0 + evp_bytestokey: 1.0.3 + pbkdf2: 3.1.2 + safe-buffer: 5.2.1 + dev: false + + /parse-duration/1.0.2: + resolution: {integrity: sha512-Dg27N6mfok+ow1a2rj/nRjtCfaKrHUZV2SJpEn/s8GaVUSlf4GGRCRP1c13Hj+wfPKVMrFDqLMLITkYKgKxyyg==} + dev: false + + /parse-entities/2.0.0: + resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} + dependencies: + character-entities: 1.2.4 + character-entities-legacy: 1.1.4 + character-reference-invalid: 1.1.4 + is-alphanumerical: 1.0.4 + is-decimal: 1.0.4 + is-hexadecimal: 1.0.4 + dev: false + + /parse-json/4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} + dependencies: + error-ex: 1.3.2 + json-parse-better-errors: 1.0.2 + dev: false + + /parse-ms/2.1.0: + resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==} + engines: {node: '>=6'} + dev: false + + /parse-passwd/1.0.0: + resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} + engines: {node: '>=0.10.0'} + dev: false + + /parse-semver/1.1.1: + resolution: {integrity: sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==} + dependencies: + semver: 5.6.0 + dev: false + + /parse5-htmlparser2-tree-adapter/7.0.0: + resolution: {integrity: sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==} + dependencies: + domhandler: 5.0.3 + parse5: 7.1.2 + dev: false + + /parse5/6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + dev: false + + /parse5/7.1.2: + resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + dependencies: + entities: 4.4.0 + dev: false + + /parseurl/1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + dev: false + + /pascalcase/0.1.1: + resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} + engines: {node: '>=0.10.0'} + dev: false + + /path-browserify/0.0.1: + resolution: {integrity: sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==} + dev: false + + /path-dirname/1.0.2: + resolution: {integrity: sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==} + dev: false + + /path-exists/3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + dev: false + + /path-exists/4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: false + + /path-is-absolute/1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: false + + /path-is-inside/1.0.2: + resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} + dev: false + + /path-key/2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} + dev: false + + /path-parse/1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: false + + /path-to-regexp/0.1.7: + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + dev: false + + /pathval/1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + dev: false + + /pause-stream/0.0.11: + resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} + dependencies: + through: 2.3.8 + dev: false + + /pbkdf2/3.1.2: + resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} + engines: {node: '>=0.12'} + dependencies: + create-hash: 1.2.0 + create-hmac: 1.1.7 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + dev: false + + /pegjs/0.10.0: + resolution: {integrity: sha512-qI5+oFNEGi3L5HAxDwN2LA4Gg7irF70Zs25edhjld9QemOgp0CbvMtbFcMvFtEo1OityPrcCzkQFB8JP/hxgow==} + engines: {node: '>=0.10'} + hasBin: true + dev: false + + /pend/1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + dev: false + + /performance-now/0.2.0: + resolution: {integrity: sha512-YHk5ez1hmMR5LOkb9iJkLKqoBlL7WD5M8ljC75ZfzXriuBIVNuecaXuU7e+hOwyqf24Wxhh7Vxgt7Hnw9288Tg==} + dev: false + + /performance-now/2.1.0: + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + dev: false + + /pg-connection-string/2.5.0: + resolution: {integrity: sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==} + dev: false + + /pg-cursor/2.8.0_pg@8.9.0: + resolution: {integrity: sha512-LrOaEHK+R1C40e+xeri3FTRY/VKp9uTOCVsKtGB7LJ57qbeaphYvWjbVly8AesdT1GfHXYcAnVdExKhW7DKOvA==} + peerDependencies: + pg: ^8 + dependencies: + pg: 8.9.0 + dev: false + + /pg-int8/1.0.1: + resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} + engines: {node: '>=4.0.0'} + dev: false + + /pg-pool/3.5.2_pg@8.9.0: + resolution: {integrity: sha512-His3Fh17Z4eg7oANLob6ZvH8xIVen3phEZh2QuyrIl4dQSDVEabNducv6ysROKpDNPSD+12tONZVWfSgMvDD9w==} + peerDependencies: + pg: '>=8.0' + dependencies: + pg: 8.9.0 + dev: false + + /pg-protocol/1.6.0: + resolution: {integrity: sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==} + dev: false + + /pg-query-stream/3.4.2_pg@8.9.0: + resolution: {integrity: sha512-kaTzsi5TQ3XG1KUznEV3MnstM1U4k5Z9cZ02PNmKLMFeYiPEn83FUc2pPVPiKKv93ITI8e5oCh+zEOunjy0ZwQ==} + dependencies: + pg-cursor: 2.8.0_pg@8.9.0 + transitivePeerDependencies: + - pg + dev: false + + /pg-types/2.2.0: + resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} + engines: {node: '>=4'} + dependencies: + pg-int8: 1.0.1 + postgres-array: 2.0.0 + postgres-bytea: 1.0.0 + postgres-date: 1.0.7 + postgres-interval: 1.2.0 + dev: false + + /pg/8.9.0: + resolution: {integrity: sha512-ZJM+qkEbtOHRuXjmvBtOgNOXOtLSbxiMiUVMgE4rV6Zwocy03RicCVvDXgx8l4Biwo8/qORUnEqn2fdQzV7KCg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + pg-native: '>=3.0.1' + peerDependenciesMeta: + pg-native: + optional: true + dependencies: + buffer-writer: 2.0.0 + packet-reader: 1.0.0 + pg-connection-string: 2.5.0 + pg-pool: 3.5.2_pg@8.9.0 + pg-protocol: 1.6.0 + pg-types: 2.2.0 + pgpass: 1.0.5 + dev: false + + /pgpass/1.0.5: + resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} + dependencies: + split2: 4.1.0 + dev: false + + /picocolors/0.2.1: + resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==} + dev: false + + /picomatch/2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: false + + /pify/2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + dev: false + + /pify/3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + dev: false + + /pify/4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + dev: false + + /pinkie-promise/2.0.1: + resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} + engines: {node: '>=0.10.0'} + dependencies: + pinkie: 2.0.4 + dev: false + + /pinkie/2.0.4: + resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} + engines: {node: '>=0.10.0'} + dev: false + + /pkg-dir/2.0.0: + resolution: {integrity: sha512-ojakdnUgL5pzJYWw2AIDEupaQCX5OPbM688ZevubICjdIX01PRSYKqm33fJoCOJBRseYCTUlQRnBNX+Pchaejw==} + engines: {node: '>=4'} + dependencies: + find-up: 2.1.0 + dev: false + + /pkg-dir/3.0.0: + resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} + engines: {node: '>=6'} + dependencies: + find-up: 3.0.0 + dev: false + + /pkg-dir/4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + dev: false + + /popper.js/1.16.1: + resolution: {integrity: sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==} + deprecated: You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1 + dev: false + + /portfinder/1.0.32_supports-color@6.1.0: + resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} + engines: {node: '>= 0.12.0'} + dependencies: + async: 2.6.4 + debug: 3.2.7_supports-color@6.1.0 + mkdirp: 0.5.6 + transitivePeerDependencies: + - supports-color + dev: false + + /posix-character-classes/0.1.1: + resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} + engines: {node: '>=0.10.0'} + dev: false + + /postcss-load-config/2.1.2: + resolution: {integrity: sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==} + engines: {node: '>= 4'} + dependencies: + cosmiconfig: 5.2.1 + import-cwd: 2.1.0 + dev: false + + /postcss-loader/3.0.0: + resolution: {integrity: sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==} + engines: {node: '>= 6'} + dependencies: + loader-utils: 1.4.2 + postcss: 7.0.39 + postcss-load-config: 2.1.2 + schema-utils: 1.0.0 + dev: false + + /postcss-modules-extract-imports/1.1.0: + resolution: {integrity: sha512-zF9+UIEvtpeqMGxhpeT9XaIevQSrBBCz9fi7SwfkmjVacsSj8DY5eFVgn+wY8I9vvdDDwK5xC8Myq4UkoLFIkA==} + dependencies: + postcss: 6.0.1 + dev: false + + /postcss-modules-extract-imports/1.2.1: + resolution: {integrity: sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==} + dependencies: + postcss: 6.0.23 + dev: false + + /postcss-modules-extract-imports/2.0.0: + resolution: {integrity: sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==} + engines: {node: '>= 6'} + dependencies: + postcss: 7.0.39 + dev: false + + /postcss-modules-local-by-default/1.2.0: + resolution: {integrity: sha512-X4cquUPIaAd86raVrBwO8fwRfkIdbwFu7CTfEOjiZQHVQwlHRSkTgH5NLDmMm5+1hQO8u6dZ+TOOJDbay1hYpA==} + dependencies: + css-selector-tokenizer: 0.7.3 + postcss: 6.0.23 + dev: false + + /postcss-modules-local-by-default/3.0.3: + resolution: {integrity: sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==} + engines: {node: '>= 6'} + dependencies: + icss-utils: 4.1.1 + postcss: 7.0.39 + postcss-selector-parser: 6.0.11 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-modules-scope/1.1.0: + resolution: {integrity: sha512-LTYwnA4C1He1BKZXIx1CYiHixdSe9LWYVKadq9lK5aCCMkoOkFyZ7aigt+srfjlRplJY3gIol6KUNefdMQJdlw==} + dependencies: + css-selector-tokenizer: 0.7.3 + postcss: 6.0.23 + dev: false + + /postcss-modules-scope/2.2.0: + resolution: {integrity: sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==} + engines: {node: '>= 6'} + dependencies: + postcss: 7.0.39 + postcss-selector-parser: 6.0.11 + dev: false + + /postcss-modules-values/1.3.0: + resolution: {integrity: sha512-i7IFaR9hlQ6/0UgFuqM6YWaCfA1Ej8WMg8A5DggnH1UGKJvTV/ugqq/KaULixzzOi3T/tF6ClBXcHGCzdd5unA==} + dependencies: + icss-replace-symbols: 1.1.0 + postcss: 6.0.23 + dev: false + + /postcss-modules-values/3.0.0: + resolution: {integrity: sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==} + dependencies: + icss-utils: 4.1.1 + postcss: 7.0.39 + dev: false + + /postcss-selector-parser/6.0.11: + resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: false + + /postcss-value-parser/3.3.1: + resolution: {integrity: sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==} + dev: false + + /postcss-value-parser/4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + dev: false + + /postcss/6.0.1: + resolution: {integrity: sha512-VbGX1LQgQbf9l3cZ3qbUuC3hGqIEOGQFHAEHQ/Diaeo0yLgpgK5Rb8J+OcamIfQ9PbAU/fzBjVtQX3AhJHUvZw==} + engines: {node: '>=4.0.0'} + dependencies: + chalk: 1.1.3 + source-map: 0.5.7 + supports-color: 3.2.3 + dev: false + + /postcss/6.0.23: + resolution: {integrity: sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==} + engines: {node: '>=4.0.0'} + dependencies: + chalk: 2.4.2 + source-map: 0.6.1 + supports-color: 5.5.0 + dev: false + + /postcss/7.0.39: + resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==} + engines: {node: '>=6.0.0'} + dependencies: + picocolors: 0.2.1 + source-map: 0.6.1 + dev: false + + /postgres-array/2.0.0: + resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} + engines: {node: '>=4'} + dev: false + + /postgres-bytea/1.0.0: + resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==} + engines: {node: '>=0.10.0'} + dev: false + + /postgres-date/1.0.7: + resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} + engines: {node: '>=0.10.0'} + dev: false + + /postgres-interval/1.2.0: + resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} + engines: {node: '>=0.10.0'} + dependencies: + xtend: 4.0.2 + dev: false + + /prebuild-install/7.1.1: + resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==} + engines: {node: '>=10'} + hasBin: true + dependencies: + detect-libc: 2.0.1 + expand-template: 2.0.3 + github-from-package: 0.0.0 + minimist: 1.2.8 + mkdirp-classic: 0.5.3 + napi-build-utils: 1.0.2 + node-abi: 3.33.0 + pump: 3.0.0 + rc: 1.2.8 + simple-get: 4.0.1 + tar-fs: 2.1.1 + tunnel-agent: 0.6.0 + dev: false + + /prelude-ls/1.1.2: + resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} + engines: {node: '>= 0.8.0'} + dev: false + + /presto-client/0.8.1: + resolution: {integrity: sha512-1R+0lLYths2JTQGgbggNpnTseJb2iV26b0pQbOD5u7d6YuHevrsnYCjRTHYu7jfy37D3yWZHaYXXtka7I8T06g==} + dev: false + + /prettier/1.19.1: + resolution: {integrity: sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /pretty-ms/4.0.0: + resolution: {integrity: sha512-qG66ahoLCwpLXD09ZPHSCbUWYTqdosB7SMP4OffgTgL2PBKXMuUsrk5Bwg8q4qPkjTXsKBMr+YK3Ltd/6F9s/Q==} + engines: {node: '>=6'} + dependencies: + parse-ms: 2.1.0 + dev: false + + /prismjs/1.27.0: + resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==} + engines: {node: '>=6'} + dev: false + + /prismjs/1.29.0: + resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} + engines: {node: '>=6'} + dev: false + + /private/0.1.8: + resolution: {integrity: sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==} + engines: {node: '>= 0.6'} + dev: false + + /process-nextick-args/2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + dev: false + + /process/0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + dev: false + + /progress/2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + dev: false + + /promise-batcher/1.1.1: + resolution: {integrity: sha512-DtGBp8OQlAtALDFoVphyAz6Vn1c0GyelKU5smpMQEXpEAcWWxY3fC5JT0AkpWqrljvJrhC6zVdWbK/jx6NNG2A==} + engines: {node: '>=8'} + dependencies: + p-defer: 3.0.0 + dev: false + + /promise-inflight/1.0.1_bluebird@3.7.2: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true + dependencies: + bluebird: 3.7.2 + dev: false + + /promise-pool-executor/1.1.1: + resolution: {integrity: sha512-WZTGr7E8tiW93QoSRe0+arBIrJ13m7yKov/vyWqP8nkME/OjfzZgmSJjLtcDHd6VVz2LdSoAHZLmDfis8hJd1w==} + engines: {node: '>=5.0.0'} + dependencies: + debug: 3.2.7 + next-tick: 1.1.0 + p-defer: 1.0.0 + promise-batcher: 1.1.1 + transitivePeerDependencies: + - supports-color + dev: false + + /promise/7.3.1: + resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} + dependencies: + asap: 2.0.6 + dev: false + + /prop-types/15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + dev: false + + /property-information/5.6.0: + resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==} + dependencies: + xtend: 4.0.2 + dev: false + + /proto-list/1.2.4: + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + dev: false + + /protobufjs-cli/1.1.1_protobufjs@7.2.2: + resolution: {integrity: sha512-VPWMgIcRNyQwWUv8OLPyGQ/0lQY/QTQAVN5fh+XzfDwsVw1FZ2L3DM/bcBf8WPiRz2tNpaov9lPZfNcmNo6LXA==} + engines: {node: '>=12.0.0'} + hasBin: true + peerDependencies: + protobufjs: ^7.0.0 + dependencies: + chalk: 4.1.2 + escodegen: 1.14.3 + espree: 9.4.1 + estraverse: 5.3.0 + glob: 8.1.0 + jsdoc: 4.0.0 + minimist: 1.2.8 + protobufjs: 7.2.2 + semver: 7.3.8 + tmp: 0.2.1 + uglify-js: 3.17.4 + dev: false + + /protobufjs/5.0.3: + resolution: {integrity: sha512-55Kcx1MhPZX0zTbVosMQEO5R6/rikNXd9b6RQK4KSPcrSIIwoXTtebIczUrXlwaSrbz4x8XUVThGPob1n8I4QA==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + ascli: 1.0.1 + bytebuffer: 5.0.1 + glob: 7.2.3 + yargs: 3.32.0 + dev: false + + /protobufjs/6.8.8: + resolution: {integrity: sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==} + hasBin: true + requiresBuild: true + 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.2 + '@types/node': 10.17.60 + long: 4.0.0 + dev: false + + /protobufjs/7.2.2: + resolution: {integrity: sha512-++PrQIjrom+bFDPpfmqXfAGSQs40116JRrqqyf53dymUMvvb5d/LMRyicRoF1AUKoXVS1/IgJXlEgcpr4gTF3Q==} + engines: {node: '>=12.0.0'} + requiresBuild: true + 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/node': 18.13.0 + long: 5.2.1 + dev: false + + /proxy-addr/2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + dev: false + + /proxy-agent/5.0.0: + resolution: {integrity: sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g==} + engines: {node: '>= 8'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.1 + lru-cache: 5.1.1 + pac-proxy-agent: 5.0.0 + proxy-from-env: 1.1.0 + socks-proxy-agent: 5.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /proxy-from-env/1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: false + + /prr/1.0.1: + resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} + dev: false + + /pseudomap/1.0.2: + resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} + dev: false + + /psl/1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + dev: false + + /public-encrypt/4.0.3: + resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} + dependencies: + bn.js: 4.12.0 + browserify-rsa: 4.1.0 + create-hash: 1.2.0 + parse-asn1: 5.1.6 + randombytes: 2.1.0 + safe-buffer: 5.2.1 + dev: false + + /pump/2.0.1: + resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: false + + /pump/3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: false + + /pumpify/1.5.1: + resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==} + dependencies: + duplexify: 3.7.1 + inherits: 2.0.4 + pump: 2.0.1 + dev: false + + /pumpify/2.0.1: + resolution: {integrity: sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==} + dependencies: + duplexify: 4.1.2 + inherits: 2.0.4 + pump: 3.0.0 + dev: false + + /punycode/1.3.2: + resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} + dev: false + + /punycode/1.4.1: + resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} + dev: false + + /punycode/2.3.0: + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + engines: {node: '>=6'} + dev: false + + /python-struct/1.1.3: + resolution: {integrity: sha512-UsI/mNvk25jRpGKYI38Nfbv84z48oiIWwG67DLVvjRhy8B/0aIK+5Ju5WOHgw/o9rnEmbAS00v4rgKFQeC332Q==} + dependencies: + long: 4.0.0 + dev: false + + /qs/6.11.0: + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.4 + dev: false + + /qs/6.5.3: + resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} + engines: {node: '>=0.6'} + dev: false + + /query-string/4.3.4: + resolution: {integrity: sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==} + engines: {node: '>=0.10.0'} + dependencies: + object-assign: 4.1.1 + strict-uri-encode: 1.1.0 + dev: false + + /querystring-es3/0.2.1: + resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} + engines: {node: '>=0.4.x'} + dev: false + + /querystring/0.2.0: + resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} + engines: {node: '>=0.4.x'} + deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. + dev: false + + /querystringify/2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + dev: false + + /raf/3.4.1: + resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==} + dependencies: + performance-now: 2.1.0 + dev: false + + /randombytes/2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /randomfill/1.0.4: + resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} + dependencies: + randombytes: 2.1.0 + safe-buffer: 5.2.1 + dev: false + + /range-parser/1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + dev: false + + /raw-body/2.5.1: + resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + dev: false + + /rc/1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + dev: false + + /re-resizable/4.11.0: + resolution: {integrity: sha512-dye+7rERqNf/6mDT1iwps+4Gf42420xuZgygF33uX178DxffqcyeuHbBuJ382FIcB5iP6mMZOhfW7kI0uXwb/Q==} + dev: false + + /react-dom/16.14.0_react@16.14.0: + resolution: {integrity: sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==} + peerDependencies: + react: ^16.14.0 + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + prop-types: 15.8.1 + react: 16.14.0 + scheduler: 0.19.1 + dev: false + + /react-is/16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + dev: false + + /react-lifecycles-compat/3.0.4: + resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==} + dev: false + + /react-measure/2.5.2_wcqkhtmu7mswc6yz4uyexck3ty: + resolution: {integrity: sha512-M+rpbTLWJ3FD6FXvYV6YEGvQ5tMayQ3fGrZhRPHrE9bVlBYfDCLuDcgNttYfk8IqfOI03jz6cbpqMRTUclQnaA==} + peerDependencies: + react: '>0.13.0' + react-dom: '>0.13.0' + dependencies: + '@babel/runtime': 7.20.13 + get-node-dimensions: 1.2.1 + prop-types: 15.8.1 + react: 16.14.0 + react-dom: 16.14.0_react@16.14.0 + resize-observer-polyfill: 1.5.1 + dev: false + + /react-motion/0.5.2_react@16.14.0: + resolution: {integrity: sha512-9q3YAvHoUiWlP3cK0v+w1N5Z23HXMj4IF4YuvjvWegWqNPfLXsOBE/V7UvQGpXxHFKRQQcNcVQE31g9SB/6qgQ==} + peerDependencies: + react: ^0.14.9 || ^15.3.0 || ^16.0.0 + dependencies: + performance-now: 0.2.0 + prop-types: 15.8.1 + raf: 3.4.1 + react: 16.14.0 + dev: false + + /react-popper/1.3.11_react@16.14.0: + resolution: {integrity: sha512-VSA/bS+pSndSF2fiasHK/PTEEAyOpX60+H5EPAjoArr8JGm+oihu4UbrqcEBpQibJxBVCpYyjAX7abJ+7DoYVg==} + peerDependencies: + react: 0.14.x || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@babel/runtime': 7.20.13 + '@hypnosphi/create-react-context': 0.3.1_4vyaxm4rsh2mpfdenvlqy7kmya + deep-equal: 1.1.1 + popper.js: 1.16.1 + prop-types: 15.8.1 + react: 16.14.0 + typed-styles: 0.0.7 + warning: 4.0.3 + dev: false + + /react-router/3.2.6_react@16.14.0: + resolution: {integrity: sha512-nlxtQE8B22hb/JxdaslI1tfZacxFU8x8BJryXOnR2RxB4vc01zuHYAHAIgmBkdk1kzXaA25hZxK6KAH/+CXArw==} + peerDependencies: + react: ^0.14.0 || ^15.0.0 || ^16.0.0 + dependencies: + create-react-class: 15.7.0 + history: 3.3.0 + hoist-non-react-statics: 3.3.2 + invariant: 2.2.4 + loose-envify: 1.4.0 + prop-types: 15.8.1 + react: 16.14.0 + react-is: 16.13.1 + warning: 3.0.0 + dev: false + + /react-syntax-highlighter/15.5.0_react@16.14.0: + resolution: {integrity: sha512-+zq2myprEnQmH5yw6Gqc8lD55QHnpKaU8TOcFeC/Lg/MQSs8UknEA0JC4nTZGFAXC2J2Hyj/ijJ7NlabyPi2gg==} + peerDependencies: + react: '>= 0.14.0' + dependencies: + '@babel/runtime': 7.20.13 + highlight.js: 10.7.3 + lowlight: 1.20.0 + prismjs: 1.29.0 + react: 16.14.0 + refractor: 3.6.0 + dev: false + + /react-transition-group/2.9.0_wcqkhtmu7mswc6yz4uyexck3ty: + resolution: {integrity: sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==} + peerDependencies: + react: '>=15.0.0' + react-dom: '>=15.0.0' + dependencies: + dom-helpers: 3.4.0 + loose-envify: 1.4.0 + prop-types: 15.8.1 + react: 16.14.0 + react-dom: 16.14.0_react@16.14.0 + react-lifecycles-compat: 3.0.4 + dev: false + + /react/16.14.0: + resolution: {integrity: sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + prop-types: 15.8.1 + dev: false + + /read/1.0.7: + resolution: {integrity: sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==} + engines: {node: '>=0.8'} + dependencies: + mute-stream: 0.0.8 + dev: false + + /readable-stream/1.1.14: + resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 0.0.1 + string_decoder: 0.10.31 + dev: false + + /readable-stream/2.3.7: + resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + dev: false + + /readable-stream/3.6.0: + resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: false + + /readdirp/2.2.1: + resolution: {integrity: sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==} + engines: {node: '>=0.10'} + dependencies: + graceful-fs: 4.2.10 + micromatch: 3.1.10 + readable-stream: 2.3.7 + transitivePeerDependencies: + - supports-color + dev: false + + /readdirp/2.2.1_supports-color@6.1.0: + resolution: {integrity: sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==} + engines: {node: '>=0.10'} + dependencies: + graceful-fs: 4.2.10 + micromatch: 3.1.10_supports-color@6.1.0 + readable-stream: 2.3.7 + transitivePeerDependencies: + - supports-color + dev: false + + /readdirp/3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: false + + /readline-sync/1.4.10: + resolution: {integrity: sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==} + engines: {node: '>= 0.8.0'} + dev: false + + /rechoir/0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} + dependencies: + resolve: 1.22.1 + dev: false + + /recompose/0.30.0_react@16.14.0: + resolution: {integrity: sha512-ZTrzzUDa9AqUIhRk4KmVFihH0rapdCSMFXjhHbNrjAWxBuUD/guYlyysMnuHjlZC/KRiOKRtB4jf96yYSkKE8w==} + peerDependencies: + react: ^0.14.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@babel/runtime': 7.20.13 + change-emitter: 0.1.6 + fbjs: 0.8.18 + hoist-non-react-statics: 2.5.5 + react: 16.14.0 + react-lifecycles-compat: 3.0.4 + symbol-observable: 1.2.0 + dev: false + + /redis-commands/1.7.0: + resolution: {integrity: sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==} + dev: false + + /redis-errors/1.2.0: + resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==} + engines: {node: '>=4'} + dev: false + + /redis-parser/3.0.0: + resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==} + engines: {node: '>=4'} + dependencies: + redis-errors: 1.2.0 + dev: false + + /redis/3.1.2: + resolution: {integrity: sha512-grn5KoZLr/qrRQVwoSkmzdbw6pwF+/rwODtrOr6vuBRiR/f3rjSTGupbF90Zpqm2oenix8Do6RV7pYEkGwlKkw==} + engines: {node: '>=10'} + dependencies: + denque: 1.5.1 + redis-commands: 1.7.0 + redis-errors: 1.2.0 + redis-parser: 3.0.0 + dev: false + + /reduce/1.0.2: + resolution: {integrity: sha512-xX7Fxke/oHO5IfZSk77lvPa/7bjMh9BuCk4OOoX5XTXrM7s0Z+MkPfSDfz0q7r91BhhGSs8gii/VEN/7zhCPpQ==} + dependencies: + object-keys: 1.1.1 + dev: false + + /refractor/3.6.0: + resolution: {integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==} + dependencies: + hastscript: 6.0.0 + parse-entities: 2.0.0 + prismjs: 1.27.0 + dev: false + + /regenerate/1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + dev: false + + /regenerator-runtime/0.11.1: + resolution: {integrity: sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==} + dev: false + + /regenerator-runtime/0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + dev: false + + /regenerator-transform/0.10.1: + resolution: {integrity: sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==} + dependencies: + babel-runtime: 6.26.0 + babel-types: 6.26.0 + private: 0.1.8 + dev: false + + /regex-not/1.0.2: + resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 3.0.2 + safe-regex: 1.1.0 + dev: false + + /regexp.prototype.flags/1.4.3: + resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + functions-have-names: 1.2.3 + dev: false + + /regexpu-core/2.0.0: + resolution: {integrity: sha512-tJ9+S4oKjxY8IZ9jmjnp/mtytu1u3iyIQAfmI51IKWH6bFf7XR1ybtaO6j7INhZKXOTYADk7V5qxaqLkmNxiZQ==} + dependencies: + regenerate: 1.4.2 + regjsgen: 0.2.0 + regjsparser: 0.1.5 + dev: false + + /regjsgen/0.2.0: + resolution: {integrity: sha512-x+Y3yA24uF68m5GA+tBjbGYo64xXVJpbToBaWCoSNSc1hdk6dfctaRWrNFTVJZIIhL5GxW8zwjoixbnifnK59g==} + dev: false + + /regjsparser/0.1.5: + resolution: {integrity: sha512-jlQ9gYLfk2p3V5Ag5fYhA7fv7OHzd1KUH0PRP46xc3TgwjwgROIW572AfYg/X9kaNq/LJnu6oJcFRXlIrGoTRw==} + hasBin: true + dependencies: + jsesc: 0.5.0 + dev: false + + /rehype-raw/5.1.0: + resolution: {integrity: sha512-MDvHAb/5mUnif2R+0IPCYJU8WjHa9UzGtM/F4AVy5GixPlDZ1z3HacYy4xojDU+uBa+0X/3PIfyQI26/2ljJNA==} + dependencies: + hast-util-raw: 6.1.0 + dev: false + + /rehype-react/6.2.1: + resolution: {integrity: sha512-f9KIrjktvLvmbGc7si25HepocOg4z0MuNOtweigKzBcDjiGSTGhyz6VSgaV5K421Cq1O+z4/oxRJ5G9owo0KVg==} + dependencies: + '@mapbox/hast-util-table-cell-style': 0.2.0 + hast-to-hyperscript: 9.0.1 + dev: false + + /rehype-slug/4.0.1: + resolution: {integrity: sha512-KIlJALf9WfHFF21icwTd2yI2IP+RQRweaxH9ChVGQwRYy36+hiomG4ZSe0yQRyCt+D/vE39LbAcOI/h4O4GPhA==} + dependencies: + github-slugger: 1.5.0 + hast-util-has-property: 1.0.4 + hast-util-heading-rank: 1.0.1 + hast-util-to-string: 1.0.4 + unist-util-visit: 2.0.3 + dev: false + + /remark-parse/9.0.0: + resolution: {integrity: sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==} + dependencies: + mdast-util-from-markdown: 0.8.5 + transitivePeerDependencies: + - supports-color + dev: false + + /remark-rehype/8.1.0: + resolution: {integrity: sha512-EbCu9kHgAxKmW1yEYjx3QafMyGY3q8noUbNUI5xyKbaFP89wbhDrKxyIQNukNYthzjNHZu6J7hwFg7hRm1svYA==} + dependencies: + mdast-util-to-hast: 10.2.0 + dev: false + + /remark-stringify/9.0.1: + resolution: {integrity: sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==} + dependencies: + mdast-util-to-markdown: 0.6.5 + dev: false + + /remark/13.0.0: + resolution: {integrity: sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==} + dependencies: + remark-parse: 9.0.0 + remark-stringify: 9.0.1 + unified: 9.2.2 + transitivePeerDependencies: + - supports-color + dev: false + + /remove-trailing-separator/1.1.0: + resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} + dev: false + + /remove-trailing-slash/0.1.1: + resolution: {integrity: sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA==} + dev: false + + /repeat-element/1.1.4: + resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} + engines: {node: '>=0.10.0'} + dev: false + + /repeat-string/1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + dev: false + + /request/2.88.2: + resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} + engines: {node: '>= 6'} + deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 + dependencies: + aws-sign2: 0.7.0 + aws4: 1.12.0 + caseless: 0.12.0 + combined-stream: 1.0.8 + extend: 3.0.2 + forever-agent: 0.6.1 + form-data: 2.3.3 + har-validator: 5.1.5 + http-signature: 1.2.0 + is-typedarray: 1.0.0 + isstream: 0.1.2 + json-stringify-safe: 5.0.1 + mime-types: 2.1.35 + oauth-sign: 0.9.0 + performance-now: 2.1.0 + qs: 6.5.3 + safe-buffer: 5.2.1 + tough-cookie: 2.5.0 + tunnel-agent: 0.6.0 + uuid: 3.4.0 + dev: false + + /require-directory/2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: false + + /require-main-filename/2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + dev: false + + /requires-port/1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + dev: false + + /requizzle/0.2.4: + resolution: {integrity: sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==} + dependencies: + lodash: 4.17.21 + dev: false + + /resize-observer-polyfill/1.5.1: + resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} + dev: false + + /resolve-cwd/2.0.0: + resolution: {integrity: sha512-ccu8zQTrzVr954472aUVPLEcB3YpKSYR3cg/3lo1okzobPBM+1INXBbBZlDbnI/hbEocnf8j0QVo43hQKrbchg==} + engines: {node: '>=4'} + dependencies: + resolve-from: 3.0.0 + dev: false + + /resolve-dir/1.0.1: + resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} + engines: {node: '>=0.10.0'} + dependencies: + expand-tilde: 2.0.2 + global-modules: 1.0.0 + dev: false + + /resolve-from/3.0.0: + resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==} + engines: {node: '>=4'} + dev: false + + /resolve-url/0.2.1: + resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} + deprecated: https://github.com/lydell/resolve-url#deprecated + dev: false + + /resolve/1.22.1: + resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} + hasBin: true + dependencies: + is-core-module: 2.11.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: false + + /ret/0.1.15: + resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} + engines: {node: '>=0.12'} + dev: false + + /retry-request/4.2.2: + resolution: {integrity: sha512-xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg==} + engines: {node: '>=8.10.0'} + dependencies: + debug: 4.3.4 + extend: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /retry/0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + dev: false + + /retry/0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + dev: false + + /rfdc/1.3.0: + resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} + dev: false + + /rimraf/2.4.5: + resolution: {integrity: sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==} + hasBin: true + dependencies: + glob: 6.0.4 + dev: false + optional: true + + /rimraf/2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: false + + /rimraf/3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: false + + /ripemd160/2.0.2: + resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + dev: false + + /rollup-plugin-dts/1.4.14_6gd2y3vqcxk6lounvan455yu24: + resolution: {integrity: sha512-H33aGCUbp/Lm+tbkG5gZePnuWvvaafkwh7Uh4RYJs0/ChOfWlENCby1wOn+xBVsCzpV/g/+OVYqgzVjT80dNJg==} + peerDependencies: + rollup: ^2.33.1 + typescript: ^4.0.5 + dependencies: + rollup: 2.79.1 + typescript: 3.9.10 + optionalDependencies: + '@babel/code-frame': 7.18.6 + dev: false + + /rollup/2.79.1: + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: false + + /run-queue/1.0.3: + resolution: {integrity: sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==} + dependencies: + aproba: 1.2.0 + dev: false + + /safe-buffer/5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + dev: false + + /safe-buffer/5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: false + + /safe-json-stringify/1.2.0: + resolution: {integrity: sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==} + requiresBuild: true + dev: false + optional: true + + /safe-regex-test/1.0.0: + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + is-regex: 1.1.4 + dev: false + + /safe-regex/1.1.0: + resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} + dependencies: + ret: 0.1.15 + dev: false + + /safe-stable-stringify/2.4.2: + resolution: {integrity: sha512-gMxvPJYhP0O9n2pvcfYfIuYgbledAOJFcqRThtPRmjscaipiwcwPPKLytpVzMkG2HAN87Qmo2d4PtGiri1dSLA==} + engines: {node: '>=10'} + dev: false + + /safer-buffer/2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dev: false + + /sax/1.2.1: + resolution: {integrity: sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==} + dev: false + + /sax/1.2.4: + resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} + dev: false + + /scheduler/0.19.1: + resolution: {integrity: sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + dev: false + + /schema-utils/0.4.7: + resolution: {integrity: sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==} + engines: {node: '>= 4'} + dependencies: + ajv: 6.12.6 + ajv-keywords: 3.5.2_ajv@6.12.6 + dev: false + + /schema-utils/1.0.0: + resolution: {integrity: sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==} + engines: {node: '>= 4'} + dependencies: + ajv: 6.12.6 + ajv-errors: 1.0.1_ajv@6.12.6 + ajv-keywords: 3.5.2_ajv@6.12.6 + dev: false + + /schema-utils/2.7.1: + resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} + engines: {node: '>= 8.9.0'} + dependencies: + '@types/json-schema': 7.0.11 + ajv: 6.12.6 + ajv-keywords: 3.5.2_ajv@6.12.6 + dev: false + + /schema-utils/3.1.1: + resolution: {integrity: sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/json-schema': 7.0.11 + ajv: 6.12.6 + ajv-keywords: 3.5.2_ajv@6.12.6 + dev: false + + /select-hose/2.0.0: + resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} + dev: false + + /selfsigned/1.10.14: + resolution: {integrity: sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==} + dependencies: + node-forge: 0.10.0 + dev: false + + /semver/5.6.0: + resolution: {integrity: sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==} + hasBin: true + dev: false + + /semver/6.3.0: + resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + hasBin: true + dev: false + + /semver/7.3.8: + resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: false + + /send/0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /send/0.18.0_supports-color@6.1.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + dependencies: + debug: 2.6.9_supports-color@6.1.0 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /serialize-javascript/1.9.1: + resolution: {integrity: sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==} + dev: false + + /serve-index/1.9.1_supports-color@6.1.0: + resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} + engines: {node: '>= 0.8.0'} + dependencies: + accepts: 1.3.8 + batch: 0.6.1 + debug: 2.6.9_supports-color@6.1.0 + escape-html: 1.0.3 + http-errors: 1.6.3 + mime-types: 2.1.35 + parseurl: 1.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /serve-static/1.15.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.18.0 + transitivePeerDependencies: + - supports-color + dev: false + + /serve-static/1.15.0_supports-color@6.1.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.18.0_supports-color@6.1.0 + transitivePeerDependencies: + - supports-color + dev: false + + /set-blocking/2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + dev: false + + /set-value/2.0.1: + resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 2.0.1 + is-extendable: 0.1.1 + is-plain-object: 2.0.4 + split-string: 3.1.0 + dev: false + + /setimmediate/1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + dev: false + + /setprototypeof/1.1.0: + resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} + dev: false + + /setprototypeof/1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + dev: false + + /sha.js/2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: false + + /shebang-command/1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + dependencies: + shebang-regex: 1.0.0 + dev: false + + /shebang-regex/1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + dev: false + + /shelljs/0.8.5: + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} + engines: {node: '>=4'} + hasBin: true + dependencies: + glob: 7.2.3 + interpret: 1.4.0 + rechoir: 0.6.2 + dev: false + + /side-channel/1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + object-inspect: 1.12.3 + dev: false + + /sigmund/1.0.1: + resolution: {integrity: sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g==} + dev: false + + /signal-exit/3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: false + + /simple-concat/1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + dev: false + + /simple-get/4.0.1: + resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + dependencies: + decompress-response: 6.0.0 + once: 1.4.0 + simple-concat: 1.0.1 + dev: false + + /simple-lru-cache/0.0.2: + resolution: {integrity: sha512-uEv/AFO0ADI7d99OHDmh1QfYzQk/izT1vCmu/riQfh7qjBVUUgRT87E5s5h7CxWCA/+YoZerykpEthzVrW3LIw==} + dev: false + + /simple-swizzle/0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + dependencies: + is-arrayish: 0.3.2 + dev: false + + /smart-buffer/4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + dev: false + + /snapdragon-node/2.1.1: + resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} + engines: {node: '>=0.10.0'} + dependencies: + define-property: 1.0.0 + isobject: 3.0.1 + snapdragon-util: 3.0.1 + dev: false + + /snapdragon-util/3.0.1: + resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: false + + /snapdragon/0.8.2: + resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} + engines: {node: '>=0.10.0'} + dependencies: + base: 0.11.2 + debug: 2.6.9 + define-property: 0.2.5 + extend-shallow: 2.0.1 + map-cache: 0.2.2 + source-map: 0.5.7 + source-map-resolve: 0.5.3 + use: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: false + + /snapdragon/0.8.2_supports-color@6.1.0: + resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} + engines: {node: '>=0.10.0'} + dependencies: + base: 0.11.2 + debug: 2.6.9_supports-color@6.1.0 + define-property: 0.2.5 + extend-shallow: 2.0.1 + map-cache: 0.2.2 + source-map: 0.5.7 + source-map-resolve: 0.5.3 + use: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: false + + /snowflake-sdk/1.6.18: + resolution: {integrity: sha512-QhG1aW1VLOUf4ylwPBMsQaIsKXV0Qp2/3Da5sEq6AK8pUcXnlwZ9d2wa+4+FOtMPrpdyfe8g9/tXH+BIyze3tQ==} + dependencies: + '@azure/storage-blob': 12.12.0 + '@techteamer/ocsp': 1.0.0 + agent-base: 6.0.2 + asn1.js-rfc2560: 5.0.1 + asn1.js-rfc5280: 3.0.0 + aws-sdk: 2.1315.0 + axios: 0.27.2_debug@3.2.7 + big-integer: 1.6.51 + bignumber.js: 2.4.0 + binascii: 0.0.2 + browser-request: 0.3.3 + debug: 3.2.7 + expand-tilde: 2.0.2 + extend: 3.0.2 + generic-pool: 3.9.0 + glob: 7.2.3 + jsonwebtoken: 9.0.0 + mime-types: 2.1.35 + mkdirp: 1.0.4 + mock-require: 3.0.3 + moment: 2.29.4 + moment-timezone: 0.5.40 + open: 7.4.2 + python-struct: 1.1.3 + simple-lru-cache: 0.0.2 + string-similarity: 4.0.4 + test-console: 2.0.0 + tmp: 0.2.1 + urllib: 2.40.0 + uuid: 3.4.0 + winston: 3.8.2 + transitivePeerDependencies: + - asn1.js + - encoding + - supports-color + dev: false + + /sockjs-client/1.6.1_supports-color@6.1.0: + resolution: {integrity: sha512-2g0tjOR+fRs0amxENLi/q5TiJTqY+WXFOzb5UwXndlK6TO3U/mirZznpx6w34HVMoc3g7cY24yC/ZMIYnDlfkw==} + engines: {node: '>=12'} + dependencies: + debug: 3.2.7_supports-color@6.1.0 + eventsource: 2.0.2 + faye-websocket: 0.11.4 + inherits: 2.0.4 + url-parse: 1.5.10 + transitivePeerDependencies: + - supports-color + dev: false + + /sockjs/0.3.24: + resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} + dependencies: + faye-websocket: 0.11.4 + uuid: 8.3.2 + websocket-driver: 0.7.4 + dev: false + + /socks-proxy-agent/5.0.1: + resolution: {integrity: sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==} + engines: {node: '>= 6'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + socks: 2.7.1 + transitivePeerDependencies: + - supports-color + dev: false + + /socks/2.7.1: + resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==} + engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} + dependencies: + ip: 2.0.0 + smart-buffer: 4.2.0 + dev: false + + /source-list-map/2.0.1: + resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} + dev: false + + /source-map-loader/0.2.4: + resolution: {integrity: sha512-OU6UJUty+i2JDpTItnizPrlpOIBLmQbWMuBg9q5bVtnHACqw1tn9nNwqJLbv0/00JjnJb/Ee5g5WS5vrRv7zIQ==} + engines: {node: '>= 6'} + dependencies: + async: 2.6.4 + loader-utils: 1.4.2 + dev: false + + /source-map-resolve/0.5.3: + resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} + deprecated: See https://github.com/lydell/source-map-resolve#deprecated + dependencies: + atob: 2.1.2 + decode-uri-component: 0.2.2 + resolve-url: 0.2.1 + source-map-url: 0.4.1 + urix: 0.1.0 + dev: false + + /source-map-support/0.5.9: + resolution: {integrity: sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: false + + /source-map-url/0.4.1: + resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} + deprecated: See https://github.com/lydell/source-map-url#deprecated + dev: false + + /source-map/0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + dev: false + + /source-map/0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: false + + /source-map/0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + dev: false + + /space-separated-tokens/1.1.5: + resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} + dev: false + + /spdy-transport/3.0.0_supports-color@6.1.0: + resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} + dependencies: + debug: 4.3.4_supports-color@6.1.0 + detect-node: 2.1.0 + hpack.js: 2.1.6 + obuf: 1.1.2 + readable-stream: 3.6.0 + wbuf: 1.7.3 + transitivePeerDependencies: + - supports-color + dev: false + + /spdy/4.0.2_supports-color@6.1.0: + resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} + engines: {node: '>=6.0.0'} + dependencies: + debug: 4.3.4_supports-color@6.1.0 + handle-thing: 2.0.1 + http-deceiver: 1.2.7 + select-hose: 2.0.0 + spdy-transport: 3.0.0_supports-color@6.1.0 + transitivePeerDependencies: + - supports-color + dev: false + + /split-string/3.1.0: + resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 3.0.2 + dev: false + + /split2/4.1.0: + resolution: {integrity: sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==} + engines: {node: '>= 10.x'} + dev: false + + /sprintf-js/1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + dev: false + + /sprintf-js/1.1.2: + resolution: {integrity: sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==} + dev: false + + /sql-formatter/2.3.4: + resolution: {integrity: sha512-CajWtvzYoBJbD5PQeVe3E7AOHAIYvRQEPOKgF9kfKNeY8jtjBiiA6pDzkMuAID8jJMluoPvyKveLigSaA5tKQQ==} + dependencies: + lodash: 4.17.21 + dev: false + + /ssh2/1.11.0: + resolution: {integrity: sha512-nfg0wZWGSsfUe/IBJkXVll3PEZ//YH2guww+mP88gTpuSU4FtZN7zu9JoeTGOyCNx2dTDtT9fOpWwlzyj4uOOw==} + engines: {node: '>=10.16.0'} + requiresBuild: true + dependencies: + asn1: 0.2.6 + bcrypt-pbkdf: 1.0.2 + optionalDependencies: + cpu-features: 0.0.4 + nan: 2.17.0 + dev: false + + /sshpk/1.17.0: + resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + asn1: 0.2.6 + assert-plus: 1.0.0 + bcrypt-pbkdf: 1.0.2 + dashdash: 1.14.1 + ecc-jsbn: 0.1.2 + getpass: 0.1.7 + jsbn: 0.1.1 + safer-buffer: 2.1.2 + tweetnacl: 0.14.5 + dev: false + + /ssri/5.3.0: + resolution: {integrity: sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /stack-trace/0.0.10: + resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} + dev: false + + /static-extend/0.1.2: + resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} + engines: {node: '>=0.10.0'} + dependencies: + define-property: 0.2.5 + object-copy: 0.1.0 + dev: false + + /statuses/1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + dev: false + + /statuses/2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + dev: false + + /stoppable/1.1.0: + resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==} + engines: {node: '>=4', npm: '>=6'} + dev: false + + /stream-browserify/2.0.2: + resolution: {integrity: sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==} + dependencies: + inherits: 2.0.4 + readable-stream: 2.3.7 + dev: false + + /stream-each/1.2.3: + resolution: {integrity: sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==} + dependencies: + end-of-stream: 1.4.4 + stream-shift: 1.0.1 + dev: false + + /stream-events/1.0.5: + resolution: {integrity: sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==} + dependencies: + stubs: 3.0.0 + dev: false + + /stream-http/2.8.3: + resolution: {integrity: sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==} + dependencies: + builtin-status-codes: 3.0.0 + inherits: 2.0.4 + readable-stream: 2.3.7 + to-arraybuffer: 1.0.1 + xtend: 4.0.2 + dev: false + + /stream-shift/1.0.1: + resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} + dev: false + + /strict-uri-encode/1.1.0: + resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==} + engines: {node: '>=0.10.0'} + dev: false + + /string-similarity/4.0.4: + resolution: {integrity: sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==} + dev: false + + /string-width/1.0.2: + resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==} + engines: {node: '>=0.10.0'} + dependencies: + code-point-at: 1.1.0 + is-fullwidth-code-point: 1.0.0 + strip-ansi: 3.0.1 + dev: false + + /string-width/3.1.0: + resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} + engines: {node: '>=6'} + dependencies: + emoji-regex: 7.0.3 + is-fullwidth-code-point: 2.0.0 + strip-ansi: 5.2.0 + dev: false + + /string-width/4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: false + + /string.prototype.trimend/1.0.6: + resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.1 + dev: false + + /string.prototype.trimstart/1.0.6: + resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.1 + dev: false + + /string_decoder/0.10.31: + resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} + dev: false + + /string_decoder/1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + dependencies: + safe-buffer: 5.1.2 + dev: false + + /string_decoder/1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /strip-ansi/3.0.1: + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-regex: 2.1.1 + dev: false + + /strip-ansi/5.2.0: + resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} + engines: {node: '>=6'} + dependencies: + ansi-regex: 4.1.1 + dev: false + + /strip-ansi/6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: false + + /strip-eof/1.0.0: + resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} + engines: {node: '>=0.10.0'} + dev: false + + /strip-json-comments/2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + dev: false + + /strip-json-comments/3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: false + + /stubs/3.0.0: + resolution: {integrity: sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==} + dev: false + + /style-loader/1.3.0_webpack@4.20.2: + resolution: {integrity: sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==} + engines: {node: '>= 8.9.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + loader-utils: 2.0.4 + schema-utils: 2.7.1 + webpack: 4.20.2_webpack-cli@3.3.12 + dev: false + + /style-to-object/0.3.0: + resolution: {integrity: sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==} + dependencies: + inline-style-parser: 0.1.1 + dev: false + + /supports-color/2.0.0: + resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} + engines: {node: '>=0.8.0'} + dev: false + + /supports-color/3.2.3: + resolution: {integrity: sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==} + engines: {node: '>=0.8.0'} + dependencies: + has-flag: 1.0.0 + dev: false + + /supports-color/5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + dev: false + + /supports-color/6.1.0: + resolution: {integrity: sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==} + engines: {node: '>=6'} + dependencies: + has-flag: 3.0.0 + dev: false + + /supports-color/7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: false + + /supports-preserve-symlinks-flag/1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: false + + /symbol-observable/1.2.0: + resolution: {integrity: sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==} + engines: {node: '>=0.10.0'} + dev: false + + /taffydb/2.6.2: + resolution: {integrity: sha512-y3JaeRSplks6NYQuCOj3ZFMO3j60rTwbuKCvZxsAraGYH2epusatvZ0baZYA01WsGqJBq/Dl6vOrMUJqyMj8kA==} + dev: false + + /tapable/1.1.3: + resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} + engines: {node: '>=6'} + dev: false + + /tar-fs/2.1.1: + resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.0 + tar-stream: 2.2.0 + dev: false + + /tar-stream/2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.0 + dev: false + + /tar/6.1.13: + resolution: {integrity: sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==} + engines: {node: '>=10'} + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 4.0.3 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + dev: false + + /tarjan-graph/2.0.0: + resolution: {integrity: sha512-fDe57nO2Ukw2A/jHwVeiEgERGrGHukf3aHmR/YZ9BrveOtHVlFs289AnVeb1wD2aj9g01ZZ6f7VyMJ2QxI2NBQ==} + dev: false + + /tarn/3.0.2: + resolution: {integrity: sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==} + engines: {node: '>=8.0.0'} + dev: false + + /tedious/14.7.0: + resolution: {integrity: sha512-d3qlmZcvZyt7akyPHiOdR+knfzObWZH3mW+gouQTSb7YTSwtpHuYHcvsQabfbY7oOvgbs51xRb7CwOahWK/t9w==} + engines: {node: '>=12.3.0'} + dependencies: + '@azure/identity': 2.1.0 + '@azure/keyvault-keys': 4.6.0 + '@js-joda/core': 5.5.2 + '@types/es-aggregate-error': 1.0.2 + bl: 5.1.0 + es-aggregate-error: 1.0.9 + iconv-lite: 0.6.3 + js-md4: 0.3.2 + jsbi: 4.3.0 + native-duplexpair: 1.0.0 + node-abort-controller: 3.1.1 + punycode: 2.3.0 + sprintf-js: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /teeny-request/7.2.0: + resolution: {integrity: sha512-SyY0pek1zWsi0LRVAALem+avzMLc33MKW/JLLakdP4s9+D7+jHcy5x6P+h94g2QNZsAqQNfX5lsbd3WSeJXrrw==} + engines: {node: '>=10'} + dependencies: + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + node-fetch: 2.6.9 + stream-events: 1.0.5 + uuid: 8.3.2 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /test-console/2.0.0: + resolution: {integrity: sha512-ciILzfCQCny8zy1+HEw2yBLKus7LNMsAHymsp2fhvGTVh5pWE5v2EB7V+5ag3WM9aO2ULtgsXVQePWYE+fb7pA==} + dev: false + + /text-hex/1.0.0: + resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} + dev: false + + /thenify-all/1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + dependencies: + thenify: 3.3.1 + dev: false + + /thenify/3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + dependencies: + any-promise: 1.3.0 + dev: false + + /through/2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: false + + /through2/2.0.5: + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + dependencies: + readable-stream: 2.3.7 + xtend: 4.0.2 + dev: false + + /thunky/1.1.0: + resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} + dev: false + + /timers-browserify/2.0.12: + resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==} + engines: {node: '>=0.6.0'} + dependencies: + setimmediate: 1.0.5 + dev: false + + /tmp/0.2.0: + resolution: {integrity: sha512-spsb5g6EiPmteS5TcOAECU3rltCMDMp4VMU2Sb0+WttN4qGobEkMAd+dkr1cubscN08JGNDX765dPbGImbG7MQ==} + engines: {node: '>=8.17.0'} + dependencies: + rimraf: 3.0.2 + dev: false + + /tmp/0.2.1: + resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==} + engines: {node: '>=8.17.0'} + dependencies: + rimraf: 3.0.2 + dev: false + + /to-arraybuffer/1.0.1: + resolution: {integrity: sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==} + dev: false + + /to-fast-properties/1.0.3: + resolution: {integrity: sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==} + engines: {node: '>=0.10.0'} + dev: false + + /to-fast-properties/2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + dev: false + + /to-object-path/0.3.0: + resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: false + + /to-regex-range/2.1.1: + resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==} + engines: {node: '>=0.10.0'} + dependencies: + is-number: 3.0.0 + repeat-string: 1.6.1 + dev: false + + /to-regex-range/5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: false + + /to-regex/3.0.2: + resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} + engines: {node: '>=0.10.0'} + dependencies: + define-property: 2.0.2 + extend-shallow: 3.0.2 + regex-not: 1.0.2 + safe-regex: 1.1.0 + dev: false + + /toidentifier/1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + dev: false + + /tough-cookie/2.5.0: + resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} + engines: {node: '>=0.8'} + dependencies: + psl: 1.9.0 + punycode: 2.3.0 + dev: false + + /tough-cookie/4.1.2: + resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==} + engines: {node: '>=6'} + dependencies: + psl: 1.9.0 + punycode: 2.3.0 + universalify: 0.2.0 + url-parse: 1.5.10 + dev: false + + /tr46/0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: false + + /triple-beam/1.3.0: + resolution: {integrity: sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==} + dev: false + + /trough/1.0.5: + resolution: {integrity: sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==} + dev: false + + /ts-loader/5.4.5_typescript@3.9.10: + resolution: {integrity: sha512-XYsjfnRQCBum9AMRZpk2rTYSVpdZBpZK+kDh0TeT3kxmQNBDVIeUjdPjY5RZry4eIAb8XHc4gYSUiUWPYvzSRw==} + engines: {node: '>=6.11.5'} + peerDependencies: + typescript: '*' + dependencies: + chalk: 2.4.2 + enhanced-resolve: 4.5.0 + loader-utils: 1.4.2 + micromatch: 3.1.10 + semver: 5.6.0 + typescript: 3.9.10 + transitivePeerDependencies: + - supports-color + dev: false + + /ts-mockito/2.6.1: + resolution: {integrity: sha512-qU9m/oEBQrKq5hwfbJ7MgmVN5Gu6lFnIGWvpxSjrqq6YYEVv+RwVFWySbZMBgazsWqv6ctAyVBpo9TmAxnOEKw==} + dependencies: + lodash: 4.17.21 + dev: false + + /tslib/1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + dev: false + + /tslib/2.3.1: + resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==} + dev: false + + /tslib/2.5.0: + resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} + dev: false + + /tslint-config-prettier/1.18.0: + resolution: {integrity: sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg==} + engines: {node: '>=4.0.0'} + hasBin: true + dev: false + + /tslint-config-security/1.16.0_67neen4t5xfhpau25dyc5p2yey: + resolution: {integrity: sha512-wwM+COg4FX1Gl6VnvaTV9zqcUY6cs4XkiP6T3qhc6s20Xy4J9irui6+fkP07yVkrwfcNFneji3YcIwiMvKSQPQ==} + peerDependencies: + tslib: ^1.9.2 + tslint: ^5.8.0 + typescript: ^2.9.1 || ^3.0.1 + dependencies: + safe-regex: 1.1.0 + tslint: 5.20.1_typescript@3.9.10 + typescript: 3.9.10 + dev: false + + /tslint-react/3.6.0_67neen4t5xfhpau25dyc5p2yey: + resolution: {integrity: sha512-AIv1QcsSnj7e9pFir6cJ6vIncTqxfqeFF3Lzh8SuuBljueYzEAtByuB6zMaD27BL0xhMEqsZ9s5eHuCONydjBw==} + peerDependencies: + tslint: ^5.1.0 + typescript: '>=2.1.0 || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev' + dependencies: + tslint: 5.20.1_typescript@3.9.10 + tsutils: 2.29.0_typescript@3.9.10 + typescript: 3.9.10 + dev: false + + /tslint/5.20.1_typescript@3.9.10: + resolution: {integrity: sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==} + engines: {node: '>=4.8.0'} + hasBin: true + peerDependencies: + typescript: '>=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev' + dependencies: + '@babel/code-frame': 7.18.6 + builtin-modules: 1.1.1 + chalk: 2.4.2 + commander: 2.20.3 + diff: 4.0.2 + glob: 7.2.3 + js-yaml: 3.14.1 + minimatch: 3.1.2 + mkdirp: 0.5.6 + resolve: 1.22.1 + semver: 5.6.0 + tslib: 1.14.1 + tsutils: 2.29.0_typescript@3.9.10 + typescript: 3.9.10 + dev: false + + /tsutils/2.27.2_typescript@3.9.10: + resolution: {integrity: sha512-qf6rmT84TFMuxAKez2pIfR8UCai49iQsfB7YWVjV1bKpy/d0PWT5rEOSM6La9PiHZ0k1RRZQiwVdVJfQ3BPHgg==} + peerDependencies: + typescript: '>=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev' + dependencies: + tslib: 1.14.1 + typescript: 3.9.10 + dev: false + + /tsutils/2.29.0_typescript@3.9.10: + resolution: {integrity: sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==} + peerDependencies: + typescript: '>=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev' + dependencies: + tslib: 1.14.1 + typescript: 3.9.10 + dev: false + + /tty-browserify/0.0.0: + resolution: {integrity: sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==} + dev: false + + /tunnel-agent/0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /tunnel/0.0.6: + resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} + engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} + dev: false + + /tweetnacl/0.14.5: + resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + dev: false + + /type-check/0.3.2: + resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.1.2 + dev: false + + /type-detect/4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + dev: false + + /type-is/1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + dev: false + + /typed-array-length/1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + dependencies: + call-bind: 1.0.2 + for-each: 0.3.3 + is-typed-array: 1.1.10 + dev: false + + /typed-css-modules/0.6.8: + resolution: {integrity: sha512-NCDFI7bR+PZGoEwAYPnUtDAeGuy9UrgS10oDV5K74tUX6gm3LRbPT3Mwu0f92/6VG4GgWPJRWZSlYmdQU8xLOg==} + engines: {node: '>=8.0.0'} + hasBin: true + dependencies: + '@types/css-modules-loader-core': 1.1.0 + camelcase: 5.3.1 + chalk: 2.4.2 + chokidar: 3.5.3 + css-modules-loader-core: 1.1.0 + glob: 7.2.3 + is-there: 4.5.1 + mkdirp: 0.5.6 + yargs: 15.4.1 + dev: false + + /typed-rest-client/1.8.9: + resolution: {integrity: sha512-uSmjE38B80wjL85UFX3sTYEUlvZ1JgCRhsWj/fJ4rZ0FqDUFoIuodtiVeE+cUqiVTOKPdKrp/sdftD15MDek6g==} + dependencies: + qs: 6.11.0 + tunnel: 0.0.6 + underscore: 1.13.6 + dev: false + + /typed-styles/0.0.7: + resolution: {integrity: sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q==} + dev: false + + /typedarray-to-buffer/3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + dependencies: + is-typedarray: 1.0.0 + dev: false + + /typedarray/0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + dev: false + + /typedoc-default-themes/0.11.4: + resolution: {integrity: sha512-Y4Lf+qIb9NTydrexlazAM46SSLrmrQRqWiD52593g53SsmUFioAsMWt8m834J6qsp+7wHRjxCXSZeiiW5cMUdw==} + engines: {node: '>= 8'} + dev: false + + /typedoc/0.19.2_typescript@3.9.10: + resolution: {integrity: sha512-oDEg1BLEzi1qvgdQXc658EYgJ5qJLVSeZ0hQ57Eq4JXy6Vj2VX4RVo18qYxRWz75ifAaYuYNBUCnbhjd37TfOg==} + engines: {node: '>= 10.0.0'} + hasBin: true + peerDependencies: + typescript: 3.9.x || 4.0.x + dependencies: + fs-extra: 9.1.0 + handlebars: 4.7.7 + highlight.js: 10.7.3 + lodash: 4.17.21 + lunr: 2.3.9 + marked: 1.2.9 + minimatch: 3.1.2 + progress: 2.0.3 + semver: 7.3.8 + shelljs: 0.8.5 + typedoc-default-themes: 0.11.4 + typescript: 3.9.10 + dev: false + + /typescript/3.9.10: + resolution: {integrity: sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: false + + /ua-parser-js/0.7.33: + resolution: {integrity: sha512-s8ax/CeZdK9R/56Sui0WM6y9OFREJarMRHqLB2EwkovemBxNQ+Bqu8GAsUnVcXKgphb++ghr/B2BZx4mahujPw==} + dev: false + + /uc.micro/1.0.6: + resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} + dev: false + + /uglify-es/3.3.9: + resolution: {integrity: sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==} + engines: {node: '>=0.8.0'} + deprecated: support for ECMAScript is superseded by `uglify-js` as of v3.13.0 + hasBin: true + dependencies: + commander: 2.13.0 + source-map: 0.6.1 + dev: false + + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + dev: false + + /uglifyjs-webpack-plugin/1.3.0_webpack@4.20.2: + resolution: {integrity: sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw==} + engines: {node: '>= 4.8 < 5.0.0 || >= 5.10'} + peerDependencies: + webpack: ^2.0.0 || ^3.0.0 || ^4.0.0 + dependencies: + cacache: 10.0.4 + find-cache-dir: 1.0.0 + schema-utils: 0.4.7 + serialize-javascript: 1.9.1 + source-map: 0.6.1 + uglify-es: 3.3.9 + webpack: 4.20.2_webpack-cli@3.3.12 + webpack-sources: 1.4.3 + worker-farm: 1.7.0 + dev: false + + /unbox-primitive/1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + dependencies: + call-bind: 1.0.2 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + dev: false + + /underscore/1.13.6: + resolution: {integrity: sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==} + dev: false + + /unescape/1.0.1: + resolution: {integrity: sha512-O0+af1Gs50lyH1nUu3ZyYS1cRh01Q/kUKatTOkSs7jukXE6/NebucDVxyiDsA9AQ4JC1V1jUH9EO8JX2nMDgGQ==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 2.0.1 + dev: false + + /unified/9.2.2: + resolution: {integrity: sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==} + dependencies: + '@types/unist': 2.0.6 + bail: 1.0.5 + extend: 3.0.2 + is-buffer: 2.0.5 + is-plain-obj: 2.1.0 + trough: 1.0.5 + vfile: 4.2.1 + dev: false + + /union-value/1.0.1: + resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} + engines: {node: '>=0.10.0'} + dependencies: + arr-union: 3.1.0 + get-value: 2.0.6 + is-extendable: 0.1.1 + set-value: 2.0.1 + dev: false + + /unique-filename/1.1.1: + resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==} + dependencies: + unique-slug: 2.0.2 + dev: false + + /unique-slug/2.0.2: + resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==} + dependencies: + imurmurhash: 0.1.4 + dev: false + + /unique-string/2.0.0: + resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} + engines: {node: '>=8'} + dependencies: + crypto-random-string: 2.0.0 + dev: false + + /unist-builder/2.0.3: + resolution: {integrity: sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==} + dev: false + + /unist-util-generated/1.1.6: + resolution: {integrity: sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==} + dev: false + + /unist-util-is/3.0.0: + resolution: {integrity: sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==} + dev: false + + /unist-util-is/4.1.0: + resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==} + dev: false + + /unist-util-position/3.1.0: + resolution: {integrity: sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==} + dev: false + + /unist-util-stringify-position/2.0.3: + resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} + dependencies: + '@types/unist': 2.0.6 + dev: false + + /unist-util-visit-parents/2.1.2: + resolution: {integrity: sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==} + dependencies: + unist-util-is: 3.0.0 + dev: false + + /unist-util-visit-parents/3.1.1: + resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==} + dependencies: + '@types/unist': 2.0.6 + unist-util-is: 4.1.0 + dev: false + + /unist-util-visit/1.4.1: + resolution: {integrity: sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==} + dependencies: + unist-util-visit-parents: 2.1.2 + dev: false + + /unist-util-visit/2.0.3: + resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==} + dependencies: + '@types/unist': 2.0.6 + unist-util-is: 4.1.0 + unist-util-visit-parents: 3.1.1 + dev: false + + /universal-user-agent/4.0.1: + resolution: {integrity: sha512-LnST3ebHwVL2aNe4mejI9IQh2HfZ1RLo8Io2HugSif8ekzD1TlWpHpColOB/eh8JHMLkGH3Akqf040I+4ylNxg==} + dependencies: + os-name: 3.1.0 + dev: false + + /universal-user-agent/6.0.0: + resolution: {integrity: sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==} + dev: false + + /universalify/0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + dev: false + + /universalify/0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + dev: false + + /universalify/2.0.0: + resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} + engines: {node: '>= 10.0.0'} + dev: false + + /unpipe/1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + dev: false + + /unset-value/1.0.0: + resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} + engines: {node: '>=0.10.0'} + dependencies: + has-value: 0.3.1 + isobject: 3.0.1 + dev: false + + /untildify/4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} + dev: false + + /upath/1.2.0: + resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} + engines: {node: '>=4'} + dev: false + + /uri-js/4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.0 + dev: false + + /urix/0.1.0: + resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} + deprecated: Please see https://github.com/lydell/urix#deprecated + dev: false + + /url-join/1.1.0: + resolution: {integrity: sha512-zz1wZk4Lb5PTVwZ3HWDmm8XnlPvmOof6/fjdDPA5yBrUcbtV64U6bV832Zf1BtU2WkBBWaUT46wCs+l0HP5nhg==} + dev: false + + /url-loader/4.1.1_2c6qqbqbasso6mdb2onhrh4axm: + resolution: {integrity: sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==} + engines: {node: '>= 10.13.0'} + peerDependencies: + file-loader: '*' + webpack: ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + file-loader: + optional: true + dependencies: + file-loader: 6.2.0_webpack@4.20.2 + loader-utils: 2.0.4 + mime-types: 2.1.35 + schema-utils: 3.1.1 + webpack: 4.20.2_webpack-cli@3.3.12 + dev: false + + /url-parse/1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + dev: false + + /url/0.10.3: + resolution: {integrity: sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==} + dependencies: + punycode: 1.3.2 + querystring: 0.2.0 + dev: false + + /url/0.11.0: + resolution: {integrity: sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==} + dependencies: + punycode: 1.3.2 + querystring: 0.2.0 + dev: false + + /urllib/2.40.0: + resolution: {integrity: sha512-XDZjoijtzsbkXTXgM+A/sJM002nwoYsc46YOYr6MNH2jUUw1nCBf2ywT1WaPsVEWJX4Yr+9isGmYj4+yofFn9g==} + engines: {node: '>= 0.10.0'} + dependencies: + any-promise: 1.3.0 + content-type: 1.0.5 + debug: 2.6.9 + default-user-agent: 1.0.0 + digest-header: 1.0.0 + ee-first: 1.1.1 + formstream: 1.1.1 + humanize-ms: 1.2.1 + iconv-lite: 0.4.24 + ip: 1.1.8 + proxy-agent: 5.0.0 + pump: 3.0.0 + qs: 6.11.0 + statuses: 1.5.0 + utility: 1.17.0 + transitivePeerDependencies: + - supports-color + dev: false + + /use/3.1.1: + resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} + engines: {node: '>=0.10.0'} + dev: false + + /util-deprecate/1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: false + + /util/0.10.3: + resolution: {integrity: sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==} + dependencies: + inherits: 2.0.1 + dev: false + + /util/0.11.1: + resolution: {integrity: sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==} + dependencies: + inherits: 2.0.3 + dev: false + + /util/0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.10 + which-typed-array: 1.1.9 + dev: false + + /utility/1.17.0: + resolution: {integrity: sha512-KdVkF9An/0239BJ4+dqOa7NPrPIOeQE9AGfx0XS16O9DBiHNHRJMoeU5nL6pRGAkgJOqdOu8R4gBRcXnAocJKw==} + engines: {node: '>= 0.12.0'} + dependencies: + copy-to: 2.0.1 + escape-html: 1.0.3 + mkdirp: 0.5.6 + mz: 2.7.0 + unescape: 1.0.1 + dev: false + + /utils-merge/1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + dev: false + + /uuid/3.4.0: + resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} + deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. + hasBin: true + dev: false + + /uuid/7.0.3: + resolution: {integrity: sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==} + hasBin: true + dev: false + + /uuid/8.0.0: + resolution: {integrity: sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==} + hasBin: true + dev: false + + /uuid/8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + dev: false + + /v8-compile-cache/2.3.0: + resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} + dev: false + + /validator/13.9.0: + resolution: {integrity: sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==} + engines: {node: '>= 0.10'} + dev: false + + /vary/1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + dev: false + + /verror/1.10.0: + resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} + engines: {'0': node >=0.6.0} + dependencies: + assert-plus: 1.0.0 + core-util-is: 1.0.2 + extsprintf: 1.3.0 + dev: false + + /vfile-location/3.2.0: + resolution: {integrity: sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==} + dev: false + + /vfile-message/2.0.4: + resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==} + dependencies: + '@types/unist': 2.0.6 + unist-util-stringify-position: 2.0.3 + dev: false + + /vfile/4.2.1: + resolution: {integrity: sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==} + dependencies: + '@types/unist': 2.0.6 + is-buffer: 2.0.5 + unist-util-stringify-position: 2.0.3 + vfile-message: 2.0.4 + dev: false + + /vm-browserify/1.1.2: + resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} + dev: false + + /vm2/3.9.13: + resolution: {integrity: sha512-0rvxpB8P8Shm4wX2EKOiMp7H2zq+HUE/UwodY0pCZXs9IffIKZq6vUti5OgkVCTakKo9e/fgO4X1fkwfjWxE3Q==} + engines: {node: '>=6.0'} + hasBin: true + dependencies: + acorn: 8.8.2 + acorn-walk: 8.2.0 + dev: false + + /vsce/1.103.1: + resolution: {integrity: sha512-98oKQKKRp7J/vTIk1cuzom5cezZpYpRHs3WlySdsrTCrAEipB/HvaPTc4VZ3hGZHzHXS9P5p2L0IllntJeXwiQ==} + engines: {node: '>= 10'} + deprecated: vsce has been renamed to @vscode/vsce. Install using @vscode/vsce instead. + hasBin: true + dependencies: + azure-devops-node-api: 11.2.0 + chalk: 2.4.2 + cheerio: 1.0.0-rc.12 + commander: 6.2.1 + denodeify: 1.2.1 + glob: 7.2.3 + hosted-git-info: 4.1.0 + keytar: 7.9.0 + leven: 3.1.0 + lodash: 4.17.21 + markdown-it: 10.0.0 + mime: 1.6.0 + minimatch: 3.1.2 + osenv: 0.1.5 + parse-semver: 1.1.1 + read: 1.0.7 + semver: 5.6.0 + tmp: 0.2.1 + typed-rest-client: 1.8.9 + url-join: 1.1.0 + xml2js: 0.4.23 + yauzl: 2.10.0 + yazl: 2.5.1 + dev: false + + /vscode-jsonrpc/5.0.1: + resolution: {integrity: sha512-JvONPptw3GAQGXlVV2utDcHx0BiY34FupW/kI6mZ5x06ER5DdPG/tXWMVHjTNULF5uKPOUUD0SaXg5QaubJL0A==} + engines: {node: '>=8.0.0 || >=10.0.0'} + dev: false + + /vscode-jsonrpc/8.1.0: + resolution: {integrity: sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw==} + engines: {node: '>=14.0.0'} + dev: false + + /vscode-languageclient/6.1.4: + resolution: {integrity: sha512-EUOU+bJu6axmt0RFNo3nrglQLPXMfanbYViJee3Fbn2VuQoX0ZOI4uTYhSRvYLP2vfwTP/juV62P/mksCdTZMA==} + engines: {vscode: ^1.41.0} + dependencies: + semver: 6.3.0 + vscode-languageserver-protocol: 3.15.3 + dev: false + + /vscode-languageserver-protocol/3.15.3: + resolution: {integrity: sha512-zrMuwHOAQRhjDSnflWdJG+O2ztMWss8GqUUB8dXLR/FPenwkiBNkMIJJYfSN6sgskvsF0rHAoBowNQfbyZnnvw==} + dependencies: + vscode-jsonrpc: 5.0.1 + vscode-languageserver-types: 3.15.1 + dev: false + + /vscode-languageserver-protocol/3.17.3: + resolution: {integrity: sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA==} + dependencies: + vscode-jsonrpc: 8.1.0 + vscode-languageserver-types: 3.17.3 + dev: false + + /vscode-languageserver-textdocument/1.0.8: + resolution: {integrity: sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==} + dev: false + + /vscode-languageserver-types/3.15.1: + resolution: {integrity: sha512-+a9MPUQrNGRrGU630OGbYVQ+11iOIovjCkqxajPa9w57Sd5ruK8WQNsslzpa0x/QJqC8kRc2DUxWjIFwoNm4ZQ==} + dev: false + + /vscode-languageserver-types/3.17.3: + resolution: {integrity: sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==} + dev: false + + /vscode-languageserver/6.1.1: + resolution: {integrity: sha512-DueEpkUAkD5XTR4MLYNr6bQIp/UFR0/IPApgXU3YfCBCB08u2sm9hRCs6DxYZELkk++STPjpcjksR2H8qI3cDQ==} + hasBin: true + dependencies: + vscode-languageserver-protocol: 3.17.3 + dev: false + + /warning/3.0.0: + resolution: {integrity: sha512-jMBt6pUrKn5I+OGgtQ4YZLdhIeJmObddh6CsibPxyQ5yPZm1XExSyzC1LCNX7BzhxWgiHmizBWJTHJIjMjTQYQ==} + dependencies: + loose-envify: 1.4.0 + dev: false + + /warning/4.0.3: + resolution: {integrity: sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==} + dependencies: + loose-envify: 1.4.0 + dev: false + + /watchpack-chokidar2/2.0.1: + resolution: {integrity: sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==} + requiresBuild: true + dependencies: + chokidar: 2.1.8 + transitivePeerDependencies: + - supports-color + dev: false + optional: true + + /watchpack/1.7.5: + resolution: {integrity: sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==} + dependencies: + graceful-fs: 4.2.10 + neo-async: 2.6.2 + optionalDependencies: + chokidar: 3.5.3 + watchpack-chokidar2: 2.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /wbuf/1.7.3: + resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} + dependencies: + minimalistic-assert: 1.0.1 + dev: false + + /web-namespaces/1.1.4: + resolution: {integrity: sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==} + dev: false + + /webidl-conversions/3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: false + + /webpack-cli/3.3.12_webpack@4.20.2: + resolution: {integrity: sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==} + engines: {node: '>=6.11.5'} + hasBin: true + peerDependencies: + webpack: 4.x.x + dependencies: + chalk: 2.4.2 + cross-spawn: 6.0.5 + enhanced-resolve: 4.5.0 + findup-sync: 3.0.0_supports-color@6.1.0 + global-modules: 2.0.0 + import-local: 2.0.0 + interpret: 1.4.0 + loader-utils: 1.4.2 + supports-color: 6.1.0 + v8-compile-cache: 2.3.0 + webpack: 4.20.2_webpack-cli@3.3.12 + yargs: 13.3.2 + dev: false + + /webpack-dev-middleware/3.7.3_webpack@4.20.2: + resolution: {integrity: sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==} + engines: {node: '>= 6'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + memory-fs: 0.4.1 + mime: 2.6.0 + mkdirp: 0.5.6 + range-parser: 1.2.1 + webpack: 4.20.2_webpack-cli@3.3.12 + webpack-log: 2.0.0 + dev: false + + /webpack-dev-server/3.11.3_ulcebcz4bfowhsawl25alqvaxy: + resolution: {integrity: sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA==} + engines: {node: '>= 6.11.5'} + hasBin: true + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + ansi-html-community: 0.0.8 + bonjour: 3.5.0 + chokidar: 2.1.8_supports-color@6.1.0 + compression: 1.7.4_supports-color@6.1.0 + connect-history-api-fallback: 1.6.0 + debug: 4.3.4_supports-color@6.1.0 + del: 4.1.1 + express: 4.18.2_supports-color@6.1.0 + html-entities: 1.4.0 + http-proxy-middleware: 0.19.1_tmpgdztspuwvsxzgjkhoqk7duq + import-local: 2.0.0 + internal-ip: 4.3.0 + ip: 1.1.8 + is-absolute-url: 3.0.3 + killable: 1.0.1 + loglevel: 1.8.1 + opn: 5.5.0 + p-retry: 3.0.1 + portfinder: 1.0.32_supports-color@6.1.0 + schema-utils: 1.0.0 + selfsigned: 1.10.14 + semver: 6.3.0 + serve-index: 1.9.1_supports-color@6.1.0 + sockjs: 0.3.24 + sockjs-client: 1.6.1_supports-color@6.1.0 + spdy: 4.0.2_supports-color@6.1.0 + strip-ansi: 3.0.1 + supports-color: 6.1.0 + url: 0.11.0 + webpack: 4.20.2_webpack-cli@3.3.12 + webpack-cli: 3.3.12_webpack@4.20.2 + webpack-dev-middleware: 3.7.3_webpack@4.20.2 + webpack-log: 2.0.0 + ws: 6.2.2 + yargs: 13.3.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /webpack-log/2.0.0: + resolution: {integrity: sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==} + engines: {node: '>= 6'} + dependencies: + ansi-colors: 3.2.4 + uuid: 3.4.0 + dev: false + + /webpack-sources/1.4.3: + resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} + dependencies: + source-list-map: 2.0.1 + source-map: 0.6.1 + dev: false + + /webpack/4.20.2_webpack-cli@3.3.12: + resolution: {integrity: sha512-75WFUMblcWYcocjSLlXCb71QuGyH7egdBZu50FtBGl2Nso8CK3Ej+J7bTZz2FPFq5l6fzCisD9modB7t30ikuA==} + engines: {node: '>=6.11.5'} + hasBin: true + peerDependencies: + webpack-cli: '*' + webpack-command: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + webpack-command: + optional: true + dependencies: + '@webassemblyjs/ast': 1.7.8 + '@webassemblyjs/helper-module-context': 1.7.8 + '@webassemblyjs/wasm-edit': 1.7.8 + '@webassemblyjs/wasm-parser': 1.7.8 + acorn: 5.7.4 + acorn-dynamic-import: 3.0.0 + ajv: 6.12.6 + ajv-keywords: 3.5.2_ajv@6.12.6 + chrome-trace-event: 1.0.3 + enhanced-resolve: 4.5.0 + eslint-scope: 4.0.3 + json-parse-better-errors: 1.0.2 + loader-runner: 2.4.0 + loader-utils: 1.4.2 + memory-fs: 0.4.1 + micromatch: 3.1.10 + mkdirp: 0.5.6 + neo-async: 2.6.2 + node-libs-browser: 2.2.1 + schema-utils: 0.4.7 + tapable: 1.1.3 + uglifyjs-webpack-plugin: 1.3.0_webpack@4.20.2 + watchpack: 1.7.5 + webpack-cli: 3.3.12_webpack@4.20.2 + webpack-sources: 1.4.3 + transitivePeerDependencies: + - supports-color + dev: false + + /websocket-driver/0.7.4: + resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} + engines: {node: '>=0.8.0'} + dependencies: + http-parser-js: 0.5.8 + safe-buffer: 5.2.1 + websocket-extensions: 0.1.4 + dev: false + + /websocket-extensions/0.1.4: + resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} + engines: {node: '>=0.8.0'} + dev: false + + /whatwg-fetch/3.6.2: + resolution: {integrity: sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==} + dev: false + + /whatwg-url/5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + dev: false + + /which-boxed-primitive/1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: false + + /which-module/2.0.0: + resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==} + dev: false + + /which-typed-array/1.1.9: + resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + is-typed-array: 1.1.10 + dev: false + + /which/1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: false + + /wide-align/1.1.5: + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + dependencies: + string-width: 4.2.3 + dev: false + + /win-release/1.1.1: + resolution: {integrity: sha512-iCRnKVvGxOQdsKhcQId2PXV1vV3J/sDPXKA4Oe9+Eti2nb2ESEsYHRYls/UjoUW3bIc5ZDO8dTH50A/5iVN+bw==} + engines: {node: '>=0.10.0'} + dependencies: + semver: 5.6.0 + dev: false + + /window-size/0.1.4: + resolution: {integrity: sha512-2thx4pB0cV3h+Bw7QmMXcEbdmOzv9t0HFplJH/Lz6yu60hXYy5RT8rUu+wlIreVxWsGN20mo+MHeCSfUpQBwPw==} + engines: {node: '>= 0.10.0'} + hasBin: true + dev: false + + /windows-release/3.3.3: + resolution: {integrity: sha512-OSOGH1QYiW5yVor9TtmXKQvt2vjQqbYS+DqmsZw+r7xDwLXEeT3JGW0ZppFmHx4diyXmxt238KFR3N9jzevBRg==} + engines: {node: '>=6'} + dependencies: + execa: 1.0.0 + dev: false + + /winston-transport/4.5.0: + resolution: {integrity: sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==} + engines: {node: '>= 6.4.0'} + dependencies: + logform: 2.5.1 + readable-stream: 3.6.0 + triple-beam: 1.3.0 + dev: false + + /winston/3.8.2: + resolution: {integrity: sha512-MsE1gRx1m5jdTTO9Ld/vND4krP2To+lgDoMEHGGa4HIlAUyXJtfc7CxQcGXVyz2IBpw5hbFkj2b/AtUdQwyRew==} + engines: {node: '>= 12.0.0'} + dependencies: + '@colors/colors': 1.5.0 + '@dabh/diagnostics': 2.0.3 + async: 3.2.4 + is-stream: 2.0.1 + logform: 2.5.1 + one-time: 1.0.0 + readable-stream: 3.6.0 + safe-stable-stringify: 2.4.2 + stack-trace: 0.0.10 + triple-beam: 1.3.0 + winston-transport: 4.5.0 + dev: false + + /word-wrap/1.2.3: + resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} + engines: {node: '>=0.10.0'} + dev: false + + /wordwrap/1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + dev: false + + /worker-farm/1.7.0: + resolution: {integrity: sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==} + dependencies: + errno: 0.1.8 + dev: false + + /wrap-ansi/2.1.0: + resolution: {integrity: sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==} + engines: {node: '>=0.10.0'} + dependencies: + string-width: 1.0.2 + strip-ansi: 3.0.1 + dev: false + + /wrap-ansi/5.1.0: + resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==} + engines: {node: '>=6'} + dependencies: + ansi-styles: 3.2.1 + string-width: 3.1.0 + strip-ansi: 5.2.0 + dev: false + + /wrap-ansi/6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: false + + /wrap-ansi/7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: false + + /wrappy/1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: false + + /write-file-atomic/3.0.3: + resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} + dependencies: + imurmurhash: 0.1.4 + is-typedarray: 1.0.0 + signal-exit: 3.0.7 + typedarray-to-buffer: 3.1.5 + dev: false + + /ws/6.2.2: + resolution: {integrity: sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dependencies: + async-limiter: 1.0.1 + dev: false + + /xdg-basedir/4.0.0: + resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==} + engines: {node: '>=8'} + dev: false + + /xml2js/0.4.19: + resolution: {integrity: sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==} + dependencies: + sax: 1.2.1 + xmlbuilder: 9.0.7 + dev: false + + /xml2js/0.4.23: + resolution: {integrity: sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==} + engines: {node: '>=4.0.0'} + dependencies: + sax: 1.2.4 + xmlbuilder: 11.0.1 + dev: false + + /xmlbuilder/11.0.1: + resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} + engines: {node: '>=4.0'} + dev: false + + /xmlbuilder/9.0.7: + resolution: {integrity: sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ==} + engines: {node: '>=4.0'} + dev: false + + /xmlcreate/2.0.4: + resolution: {integrity: sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==} + dev: false + + /xregexp/2.0.0: + resolution: {integrity: sha512-xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA==} + dev: false + + /xtend/4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: false + + /y18n/3.2.2: + resolution: {integrity: sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==} + dev: false + + /y18n/4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + dev: false + + /y18n/5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: false + + /yallist/2.1.2: + resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} + dev: false + + /yallist/3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: false + + /yallist/4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: false + + /yargs-parser/13.1.2: + resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==} + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + dev: false + + /yargs-parser/18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + dev: false + + /yargs-parser/20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + dev: false + + /yargs/13.3.2: + resolution: {integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==} + dependencies: + cliui: 5.0.0 + find-up: 3.0.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 3.1.0 + which-module: 2.0.0 + y18n: 4.0.3 + yargs-parser: 13.1.2 + dev: false + + /yargs/15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.3 + which-module: 2.0.0 + y18n: 4.0.3 + yargs-parser: 18.1.3 + dev: false + + /yargs/16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + dependencies: + cliui: 7.0.4 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + dev: false + + /yargs/3.32.0: + resolution: {integrity: sha512-ONJZiimStfZzhKamYvR/xvmgW3uEkAUFSP91y2caTEPhzF6uP2JfPiVZcq66b/YR0C3uitxSV7+T1x8p5bkmMg==} + dependencies: + camelcase: 2.1.1 + cliui: 3.2.0 + decamelize: 1.2.0 + os-locale: 1.4.0 + string-width: 1.0.2 + window-size: 0.1.4 + y18n: 3.2.2 + dev: false + + /yauzl/2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + dev: false + + /yazl/2.5.1: + resolution: {integrity: sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==} + dependencies: + buffer-crc32: 0.2.13 + dev: false + + /yocto-queue/0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: false + + /zwitch/1.0.5: + resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==} + dev: false diff --git a/protos/BUILD b/protos/BUILD index 611a68794..1637fa477 100644 --- a/protos/BUILD +++ b/protos/BUILD @@ -1,5 +1,7 @@ load("@rules_proto//proto:defs.bzl", "proto_library") load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library") +load("//tools:ts_proto_library.bzl", "ts_proto_compile") +load("//testing:build_test.bzl", "build_test") package(default_visibility = ["//visibility:public"]) @@ -37,18 +39,16 @@ go_proto_library( proto = ":dataform_proto", ) -load("//tools:ts_proto_library.bzl", "ts_proto_library") - -ts_proto_library( +ts_proto_compile( name = "ts", - deps = [ + protos = [ ":dataform_proto", ":server_proto", ], + verbose = 4, + visibility = ["//visibility:public"], ) -load("//testing:build_test.bzl", "build_test") - build_test( name = "build_test", deps = [ diff --git a/tools/BUILD b/tools/BUILD index 959b00714..44e2218bb 100644 --- a/tools/BUILD +++ b/tools/BUILD @@ -1 +1,17 @@ +load("@npm//:ts-proto/package_json.bzl", _ts_proto_bin_factories = "bin") +load("@rules_proto_grpc//:defs.bzl", "proto_plugin") + exports_files(["ts_proto_library.bzl"]) + +_ts_proto_bin_factories.protoc_gen_ts_proto_binary( + name = "protoc-gen-ts-proto", +) + +proto_plugin( + name = "ts_proto_compile", + outputs = ["{protopath}.ts"], + protoc_plugin_name = "ts_proto", + tool = ":protoc-gen-ts-proto", + use_built_in_shell_environment = False, + visibility = ["//visibility:public"], +) diff --git a/tools/ts_library.bzl b/tools/ts_library.bzl index f6406a9ff..818d50dd3 100644 --- a/tools/ts_library.bzl +++ b/tools/ts_library.bzl @@ -1,10 +1,9 @@ -load("@npm_bazel_typescript//:index.bzl", native_ts_library = "ts_library") +load("@aspect_rules_ts//ts:defs.bzl", native_ts_library = "ts_project") def ts_library(**kwargs): native_ts_library( - devmode_target = "es2017", - prodmode_target = "es2017", - devmode_module = "commonjs", - prodmode_module = "esnext", + tsconfig = "//:tsconfig", + declaration = True, + source_map = True, **kwargs ) diff --git a/tools/ts_proto_library.bzl b/tools/ts_proto_library.bzl index 3caf17612..e3e1debbf 100644 --- a/tools/ts_proto_library.bzl +++ b/tools/ts_proto_library.bzl @@ -1,128 +1,47 @@ -# Stolen entirely from: https://github.com/bazelbuild/rules_nodejs/blob/master/packages/labs/src/protobufjs/ts_proto_library.bzl -# TODO: Use the rules in the labs package. They are currently broken. - -load("@build_bazel_rules_nodejs//:providers.bzl", "DeclarationInfo", "JSEcmaScriptModuleInfo", "JSNamedModuleInfo") - -def _run_pbjs(actions, executable, output_name, proto_files, suffix = ".js", wrap = "default", amd_name = ""): - js_file = actions.declare_file(output_name + suffix) - - # Reference of arguments: - # https://github.com/dcodeIO/ProtoBuf.js/#pbjs-for-javascript - args = actions.args() - args.add_all(["--target", "static-module"]) - args.add_all(["--wrap", wrap]) - args.add("--strict-long") # Force usage of Long type with int64 fields - args.add_all(["--out", js_file.path]) - args.add_all(proto_files) - - actions.run( - executable = executable._pbjs, - inputs = proto_files, - outputs = [js_file], - arguments = [args], - ) - return js_file - -def _run_pbts(actions, executable, js_file): - ts_file = actions.declare_file(js_file.basename[:-len(".js")] + ".d.ts") - - # Reference of arguments: - # https://github.com/dcodeIO/ProtoBuf.js/#pbts-for-typescript - args = actions.args() - args.add_all(["--out", ts_file.path]) - args.add(js_file.path) - - actions.run( - executable = executable._pbts, - progress_message = "Generating typings from %s" % js_file.short_path, - inputs = [js_file], - outputs = [ts_file], - arguments = [args], - ) - return ts_file - -def _ts_proto_library(ctx): - sources = depset() - for dep in ctx.attr.deps: - if ProtoInfo not in dep: - fail("ts_proto_library dep %s must be a proto_library rule" % dep.label) - - sources = depset(transitive = [sources, dep[ProtoInfo].transitive_sources]) - - output_name = ctx.attr.output_name or ctx.label.name - - js_es5 = _run_pbjs( - ctx.actions, - ctx.executable, - output_name, - sources, - amd_name = "/".join([p for p in [ - ctx.workspace_name, - ctx.label.package, - ] if p]), - ) - js_es6 = _run_pbjs( - ctx.actions, - ctx.executable, - output_name, - sources, - suffix = ".mjs", - wrap = "es6", - ) - - # pbts doesn't understand '.mjs' extension so give it the es5 file - dts = _run_pbts(ctx.actions, ctx.executable, js_es5) - - # Return a structure that is compatible with the deps[] of a ts_library. - declarations = depset([dts]) - es5_sources = depset([js_es5]) - es6_sources = depset([js_es6]) - - return struct( - providers = [ - DefaultInfo(files = declarations), - DeclarationInfo( - declarations = declarations, - transitive_declarations = declarations, - type_blacklisted_declarations = depset(), - ), - JSNamedModuleInfo( - direct_sources = es5_sources, - sources = es5_sources, - ), - JSEcmaScriptModuleInfo( - direct_sources = es6_sources, - sources = es6_sources, - ), - ], - typescript = struct( - declarations = declarations, - transitive_declarations = declarations, - es5_sources = es5_sources, - es6_sources = es6_sources, - transitive_es5_sources = es5_sources, - transitive_es6_sources = es6_sources, - type_blacklisted_declarations = depset(), - ), - ) +""" +Borrowed from https://github.com/aspect-build/rules_js/issues/397#issuecomment-1320977306 +""" + +load( + "@rules_proto_grpc//:defs.bzl", + "ProtoPluginInfo", + "proto_compile_attrs", + "proto_compile_impl", +) -ts_proto_library = rule( - implementation = _ts_proto_library, - attrs = { - "output_name": attr.string( - doc = """Name of the resulting module, which you will import from. - If not specified, the name will match the target's name.""", - ), - "deps": attr.label_list(doc = "proto_library targets"), - "_pbjs": attr.label( - default = Label("//:pbjs"), - executable = True, - cfg = "host", - ), - "_pbts": attr.label( - default = Label("//:pbts"), - executable = True, - cfg = "host", +def _ts_proto_compile_impl(ctx): + """ + Implementation function for ts_proto_compile. + + Args: + ctx: The Bazel rule execution context object. + + Returns: + Providers: + - ProtoCompileInfo + - DefaultInfo + + """ + base_env = { + # Make up for https://github.com/bazelbuild/bazel/issues/15470. + "BAZEL_BINDIR": ctx.bin_dir.path, + } + return proto_compile_impl(ctx, base_env = base_env) + +# based on https://github.com/aspect-build/rules_js/issues/397 +ts_proto_compile = rule( + implementation = _ts_proto_compile_impl, + attrs = dict( + proto_compile_attrs, + _plugins = attr.label_list( + providers = [ProtoPluginInfo], + default = [ + Label("//tools:ts_proto_compile"), + ], + doc = "List of protoc plugins to apply", ), - }, + ), + toolchains = [ + str(Label("@rules_proto_grpc//protobuf:toolchain_type")), + ], ) From 880e6ea358290669976fb14cb703d655bbc58a05 Mon Sep 17 00:00:00 2001 From: Elias Kassell Date: Thu, 16 Feb 2023 12:23:01 +0000 Subject: [PATCH 2/9] Working proto-ts --- .../npm_translate_lock_LTE4Nzc1MDcwNjU= | 4 +- .gitignore | 2 + BUILD | 74 +++++++++---------- WORKSPACE | 16 ++-- package.json | 1 + pnpm-lock.yaml | 74 +++++++++++++++++++ protos/BUILD | 17 ----- protos/evaluation.proto | 2 +- protos/server.proto | 15 ---- tools/BUILD | 33 ++++++++- tools/ts_proto_library.bzl | 28 ++++--- 11 files changed, 170 insertions(+), 96 deletions(-) delete mode 100644 protos/server.proto diff --git a/.aspect/rules/external_repository_action_cache/npm_translate_lock_LTE4Nzc1MDcwNjU= b/.aspect/rules/external_repository_action_cache/npm_translate_lock_LTE4Nzc1MDcwNjU= index 8a9da8f18..9bb9ca78e 100755 --- a/.aspect/rules/external_repository_action_cache/npm_translate_lock_LTE4Nzc1MDcwNjU= +++ b/.aspect/rules/external_repository_action_cache/npm_translate_lock_LTE4Nzc1MDcwNjU= @@ -1,4 +1,4 @@ # Input hashes for repository rule npm_translate_lock(name = "npm", pnpm_lock = "//:pnpm-lock.yaml"). # This file should be checked into version control along with the pnpm-lock.yaml file. -pnpm-lock.yaml=-1964332417 -package.json=-409486433 +pnpm-lock.yaml=782597252 +package.json=2076233675 diff --git a/.gitignore b/.gitignore index 379db1187..bc346ec0b 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,5 @@ lerna-debug.log go.sum .df-credentials.json + +.aspect/ diff --git a/BUILD b/BUILD index 8a7a1e047..b4637999b 100644 --- a/BUILD +++ b/BUILD @@ -1,8 +1,11 @@ load("@aspect_rules_js//js:defs.bzl", "js_binary") load("@bazel_gazelle//:def.bzl", "gazelle") +load("@npm//:defs.bzl", "npm_link_all_packages") package(default_visibility = ["//visibility:public"]) +npm_link_all_packages(name = "node_modules") + exports_files([ "tsconfig.json", "package.json", @@ -10,48 +13,45 @@ exports_files([ "version.bzl", ]) -PROTOBUF_DEPS = [ - "@npm//protobufjs", - "@npm//protobufjs-cli", - # these deps are needed even though they are not automatic transitive deps of - # protobufjs since if they are not in the runfiles then protobufjs attempts to - # run `npm install` at runtime to get thhem which fails as it tries to access - # the npm cache outside of the sandbox - "@npm//semver", - "@npm//chalk", - "@npm//glob", - "@npm//jsdoc", - "@npm//minimist", - "@npm//tmp", - "@npm//uglify-js", - "@npm//uglify-es", - "@npm//espree", - "@npm//escodegen", - "@npm//estraverse", -] +# PROTOBUF_DEPS = [ +# "@npm//protobufjs", +# "@npm//protobufjs-cli", +# # these deps are needed even though they are not automatic transitive deps of +# # protobufjs since if they are not in the runfiles then protobufjs attempts to +# # run `npm install` at runtime to get thhem which fails as it tries to access +# # the npm cache outside of the sandbox +# "@npm//semver", +# "@npm//chalk", +# "@npm//glob", +# "@npm//jsdoc", +# "@npm//minimist", +# "@npm//tmp", +# "@npm//uglify-js", +# "@npm//uglify-es", +# "@npm//espree", +# "@npm//escodegen", +# "@npm//estraverse", +# ] -js_binary( - name = "pbjs", - data = PROTOBUF_DEPS, - entry_point = "@npm//:node_modules/protobufjs-cli/bin/pbjs", - # source_map = False, -) +# js_binary( +# name = "pbjs", +# data = PROTOBUF_DEPS, +# entry_point = "@npm//:node_modules/protobufjs-cli/bin/pbjs", +# # source_map = False, +# ) -js_binary( - name = "pbts", - data = PROTOBUF_DEPS, - entry_point = "@npm//:node_modules/protobufjs-cli/bin/pbts", - # install_source_map_support = False, -) +# js_binary( +# name = "pbts", +# data = PROTOBUF_DEPS, +# entry_point = "@npm//:node_modules/protobufjs-cli/bin/pbts", +# # install_source_map_support = False, +# ) js_binary( - name = "tslint", - data = [ - "@npm//tslint", - ], - entry_point = "@npm//:node_modules/tslint/bin/tslint", - # install_source_map_support = False, + name = "run_tslint", + entry_point = "//:node_modules/tslint/bin/tslint", node_options = ["--preserve-symlinks"], + # install_source_map_support = False, ) # gazelle:prefix github.com/dataform-co/dataform diff --git a/WORKSPACE b/WORKSPACE index cfb03668d..0d1db51d3 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -1,6 +1,7 @@ workspace(name = "df") load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive", "http_file") +load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") http_archive( name = "bazel_skylib", @@ -35,12 +36,6 @@ protobuf_deps() ######## -# git_repository( -# name = "rules_proto_grpc", -# commit = "b9e6b2922d8b6177d0747f30b738ea467161fc33", -# remote = "https://github.com/gonzojive/rules_proto_grpc.git", -# ) - # http_archive( # name = "rules_proto_grpc", # sha256 = "7954abbb6898830cd10ac9714fbcacf092299fda00ed2baf781172f545120419", @@ -48,11 +43,12 @@ protobuf_deps() # urls = ["https://github.com/rules-proto-grpc/rules_proto_grpc/archive/3.1.1.tar.gz"], # ) -http_archive( +# TODO: We need `base_env` added (used in //tools/ts_proto_library), so have to pull from a recent commit sha. +# When avaialble, update to rules_proto_grpc 4.4.0 when available, and undo custom version. +git_repository( name = "rules_proto_grpc", - sha256 = "fb7fc7a3c19a92b2f15ed7c4ffb2983e956625c1436f57a3430b897ba9864059", - strip_prefix = "rules_proto_grpc-4.3.0", - urls = ["https://github.com/rules-proto-grpc/rules_proto_grpc/archive/4.3.0.tar.gz"], + commit = "e9b7119d712c8e1f4159a10893b2752b38d1b664", + remote = "https://github.com/rules-proto-grpc/rules_proto_grpc.git", ) load("@rules_proto_grpc//:repositories.bzl", "rules_proto_grpc_repos", "rules_proto_grpc_toolchains") diff --git a/package.json b/package.json index 436cb12d8..ec73bc652 100644 --- a/package.json +++ b/package.json @@ -128,6 +128,7 @@ "tmp": "0.2.0", "ts-loader": "^5.3.1", "ts-mockito": "^2.6.1", + "ts-proto": "^1.139.0", "tslint": "^5.14.0", "tslint-config-prettier": "^1.18.0", "tslint-config-security": "^1.16.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 260be29c7..da73c79bb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -129,6 +129,7 @@ specifiers: tmp: 0.2.0 ts-loader: ^5.3.1 ts-mockito: ^2.6.1 + ts-proto: ^1.139.0 tslint: ^5.14.0 tslint-config-prettier: ^1.18.0 tslint-config-security: ^1.16.0 @@ -281,6 +282,7 @@ dependencies: tmp: 0.2.0 ts-loader: 5.4.5_typescript@3.9.10 ts-mockito: 2.6.1 + ts-proto: 1.139.0 tslint: 5.20.1_typescript@3.9.10 tslint-config-prettier: 1.18.0 tslint-config-security: 1.16.0_67neen4t5xfhpau25dyc5p2yey @@ -3185,6 +3187,11 @@ packages: resolution: {integrity: sha512-Lkp0vFjMkBB3GTpLR8zk4NwW5EdRdnitwYJHDOOKIU85x4ckYCPQ+9WlVvSVClHxVReefkUMtWZH2l9KGlD51w==} dev: false + /case-anything/2.1.10: + resolution: {integrity: sha512-JczJwVrCP0jPKh05McyVsuOg6AYosrB9XWZKbQzXeDAm2ClE/PJE/BcrrQrVyGYH7Jg8V/LDupmyL4kFlVsVFQ==} + engines: {node: '>=12.13'} + dev: false + /caseless/0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: false @@ -3946,6 +3953,10 @@ packages: engines: {node: '>= 6'} dev: false + /dataloader/1.4.0: + resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} + dev: false + /debug/2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -4192,6 +4203,12 @@ packages: engines: {node: '>=0.10.0'} dev: false + /detect-libc/1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + dev: false + /detect-libc/2.0.1: resolution: {integrity: sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==} engines: {node: '>=8'} @@ -4291,6 +4308,12 @@ packages: is-obj: 2.0.0 dev: false + /dprint-node/1.0.7: + resolution: {integrity: sha512-NTZOW9A7ipb0n7z7nC3wftvsbceircwVHSgzobJsEQa+7RnOMbhrfX5IflA6CtC4GA63DSAiHYXa4JKEy9F7cA==} + dependencies: + detect-libc: 1.0.3 + dev: false + /dtrace-provider/0.8.8: resolution: {integrity: sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==} engines: {node: '>=0.10'} @@ -7752,6 +7775,11 @@ packages: kind-of: 3.2.2 dev: false + /object-hash/1.3.1: + resolution: {integrity: sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==} + engines: {node: '>= 0.10.0'} + dev: false + /object-hash/2.2.0: resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==} engines: {node: '>= 6'} @@ -8671,6 +8699,26 @@ packages: yargs: 3.32.0 dev: false + /protobufjs/6.11.3: + resolution: {integrity: sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==} + hasBin: true + requiresBuild: true + 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.2 + '@types/node': 18.13.0 + long: 4.0.0 + dev: false + /protobufjs/6.8.8: resolution: {integrity: sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==} hasBin: true @@ -10473,6 +10521,32 @@ packages: lodash: 4.17.21 dev: false + /ts-poet/6.3.0: + resolution: {integrity: sha512-RjS37SnXMa9En8xvQf//+rvNNNCB7x2TKP/ZfsiQFidtfN3A6FYgPDESe4r7YA3F663XO2ozx+2buQItGOLMxg==} + dependencies: + dprint-node: 1.0.7 + dev: false + + /ts-proto-descriptors/1.7.1: + resolution: {integrity: sha512-oIKUh3K4Xts4v29USGLfUG+2mEk32MsqpgZAOUyUlkrcIdv34yE+k2oZ2Nzngm6cV/JgFdOxRCqeyvmWHuYAyw==} + dependencies: + long: 4.0.0 + protobufjs: 6.11.3 + dev: false + + /ts-proto/1.139.0: + resolution: {integrity: sha512-DXfRVbsEnzan/tpb7RxuJOgjhzwuxDsyXbYSnF8JHCIDcJ/JxeqeUyDUVICFGmgqrsPcnjn5t3iqOUZRNRm9tg==} + hasBin: true + dependencies: + '@types/object-hash': 1.3.4 + case-anything: 2.1.10 + dataloader: 1.4.0 + object-hash: 1.3.1 + protobufjs: 6.11.3 + ts-poet: 6.3.0 + ts-proto-descriptors: 1.7.1 + dev: false + /tslib/1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: false diff --git a/protos/BUILD b/protos/BUILD index 1637fa477..c312f2a27 100644 --- a/protos/BUILD +++ b/protos/BUILD @@ -20,14 +20,6 @@ proto_library( ], ) -proto_library( - name = "server_proto", - srcs = ["server.proto"], - deps = [ - ":dataform_proto", - ], -) - java_proto_library( name = "dataform_java_proto", deps = [":dataform_proto"], @@ -43,7 +35,6 @@ ts_proto_compile( name = "ts", protos = [ ":dataform_proto", - ":server_proto", ], verbose = 4, visibility = ["//visibility:public"], @@ -56,11 +47,3 @@ build_test( ":dataform_java_proto", ], ) - -go_proto_library( - name = "server_go_proto", - compilers = ["@io_bazel_rules_go//proto:go_grpc"], - importpath = "github.com/dataform-co/dataform/protos", - proto = ":server_proto", - deps = [":dataform_go_proto"], -) diff --git a/protos/evaluation.proto b/protos/evaluation.proto index 9b7dafe72..77b4a1c38 100644 --- a/protos/evaluation.proto +++ b/protos/evaluation.proto @@ -1,4 +1,4 @@ -syntax="proto3"; +syntax = "proto3"; package dataform; diff --git a/protos/server.proto b/protos/server.proto deleted file mode 100644 index 5835d29d5..000000000 --- a/protos/server.proto +++ /dev/null @@ -1,15 +0,0 @@ -syntax="proto3"; - -package dataform.server; - -import "protos/core.proto"; - -message Empty {} - -message MetadataResponse { - string project_dir = 1; -} - -service Service { - rpc Metadata (dataform.server.Empty) returns (dataform.server.MetadataResponse); -} diff --git a/tools/BUILD b/tools/BUILD index 44e2218bb..67b0a5af6 100644 --- a/tools/BUILD +++ b/tools/BUILD @@ -1,7 +1,8 @@ +# load("//:node_modules/ts-proto/package_json.bzl", _ts_proto_bin_factories = "bin") load("@npm//:ts-proto/package_json.bzl", _ts_proto_bin_factories = "bin") load("@rules_proto_grpc//:defs.bzl", "proto_plugin") -exports_files(["ts_proto_library.bzl"]) +package(default_visibility = ["//visibility:public"]) _ts_proto_bin_factories.protoc_gen_ts_proto_binary( name = "protoc-gen-ts-proto", @@ -13,5 +14,33 @@ proto_plugin( protoc_plugin_name = "ts_proto", tool = ":protoc-gen-ts-proto", use_built_in_shell_environment = False, - visibility = ["//visibility:public"], ) + +# load("@rules_proto_grpc//:defs.bzl", "proto_plugin") +# load("@npm//:@protobuf-ts/plugin/package_json.bzl", protobuf_ts_plugin = "bin") + +# package(default_visibility = ["//visibility:public"]) + +# exports_files(["ts_proto_library.bzl"]) + +# protobuf_ts_plugin.protoc_gen_ts_binary( +# name = "protoc_gen_ts", +# ) + +# proto_plugin( +# name = "ts_proto_compile", +# outputs = [ +# "{protopath}.ts", +# ], +# tool = ":protoc_gen_ts", +# use_built_in_shell_environment = False, +# ) + +# proto_plugin( +# name = "ts_grpc_proto_compile", +# outputs = [ +# "{protopath}.client.ts", +# ], +# tool = ":protoc_gen_ts", +# use_built_in_shell_environment = False, +# ) diff --git a/tools/ts_proto_library.bzl b/tools/ts_proto_library.bzl index e3e1debbf..90cc58fed 100644 --- a/tools/ts_proto_library.bzl +++ b/tools/ts_proto_library.bzl @@ -10,23 +10,12 @@ load( ) def _ts_proto_compile_impl(ctx): - """ - Implementation function for ts_proto_compile. - - Args: - ctx: The Bazel rule execution context object. - - Returns: - Providers: - - ProtoCompileInfo - - DefaultInfo - - """ base_env = { # Make up for https://github.com/bazelbuild/bazel/issues/15470. "BAZEL_BINDIR": ctx.bin_dir.path, } return proto_compile_impl(ctx, base_env = base_env) + # return proto_compile_impl(ctx) # based on https://github.com/aspect-build/rules_js/issues/397 ts_proto_compile = rule( @@ -45,3 +34,18 @@ ts_proto_compile = rule( str(Label("@rules_proto_grpc//protobuf:toolchain_type")), ], ) + +ts_grpc_proto_compile = rule( + implementation = _ts_proto_compile_impl, + attrs = dict( + proto_compile_attrs, + _plugins = attr.label_list( + providers = [ProtoPluginInfo], + default = [ + Label("//tools:ts_grpc_proto_compile"), + ], + doc = "List of protoc plugins to apply", + ), + ), + toolchains = [str(Label("@rules_proto_grpc//protobuf:toolchain_type"))], +) From 9f183af5356ea49044c97ced4a57f4529de06fbe Mon Sep 17 00:00:00 2001 From: Elias Kassell Date: Thu, 16 Feb 2023 14:45:49 +0000 Subject: [PATCH 3/9] All of common building now - and removed protobufjs things --- .../npm_translate_lock_LTE4Nzc1MDcwNjU= | 4 +- BUILD | 39 +----- api/BUILD | 4 +- common/errors/BUILD | 11 +- common/errors/errors.ts | 7 +- common/flags/BUILD | 12 +- common/flags/testing/BUILD | 5 +- common/promises/BUILD | 11 +- common/promises/index.ts | 2 +- common/protos/BUILD | 36 +++--- common/strings/BUILD | 15 ++- core/BUILD | 8 +- package.json | 4 +- packages/@dataform/cli/BUILD | 9 +- packages/BUILD | 10 +- pnpm-lock.yaml | 112 +++++------------- sqlx/BUILD | 21 ++-- sqlx/format.ts | 2 +- testing/BUILD | 32 +++-- tools/markdown-cms/BUILD | 11 +- tools/protobufjs/BUILD | 21 ++-- tools/ts_proto_library.bzl | 15 --- tsconfig.json | 1 + 23 files changed, 144 insertions(+), 248 deletions(-) diff --git a/.aspect/rules/external_repository_action_cache/npm_translate_lock_LTE4Nzc1MDcwNjU= b/.aspect/rules/external_repository_action_cache/npm_translate_lock_LTE4Nzc1MDcwNjU= index 9bb9ca78e..0d77b7840 100755 --- a/.aspect/rules/external_repository_action_cache/npm_translate_lock_LTE4Nzc1MDcwNjU= +++ b/.aspect/rules/external_repository_action_cache/npm_translate_lock_LTE4Nzc1MDcwNjU= @@ -1,4 +1,4 @@ # Input hashes for repository rule npm_translate_lock(name = "npm", pnpm_lock = "//:pnpm-lock.yaml"). # This file should be checked into version control along with the pnpm-lock.yaml file. -pnpm-lock.yaml=782597252 -package.json=2076233675 +pnpm-lock.yaml=-960674938 +package.json=-1148013635 diff --git a/BUILD b/BUILD index b4637999b..c936f9e9f 100644 --- a/BUILD +++ b/BUILD @@ -1,51 +1,22 @@ load("@aspect_rules_js//js:defs.bzl", "js_binary") load("@bazel_gazelle//:def.bzl", "gazelle") load("@npm//:defs.bzl", "npm_link_all_packages") +load("@aspect_rules_ts//ts:defs.bzl", "ts_config") package(default_visibility = ["//visibility:public"]) npm_link_all_packages(name = "node_modules") exports_files([ - "tsconfig.json", "package.json", "readme.md", "version.bzl", ]) -# PROTOBUF_DEPS = [ -# "@npm//protobufjs", -# "@npm//protobufjs-cli", -# # these deps are needed even though they are not automatic transitive deps of -# # protobufjs since if they are not in the runfiles then protobufjs attempts to -# # run `npm install` at runtime to get thhem which fails as it tries to access -# # the npm cache outside of the sandbox -# "@npm//semver", -# "@npm//chalk", -# "@npm//glob", -# "@npm//jsdoc", -# "@npm//minimist", -# "@npm//tmp", -# "@npm//uglify-js", -# "@npm//uglify-es", -# "@npm//espree", -# "@npm//escodegen", -# "@npm//estraverse", -# ] - -# js_binary( -# name = "pbjs", -# data = PROTOBUF_DEPS, -# entry_point = "@npm//:node_modules/protobufjs-cli/bin/pbjs", -# # source_map = False, -# ) - -# js_binary( -# name = "pbts", -# data = PROTOBUF_DEPS, -# entry_point = "@npm//:node_modules/protobufjs-cli/bin/pbts", -# # install_source_map_support = False, -# ) +ts_config( + name = "tsconfig", + src = "tsconfig.json", +) js_binary( name = "run_tslint", diff --git a/api/BUILD b/api/BUILD index 9c42c8542..90adb4a99 100644 --- a/api/BUILD +++ b/api/BUILD @@ -19,7 +19,7 @@ ts_library( "//protos:ts", "//sandbox/vm:compile_loader", "//sqlx", - "//sandbox/vm:vm", + "//sandbox/vm", "@npm//@google-cloud/bigquery", "@npm//@types/glob", "@npm//@types/js-beautify", @@ -45,7 +45,7 @@ ts_library( "@npm//presto-client", "@npm//pretty-ms", "@npm//promise-pool-executor", - "@npm//protobufjs", + # "@npm//protobufjs", "@npm//semver", "@npm//snowflake-sdk", "@npm//sql-formatter", diff --git a/common/errors/BUILD b/common/errors/BUILD index cc65d48d1..3eebb4dc5 100644 --- a/common/errors/BUILD +++ b/common/errors/BUILD @@ -9,23 +9,20 @@ ts_library( ["*.ts"], exclude = ["*.spec.ts"], ), - deps = [ - "//:modules-fix", - ], ) ts_test_suite( name = "tests", srcs = glob(["*.spec.ts"]), data = [ - "@npm//source-map-support", + "//:node_modules/source-map-support", ], templated_args = ["--node_options=--require=source-map-support/register"], deps = [ ":errors", + "//:node_modules/@types/chai", + "//:node_modules/@types/node", + "//:node_modules/chai", "@df//testing", - "@npm//@types/chai", - "@npm//@types/node", - "@npm//chai", ], ) diff --git a/common/errors/errors.ts b/common/errors/errors.ts index e923fa32d..e343354a2 100644 --- a/common/errors/errors.ts +++ b/common/errors/errors.ts @@ -10,11 +10,12 @@ export class ErrorWithCause extends Error { } } -export function coerceAsError(errorLike: T): T extends Error ? T : Error { +export function coerceAsError(error: T): T extends Error ? T : Error { // If it's an error instance, return it. - if ((errorLike as any) instanceof Error) { - return errorLike as any; + if ((error as any) instanceof Error) { + return error as any; } + const errorLike = error as any; // Otherwise, attempt to reconstruct an error class from the object. const message = errorLike.message ? String(errorLike.message) : String(errorLike); const coercedError = new Error(message); diff --git a/common/flags/BUILD b/common/flags/BUILD index 3d6514c38..94d718a3a 100644 --- a/common/flags/BUILD +++ b/common/flags/BUILD @@ -1,21 +1,19 @@ -package(default_visibility = ["//visibility:public"]) - +load("//testing:build_test.bzl", "build_test") load("//tools:ts_library.bzl", "ts_library") +package(default_visibility = ["//visibility:public"]) + ts_library( name = "flags", srcs = glob( ["*.ts"], ), deps = [ - "//:modules-fix", - "@npm//@types/long", - "@npm//@types/node", + "//:node_modules/@types/long", + "//:node_modules/@types/node", ], ) -load("//testing:build_test.bzl", "build_test") - build_test( name = "build_test", deps = [":flags"], diff --git a/common/flags/testing/BUILD b/common/flags/testing/BUILD index 32de5ba60..2660535f9 100644 --- a/common/flags/testing/BUILD +++ b/common/flags/testing/BUILD @@ -1,7 +1,7 @@ -package(default_visibility = ["//visibility:public"]) - load("//tools:ts_library.bzl", "ts_library") +package(default_visibility = ["//visibility:public"]) + ts_library( name = "testing", testonly = 1, @@ -9,7 +9,6 @@ ts_library( ["*.ts"], ), deps = [ - "//:modules-fix", "//common/flags", "//testing", ], diff --git a/common/promises/BUILD b/common/promises/BUILD index a85206d2d..0ae7b5618 100644 --- a/common/promises/BUILD +++ b/common/promises/BUILD @@ -10,8 +10,7 @@ ts_library( exclude = ["*.spec.ts"], ), deps = [ - "//:modules-fix", - "@npm//@types/node", + "//:node_modules/@types/node", ], ) @@ -19,14 +18,14 @@ ts_test_suite( name = "tests", srcs = glob(["*.spec.ts"]), data = [ - "@npm//source-map-support", + "//:node_modules/source-map-support", ], templated_args = ["--node_options=--require=source-map-support/register"], deps = [ ":promises", + "//:node_modules/@types/chai", + "//:node_modules/@types/node", + "//:node_modules/chai", "@df//testing", - "@npm//@types/chai", - "@npm//@types/node", - "@npm//chai", ], ) diff --git a/common/promises/index.ts b/common/promises/index.ts index 7ba7bed27..694ed9262 100644 --- a/common/promises/index.ts +++ b/common/promises/index.ts @@ -28,7 +28,7 @@ export async function runWithTimeout( } export async function sleep(sleepMillis: number) { - await new Promise(resolve => setTimeout(() => resolve(), sleepMillis)); + await new Promise(resolve => setTimeout(() => resolve(), sleepMillis)); } export async function sleepUntil( diff --git a/common/protos/BUILD b/common/protos/BUILD index 87efbbe1c..d1ae68071 100644 --- a/common/protos/BUILD +++ b/common/protos/BUILD @@ -1,22 +1,22 @@ -package(default_visibility = ["//visibility:public"]) - load("//tools:ts_library.bzl", "ts_library") +load("//testing:build_test.bzl", "build_test") -ts_library( - name = "protos", - srcs = glob( - ["*.ts"], - ), - deps = [ - "//:modules-fix", - "//common/strings", - "@npm//protobufjs", - ], -) +package(default_visibility = ["//visibility:public"]) -load("//testing:build_test.bzl", "build_test") +# TODO: I think these are provided for free by proto-ts. + +# ts_library( +# name = "protos", +# srcs = glob( +# ["*.ts"], +# ), +# deps = [ +# # "//:node_modules/protobufjs", +# "//common/strings", +# ], +# ) -build_test( - name = "build_test", - deps = [":protos"], -) +# build_test( +# name = "build_test", +# deps = [":protos"], +# ) diff --git a/common/strings/BUILD b/common/strings/BUILD index 5b52c8cfd..27d62f1eb 100644 --- a/common/strings/BUILD +++ b/common/strings/BUILD @@ -10,9 +10,8 @@ ts_library( exclude = ["*.spec.ts"], ), deps = [ - "//:modules-fix", - "@npm//@types/long", - "@npm//long", + "//:node_modules/@types/long", + "//:node_modules/long", ], ) @@ -20,15 +19,15 @@ ts_test_suite( name = "tests", srcs = glob(["*.spec.ts"]), data = [ - "@npm//source-map-support", + "//:node_modules/source-map-support", ], templated_args = ["--node_options=--require=source-map-support/register"], deps = [ ":strings", + "//:node_modules/@types/chai", + "//:node_modules/@types/long", + "//:node_modules/@types/node", + "//:node_modules/chai", "@df//testing", - "@npm//@types/chai", - "@npm//@types/long", - "@npm//@types/node", - "@npm//chai", ], ) diff --git a/core/BUILD b/core/BUILD index 119b6f99d..2f3c22f2a 100644 --- a/core/BUILD +++ b/core/BUILD @@ -22,14 +22,14 @@ ts_library( name = "core", srcs = glob(["**/*.ts"]) + [":version.ts"], deps = [ + "//:node_modules/@types/semver", + # "//:node_modules/protobufjs", + "//:node_modules/semver", + "//:node_modules/tarjan-graph", "//common/errors", "//common/protos", "//common/strings", "//protos:ts", "//sqlx", - "@npm//@types/semver", - "@npm//protobufjs", - "@npm//semver", - "@npm//tarjan-graph", ], ) diff --git a/package.json b/package.json index ec73bc652..6dd094506 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,6 @@ "@bazel/ibazel": "^0.9.1", "@bazel/labs": "^0.42.3", "@bazel/rollup": "^1.6.0", - "@bazel/typescript": "^1.1.0", "@blueprintjs/core": "^3.22.3", "@blueprintjs/icons": "^3.13.0", "@blueprintjs/select": "^3.8.0", @@ -121,6 +120,7 @@ "semver": "^7.3.8", "snowflake-sdk": "^1.6.12", "source-map-loader": "^0.2.0", + "source-map-support": "^0.5.21", "sql-formatter": "^2.3.3", "ssh2": "^1.4.0", "style-loader": "^1.0.0", @@ -135,7 +135,7 @@ "tslint-react": "^3.6.0", "typed-css-modules": "^0.6.8", "typedoc": "^0.19.2", - "typescript": "^3.8.3", + "typescript": "4.8.4", "uglify-es": "^3.3.9", "uglify-js": "^3.7.7", "untildify": "^4.0.0", diff --git a/packages/@dataform/cli/BUILD b/packages/@dataform/cli/BUILD index e5b51ee1c..8222b79ff 100644 --- a/packages/@dataform/cli/BUILD +++ b/packages/@dataform/cli/BUILD @@ -1,6 +1,7 @@ load("//tools:ts_library.bzl", "ts_library") load("//:version.bzl", "DF_VERSION") load("//packages:index.bzl", "pkg_bundle", "pkg_json", "pkg_npm_tar") +load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_binary") package(default_visibility = ["//visibility:public"]) @@ -14,13 +15,11 @@ ts_library( ], ) -load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_binary") - nodejs_binary( name = "bin", data = [ ":cli", - "@npm//source-map-support", + "//:node_modules/source-map-support", ], entry_point = ":index.ts", templated_args = ["--node_options=--require=source-map-support/register"], @@ -76,9 +75,9 @@ pkg_json( pkg_bundle( name = "bundle", + allow_node_builtins = True, args = ["--banner='#!/usr/bin/env node'"], entry_point = "index.ts", - allow_node_builtins = True, externals = externals, deps = [ ":cli", @@ -87,9 +86,9 @@ pkg_bundle( pkg_bundle( name = "worker_bundle", + allow_node_builtins = True, args = ["--banner='#!/usr/bin/env node'"], entry_point = "worker.ts", - allow_node_builtins = True, externals = externals, deps = [ ":cli", diff --git a/packages/BUILD b/packages/BUILD index d905478bd..22f72581e 100644 --- a/packages/BUILD +++ b/packages/BUILD @@ -12,18 +12,18 @@ ts_library( name = "gen-package-json", srcs = ["gen_package_json.ts"], deps = [ - "@npm//@types/node", - "@npm//@types/yargs", - "@npm//yargs", + "//:node_modules/@types/node", + "//:node_modules/@types/yargs", + "//:node_modules/yargs", ], ) nodejs_binary( name = "gen-package-json-bin", - templated_args = ["--node_options=--require=source-map-support/register"], data = [ ":gen-package-json", - "@npm//source-map-support", + "//:node_modules/source-map-support", ], entry_point = ":gen_package_json.ts", + templated_args = ["--node_options=--require=source-map-support/register"], ) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index da73c79bb..1b2af510c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,7 +6,6 @@ specifiers: '@bazel/ibazel': ^0.9.1 '@bazel/labs': ^0.42.3 '@bazel/rollup': ^1.6.0 - '@bazel/typescript': ^1.1.0 '@blueprintjs/core': ^3.22.3 '@blueprintjs/icons': ^3.13.0 '@blueprintjs/select': ^3.8.0 @@ -122,6 +121,7 @@ specifiers: semver: ^7.3.8 snowflake-sdk: ^1.6.12 source-map-loader: ^0.2.0 + source-map-support: ^0.5.21 sql-formatter: ^2.3.3 ssh2: ^1.4.0 style-loader: ^1.0.0 @@ -136,7 +136,7 @@ specifiers: tslint-react: ^3.6.0 typed-css-modules: ^0.6.8 typedoc: ^0.19.2 - typescript: ^3.8.3 + typescript: 4.8.4 uglify-es: ^3.3.9 uglify-js: ^3.7.7 untildify: ^4.0.0 @@ -159,7 +159,6 @@ dependencies: '@bazel/ibazel': 0.9.1 '@bazel/labs': 0.42.3_webpack@4.20.2 '@bazel/rollup': 1.7.0_rollup@2.79.1 - '@bazel/typescript': 1.7.0_typescript@3.9.10 '@blueprintjs/core': 3.54.0_wcqkhtmu7mswc6yz4uyexck3ty '@blueprintjs/icons': 3.33.0 '@blueprintjs/select': 3.19.1_wcqkhtmu7mswc6yz4uyexck3ty @@ -271,25 +270,26 @@ dependencies: request: 2.88.2 rimraf: 2.7.1 rollup: 2.79.1 - rollup-plugin-dts: 1.4.14_6gd2y3vqcxk6lounvan455yu24 + rollup-plugin-dts: 1.4.14_gypgyaqhine6mwjfvh7icfhviq semver: 7.3.8 snowflake-sdk: 1.6.18 source-map-loader: 0.2.4 + source-map-support: 0.5.21 sql-formatter: 2.3.4 ssh2: 1.11.0 style-loader: 1.3.0_webpack@4.20.2 tarjan-graph: 2.0.0 tmp: 0.2.0 - ts-loader: 5.4.5_typescript@3.9.10 + ts-loader: 5.4.5_typescript@4.8.4 ts-mockito: 2.6.1 ts-proto: 1.139.0 - tslint: 5.20.1_typescript@3.9.10 + tslint: 5.20.1_typescript@4.8.4 tslint-config-prettier: 1.18.0 - tslint-config-security: 1.16.0_67neen4t5xfhpau25dyc5p2yey - tslint-react: 3.6.0_67neen4t5xfhpau25dyc5p2yey + tslint-config-security: 1.16.0_is64cncltak2c2767drphpzcku + tslint-react: 3.6.0_is64cncltak2c2767drphpzcku typed-css-modules: 0.6.8 - typedoc: 0.19.2_typescript@3.9.10 - typescript: 3.9.10 + typedoc: 0.19.2_typescript@4.8.4 + typescript: 4.8.4 uglify-es: 3.3.9 uglify-js: 3.17.4 untildify: 4.0.0 @@ -602,21 +602,6 @@ packages: rollup: 2.79.1 dev: false - /@bazel/typescript/1.7.0_typescript@3.9.10: - resolution: {integrity: sha512-M6JPXJZ+W6457QZfPHmGg/Mejnp7//YTnffGmnmeK9vDqybXeCCRWW1/iEOwopLJYQViBHfaoulde0VXelx9sA==} - deprecated: This package is no longer maintained, see https://github.com/aspect-build/rules_ts for replacement - hasBin: true - requiresBuild: true - peerDependencies: - typescript: '>=3.0.0 <4.0' - dependencies: - protobufjs: 6.8.8 - semver: 5.6.0 - source-map-support: 0.5.9 - tsutils: 2.27.2_typescript@3.9.10 - typescript: 3.9.10 - dev: false - /@blueprintjs/colors/4.1.15: resolution: {integrity: sha512-iOwfwE3tOXiM+dmwkdK7fY6dCGqg7yBLYAUHrmPUeYscrqZ8gJqUXAtDumuWMoLvm1SEz5SVIEfm16QnHd4efw==} dev: false @@ -1402,10 +1387,6 @@ packages: form-data: 3.0.1 dev: false - /@types/node/10.17.60: - resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} - dev: false - /@types/node/12.20.55: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} dev: false @@ -8719,26 +8700,6 @@ packages: long: 4.0.0 dev: false - /protobufjs/6.8.8: - resolution: {integrity: sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==} - hasBin: true - requiresBuild: true - 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.2 - '@types/node': 10.17.60 - long: 4.0.0 - dev: false - /protobufjs/7.2.2: resolution: {integrity: sha512-++PrQIjrom+bFDPpfmqXfAGSQs40116JRrqqyf53dymUMvvb5d/LMRyicRoF1AUKoXVS1/IgJXlEgcpr4gTF3Q==} engines: {node: '>=12.0.0'} @@ -9454,14 +9415,14 @@ packages: inherits: 2.0.4 dev: false - /rollup-plugin-dts/1.4.14_6gd2y3vqcxk6lounvan455yu24: + /rollup-plugin-dts/1.4.14_gypgyaqhine6mwjfvh7icfhviq: resolution: {integrity: sha512-H33aGCUbp/Lm+tbkG5gZePnuWvvaafkwh7Uh4RYJs0/ChOfWlENCby1wOn+xBVsCzpV/g/+OVYqgzVjT80dNJg==} peerDependencies: rollup: ^2.33.1 typescript: ^4.0.5 dependencies: rollup: 2.79.1 - typescript: 3.9.10 + typescript: 4.8.4 optionalDependencies: '@babel/code-frame': 7.18.6 dev: false @@ -9930,8 +9891,8 @@ packages: urix: 0.1.0 dev: false - /source-map-support/0.5.9: - resolution: {integrity: sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==} + /source-map-support/0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 @@ -10499,7 +10460,7 @@ packages: resolution: {integrity: sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==} dev: false - /ts-loader/5.4.5_typescript@3.9.10: + /ts-loader/5.4.5_typescript@4.8.4: resolution: {integrity: sha512-XYsjfnRQCBum9AMRZpk2rTYSVpdZBpZK+kDh0TeT3kxmQNBDVIeUjdPjY5RZry4eIAb8XHc4gYSUiUWPYvzSRw==} engines: {node: '>=6.11.5'} peerDependencies: @@ -10510,7 +10471,7 @@ packages: loader-utils: 1.4.2 micromatch: 3.1.10 semver: 5.6.0 - typescript: 3.9.10 + typescript: 4.8.4 transitivePeerDependencies: - supports-color dev: false @@ -10565,7 +10526,7 @@ packages: hasBin: true dev: false - /tslint-config-security/1.16.0_67neen4t5xfhpau25dyc5p2yey: + /tslint-config-security/1.16.0_is64cncltak2c2767drphpzcku: resolution: {integrity: sha512-wwM+COg4FX1Gl6VnvaTV9zqcUY6cs4XkiP6T3qhc6s20Xy4J9irui6+fkP07yVkrwfcNFneji3YcIwiMvKSQPQ==} peerDependencies: tslib: ^1.9.2 @@ -10573,22 +10534,22 @@ packages: typescript: ^2.9.1 || ^3.0.1 dependencies: safe-regex: 1.1.0 - tslint: 5.20.1_typescript@3.9.10 - typescript: 3.9.10 + tslint: 5.20.1_typescript@4.8.4 + typescript: 4.8.4 dev: false - /tslint-react/3.6.0_67neen4t5xfhpau25dyc5p2yey: + /tslint-react/3.6.0_is64cncltak2c2767drphpzcku: resolution: {integrity: sha512-AIv1QcsSnj7e9pFir6cJ6vIncTqxfqeFF3Lzh8SuuBljueYzEAtByuB6zMaD27BL0xhMEqsZ9s5eHuCONydjBw==} peerDependencies: tslint: ^5.1.0 typescript: '>=2.1.0 || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev' dependencies: - tslint: 5.20.1_typescript@3.9.10 - tsutils: 2.29.0_typescript@3.9.10 - typescript: 3.9.10 + tslint: 5.20.1_typescript@4.8.4 + tsutils: 2.29.0_typescript@4.8.4 + typescript: 4.8.4 dev: false - /tslint/5.20.1_typescript@3.9.10: + /tslint/5.20.1_typescript@4.8.4: resolution: {integrity: sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==} engines: {node: '>=4.8.0'} hasBin: true @@ -10607,26 +10568,17 @@ packages: resolve: 1.22.1 semver: 5.6.0 tslib: 1.14.1 - tsutils: 2.29.0_typescript@3.9.10 - typescript: 3.9.10 - dev: false - - /tsutils/2.27.2_typescript@3.9.10: - resolution: {integrity: sha512-qf6rmT84TFMuxAKez2pIfR8UCai49iQsfB7YWVjV1bKpy/d0PWT5rEOSM6La9PiHZ0k1RRZQiwVdVJfQ3BPHgg==} - peerDependencies: - typescript: '>=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev' - dependencies: - tslib: 1.14.1 - typescript: 3.9.10 + tsutils: 2.29.0_typescript@4.8.4 + typescript: 4.8.4 dev: false - /tsutils/2.29.0_typescript@3.9.10: + /tsutils/2.29.0_typescript@4.8.4: resolution: {integrity: sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==} peerDependencies: typescript: '>=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev' dependencies: tslib: 1.14.1 - typescript: 3.9.10 + typescript: 4.8.4 dev: false /tty-browserify/0.0.0: @@ -10719,7 +10671,7 @@ packages: engines: {node: '>= 8'} dev: false - /typedoc/0.19.2_typescript@3.9.10: + /typedoc/0.19.2_typescript@4.8.4: resolution: {integrity: sha512-oDEg1BLEzi1qvgdQXc658EYgJ5qJLVSeZ0hQ57Eq4JXy6Vj2VX4RVo18qYxRWz75ifAaYuYNBUCnbhjd37TfOg==} engines: {node: '>= 10.0.0'} hasBin: true @@ -10737,11 +10689,11 @@ packages: semver: 7.3.8 shelljs: 0.8.5 typedoc-default-themes: 0.11.4 - typescript: 3.9.10 + typescript: 4.8.4 dev: false - /typescript/3.9.10: - resolution: {integrity: sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==} + /typescript/4.8.4: + resolution: {integrity: sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==} engines: {node: '>=4.2.0'} hasBin: true dev: false diff --git a/sqlx/BUILD b/sqlx/BUILD index b55234953..95a0b412b 100644 --- a/sqlx/BUILD +++ b/sqlx/BUILD @@ -1,20 +1,19 @@ -package(default_visibility = ["//visibility:public"]) - load("//tools:ts_library.bzl", "ts_library") +package(default_visibility = ["//visibility:public"]) + ts_library( name = "sqlx", srcs = glob(["**/*.ts"]), deps = [ - "//:modules-fix", + "//:node_modules/@types/js-beautify", + "//:node_modules/@types/moo", + "//:node_modules/@types/node", + "//:node_modules/@types/uuid", + "//:node_modules/js-beautify", + "//:node_modules/moo", + "//:node_modules/sql-formatter", + "//:node_modules/uuid", "//common/errors", - "@npm//@types/moo", - "@npm//@types/node", - "@npm//@types/js-beautify", - "@npm//@types/uuid", - "@npm//js-beautify", - "@npm//uuid", - "@npm//sql-formatter", - "@npm//moo", ], ) diff --git a/sqlx/format.ts b/sqlx/format.ts index 6de290c93..78edf5c5a 100644 --- a/sqlx/format.ts +++ b/sqlx/format.ts @@ -8,7 +8,7 @@ import { ErrorWithCause } from "df/common/errors/errors"; import { SyntaxTreeNode, SyntaxTreeNodeType } from "df/sqlx/lexer"; import { v4 as uuidv4 } from "uuid"; -const JS_BEAUTIFY_OPTIONS: JsBeautifyOptions = { +const JS_BEAUTIFY_OPTIONS: js_beautify.CoreBeautifyOptions = { indent_size: 2, preserve_newlines: true, max_preserve_newlines: 2 diff --git a/testing/BUILD b/testing/BUILD index 00e83e883..310900752 100644 --- a/testing/BUILD +++ b/testing/BUILD @@ -1,9 +1,10 @@ +load("//tools:ts_library.bzl", "ts_library") +load("//testing:index.bzl", "ts_test_suite") + package(default_visibility = ["//visibility:public"]) exports_files(["build_test.sh"]) -load("//tools:ts_library.bzl", "ts_library") - ts_library( name = "testing", srcs = glob( @@ -11,28 +12,25 @@ ts_library( exclude = ["*.spec.ts"], ), deps = [ - "//:modules-fix", - "@npm//@types/diff", - "@npm//@types/json-stable-stringify", - "@npm//@types/node", - "@npm//chalk", - "@npm//diff", - "@npm//json-stable-stringify", + "//:node_modules/@types/diff", + "//:node_modules/@types/json-stable-stringify", + "//:node_modules/@types/node", + "//:node_modules/chalk", + "//:node_modules/diff", + "//:node_modules/json-stable-stringify", ], ) -load("//testing:index.bzl", "ts_test_suite") - ts_test_suite( name = "tests", srcs = glob(["*.spec.ts"]), deps = [ ":testing", - "@npm//@types/chai", - "@npm//@types/diff", - "@npm//@types/json-stable-stringify", - "@npm//chai", - "@npm//diff", - "@npm//json-stable-stringify", + "//:node_modules/@types/chai", + "//:node_modules/@types/diff", + "//:node_modules/@types/json-stable-stringify", + "//:node_modules/chai", + "//:node_modules/diff", + "//:node_modules/json-stable-stringify", ], ) diff --git a/tools/markdown-cms/BUILD b/tools/markdown-cms/BUILD index 9e265f5f8..03e7ef716 100644 --- a/tools/markdown-cms/BUILD +++ b/tools/markdown-cms/BUILD @@ -1,14 +1,13 @@ -package(default_visibility = ["//visibility:public"]) - load("//tools:ts_library.bzl", "ts_library") +package(default_visibility = ["//visibility:public"]) + ts_library( name = "markdown-cms", srcs = glob(["**/*.ts"]), deps = [ - "//:modules-fix", - "@npm//@octokit/rest", - "@npm//@types/node", - "@npm//front-matter", + "//:node_modules/@octokit/rest", + "//:node_modules/@types/node", + "//:node_modules/front-matter", ], ) diff --git a/tools/protobufjs/BUILD b/tools/protobufjs/BUILD index 0454940e6..f030b1c28 100644 --- a/tools/protobufjs/BUILD +++ b/tools/protobufjs/BUILD @@ -1,8 +1,8 @@ -package(default_visibility = ["//visibility:public"]) - load("//tools:ts_library.bzl", "ts_library") load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_binary") +package(default_visibility = ["//visibility:public"]) + exports_files([ "ts_grpc_service.bzl", ]) @@ -13,10 +13,9 @@ ts_library( "grpc_web_rpc_impl.ts", ], deps = [ - "//:modules-fix", + "//:node_modules/grpc-web-client", + "//:node_modules/protobufjs", "//protos:ts", - "@npm//grpc-web-client", - "@npm//protobufjs", ], ) @@ -24,11 +23,11 @@ ts_library( name = "generate_service_defs_lib", srcs = ["generate_service_defs.ts"], deps = [ - "@npm//@types/node", - "@npm//@types/yargs", - "@npm//path-exists", - "@npm//protobufjs", - "@npm//yargs", + "//:node_modules/@types/node", + "//:node_modules/@types/yargs", + "//:node_modules/path-exists", + "//:node_modules/protobufjs", + "//:node_modules/yargs", ], ) @@ -36,7 +35,7 @@ nodejs_binary( name = "generate_service_defs", data = [ ":generate_service_defs_lib", - "@npm//source-map-support", + "//:node_modules/source-map-support", ], entry_point = ":generate_service_defs.ts", templated_args = ["--node_options=--require=source-map-support/register"], diff --git a/tools/ts_proto_library.bzl b/tools/ts_proto_library.bzl index 90cc58fed..1322e7130 100644 --- a/tools/ts_proto_library.bzl +++ b/tools/ts_proto_library.bzl @@ -34,18 +34,3 @@ ts_proto_compile = rule( str(Label("@rules_proto_grpc//protobuf:toolchain_type")), ], ) - -ts_grpc_proto_compile = rule( - implementation = _ts_proto_compile_impl, - attrs = dict( - proto_compile_attrs, - _plugins = attr.label_list( - providers = [ProtoPluginInfo], - default = [ - Label("//tools:ts_grpc_proto_compile"), - ], - doc = "List of protoc plugins to apply", - ), - ), - toolchains = [str(Label("@rules_proto_grpc//protobuf:toolchain_type"))], -) diff --git a/tsconfig.json b/tsconfig.json index 183104967..e823b3d65 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,6 +12,7 @@ "target": "es2017", "sourceMap": true, "skipLibCheck": true, + "declaration": true, "experimentalDecorators": true, "jsx": "react", "lib": ["es2019", "dom"], From 03a0036461dbc2ec5d73831739164f822cfe90d0 Mon Sep 17 00:00:00 2001 From: Elias Kassell Date: Thu, 16 Feb 2023 15:36:36 +0000 Subject: [PATCH 4/9] Progress with making compat --- WORKSPACE | 12 ++++++------ common/protos/BUILD | 30 ++++++++++++++---------------- core/BUILD | 2 +- sandbox/vm/BUILD | 23 +++++++++++------------ tools/gen-package-json/BUILD | 11 +++++------ 5 files changed, 37 insertions(+), 41 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 0d1db51d3..ecdcf5073 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -69,12 +69,12 @@ http_archive( urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/5.8.0/rules_nodejs-5.8.0.tar.gz"], ) -# or for core module -http_archive( - name = "rules_nodejs", - sha256 = "08337d4fffc78f7fe648a93be12ea2fc4e8eb9795a4e6aa48595b66b34555626", - urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/5.8.0/rules_nodejs-core-5.8.0.tar.gz"], -) +# # or for core module +# http_archive( +# name = "rules_nodejs", +# sha256 = "08337d4fffc78f7fe648a93be12ea2fc4e8eb9795a4e6aa48595b66b34555626", +# urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/5.8.0/rules_nodejs-core-5.8.0.tar.gz"], +# ) http_archive( name = "aspect_rules_js", diff --git a/common/protos/BUILD b/common/protos/BUILD index d1ae68071..e30432780 100644 --- a/common/protos/BUILD +++ b/common/protos/BUILD @@ -3,20 +3,18 @@ load("//testing:build_test.bzl", "build_test") package(default_visibility = ["//visibility:public"]) -# TODO: I think these are provided for free by proto-ts. +ts_library( + name = "protos", + srcs = glob( + ["*.ts"], + ), + deps = [ + "//:node_modules/protobufjs", + "//common/strings", + ], +) -# ts_library( -# name = "protos", -# srcs = glob( -# ["*.ts"], -# ), -# deps = [ -# # "//:node_modules/protobufjs", -# "//common/strings", -# ], -# ) - -# build_test( -# name = "build_test", -# deps = [":protos"], -# ) +build_test( + name = "build_test", + deps = [":protos"], +) diff --git a/core/BUILD b/core/BUILD index 2f3c22f2a..a1eceed36 100644 --- a/core/BUILD +++ b/core/BUILD @@ -23,7 +23,7 @@ ts_library( srcs = glob(["**/*.ts"]) + [":version.ts"], deps = [ "//:node_modules/@types/semver", - # "//:node_modules/protobufjs", + "//:node_modules/protobufjs", "//:node_modules/semver", "//:node_modules/tarjan-graph", "//common/errors", diff --git a/sandbox/vm/BUILD b/sandbox/vm/BUILD index 4416d6e45..64cd3a15a 100644 --- a/sandbox/vm/BUILD +++ b/sandbox/vm/BUILD @@ -1,6 +1,7 @@ -package(default_visibility = ["//visibility:public"]) - load("//tools:ts_library.bzl", "ts_library") +load("@aspect_rules_js//js:defs.bzl", "js_binary") + +package(default_visibility = ["//visibility:public"]) ts_library( name = "vm", @@ -9,13 +10,13 @@ ts_library( exclude = ["utils/**/*.*"], ), deps = [ + "//:node_modules/@types/glob", + "//:node_modules/@types/node", + "//:node_modules/glob", + "//:node_modules/vm2", "//common/protos", "//core", "//protos:ts", - "@npm//@types/glob", - "@npm//@types/node", - "@npm//glob", - "@npm//vm2", ], ) @@ -27,24 +28,22 @@ ts_library( ], deps = [ ":vm", - "@npm//source-map-support", + "//:node_modules/source-map-support", ], ) -load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_binary") - # This is a bit nuts. As we fork a process when compiling projects, we # start a new node instance but within bazel, modules will fail to load in the # forked process as we don't have a loader script available. # To fix this, we use the binary rules to generate the bazel loader scripts # and then execute these scripts instead, so module resulution works. -nodejs_binary( +js_binary( name = "compile", data = [ ":vm", - "@npm//source-map-support", + "//:node_modules/source-map-support", ], entry_point = ":compile.ts", - templated_args = ["--node_options=--require=source-map-support/register"], + node_options = ["--require=source-map-support/register"], ) diff --git a/tools/gen-package-json/BUILD b/tools/gen-package-json/BUILD index 680557dd1..2ad31b8b6 100644 --- a/tools/gen-package-json/BUILD +++ b/tools/gen-package-json/BUILD @@ -1,6 +1,7 @@ -package(default_visibility = ["//visibility:public"]) - load("//tools:ts_library.bzl", "ts_library") +load("@aspect_rules_js//js:defs.bzl", "js_binary") + +package(default_visibility = ["//visibility:public"]) ts_library( name = "json-merge", @@ -12,14 +13,12 @@ ts_library( ], ) -load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_binary") - -nodejs_binary( +js_binary( name = "bin", - templated_args = ["--node_options=--require=source-map-support/register"], data = [ ":json-merge", "@npm//source-map-support", ], entry_point = ":index.ts", + node_options = ["--require=source-map-support/register"], ) From c85c5d7fa0771c94915b4fc945e1d64d979b090c Mon Sep 17 00:00:00 2001 From: Elias Kassell Date: Fri, 17 Feb 2023 11:45:18 +0000 Subject: [PATCH 5/9] Fix proto esmodule interop --- core/adapters/base.ts | 2 +- protos/BUILD | 20 ++++++++++++++++++-- tools/ts_library.bzl | 4 ++-- tools/ts_proto_library.bzl | 3 +++ 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/core/adapters/base.ts b/core/adapters/base.ts index faa267a1b..4e4c5cd9e 100644 --- a/core/adapters/base.ts +++ b/core/adapters/base.ts @@ -2,7 +2,7 @@ import * as semver from "semver"; import { IAdapter } from "df/core/adapters"; import { Task, Tasks } from "df/core/tasks"; -import { tableTypeEnumToString } from "df/core/utils" +import { tableTypeEnumToString } from "df/core/utils"; import { dataform } from "df/protos/ts"; export abstract class Adapter implements IAdapter { diff --git a/protos/BUILD b/protos/BUILD index c312f2a27..655779a8c 100644 --- a/protos/BUILD +++ b/protos/BUILD @@ -2,6 +2,7 @@ load("@rules_proto//proto:defs.bzl", "proto_library") load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library") load("//tools:ts_proto_library.bzl", "ts_proto_compile") load("//testing:build_test.bzl", "build_test") +load("//tools:ts_library.bzl", "ts_library") package(default_visibility = ["//visibility:public"]) @@ -32,12 +33,27 @@ go_proto_library( ) ts_proto_compile( - name = "ts", + name = "ts_proto", + output_mode = "NO_PREFIX_FLAT", protos = [ ":dataform_proto", ], verbose = 4, - visibility = ["//visibility:public"], +) + +ts_library( + name = "ts", + srcs = [ + ":ts_proto", + ], + deps = [ + "//:node_modules/protobufjs", + "//:node_modules/long", + "//:node_modules/@types/long", + # "//:node_modules/@protobuf-ts/runtime", + # "//:node_modules/@protobuf-ts/runtime-rpc", + # "//google/protobuf:protobuf_typescript_protos", + ], ) build_test( diff --git a/tools/ts_library.bzl b/tools/ts_library.bzl index 818d50dd3..37c82afb7 100644 --- a/tools/ts_library.bzl +++ b/tools/ts_library.bzl @@ -1,7 +1,7 @@ -load("@aspect_rules_ts//ts:defs.bzl", native_ts_library = "ts_project") +load("@aspect_rules_ts//ts:defs.bzl", "ts_project") def ts_library(**kwargs): - native_ts_library( + ts_project( tsconfig = "//:tsconfig", declaration = True, source_map = True, diff --git a/tools/ts_proto_library.bzl b/tools/ts_proto_library.bzl index 1322e7130..947648f48 100644 --- a/tools/ts_proto_library.bzl +++ b/tools/ts_proto_library.bzl @@ -17,6 +17,8 @@ def _ts_proto_compile_impl(ctx): return proto_compile_impl(ctx, base_env = base_env) # return proto_compile_impl(ctx) +# proto_compile_attrs.extra_protoc_args = + # based on https://github.com/aspect-build/rules_js/issues/397 ts_proto_compile = rule( implementation = _ts_proto_compile_impl, @@ -29,6 +31,7 @@ ts_proto_compile = rule( ], doc = "List of protoc plugins to apply", ), + extra_protoc_args = attr.string_list(default = ["--ts_proto_opt=esModuleInterop=true"]), ), toolchains = [ str(Label("@rules_proto_grpc//protobuf:toolchain_type")), From add4b9d3d85c3954886d51a2a1a0a8d18b8bffe9 Mon Sep 17 00:00:00 2001 From: Elias Kassell Date: Fri, 17 Feb 2023 11:58:16 +0000 Subject: [PATCH 6/9] Convert core/adapters/base.ts to use new proto library --- core/adapters/base.ts | 78 +++++++++++++++++++++---------------------- 1 file changed, 38 insertions(+), 40 deletions(-) diff --git a/core/adapters/base.ts b/core/adapters/base.ts index 4e4c5cd9e..e66c6789e 100644 --- a/core/adapters/base.ts +++ b/core/adapters/base.ts @@ -3,22 +3,20 @@ import * as semver from "semver"; import { IAdapter } from "df/core/adapters"; import { Task, Tasks } from "df/core/tasks"; import { tableTypeEnumToString } from "df/core/utils"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; export abstract class Adapter implements IAdapter { - constructor(protected readonly dataformCoreVersion: string) {} + constructor(protected readonly coreCoreVersion: string) {} public abstract publishTasks( - table: dataform.ITable, - runConfig: dataform.IRunConfig, - tableMetadata: dataform.ITableMetadata - ): Tasks; - public abstract assertTasks( - assertion: dataform.IAssertion, - projectConfig: dataform.IProjectConfig + table: core.Table, + runConfig: execution.RunConfig, + tableMetadata: execution.TableMetadata ): Tasks; + public abstract assertTasks(assertion: core.Assertion, projectConfig: core.ProjectConfig): Tasks; - public abstract resolveTarget(target: dataform.ITarget): string; + public abstract resolveTarget(target: core.Target): string; public normalizeIdentifier(identifier: string) { return identifier; @@ -29,29 +27,29 @@ export abstract class Adapter implements IAdapter { return `'${stringContents.replace(/\\/g, "\\\\").replace(/'/g, "\\'")}'`; } - public dropIfExists(target: dataform.ITarget, type: dataform.TableMetadata.Type) { + public dropIfExists(target: core.Target, type: execution.TableMetadata_Type) { return `drop ${this.tableTypeAsSql(type)} if exists ${this.resolveTarget(target)} ${ - type === dataform.TableMetadata.Type.TABLE ? "cascade" : "" + type === execution.TableMetadata_Type.TABLE ? "cascade" : "" }`; } - public baseTableType(enumType: dataform.TableType) { + public baseTableType(enumType: core.TableType) { switch (enumType) { - case dataform.TableType.TABLE: - case dataform.TableType.INCREMENTAL: - return dataform.TableMetadata.Type.TABLE; - case dataform.TableType.VIEW: - return dataform.TableMetadata.Type.VIEW; + case core.TableType.TABLE: + case core.TableType.INCREMENTAL: + return execution.TableMetadata_Type.TABLE; + case core.TableType.VIEW: + return execution.TableMetadata_Type.VIEW; default: throw new Error(`Unexpected table type: ${tableTypeEnumToString(enumType)}`); } } - public tableTypeAsSql(type: dataform.TableMetadata.Type) { + public tableTypeAsSql(type: execution.TableMetadata_Type) { switch (type) { - case dataform.TableMetadata.Type.TABLE: + case execution.TableMetadata_Type.TABLE: return "table"; - case dataform.TableMetadata.Type.VIEW: + case execution.TableMetadata_Type.VIEW: return "view"; default: throw new Error(`Unexpected table type: ${type}`); @@ -88,7 +86,7 @@ WHERE NOT (${rowCondition}) .join(`UNION ALL`); } - protected insertInto(target: dataform.ITarget, columns: string[], query: string) { + protected insertInto(target: core.Target, columns: string[], query: string) { return ` insert into ${this.resolveTarget(target)} (${columns.join(",")}) @@ -96,12 +94,12 @@ select ${columns.join(",")} from (${query}) as insertions`; } - protected oppositeTableType(type: dataform.TableMetadata.Type) { + protected oppositeTableType(type: execution.TableMetadata_Type) { switch (type) { - case dataform.TableMetadata.Type.TABLE: - return dataform.TableMetadata.Type.VIEW; - case dataform.TableMetadata.Type.VIEW: - return dataform.TableMetadata.Type.TABLE; + case execution.TableMetadata_Type.TABLE: + return execution.TableMetadata_Type.VIEW; + case execution.TableMetadata_Type.VIEW: + return execution.TableMetadata_Type.TABLE; default: throw new Error(`Unexpected table type: ${type}`); } @@ -116,25 +114,25 @@ from (${query}) as insertions`; } protected shouldWriteIncrementally( - runConfig: dataform.IRunConfig, - tableMetadata?: dataform.ITableMetadata + runConfig: execution.RunConfig, + tableMetadata?: execution.TableMetadata ) { return ( !runConfig.fullRefresh && tableMetadata && - tableMetadata.type !== dataform.TableMetadata.Type.VIEW + tableMetadata.type !== execution.TableMetadata_Type.VIEW ); } protected preOps( - table: dataform.ITable, - runConfig: dataform.IRunConfig, - tableMetadata?: dataform.ITableMetadata + table: core.Table, + runConfig: execution.RunConfig, + tableMetadata?: execution.TableMetadata ): Task[] { let preOps = table.preOps; if ( - semver.gt(this.dataformCoreVersion, "1.4.8") && - table.enumType === dataform.TableType.INCREMENTAL && + semver.gt(this.coreCoreVersion, "1.4.8") && + table.enumType === core.TableType.INCREMENTAL && this.shouldWriteIncrementally(runConfig, tableMetadata) ) { preOps = table.incrementalPreOps; @@ -143,14 +141,14 @@ from (${query}) as insertions`; } protected postOps( - table: dataform.ITable, - runConfig: dataform.IRunConfig, - tableMetadata?: dataform.ITableMetadata + table: core.Table, + runConfig: execution.RunConfig, + tableMetadata?: execution.TableMetadata ): Task[] { let postOps = table.postOps; if ( - semver.gt(this.dataformCoreVersion, "1.4.8") && - table.enumType === dataform.TableType.INCREMENTAL && + semver.gt(this.coreCoreVersion, "1.4.8") && + table.enumType === core.TableType.INCREMENTAL && this.shouldWriteIncrementally(runConfig, tableMetadata) ) { postOps = table.incrementalPostOps; From 98babbf72727350f4b1bdff9519a243330ebb371 Mon Sep 17 00:00:00 2001 From: Elias Kassell Date: Fri, 17 Feb 2023 12:39:46 +0000 Subject: [PATCH 7/9] More proto conversion progress --- api/commands/build.ts | 39 ++- api/commands/compile.ts | 11 +- api/commands/credentials.ts | 29 +- api/commands/init.ts | 7 +- api/commands/prune.ts | 17 +- api/commands/query.ts | 7 +- api/commands/run.ts | 79 ++--- api/commands/state.ts | 7 +- api/commands/table.ts | 11 +- api/commands/test.ts | 11 +- api/dbadapters/bigquery.ts | 35 +-- api/dbadapters/index.ts | 19 +- api/dbadapters/postgres.ts | 25 +- api/dbadapters/presto.ts | 25 +- api/dbadapters/redshift.ts | 25 +- api/dbadapters/snowflake.ts | 27 +- api/dbadapters/sqldatawarehouse.ts | 23 +- api/ssh_tunnel_proxy.ts | 5 +- api/utils/error_parsing.ts | 3 +- api/utils/graphs.ts | 21 +- api/utils/postgres.ts | 3 +- cli/console.ts | 41 +-- cli/credentials.ts | 23 +- cli/index.ts | 11 +- cli/util.ts | 5 +- core/adapters/base.ts | 6 +- core/adapters/bigquery.ts | 55 ++-- core/adapters/index.ts | 45 ++- core/adapters/presto.ts | 28 +- core/adapters/redshift.ts | 38 ++- core/adapters/snowflake.ts | 51 ++-- core/adapters/sqldatawarehouse.ts | 38 ++- core/assertion.ts | 23 +- core/column_descriptors.ts | 9 +- core/declaration.ts | 5 +- core/gen_index.ts | 5 +- core/main.ts | 3 +- core/operation.ts | 21 +- core/session.ts | 124 ++++---- core/table.ts | 74 +++-- core/targets.ts | 9 +- core/tasks.ts | 5 +- core/test.ts | 18 +- core/utils.ts | 39 +-- sandbox/vm/compile.ts | 7 +- sandbox/vm/create_config.ts | 7 +- tests/api/api.spec.ts | 115 ++++---- tests/api/examples.spec.ts | 111 +++---- tests/cli/cli.spec.ts | 2 +- tests/core/core.spec.ts | 274 ++++++++++-------- tests/integration/bigquery.spec.ts | 31 +- .../definitions/sample_data.sqlx | 4 +- tests/integration/postgres.spec.ts | 19 +- .../definitions/sample_data.sqlx | 4 +- tests/integration/presto.spec.ts | 3 +- tests/integration/redshift.spec.ts | 19 +- .../definitions/sample_data.sqlx | 4 +- tests/integration/snowflake.spec.ts | 17 +- .../definitions/sample_data.sqlx | 4 +- tests/integration/sqldatawarehouse.spec.ts | 19 +- .../definitions/sample_data.sqlx | 4 +- tests/integration/utils.ts | 9 +- vscode/server.ts | 9 +- 63 files changed, 905 insertions(+), 862 deletions(-) diff --git a/api/commands/build.ts b/api/commands/build.ts index 5123f2289..c461d56f8 100644 --- a/api/commands/build.ts +++ b/api/commands/build.ts @@ -5,11 +5,12 @@ import { StringifiedMap, StringifiedSet } from "df/common/strings/stringifier"; import { adapters } from "df/core"; import { targetStringifier } from "df/core/targets"; import * as utils from "df/core/utils"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; export async function build( - compiledGraph: dataform.ICompiledGraph, - runConfig: dataform.IRunConfig, + compiledGraph: dataform.CompiledGraph, + runConfig: execution.RunConfig, dbadapter: dbadapters.IDbAdapter ) { runConfig = { @@ -19,7 +20,7 @@ export async function build( const prunedGraph = prune(compiledGraph, runConfig); - const allInvolvedTargets = new StringifiedSet( + const allInvolvedTargets = new StringifiedSet( targetStringifier, prunedGraph.tables.map(table => table.target) ); @@ -44,9 +45,9 @@ export class Builder { private readonly adapter: adapters.IAdapter; constructor( - private readonly prunedGraph: dataform.ICompiledGraph, - private readonly runConfig: dataform.IRunConfig, - private readonly warehouseState: dataform.IWarehouseState + private readonly prunedGraph: dataform.CompiledGraph, + private readonly runConfig: execution.RunConfig, + private readonly warehouseState: dataform.WarehouseState ) { this.adapter = adapters.create( prunedGraph.projectConfig, @@ -60,14 +61,14 @@ export class Builder { throw new Error(`Project has unresolved compilation or validation errors.`); } - const tableMetadataByTarget = new StringifiedMap( + const tableMetadataByTarget = new StringifiedMap( targetStringifier ); this.warehouseState.tables.forEach(tableState => { tableMetadataByTarget.set(tableState.target, tableState); }); - const actions: dataform.IExecutionAction[] = [].concat( + const actions: dataform.ExecutionAction[] = [].concat( this.prunedGraph.tables.map(t => this.buildTable(t, tableMetadataByTarget.get(t.target), this.runConfig) ), @@ -84,9 +85,9 @@ export class Builder { } private buildTable( - table: dataform.ITable, - tableMetadata: dataform.ITableMetadata, - runConfig: dataform.IRunConfig + table: core.Target, + tableMetadata: execution.TableMetadata, + runConfig: execution.RunConfig ) { if (table.protected && this.runConfig.fullRefresh) { throw new Error("Protected datasets cannot be fully refreshed."); @@ -99,35 +100,33 @@ export class Builder { tasks: table.disabled ? [] : this.adapter.publishTasks(table, runConfig, tableMetadata).build(), - hermeticity: table.hermeticity || dataform.ActionHermeticity.HERMETIC + hermeticity: table.hermeticity || core.ActionHermeticity.HERMETIC }; } - private buildOperation(operation: dataform.IOperation) { + private buildOperation(operation: core.Operation) { return { ...this.toPartialExecutionAction(operation), type: "operation", tasks: operation.disabled ? [] : operation.queries.map(statement => ({ type: "statement", statement })), - hermeticity: operation.hermeticity || dataform.ActionHermeticity.NON_HERMETIC + hermeticity: operation.hermeticity || core.ActionHermeticity.NON_HERMETIC }; } - private buildAssertion(assertion: dataform.IAssertion) { + private buildAssertion(assertion: core.Assertion) { return { ...this.toPartialExecutionAction(assertion), type: "assertion", tasks: assertion.disabled ? [] : this.adapter.assertTasks(assertion, this.prunedGraph.projectConfig).build(), - hermeticity: assertion.hermeticity || dataform.ActionHermeticity.HERMETIC + hermeticity: assertion.hermeticity || core.ActionHermeticity.HERMETIC }; } - private toPartialExecutionAction( - action: dataform.ITable | dataform.IOperation | dataform.IAssertion - ) { + private toPartialExecutionAction(action: core.Target | core.Operation | core.Assertion) { return dataform.ExecutionAction.create({ target: action.target, fileName: action.fileName, diff --git a/api/commands/compile.ts b/api/commands/compile.ts index b507f550a..81f45288c 100644 --- a/api/commands/compile.ts +++ b/api/commands/compile.ts @@ -8,13 +8,14 @@ import { validWarehouses } from "df/api/dbadapters"; import { coerceAsError, ErrorWithCause } from "df/common/errors/errors"; import { decode64 } from "df/common/protos"; import { setOrValidateTableEnumType } from "df/core/utils"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; // Project config properties that are required. -const mandatoryProps: Array = ["warehouse", "defaultSchema"]; +const mandatoryProps: Array = ["warehouse", "defaultSchema"]; // Project config properties that require alphanumeric characters, hyphens or underscores. -const simpleCheckProps: Array = [ +const simpleCheckProps: Array = [ "assertionSchema", "databaseSuffix", "schemaSuffix", @@ -25,7 +26,7 @@ const simpleCheckProps: Array = [ export class CompilationTimeoutError extends Error {} export async function compile( - compileConfig: dataform.ICompileConfig = {} + compileConfig: dataform.CompileConfig = {} ): Promise { // Resolve the path in case it hasn't been resolved already. path.resolve(compileConfig.projectDir); @@ -91,7 +92,7 @@ export class CompileChildProcess { this.childProcess = childProcess; } - public async compile(compileConfig: dataform.ICompileConfig) { + public async compile(compileConfig: dataform.CompileConfig) { const compileInChildProcess = new Promise(async (resolve, reject) => { this.childProcess.on("error", (e: Error) => reject(coerceAsError(e))); diff --git a/api/commands/credentials.ts b/api/commands/credentials.ts index b4a2cf7c8..307cf22f2 100644 --- a/api/commands/credentials.ts +++ b/api/commands/credentials.ts @@ -2,16 +2,17 @@ import * as fs from "fs"; import * as dbadapters from "df/api/dbadapters"; import { requiredWarehouseProps, WarehouseType } from "df/core/adapters"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; export const CREDENTIALS_FILENAME = ".df-credentials.json"; export type Credentials = - | dataform.IBigQuery - | dataform.IJDBC - | dataform.IPresto - | dataform.ISnowflake - | dataform.ISQLDataWarehouse; + | profiles.BigQuery + | profiles.JDBC + | profiles.Presto + | profiles.Snowflake + | dataform.SQLDataWarehouse; export function read(warehouse: string, credentialsPath: string): Credentials { if (!fs.existsSync(credentialsPath)) { @@ -25,8 +26,8 @@ export function coerce(warehouse: string, credentials: any): Credentials { case WarehouseType.BIGQUERY: { return validateAnyAsCredentials( credentials, - dataform.BigQuery.verify, - dataform.BigQuery.create, + profiles.BigQuery.verify, + profiles.BigQuery.create, requiredWarehouseProps[warehouse] ); } @@ -34,24 +35,24 @@ export function coerce(warehouse: string, credentials: any): Credentials { case WarehouseType.REDSHIFT: { return validateAnyAsCredentials( credentials, - dataform.JDBC.verify, - dataform.JDBC.create, + profiles.JDBC.verify, + profiles.JDBC.create, requiredWarehouseProps[warehouse] ); } case WarehouseType.PRESTO: { return validateAnyAsCredentials( credentials, - dataform.Presto.verify, - dataform.Presto.create, + profiles.Presto.verify, + profiles.Presto.create, requiredWarehouseProps[warehouse] ); } case WarehouseType.SNOWFLAKE: { return validateAnyAsCredentials( credentials, - dataform.Snowflake.verify, - dataform.Snowflake.create, + profiles.Snowflake.verify, + profiles.Snowflake.create, requiredWarehouseProps[warehouse] ); } diff --git a/api/commands/init.ts b/api/commands/init.ts index d8a42344b..be7f5cfb8 100644 --- a/api/commands/init.ts +++ b/api/commands/init.ts @@ -5,7 +5,8 @@ import { CREDENTIALS_FILENAME } from "df/api/commands/credentials"; import { install } from "df/api/commands/install"; import { prettyJsonStringify } from "df/api/utils"; import { version } from "df/core/version"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; const gitIgnoreContents = ` ${CREDENTIALS_FILENAME} @@ -24,7 +25,7 @@ export interface IInitOptions { export async function init( projectDir: string, - projectConfig: dataform.IProjectConfig, + projectConfig: core.ProjectConfig, options: IInitOptions = {} ): Promise { const dataformJsonPath = path.join(projectDir, "dataform.json"); @@ -48,7 +49,7 @@ export async function init( fs.writeFileSync( dataformJsonPath, prettyJsonStringify( - dataform.ProjectConfig.create({ + core.ProjectConfig.create({ defaultSchema: "dataform", assertionSchema: "dataform_assertions", ...projectConfig diff --git a/api/commands/prune.ts b/api/commands/prune.ts index 4da4d39bc..14adb23ae 100644 --- a/api/commands/prune.ts +++ b/api/commands/prune.ts @@ -1,13 +1,14 @@ import { targetAsReadableString } from "df/core/targets"; import * as utils from "df/core/utils"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; -type CompileAction = dataform.ITable | dataform.IOperation | dataform.IAssertion; +type CompileAction = core.Target | core.Operation | core.Assertion; export function prune( - compiledGraph: dataform.ICompiledGraph, - runConfig: dataform.IRunConfig -): dataform.ICompiledGraph { + compiledGraph: dataform.CompiledGraph, + runConfig: execution.RunConfig +): dataform.CompiledGraph { compiledGraph.tables.forEach(utils.setOrValidateTableEnumType); const includedActionNames = computeIncludedActionNames(compiledGraph, runConfig); return { @@ -25,11 +26,11 @@ export function prune( } function computeIncludedActionNames( - compiledGraph: dataform.ICompiledGraph, - runConfig: dataform.IRunConfig + compiledGraph: dataform.CompiledGraph, + runConfig: execution.RunConfig ): Set { // Remove inline tables. - const filteredTables = compiledGraph.tables.filter(t => t.enumType !== dataform.TableType.INLINE); + const filteredTables = compiledGraph.tables.filter(t => t.enumType !== core.TargetType.INLINE); // Union all tables, operations, assertions. const allActions: CompileAction[] = [].concat( diff --git a/api/commands/query.ts b/api/commands/query.ts index 4efbc864e..88706b2e9 100644 --- a/api/commands/query.ts +++ b/api/commands/query.ts @@ -1,12 +1,13 @@ import * as dbadapters from "df/api/dbadapters"; import { CancellablePromise } from "df/api/utils/cancellable_promise"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; export function run( dbadapter: dbadapters.IDbAdapter, query: string, options?: { - compileConfig?: dataform.ICompileConfig; + compileConfig?: dataform.CompileConfig; rowLimit?: number; byteLimit?: number; } @@ -29,6 +30,6 @@ export function run( export async function evaluate( dbadapter: dbadapters.IDbAdapter, query: string -): Promise { +): Promise { return (await dbadapter.evaluate(query))[0]; } diff --git a/api/commands/run.ts b/api/commands/run.ts index 9fdd243c9..bb46a6b57 100644 --- a/api/commands/run.ts +++ b/api/commands/run.ts @@ -7,57 +7,61 @@ import { retry } from "df/common/promises"; import { deepClone, equals } from "df/common/protos"; import { StringifiedMap, StringifiedSet } from "df/common/strings/stringifier"; import { targetsAreEqual, targetStringifier } from "df/core/targets"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; const CANCEL_EVENT = "jobCancel"; const flags = { runnerNotificationPeriodMillis: Flags.number("runner-notification-period-millis", 5000) }; -const isSuccessfulAction = (actionResult: dataform.IActionResult) => +const isSuccessfulAction = (actionResult: dataform.ActionResult) => actionResult.status === dataform.ActionResult.ExecutionStatus.SUCCESSFUL || actionResult.status === dataform.ActionResult.ExecutionStatus.DISABLED; export interface IExecutedAction { - executionAction: dataform.IExecutionAction; - actionResult: dataform.IActionResult; + executionAction: dataform.ExecutionAction; + actionResult: dataform.ActionResult; } export function run( dbadapter: dbadapters.IDbAdapter, - graph: dataform.IExecutionGraph, - partiallyExecutedRunResult: dataform.IRunResult = {}, + graph: dataform.ExecutionGraph, + partiallyExecutedRunResult: dataform.RunResult = {}, runnerNotificationPeriodMillis: number = flags.runnerNotificationPeriodMillis.get() ): Runner { - return new Runner(dbadapter, graph, partiallyExecutedRunResult, runnerNotificationPeriodMillis).execute(); + return new Runner( + dbadapter, + graph, + partiallyExecutedRunResult, + runnerNotificationPeriodMillis + ).execute(); } export class Runner { - private readonly warehouseStateByTarget: StringifiedMap< - dataform.ITarget, - dataform.ITableMetadata - >; - - private readonly allActionTargets: StringifiedSet; - private readonly runResult: dataform.IRunResult; - private readonly changeListeners: Array<(graph: dataform.IRunResult) => void> = []; + private readonly warehouseStateByTarget: StringifiedMap; + + private readonly allActionTargets: StringifiedSet; + private readonly runResult: dataform.RunResult; + private readonly changeListeners: Array<(graph: dataform.RunResult) => void> = []; private readonly eEmitter: EventEmitter; - private executedActionTargets: StringifiedSet; - private successfullyExecutedActionTargets: StringifiedSet; - private pendingActions: dataform.IExecutionAction[]; + private executedActionTargets: StringifiedSet; + private successfullyExecutedActionTargets: StringifiedSet; + private pendingActions: dataform.ExecutionAction[]; private lastNotificationTimestampMillis = 0; private stopped = false; private cancelled = false; private timeout: NodeJS.Timer; private timedOut = false; - private executionTask: Promise; + private executionTask: Promise; constructor( private readonly dbadapter: dbadapters.IDbAdapter, - private readonly graph: dataform.IExecutionGraph, - partiallyExecutedRunResult: dataform.IRunResult = {}, - private readonly runnerNotificationPeriodMillis: number = flags.runnerNotificationPeriodMillis.get()) { - this.allActionTargets = new StringifiedSet( + private readonly graph: dataform.ExecutionGraph, + partiallyExecutedRunResult: dataform.RunResult = {}, + private readonly runnerNotificationPeriodMillis: number = flags.runnerNotificationPeriodMillis.get() + ) { + this.allActionTargets = new StringifiedSet( targetStringifier, graph.actions.map(action => action.target) ); @@ -87,7 +91,7 @@ export class Runner { this.eEmitter.setMaxListeners(0); } - public onChange(listener: (graph: dataform.IRunResult) => void): Runner { + public onChange(listener: (graph: dataform.RunResult) => void): Runner { this.changeListeners.push(listener); return this; } @@ -119,7 +123,7 @@ export class Runner { this.eEmitter.emit(CANCEL_EVENT); } - public async result(): Promise { + public async result(): Promise { try { return await this.executionTask; } finally { @@ -130,10 +134,7 @@ export class Runner { } private notifyListeners() { - if ( - Date.now() - this.runnerNotificationPeriodMillis < - this.lastNotificationTimestampMillis - ) { + if (Date.now() - this.runnerNotificationPeriodMillis < this.lastNotificationTimestampMillis) { return; } const runResultClone = deepClone(dataform.RunResult, this.runResult); @@ -286,8 +287,8 @@ export class Runner { ]); } - private async executeAction(action: dataform.IExecutionAction): Promise { - let actionResult: dataform.IActionResult = { + private async executeAction(action: dataform.ExecutionAction): Promise { + let actionResult: dataform.ActionResult = { target: action.target, tasks: [] }; @@ -368,7 +369,7 @@ export class Runner { } } - let newMetadata: dataform.ITableMetadata; + let newMetadata: execution.TableMetadata; if (this.graph.projectConfig.useRunCache) { try { newMetadata = await this.dbadapter.table(action.target); @@ -395,12 +396,12 @@ export class Runner { private async executeTask( client: dbadapters.IDbClient, - task: dataform.IExecutionTask, - parentAction: dataform.IActionResult, + task: dataform.ExecutionTask, + parentAction: dataform.ActionResult, options: { bigquery: { labels: { [label: string]: string } } } ): Promise { const timer = Timer.start(); - const taskResult: dataform.ITaskResult = { + const taskResult: dataform.TaskResult = { status: dataform.TaskResult.ExecutionStatus.RUNNING, timing: timer.current(), metadata: {} @@ -441,18 +442,18 @@ export class Runner { } class Timer { - public static start(existingTiming?: dataform.ITiming) { + public static start(existingTiming?: dataform.Timing) { return new Timer(existingTiming?.startTimeMillis.toNumber() || new Date().valueOf()); } - private constructor(readonly startTimeMillis: number) { } + private constructor(readonly startTimeMillis: number) {} - public current(): dataform.ITiming { + public current(): dataform.Timing { return { startTimeMillis: Long.fromNumber(this.startTimeMillis) }; } - public end(): dataform.ITiming { + public end(): dataform.Timing { return { startTimeMillis: Long.fromNumber(this.startTimeMillis), endTimeMillis: Long.fromNumber(new Date().valueOf()) diff --git a/api/commands/state.ts b/api/commands/state.ts index 731fc551d..ed9f55caa 100644 --- a/api/commands/state.ts +++ b/api/commands/state.ts @@ -1,10 +1,11 @@ import { IDbAdapter } from "df/api/dbadapters"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; export async function state( dbadapter: IDbAdapter, - targets: dataform.ITarget[] -): Promise { + targets: core.Target[] +): Promise { const allTables = await Promise.all(targets.map(async target => dbadapter.table(target))); // Filter out datasets that don't exist. diff --git a/api/commands/table.ts b/api/commands/table.ts index 5e7face60..ea746fdd2 100644 --- a/api/commands/table.ts +++ b/api/commands/table.ts @@ -1,20 +1,21 @@ import * as dbadapters from "df/api/dbadapters"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; -export async function list(dbadapter: dbadapters.IDbAdapter): Promise { +export async function list(dbadapter: dbadapters.IDbAdapter): Promise { return await dbadapter.tables(); } export async function get( dbadapter: dbadapters.IDbAdapter, - target: dataform.ITarget -): Promise { + target: core.Target +): Promise { return await dbadapter.table(target); } export async function preview( dbadapter: dbadapters.IDbAdapter, - target: dataform.ITarget, + target: core.Target, limitRows?: number ): Promise { return await dbadapter.preview(target, limitRows); diff --git a/api/commands/test.ts b/api/commands/test.ts index 7fd98d322..a84abe8cb 100644 --- a/api/commands/test.ts +++ b/api/commands/test.ts @@ -1,17 +1,18 @@ import * as dbadapters from "df/api/dbadapters"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; export async function test( dbadapter: dbadapters.IDbAdapter, - tests: dataform.ITest[] -): Promise { + tests: dataform.Test[] +): Promise { return await Promise.all(tests.map(testCase => runTest(dbadapter, testCase))); } async function runTest( dbadapter: dbadapters.IDbAdapter, - testCase: dataform.ITest -): Promise { + testCase: dataform.Test +): Promise { // TODO: Test results are currently limited to 1MB. // We should paginate test results to remove this limit. let actualResults; diff --git a/api/dbadapters/bigquery.ts b/api/dbadapters/bigquery.ts index b03d36705..b43004fef 100644 --- a/api/dbadapters/bigquery.ts +++ b/api/dbadapters/bigquery.ts @@ -15,7 +15,8 @@ import { LimitedResultSet } from "df/api/utils/results"; import { coerceAsError } from "df/common/errors/errors"; import { retry } from "df/common/promises"; import { collectEvaluationQueries, QueryOrAction } from "df/core/adapters"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; const EXTRA_GOOGLE_SCOPES = ["https://www.googleapis.com/auth/drive"]; @@ -33,13 +34,13 @@ export class BigQueryDbAdapter implements IDbAdapter { return new BigQueryDbAdapter(credentials, options); } - private bigQueryCredentials: dataform.IBigQuery; + private bigQueryCredentials: profiles.BigQuery; private pool: PromisePoolExecutor; private readonly clients = new Map(); private constructor(credentials: Credentials, options?: { concurrencyLimit?: number }) { - this.bigQueryCredentials = credentials as dataform.IBigQuery; + this.bigQueryCredentials = credentials as profiles.BigQuery; // Bigquery allows 50 concurrent queries, and a rate limit of 100/user/second by default. // These limits should be safely low enough for most projects. this.pool = new PromisePoolExecutor({ @@ -131,12 +132,12 @@ export class BigQueryDbAdapter implements IDbAdapter { ); } - public async tables(): Promise { + public async tables(): Promise { const datasets = await this.getClient().getDatasets({ autoPaginate: true, maxResults: 1000 }); const tables = await Promise.all( datasets[0].map(dataset => dataset.getTables({ autoPaginate: true, maxResults: 1000 })) ); - const allTables: dataform.ITarget[] = []; + const allTables: core.Target[] = []; tables.forEach((tablesResult: GetTablesResponse) => tablesResult[0].forEach(table => allTables.push({ @@ -152,7 +153,7 @@ export class BigQueryDbAdapter implements IDbAdapter { public async search( searchText: string, options: { limit: number } = { limit: 1000 } - ): Promise { + ): Promise { const results = await this.execute( `select table_catalog, table_schema, table_name from region-${this.bigQueryCredentials.location}.INFORMATION_SCHEMA.COLUMN_FIELD_PATHS @@ -177,7 +178,7 @@ export class BigQueryDbAdapter implements IDbAdapter { ); } - public async table(target: dataform.ITarget): Promise { + public async table(target: core.Target): Promise { const metadata = await this.getMetadata(target); if (!metadata) { @@ -203,13 +204,13 @@ export class BigQueryDbAdapter implements IDbAdapter { ); } - return dataform.TableMetadata.create({ + return execution.TableMetadata.create({ type: metadata.type === "TABLE" - ? dataform.TableMetadata.Type.TABLE + ? execution.TableMetadata_Type.TABLE : metadata.type === "VIEW" - ? dataform.TableMetadata.Type.VIEW - : dataform.TableMetadata.Type.UNKNOWN, + ? execution.TableMetadata_Type.VIEW + : execution.TableMetadata_Type.UNKNOWN, target: metadataTarget, fields: metadata.schema.fields?.map(field => convertField(field)), lastUpdatedMillis: Long.fromString(metadata.lastModifiedTime), @@ -221,7 +222,7 @@ export class BigQueryDbAdapter implements IDbAdapter { }); } - public async preview(target: dataform.ITarget, limitRows: number = 10): Promise { + public async preview(target: core.Target, limitRows: number = 10): Promise { const metadata = await this.getMetadata(target); if (metadata.type === "TABLE") { // For tables, we use the BigQuery tabledata.list API, as per https://cloud.google.com/bigquery/docs/best-practices-costs#preview-data. @@ -259,7 +260,7 @@ export class BigQueryDbAdapter implements IDbAdapter { // Unimplemented. } - public async setMetadata(action: dataform.IExecutionAction): Promise { + public async setMetadata(action: dataform.ExecutionAction): Promise { const { target, actionDescriptor } = action; const metadata = await this.getMetadata(target); @@ -278,7 +279,7 @@ export class BigQueryDbAdapter implements IDbAdapter { }); } - private async getMetadata(target: dataform.ITarget): Promise { + private async getMetadata(target: core.Target): Promise { try { const table = await this.getClient(target.database) .dataset(target.schema) @@ -443,8 +444,8 @@ function cleanRows(rows: any[]) { return rows; } -function convertField(field: TableField): dataform.IField { - const result: dataform.IField = { +function convertField(field: TableField): dataform.Field { + const result: dataform.Field = { name: field.name, flags: field.mode === "REPEATED" ? [dataform.Field.Flag.REPEATED] : [], description: field.description @@ -493,7 +494,7 @@ function convertFieldType(type: string) { } function addDescriptionToMetadata( - columnDescriptions: dataform.IColumnDescriptor[], + columnDescriptions: dataform.ColumnDescriptor[], metadataArray: TableField[] ): TableField[] { const findDescription = (path: string[]) => diff --git a/api/dbadapters/index.ts b/api/dbadapters/index.ts index c107cfba4..7351fa07d 100644 --- a/api/dbadapters/index.ts +++ b/api/dbadapters/index.ts @@ -6,13 +6,14 @@ import { RedshiftDbAdapter } from "df/api/dbadapters/redshift"; import { SnowflakeDbAdapter } from "df/api/dbadapters/snowflake"; import { SQLDataWarehouseDBAdapter } from "df/api/dbadapters/sqldatawarehouse"; import { QueryOrAction } from "df/core/adapters"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; export type OnCancel = (handleCancel: () => void) => void; export interface IExecutionResult { rows: any[]; - metadata: dataform.IExecutionMetadata; + metadata: dataform.ExecutionMetadata; } export interface IDbClient { @@ -33,20 +34,18 @@ export interface IDbClient { export interface IDbAdapter extends IDbClient { withClientLock(callback: (client: IDbClient) => Promise): Promise; - evaluate( - queryOrAction: QueryOrAction, - ): Promise; + evaluate(queryOrAction: QueryOrAction): Promise; schemas(database: string): Promise; createSchema(database: string, schema: string): Promise; // TODO: This should take parameters to allow for retrieving from a specific database/schema. - tables(): Promise; - search(searchText: string, options?: { limit: number }): Promise; - table(target: dataform.ITarget): Promise; - preview(target: dataform.ITarget, limitRows?: number): Promise; + tables(): Promise; + search(searchText: string, options?: { limit: number }): Promise; + table(target: core.Target): Promise; + preview(target: core.Target, limitRows?: number): Promise; - setMetadata(action: dataform.IExecutionAction): Promise; + setMetadata(action: dataform.ExecutionAction): Promise; close(): Promise; } diff --git a/api/dbadapters/postgres.ts b/api/dbadapters/postgres.ts index 228e5268f..de436cf7d 100644 --- a/api/dbadapters/postgres.ts +++ b/api/dbadapters/postgres.ts @@ -7,7 +7,8 @@ import { parseRedshiftEvalError } from "df/api/utils/error_parsing"; import { convertFieldType, PgPoolExecutor } from "df/api/utils/postgres"; import { ErrorWithCause } from "df/common/errors/errors"; import { collectEvaluationQueries, QueryOrAction } from "df/core/adapters"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; interface IPostgresAdapterOptions { sshTunnel?: SSHTunnelProxy; @@ -18,7 +19,7 @@ export class PostgresDbAdapter implements IDbAdapter { credentials: Credentials, options?: { concurrencyLimit?: number; disableSslForTestsOnly?: boolean } ) { - const jdbcCredentials = credentials as dataform.IJDBC; + const jdbcCredentials = credentials as profiles.JDBC; const baseClientConfig: Partial = { user: jdbcCredentials.username, password: jdbcCredentials.password, @@ -107,9 +108,9 @@ export class PostgresDbAdapter implements IDbAdapter { ).map((validationQuery, index) => ({ index, validationQuery })); const validationQueriesWithoutWrappers = collectEvaluationQueries(queryOrAction, false); - const queryEvaluations = new Array(); + const queryEvaluations = new Array(); for (const { index, validationQuery } of validationQueries) { - let evaluationResponse: dataform.IQueryEvaluation = { + let evaluationResponse: dataform.QueryEvaluation = { status: dataform.QueryEvaluation.QueryEvaluationStatus.SUCCESS }; try { @@ -131,7 +132,7 @@ export class PostgresDbAdapter implements IDbAdapter { return queryEvaluations; } - public async tables(): Promise { + public async tables(): Promise { const queryResult = await this.execute( `select table_name, table_schema from information_schema.tables @@ -150,7 +151,7 @@ export class PostgresDbAdapter implements IDbAdapter { public async search( searchText: string, options: { limit: number } = { limit: 1000 } - ): Promise { + ): Promise { // TODO: It would be nice to extend this to search through table/column descriptions. However, this involves // a somewhat crazy 5-way join. const results = await this.execute( @@ -174,7 +175,7 @@ export class PostgresDbAdapter implements IDbAdapter { ); } - public async table(target: dataform.ITarget): Promise { + public async table(target: core.Target): Promise { const params = [target.schema, target.name]; const [tableResults, columnResults, descriptionResults] = await Promise.all([ this.execute( @@ -201,12 +202,12 @@ export class PostgresDbAdapter implements IDbAdapter { if (tableResults.rows.length === 0) { return null; } - return dataform.TableMetadata.create({ + return execution.TableMetadata.create({ target, type: tableResults.rows[0].table_type === "VIEW" - ? dataform.TableMetadata.Type.VIEW - : dataform.TableMetadata.Type.TABLE, + ? execution.TableMetadata_Type.VIEW + : execution.TableMetadata_Type.TABLE, fields: columnResults.rows.map(row => dataform.Field.create({ name: row.column_name, @@ -222,7 +223,7 @@ export class PostgresDbAdapter implements IDbAdapter { }); } - public async preview(target: dataform.ITarget, limitRows: number = 10): Promise { + public async preview(target: core.Target, limitRows: number = 10): Promise { const { rows } = await this.execute( `SELECT * FROM "${target.schema}"."${target.name}" LIMIT ${limitRows}` ); @@ -247,7 +248,7 @@ export class PostgresDbAdapter implements IDbAdapter { } } - public async setMetadata(action: dataform.IExecutionAction): Promise { + public async setMetadata(action: dataform.ExecutionAction): Promise { const { target, actionDescriptor, tableType } = action; const actualMetadata = await this.table(target); diff --git a/api/dbadapters/presto.ts b/api/dbadapters/presto.ts index d457b1e01..69d98e24d 100644 --- a/api/dbadapters/presto.ts +++ b/api/dbadapters/presto.ts @@ -5,10 +5,11 @@ import { Credentials } from "df/api/commands/credentials"; import { IDbAdapter, IDbClient, IExecutionResult, OnCancel } from "df/api/dbadapters/index"; import { LimitedResultSet } from "df/api/utils/results"; import { collectEvaluationQueries, QueryOrAction } from "df/core/adapters"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; // TODO: Move this to somewhere both the API and CLI can use? -function resolveTarget(target: dataform.ITarget) { +function resolveTarget(target: core.Target) { return `${target.database ? `${target.database}.` : ""}${ target.schema ? `${target.schema}.` : "" }${target.name}`; @@ -94,9 +95,9 @@ export class PrestoDbAdapter implements IDbAdapter { ).map((validationQuery, index) => ({ index, validationQuery })); const validationQueriesWithoutWrappers = collectEvaluationQueries(queryOrAction, true); - const queryEvaluations = new Array(); + const queryEvaluations = new Array(); for (const { index, validationQuery } of validationQueries) { - let evaluationResponse: dataform.IQueryEvaluation = { + let evaluationResponse: dataform.QueryEvaluation = { status: dataform.QueryEvaluation.QueryEvaluationStatus.SUCCESS }; try { @@ -133,9 +134,9 @@ export class PrestoDbAdapter implements IDbAdapter { await this.execute(`create schema if not exists ${database}.${schema}`); } - public async tables(): Promise { + public async tables(): Promise { const databases = await this.databases(); - const targets: dataform.ITarget[] = []; + const targets: core.Target[] = []; await Promise.all( databases.map( async database => @@ -144,7 +145,7 @@ export class PrestoDbAdapter implements IDbAdapter { const result = await this.execute(`show tables from ${database}.${schema}`); targets.push( ...result.rows.flat().map(table => - dataform.Target.create({ + core.Target.create({ database, schema, name: table as string @@ -158,7 +159,7 @@ export class PrestoDbAdapter implements IDbAdapter { return targets; } - public async table(target: dataform.ITarget): Promise { + public async table(target: core.Target): Promise { let columnsResult: IExecutionResult; try { // TODO: In the future, the connection won't specify the database and schema to allow moving data between @@ -179,21 +180,21 @@ export class PrestoDbAdapter implements IDbAdapter { columnsResult?.rows.map(column => dataform.Field.create({ name: column[0], description: column[3] }) ) || []; - return dataform.TableMetadata.create({ + return execution.TableMetadata.create({ // TODO: Add missing table metadata items. target, fields }); } - public async preview(target: dataform.ITarget, limitRows: number = 10): Promise { + public async preview(target: core.Target, limitRows: number = 10): Promise { const { rows } = await this.execute( `select * from ${resolveTarget(target)} limit ${limitRows}` ); return rows; } - public async setMetadata(action: dataform.IExecutionAction): Promise { + public async setMetadata(action: dataform.ExecutionAction): Promise { // Unimplemented. } @@ -204,7 +205,7 @@ export class PrestoDbAdapter implements IDbAdapter { public async search( searchText: string, options?: { limit: number } - ): Promise { + ): Promise { // Unimplemented. return []; } diff --git a/api/dbadapters/redshift.ts b/api/dbadapters/redshift.ts index 31ae5a04f..704380b8e 100644 --- a/api/dbadapters/redshift.ts +++ b/api/dbadapters/redshift.ts @@ -7,7 +7,8 @@ import { parseRedshiftEvalError } from "df/api/utils/error_parsing"; import { convertFieldType, PgPoolExecutor } from "df/api/utils/postgres"; import { ErrorWithCause } from "df/common/errors/errors"; import { collectEvaluationQueries, QueryOrAction } from "df/core/adapters"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; interface IRedshiftAdapterOptions { sshTunnel?: SSHTunnelProxy; @@ -18,7 +19,7 @@ export class RedshiftDbAdapter implements IDbAdapter { credentials: Credentials, options?: { concurrencyLimit?: number; disableSslForTestsOnly?: boolean } ) { - const jdbcCredentials = credentials as dataform.IJDBC; + const jdbcCredentials = credentials as profiles.JDBC; const baseClientConfig: Partial = { user: jdbcCredentials.username, password: jdbcCredentials.password, @@ -100,9 +101,9 @@ export class RedshiftDbAdapter implements IDbAdapter { ).map((validationQuery, index) => ({ index, validationQuery })); const validationQueriesWithoutWrappers = collectEvaluationQueries(queryOrAction, false); - const queryEvaluations = new Array(); + const queryEvaluations = new Array(); for (const { index, validationQuery } of validationQueries) { - let evaluationResponse: dataform.IQueryEvaluation = { + let evaluationResponse: dataform.QueryEvaluation = { status: dataform.QueryEvaluation.QueryEvaluationStatus.SUCCESS }; try { @@ -124,7 +125,7 @@ export class RedshiftDbAdapter implements IDbAdapter { return queryEvaluations; } - public async tables(): Promise { + public async tables(): Promise { const queryResult = await this.execute( `select table_name, table_schema from svv_tables @@ -143,7 +144,7 @@ export class RedshiftDbAdapter implements IDbAdapter { public async search( searchText: string, options: { limit: number } = { limit: 1000 } - ): Promise { + ): Promise { const results = await this.execute( `select tables.table_schema as table_schema, tables.table_name as table_name from svv_tables as tables @@ -166,7 +167,7 @@ export class RedshiftDbAdapter implements IDbAdapter { ); } - public async table(target: dataform.ITarget): Promise { + public async table(target: core.Target): Promise { const params = [target.schema, target.name]; const [tableResults, columnResults] = await Promise.all([ this.execute( @@ -183,12 +184,12 @@ export class RedshiftDbAdapter implements IDbAdapter { if (tableResults.rows.length === 0) { return null; } - return dataform.TableMetadata.create({ + return execution.TableMetadata.create({ target, type: tableResults.rows[0].table_type === "VIEW" - ? dataform.TableMetadata.Type.VIEW - : dataform.TableMetadata.Type.TABLE, + ? execution.TableMetadata_Type.VIEW + : execution.TableMetadata_Type.TABLE, fields: columnResults.rows.map(row => dataform.Field.create({ name: row.column_name, @@ -200,7 +201,7 @@ export class RedshiftDbAdapter implements IDbAdapter { }); } - public async preview(target: dataform.ITarget, limitRows: number = 10): Promise { + public async preview(target: core.Target, limitRows: number = 10): Promise { const { rows } = await this.execute( `SELECT * FROM "${target.schema}"."${target.name}" LIMIT ${limitRows}` ); @@ -225,7 +226,7 @@ export class RedshiftDbAdapter implements IDbAdapter { } } - public async setMetadata(action: dataform.IExecutionAction): Promise { + public async setMetadata(action: dataform.ExecutionAction): Promise { const { target, actionDescriptor, tableType } = action; const actualMetadata = await this.table(target); diff --git a/api/dbadapters/snowflake.ts b/api/dbadapters/snowflake.ts index 6e06f3c87..33dfa88fa 100644 --- a/api/dbadapters/snowflake.ts +++ b/api/dbadapters/snowflake.ts @@ -10,7 +10,8 @@ import { LimitedResultSet } from "df/api/utils/results"; import { ErrorWithCause } from "df/common/errors/errors"; import { Flags } from "df/common/flags"; import { collectEvaluationQueries, QueryOrAction } from "df/core/adapters"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; const HEARTBEAT_INTERVAL_SECONDS = 30; @@ -73,7 +74,7 @@ interface ISnowflakeStatement { export class SnowflakeDbAdapter implements IDbAdapter { public static async create(credentials: Credentials, options?: { concurrencyLimit?: number }) { - const connection = await connect(credentials as dataform.ISnowflake); + const connection = await connect(credentials as profiles.Snowflake); return new SnowflakeDbAdapter(connection, options); } @@ -158,9 +159,9 @@ export class SnowflakeDbAdapter implements IDbAdapter { ).map((validationQuery, index) => ({ index, validationQuery })); const validationQueriesWithoutWrappers = collectEvaluationQueries(queryOrAction, false); - const queryEvaluations = new Array(); + const queryEvaluations = new Array(); for (const { index, validationQuery } of validationQueries) { - let evaluationResponse: dataform.IQueryEvaluation = { + let evaluationResponse: dataform.QueryEvaluation = { status: dataform.QueryEvaluation.QueryEvaluationStatus.SUCCESS }; try { @@ -182,7 +183,7 @@ export class SnowflakeDbAdapter implements IDbAdapter { return queryEvaluations; } - public async tables(): Promise { + public async tables(): Promise { const { rows } = await this.execute( ` select table_name, table_schema, table_catalog @@ -200,7 +201,7 @@ where LOWER(table_schema) != 'information_schema'`, public async search( searchText: string, options: { limit: number } = { limit: 1000 } - ): Promise { + ): Promise { const results = await this.execute( `select * from ( select tables.table_catalog as table_catalog, tables.table_schema as table_schema, tables.table_name as table_name @@ -228,7 +229,7 @@ where LOWER(table_schema) != 'information_schema'`, ); } - public async table(target: dataform.ITarget): Promise { + public async table(target: core.Target): Promise { const binds = [target.schema, target.name]; const [tableResults, columnResults] = await Promise.all([ this.execute( @@ -253,12 +254,12 @@ where table_schema = :1 return null; } - return dataform.TableMetadata.create({ + return execution.TableMetadata.create({ target, type: tableResults.rows[0].TABLE_TYPE === "VIEW" - ? dataform.TableMetadata.Type.VIEW - : dataform.TableMetadata.Type.TABLE, + ? execution.TableMetadata_Type.VIEW + : execution.TableMetadata_Type.TABLE, fields: columnResults.rows.map(row => dataform.Field.create({ name: row.COLUMN_NAME, @@ -272,7 +273,7 @@ where table_schema = :1 }); } - public async preview(target: dataform.ITarget, limitRows: number = 10): Promise { + public async preview(target: core.Target, limitRows: number = 10): Promise { const { rows } = await this.execute( `SELECT * FROM "${target.schema}"."${target.name}" LIMIT ${limitRows}` ); @@ -304,7 +305,7 @@ where table_schema = :1 }); } - public async setMetadata(action: dataform.IExecutionAction): Promise { + public async setMetadata(action: dataform.ExecutionAction): Promise { const { target, actionDescriptor, tableType } = action; const queries: Array> = []; @@ -341,7 +342,7 @@ where table_schema = :1 } } -async function connect(snowflakeCredentials: dataform.ISnowflake) { +async function connect(snowflakeCredentials: profiles.Snowflake) { // We are forced to try our own HTTPS connection to the final .snowflakecomputing.com URL // in order to verify its certificate. If we don't do this, and pass an invalid account ID (which thus // resolves to an invalid URL) to the snowflake connect() API, snowflake-sdk will not handle the diff --git a/api/dbadapters/sqldatawarehouse.ts b/api/dbadapters/sqldatawarehouse.ts index accccc1cd..1d56c9717 100644 --- a/api/dbadapters/sqldatawarehouse.ts +++ b/api/dbadapters/sqldatawarehouse.ts @@ -5,7 +5,8 @@ import { IDbAdapter, IDbClient, IExecutionResult, OnCancel } from "df/api/dbadap import { parseAzureEvaluationError } from "df/api/utils/error_parsing"; import { LimitedResultSet } from "df/api/utils/results"; import { collectEvaluationQueries, QueryOrAction } from "df/core/adapters"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; const DB_CONNECTION_TIMEOUT_MILLIS = 5 * 60 * 1000; // 5 minute connection timeout const DB_REQUEST_TIMEOUT_MILLIS = 1 * 60 * 60 * 1000; // 1 hour request timeout @@ -19,7 +20,7 @@ export class SQLDataWarehouseDBAdapter implements IDbAdapter { private pool: Promise; constructor(credentials: Credentials, options?: { concurrencyLimit?: number }) { - const sqlDataWarehouseCredentials = credentials as dataform.ISQLDataWarehouse; + const sqlDataWarehouseCredentials = credentials as dataform.SQLDataWarehouse; this.pool = new Promise((resolve, reject) => { const conn = new ConnectionPool({ server: sqlDataWarehouseCredentials.server, @@ -97,9 +98,9 @@ export class SQLDataWarehouseDBAdapter implements IDbAdapter { ).map((validationQuery, index) => ({ index, validationQuery })); const validationQueriesWithoutWrappers = collectEvaluationQueries(queryOrAction, false); - const queryEvaluations = new Array(); + const queryEvaluations = new Array(); for (const { index, validationQuery } of validationQueries) { - let evaluationResponse: dataform.IQueryEvaluation = { + let evaluationResponse: dataform.QueryEvaluation = { status: dataform.QueryEvaluation.QueryEvaluationStatus.SUCCESS }; try { @@ -121,7 +122,7 @@ export class SQLDataWarehouseDBAdapter implements IDbAdapter { return queryEvaluations; } - public async tables(): Promise { + public async tables(): Promise { const { rows } = await this.execute( `select table_schema, table_name from information_schema.tables`, { @@ -137,7 +138,7 @@ export class SQLDataWarehouseDBAdapter implements IDbAdapter { public async search( searchText: string, options: { limit: number } = { limit: 1000 } - ): Promise { + ): Promise { const results = await this.execute( `select tables.table_schema as table_schema, tables.table_name as table_name from information_schema.tables as tables @@ -161,7 +162,7 @@ export class SQLDataWarehouseDBAdapter implements IDbAdapter { ); } - public async table(target: dataform.ITarget): Promise { + public async table(target: core.Target): Promise { const queryParams = { schema: target.schema, name: target.name @@ -193,16 +194,16 @@ export class SQLDataWarehouseDBAdapter implements IDbAdapter { target, type: tableData.rows[0].table_type === "VIEW" - ? dataform.TableMetadata.Type.VIEW - : dataform.TableMetadata.Type.TABLE, + ? execution.TableMetadata_Type.VIEW + : execution.TableMetadata_Type.TABLE, fields: columnData.rows.map(row => ({ name: row.column_name, - primitive: convertFieldType(row.data_type), + primitive: convertFieldType(row.data_type) })) }; } - public async preview(target: dataform.ITarget, limitRows: number = 10): Promise { + public async preview(target: core.Target, limitRows: number = 10): Promise { const { rows } = await this.execute( `SELECT TOP ${limitRows} * FROM "${target.schema}"."${target.name}"` ); diff --git a/api/ssh_tunnel_proxy.ts b/api/ssh_tunnel_proxy.ts index 55c299f0e..a82ce5cdb 100644 --- a/api/ssh_tunnel_proxy.ts +++ b/api/ssh_tunnel_proxy.ts @@ -2,7 +2,8 @@ import getPort from "get-port"; import * as net from "net"; import * as ssh2 from "ssh2"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; /** * Creates a local socket on this machine on a random port and forwards traffic @@ -10,7 +11,7 @@ import { dataform } from "df/protos/ts"; */ export class SSHTunnelProxy { public static async create( - tunnel: dataform.JDBC.ISshTunnel, + tunnel: profiles.JDBC.ISshTunnel, destination: { host: string; port: number } ) { // Find a free local port for the tunnel proxy. diff --git a/api/utils/error_parsing.ts b/api/utils/error_parsing.ts index 81faf0eb2..174c6ade5 100644 --- a/api/utils/error_parsing.ts +++ b/api/utils/error_parsing.ts @@ -1,4 +1,5 @@ -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; interface IAzureEvaluationError { originalError?: { diff --git a/api/utils/graphs.ts b/api/utils/graphs.ts index 62a3c4707..079f0ba0a 100644 --- a/api/utils/graphs.ts +++ b/api/utils/graphs.ts @@ -1,19 +1,18 @@ import { StringifiedMap } from "df/common/strings/stringifier"; import { targetStringifier } from "df/core/targets"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; -export const combineAllActions = (graph: dataform.ICompiledGraph) => { - return ([] as Array< - dataform.ITable | dataform.IOperation | dataform.IAssertion | dataform.IDeclaration - >).concat( - graph.tables || ([] as dataform.ITable[]), - graph.operations || ([] as dataform.IOperation[]), - graph.assertions || ([] as dataform.IAssertion[]), - graph.declarations || ([] as dataform.IDeclaration[]) +export const combineAllActions = (graph: dataform.CompiledGraph) => { + return ([] as Array).concat( + graph.tables || ([] as core.Target[]), + graph.operations || ([] as core.Operation[]), + graph.assertions || ([] as core.Assertion[]), + graph.declarations || ([] as dataform.Declaration[]) ); }; -export function actionsByTarget(compiledGraph: dataform.ICompiledGraph) { +export function actionsByTarget(compiledGraph: dataform.CompiledGraph) { return new StringifiedMap( targetStringifier, combineAllActions(compiledGraph) @@ -23,7 +22,7 @@ export function actionsByTarget(compiledGraph: dataform.ICompiledGraph) { ); } -export function actionsByCanonicalTarget(compiledGraph: dataform.ICompiledGraph) { +export function actionsByCanonicalTarget(compiledGraph: dataform.CompiledGraph) { return new StringifiedMap( targetStringifier, combineAllActions(compiledGraph) diff --git a/api/utils/postgres.ts b/api/utils/postgres.ts index 04265d55b..0f4f2fa82 100644 --- a/api/utils/postgres.ts +++ b/api/utils/postgres.ts @@ -2,7 +2,8 @@ import * as pg from "pg"; import QueryStream from "pg-query-stream"; import { LimitedResultSet } from "df/api/utils/results"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; const maybeInitializePg = (() => { let initialized = false; diff --git a/cli/console.ts b/cli/console.ts index 0441c2cc3..afa57382f 100644 --- a/cli/console.ts +++ b/cli/console.ts @@ -1,7 +1,8 @@ import { IInitResult } from "df/api/commands/init"; import { prettyJsonStringify } from "df/api/utils"; import { setOrValidateTableEnumType, tableTypeEnumToString } from "df/core/utils"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; import * as readlineSync from "readline-sync"; // Uses ANSI escape color codes. @@ -102,7 +103,7 @@ export function printInitCredsResult(writtenFilePath: string) { writeStdOut("To change connection settings, edit this file directly."); } -export function printCompiledGraph(graph: dataform.ICompiledGraph, verbose: boolean) { +export function printCompiledGraph(graph: dataform.CompiledGraph, verbose: boolean) { if (verbose) { writeStdOut(prettyJsonStringify(graph)); } else { @@ -117,7 +118,11 @@ export function printCompiledGraph(graph: dataform.ICompiledGraph, verbose: bool writeStdOut(`${graph.tables.length} dataset(s):`); graph.tables.forEach(compiledTable => { writeStdOut( - `${datasetString(compiledTable.target, tableTypeEnumToString(compiledTable.enumType), compiledTable.disabled)}`, + `${datasetString( + compiledTable.target, + tableTypeEnumToString(compiledTable.enumType), + compiledTable.disabled + )}`, 1 ); }); @@ -137,7 +142,7 @@ export function printCompiledGraph(graph: dataform.ICompiledGraph, verbose: bool } } -export function printCompiledGraphErrors(graphErrors: dataform.IGraphErrors) { +export function printCompiledGraphErrors(graphErrors: dataform.GraphErrors) { if (graphErrors.compilationErrors && graphErrors.compilationErrors.length > 0) { printError("Compilation errors:", 1); graphErrors.compilationErrors.forEach(compileError => { @@ -151,7 +156,7 @@ export function printCompiledGraphErrors(graphErrors: dataform.IGraphErrors) { } } -export function printTestResult(testResult: dataform.ITestResult) { +export function printTestResult(testResult: dataform.TestResult) { writeStdOut( `${testResult.name}: ${testResult.successful ? successOutput("passed") : errorOutput("failed")}` ); @@ -165,9 +170,9 @@ export function printExecutionGraph(executionGraph: dataform.ExecutionGraph, ver writeStdOut(prettyJsonStringify(executionGraph.toJSON())); } else { const actionsByType = { - table: [] as dataform.IExecutionAction[], - assertion: [] as dataform.IExecutionAction[], - operation: [] as dataform.IExecutionAction[] + table: [] as dataform.ExecutionAction[], + assertion: [] as dataform.ExecutionAction[], + operation: [] as dataform.ExecutionAction[] }; executionGraph.actions.forEach(action => { if ( @@ -205,8 +210,8 @@ export function printExecutionGraph(executionGraph: dataform.ExecutionGraph, ver } export function printExecutedAction( - executedAction: dataform.IActionResult, - executionAction: dataform.IExecutionAction + executedAction: dataform.ActionResult, + executionAction: dataform.ExecutionAction ) { switch (executedAction.status) { case dataform.ActionResult.ExecutionStatus.SUCCESSFUL: { @@ -365,33 +370,33 @@ export function printFormatFilesResult( } } -export function printListTablesResult(tables: dataform.ITarget[]) { +export function printListTablesResult(tables: core.Target[]) { tables.forEach(foundTable => writeStdOut(`${foundTable.schema}.${foundTable.name}`)); } -export function printGetTableResult(tableMetadata: dataform.ITableMetadata) { +export function printGetTableResult(tableMetadata: execution.TableMetadata) { writeStdOut(prettyJsonStringify(tableMetadata)); } -function datasetString(target: dataform.ITarget, datasetType: string, disabled: boolean) { +function datasetString(target: core.Target, datasetType: string, disabled: boolean) { return `${targetString(target)} [${datasetType}]${disabled ? " [disabled]" : ""}`; } -function assertionString(target: dataform.ITarget, disabled: boolean) { +function assertionString(target: core.Target, disabled: boolean) { return `${targetString(target)}${disabled ? " [disabled]" : ""}`; } -function operationString(target: dataform.ITarget, disabled: boolean) { +function operationString(target: core.Target, disabled: boolean) { return `${targetString(target)}${disabled ? " [disabled]" : ""}`; } -function targetString(target: dataform.ITarget) { +function targetString(target: core.Target) { return calloutOutput(`${target.schema}.${target.name}`); } function printExecutedActionErrors( - executedAction: dataform.IActionResult, - executionAction: dataform.IExecutionAction + executedAction: dataform.ActionResult, + executionAction: dataform.ExecutionAction ) { const failingTasks = executedAction.tasks.filter( task => task.status === dataform.ActionResult.ExecutionStatus.FAILED diff --git a/cli/credentials.ts b/cli/credentials.ts index 53237f2e1..68129d954 100644 --- a/cli/credentials.ts +++ b/cli/credentials.ts @@ -2,9 +2,10 @@ import * as fs from "fs"; import { intQuestion, passwordQuestion, question, selectionQuestion } from "df/cli/console"; import { actuallyResolve } from "df/cli/util"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; -export function getBigQueryCredentials(): dataform.IBigQuery { +export function getBigQueryCredentials(): profiles.BigQuery { const locationIndex = selectionQuestion("Enter the location of your datasets:", [ "US (default)", "EU", @@ -14,16 +15,16 @@ export function getBigQueryCredentials(): dataform.IBigQuery { if (locationIndex === 2) { location = question("Enter the location's region name (e.g. 'asia-south1'):"); } - const isApplicationDefaultOrJSONKeyIndex = selectionQuestion("Do you wish to use Application Default Credentials or JSON Key:", [ - "ADC (default)", - "JSON Key" - ]); - if (isApplicationDefaultOrJSONKeyIndex === 0) { + const isApplicationDefaultOrJSONKeyIndex = selectionQuestion( + "Do you wish to use Application Default Credentials or JSON Key:", + ["ADC (default)", "JSON Key"] + ); + if (isApplicationDefaultOrJSONKeyIndex === 0) { const projectId = question("Enter your billing project ID:"); return { projectId, location - } + }; } const cloudCredentialsPath = actuallyResolve( question( @@ -55,7 +56,7 @@ export function getRedshiftCredentials() { ); } -export function getSQLDataWarehouseCredentials(): dataform.ISQLDataWarehouse { +export function getSQLDataWarehouseCredentials(): dataform.SQLDataWarehouse { const server = question("Enter your server name (for example 'name.database.windows.net'):"); const port = intQuestion("Enter your server port:", 1433); const username = question("Enter your datawarehouse user:"); @@ -71,7 +72,7 @@ export function getSQLDataWarehouseCredentials(): dataform.ISQLDataWarehouse { }; } -export function getSnowflakeCredentials(): dataform.ISnowflake { +export function getSnowflakeCredentials(): profiles.Snowflake { const accountId = question( "Enter your Snowflake account identifier, including region (for example 'myaccount.us-east-1'):" ); @@ -90,7 +91,7 @@ export function getSnowflakeCredentials(): dataform.ISnowflake { }; } -function getJdbcCredentials(hostQuestion: string, defaultPort: number): dataform.IJDBC { +function getJdbcCredentials(hostQuestion: string, defaultPort: number): profiles.JDBC { const host = question(hostQuestion); const port = intQuestion( "Enter the port that Dataform should connect to (leave blank to use default):", diff --git a/cli/index.ts b/cli/index.ts index 4b9a2c31f..1e3a367f6 100644 --- a/cli/index.ts +++ b/cli/index.ts @@ -8,7 +8,7 @@ import { build, compile, credentials, init, install, run, table, test } from "df import { CREDENTIALS_FILENAME } from "df/api/commands/credentials"; import * as dbadapters from "df/api/dbadapters"; import { prettyJsonStringify } from "df/api/utils"; -import {trackError, trackOption} from "df/cli/analytics"; +import { trackError, trackOption } from "df/cli/analytics"; import { print, printCompiledGraph, @@ -35,7 +35,8 @@ import { actuallyResolve, assertPathExists, compiledGraphHasErrors } from "df/cl import { createYargsCli, INamedOption } from "df/cli/yargswrapper"; import { supportsCancel, WarehouseType } from "df/core/adapters"; import { targetAsReadableString } from "df/core/targets"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; import { formatFile } from "df/sqlx/format"; import parseDuration from "parse-duration"; @@ -181,7 +182,7 @@ const varsOptionName = "vars"; const varsOption: INamedOption = { name: varsOptionName, option: { - describe: `Variables to inject via '--${varsOptionName}=someKey=someValue,a=b', referenced by \`dataform.projectConfig.vars.someValue\`.`, + describe: `Variables to inject via '--${varsOptionName}=someKey=someValue,a=b', referenced by \`core.ProjectConfig.vars.someValue\`.`, type: "string", default: null, coerce: (rawVarsString: string | null) => { @@ -658,13 +659,13 @@ export function runCli() { runner.cancel(); }); - const actionsByName = new Map(); + const actionsByName = new Map(); executionGraph.actions.forEach(action => { actionsByName.set(targetAsReadableString(action.target), action); }); const alreadyPrintedActions = new Set(); - const printExecutedGraph = (executedGraph: dataform.IRunResult) => { + const printExecutedGraph = (executedGraph: dataform.RunResult) => { executedGraph.actions .filter( actionResult => diff --git a/cli/util.ts b/cli/util.ts index b0b03bf5d..9c9b2cb73 100644 --- a/cli/util.ts +++ b/cli/util.ts @@ -1,7 +1,8 @@ import * as fs from "fs"; import * as path from "path"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; import untildify from "untildify"; export const actuallyResolve = (filePath: string) => path.resolve(untildify(filePath)); @@ -12,6 +13,6 @@ export function assertPathExists(checkPath: string) { } } -export function compiledGraphHasErrors(graph: dataform.ICompiledGraph) { +export function compiledGraphHasErrors(graph: dataform.CompiledGraph) { return graph.graphErrors?.compilationErrors?.length > 0; } diff --git a/core/adapters/base.ts b/core/adapters/base.ts index e66c6789e..009e0ea6e 100644 --- a/core/adapters/base.ts +++ b/core/adapters/base.ts @@ -7,7 +7,7 @@ import * as core from "df/protos/core"; import * as execution from "df/protos/execution"; export abstract class Adapter implements IAdapter { - constructor(protected readonly coreCoreVersion: string) {} + constructor(protected readonly coreVersion: string) {} public abstract publishTasks( table: core.Table, @@ -131,7 +131,7 @@ from (${query}) as insertions`; ): Task[] { let preOps = table.preOps; if ( - semver.gt(this.coreCoreVersion, "1.4.8") && + semver.gt(this.coreVersion, "1.4.8") && table.enumType === core.TableType.INCREMENTAL && this.shouldWriteIncrementally(runConfig, tableMetadata) ) { @@ -147,7 +147,7 @@ from (${query}) as insertions`; ): Task[] { let postOps = table.postOps; if ( - semver.gt(this.coreCoreVersion, "1.4.8") && + semver.gt(this.coreVersion, "1.4.8") && table.enumType === core.TableType.INCREMENTAL && this.shouldWriteIncrementally(runConfig, tableMetadata) ) { diff --git a/core/adapters/bigquery.ts b/core/adapters/bigquery.ts index 8cdb8c59f..d9737330f 100644 --- a/core/adapters/bigquery.ts +++ b/core/adapters/bigquery.ts @@ -1,22 +1,23 @@ import { IAdapter } from "df/core/adapters"; import { Adapter } from "df/core/adapters/base"; import { Task, Tasks } from "df/core/tasks"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; export class BigQueryAdapter extends Adapter implements IAdapter { - constructor(private readonly project: dataform.IProjectConfig, dataformCoreVersion: string) { + constructor(private readonly project: core.ProjectConfig, dataformCoreVersion: string) { super(dataformCoreVersion); } - public resolveTarget(target: dataform.ITarget) { + public resolveTarget(target: core.Target) { return `\`${target.database || this.project.defaultDatabase}.${target.schema || this.project.defaultSchema}.${target.name}\``; } public publishTasks( - table: dataform.ITable, - runConfig: dataform.IRunConfig, - tableMetadata?: dataform.ITableMetadata + table: core.Table, + runConfig: execution.RunConfig, + tableMetadata?: execution.TableMetadata ): Tasks { const tasks = Tasks.create(); @@ -29,7 +30,7 @@ export class BigQueryAdapter extends Adapter implements IAdapter { ); } - if (table.enumType === dataform.TableType.INCREMENTAL) { + if (table.enumType === core.TableType.INCREMENTAL) { if (!this.shouldWriteIncrementally(runConfig, tableMetadata)) { tasks.add(Task.statement(this.createOrReplace(table))); } else { @@ -60,10 +61,7 @@ export class BigQueryAdapter extends Adapter implements IAdapter { return tasks.concatenate(); } - public assertTasks( - assertion: dataform.IAssertion, - projectConfig: dataform.IProjectConfig - ): Tasks { + public assertTasks(assertion: core.Assertion, projectConfig: core.ProjectConfig): Tasks { const tasks = Tasks.create(); const target = assertion.target; tasks.add(Task.statement(this.createOrReplaceView(target, assertion.query))); @@ -71,29 +69,25 @@ export class BigQueryAdapter extends Adapter implements IAdapter { return tasks; } - public dropIfExists(target: dataform.ITarget, type: dataform.TableMetadata.Type) { + public dropIfExists(target: core.Target, type: execution.TableMetadata_Type) { return `drop ${this.tableTypeAsSql(type)} if exists ${this.resolveTarget(target)}`; } - private createOrReplace(table: dataform.ITable) { - const options = [] - if (table.bigquery && table.bigquery.partitionBy && table.bigquery.partitionExpirationDays){ - options.push(`partition_expiration_days=${table.bigquery.partitionExpirationDays}`) + private createOrReplace(table: core.Table) { + const options = []; + if (table.bigquery && table.bigquery.partitionBy && table.bigquery.partitionExpirationDays) { + options.push(`partition_expiration_days=${table.bigquery.partitionExpirationDays}`); } - if (table.bigquery && table.bigquery.partitionBy && table.bigquery.requirePartitionFilter){ - options.push(`require_partition_filter=${table.bigquery.requirePartitionFilter}`) + if (table.bigquery && table.bigquery.partitionBy && table.bigquery.requirePartitionFilter) { + options.push(`require_partition_filter=${table.bigquery.requirePartitionFilter}`); } - if(table.bigquery && table.bigquery.additionalOptions){ - for(const [optionName, optionValue] of Object.entries(table.bigquery.additionalOptions)){ - options.push(`${optionName}=${optionValue}`) + if (table.bigquery && table.bigquery.additionalOptions) { + for (const [optionName, optionValue] of Object.entries(table.bigquery.additionalOptions)) { + options.push(`${optionName}=${optionValue}`); } } - return `create or replace ${ - table.materialized - ? "materialized " - : "" - }${this.tableTypeAsSql( + return `create or replace ${table.materialized ? "materialized " : ""}${this.tableTypeAsSql( this.baseTableType(table.enumType) )} ${this.resolveTarget(table.target)} ${ table.bigquery && table.bigquery.partitionBy @@ -103,19 +97,16 @@ export class BigQueryAdapter extends Adapter implements IAdapter { table.bigquery && table.bigquery.clusterBy && table.bigquery.clusterBy.length > 0 ? `cluster by ${table.bigquery.clusterBy.join(", ")} ` : "" - }${ - options.length>0 ? - `OPTIONS(${options.join(',')})` : "" - }as ${table.query}`; + }${options.length > 0 ? `OPTIONS(${options.join(",")})` : ""}as ${table.query}`; } - private createOrReplaceView(target: dataform.ITarget, query: string) { + private createOrReplaceView(target: core.Target, query: string) { return ` create or replace view ${this.resolveTarget(target)} as ${query}`; } private mergeInto( - target: dataform.ITarget, + target: core.Target, columns: string[], query: string, uniqueKey: string[], diff --git a/core/adapters/index.ts b/core/adapters/index.ts index 48b01593b..69d8869fe 100644 --- a/core/adapters/index.ts +++ b/core/adapters/index.ts @@ -5,30 +5,32 @@ import { RedshiftAdapter } from "df/core/adapters/redshift"; import { SnowflakeAdapter } from "df/core/adapters/snowflake"; import { SQLDataWarehouseAdapter } from "df/core/adapters/sqldatawarehouse"; import { concatenateQueries, Tasks } from "df/core/tasks"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; +import * as profiles from "df/protos/profiles"; export interface IAdapter { - resolveTarget(target: dataform.ITarget): string; + resolveTarget(target: core.Target): string; normalizeIdentifier(identifier: string): string; sqlString(stringContents: string): string; publishTasks( - table: dataform.ITable, - runConfig: dataform.IRunConfig, - tableMetadata: dataform.ITableMetadata + table: core.Table, + runConfig: execution.RunConfig, + tableMetadata: execution.TableMetadata ): Tasks; - assertTasks(assertion: dataform.IAssertion, projectConfig: dataform.IProjectConfig): Tasks; + assertTasks(assertion: core.Assertion, projectConfig: core.ProjectConfig): Tasks; - dropIfExists(target: dataform.ITarget, type: dataform.TableMetadata.Type): string; - baseTableType(enumType: dataform.TableType): dataform.TableMetadata.Type; + dropIfExists(target: core.Target, type: execution.TableMetadata_Type): string; + baseTableType(enumType: core.TableType): execution.TableMetadata_Type; indexAssertion(dataset: string, indexCols: string[]): string; rowConditionsAssertion(dataset: string, rowConditions: string[]): string; } export type AdapterConstructor = new ( - projectConfig: dataform.IProjectConfig, + projectConfig: core.ProjectConfig, dataformCoreVersion: string ) => T; @@ -49,15 +51,15 @@ export function supportsCancel(warehouseType: WarehouseType) { }); } -const requiredBigQueryWarehouseProps: Array = ["projectId"]; -const requiredJdbcWarehouseProps: Array = [ +const requiredBigQueryWarehouseProps: Array = ["projectId"]; +const requiredJdbcWarehouseProps: Array = [ "host", "port", "username", "password", "databaseName" ]; -const requiredSnowflakeWarehouseProps: Array = [ +const requiredSnowflakeWarehouseProps: Array = [ "accountId", "username", "password", @@ -65,7 +67,7 @@ const requiredSnowflakeWarehouseProps: Array = [ "databaseName", "warehouse" ]; -const requiredSQLDataWarehouseProps: Array = [ +const requiredSQLDataWarehouseProps: Array = [ "server", "port", "username", @@ -73,7 +75,7 @@ const requiredSQLDataWarehouseProps: Array = [ "database" ]; -const requiredPrestoWarehouseProps: Array = ["host", "port", "user"]; +const requiredPrestoWarehouseProps: Array = ["host", "port", "user"]; export const requiredWarehouseProps = { [WarehouseType.BIGQUERY]: requiredBigQueryWarehouseProps, @@ -90,10 +92,7 @@ export function register(warehouseType: string, c: AdapterConstructor) registry[warehouseType] = c; } -export function create( - projectConfig: dataform.IProjectConfig, - dataformCoreVersion: string -): IAdapter { +export function create(projectConfig: core.ProjectConfig, dataformCoreVersion: string): IAdapter { if (!registry[projectConfig.warehouse]) { throw new Error(`Unsupported warehouse: ${projectConfig.warehouse}`); } @@ -110,7 +109,7 @@ register("redshift", RedshiftAdapter); register("snowflake", SnowflakeAdapter); register("sqldatawarehouse", SQLDataWarehouseAdapter); -export type QueryOrAction = string | dataform.Table | dataform.Operation | dataform.Assertion; +export type QueryOrAction = string | core.Table | core.Operation | core.Assertion; export interface IValidationQuery { query?: string; @@ -134,8 +133,8 @@ export function collectEvaluationQueries( validationQueries.push({ query: queryModifier(queryOrAction) }); } else { try { - if (queryOrAction instanceof dataform.Table) { - if (queryOrAction.enumType === dataform.TableType.INCREMENTAL) { + if (queryOrAction instanceof core.Table) { + if (queryOrAction.enumType === core.TableType.INCREMENTAL) { const incrementalTableQueries = queryOrAction.incrementalPreOps.concat( queryOrAction.incrementalQuery, queryOrAction.incrementalPostOps @@ -162,7 +161,7 @@ export function collectEvaluationQueries( } else { tableQueries.forEach(q => validationQueries.push({ query: queryModifier(q) })); } - } else if (queryOrAction instanceof dataform.Operation) { + } else if (queryOrAction instanceof core.Operation) { if (concatenate) { validationQueries.push({ query: concatenateQueries(queryOrAction.queries, queryModifier) @@ -170,7 +169,7 @@ export function collectEvaluationQueries( } else { queryOrAction.queries.forEach(q => validationQueries.push({ query: queryModifier(q) })); } - } else if (queryOrAction instanceof dataform.Assertion) { + } else if (queryOrAction instanceof core.Assertion) { validationQueries.push({ query: queryModifier(queryOrAction.query) }); } else { throw new Error("Unrecognized evaluate type."); diff --git a/core/adapters/presto.ts b/core/adapters/presto.ts index 32fd85b34..9cd04bbf5 100644 --- a/core/adapters/presto.ts +++ b/core/adapters/presto.ts @@ -1,23 +1,24 @@ import { IAdapter } from "df/core/adapters"; import { Adapter } from "df/core/adapters/base"; import { Task, Tasks } from "df/core/tasks"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; export class PrestoAdapter extends Adapter implements IAdapter { - constructor(private readonly project: dataform.IProjectConfig, dataformCoreVersion: string) { + constructor(private readonly project: core.ProjectConfig, dataformCoreVersion: string) { super(dataformCoreVersion); } - public resolveTarget(target: dataform.ITarget) { + public resolveTarget(target: core.Target) { // Database here is equivalent to Presto's catalog. return `"${target.database || this.project.defaultDatabase}"."${target.schema || this.project.defaultSchema}"."${target.name}"`; } public publishTasks( - table: dataform.ITable, - runConfig: dataform.IRunConfig, - tableMetadata?: dataform.ITableMetadata + table: core.Table, + runConfig: execution.RunConfig, + tableMetadata?: execution.TableMetadata ): Tasks { const tasks = Tasks.create(); @@ -30,7 +31,7 @@ export class PrestoAdapter extends Adapter implements IAdapter { ); } - if (table.enumType === dataform.TableType.INCREMENTAL) { + if (table.enumType === core.TableType.INCREMENTAL) { throw new Error("Incremental table types are not currently supported for Presto."); } else { tasks.add(Task.statement(this.createOrReplace(table))); @@ -41,10 +42,7 @@ export class PrestoAdapter extends Adapter implements IAdapter { return tasks.concatenate(); } - public assertTasks( - assertion: dataform.IAssertion, - projectConfig: dataform.IProjectConfig - ): Tasks { + public assertTasks(assertion: core.Assertion, projectConfig: core.ProjectConfig): Tasks { const tasks = Tasks.create(); const target = assertion.target; tasks.add(Task.statement(this.createOrReplaceView(target, assertion.query))); @@ -52,11 +50,11 @@ export class PrestoAdapter extends Adapter implements IAdapter { return tasks; } - public createOrReplaceView(target: dataform.ITarget, query: string) { + public createOrReplaceView(target: core.Target, query: string) { return `create or replace view ${this.resolveTarget(target)} as ${query}`; } - public createTable(table: dataform.ITable) { + public createTable(table: core.Table) { return `create table if not exists ${this.resolveTarget(table.target)} as ${table.query} ${ table.presto?.partitionBy ? `with (partitioned_by = array[${table.presto?.partitionBy.join(", ")}]` @@ -64,11 +62,11 @@ export class PrestoAdapter extends Adapter implements IAdapter { }`; } - public dropTableIfExists(target: dataform.ITarget, type: dataform.TableMetadata.Type) { + public dropTableIfExists(target: core.Target, type: execution.TableMetadata_Type) { return `drop ${this.tableTypeAsSql(type)} if exists ${this.resolveTarget(target)}`; } - public createOrReplace(table: dataform.ITable) { + public createOrReplace(table: core.Table) { // TODO: Not all connectors support replacing/dropping tables, but DROP is supported. // A solution should be thought about for handling presto connections to see whether the target // catalog allows dropping. For now default to creating the table. diff --git a/core/adapters/redshift.ts b/core/adapters/redshift.ts index 6da097c33..9b29b312c 100644 --- a/core/adapters/redshift.ts +++ b/core/adapters/redshift.ts @@ -3,21 +3,22 @@ import * as semver from "semver"; import { IAdapter } from "df/core/adapters"; import { Adapter } from "df/core/adapters/base"; import { Task, Tasks } from "df/core/tasks"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; export class RedshiftAdapter extends Adapter implements IAdapter { - constructor(private readonly project: dataform.IProjectConfig, dataformCoreVersion: string) { + constructor(private readonly project: core.ProjectConfig, dataformCoreVersion: string) { super(dataformCoreVersion); } - public resolveTarget(target: dataform.ITarget) { + public resolveTarget(target: core.Target) { return `"${target.schema}"."${target.name}"`; } public publishTasks( - table: dataform.ITable, - runConfig: dataform.IRunConfig, - tableMetadata: dataform.ITableMetadata + table: core.Table, + runConfig: execution.RunConfig, + tableMetadata: execution.TableMetadata ): Tasks { const tasks = Tasks.create(); @@ -30,7 +31,7 @@ export class RedshiftAdapter extends Adapter implements IAdapter { ); } - if (table.enumType === dataform.TableType.INCREMENTAL) { + if (table.enumType === core.TableType.INCREMENTAL) { if (!this.shouldWriteIncrementally(runConfig, tableMetadata)) { tasks.addAll(this.createOrReplace(table)); } else { @@ -61,18 +62,15 @@ export class RedshiftAdapter extends Adapter implements IAdapter { return tasks; } - public assertTasks( - assertion: dataform.IAssertion, - projectConfig: dataform.IProjectConfig - ): Tasks { + public assertTasks(assertion: core.Assertion, projectConfig: core.ProjectConfig): Tasks { const target = assertion.target; return Tasks.create() - .add(Task.statement(this.dropIfExists(target, dataform.TableMetadata.Type.VIEW))) + .add(Task.statement(this.dropIfExists(target, execution.TableMetadata_Type.VIEW))) .add(Task.statement(this.createOrReplaceView(target, assertion.query, false))) .add(Task.assertion(`select sum(1) as row_count from ${this.resolveTarget(target)}`)); } - public dropIfExists(target: dataform.ITarget, type: dataform.TableMetadata.Type) { + public dropIfExists(target: core.Target, type: execution.TableMetadata_Type) { const query = `drop ${this.tableTypeAsSql(type)} if exists ${this.resolveTarget(target)}`; if (this.project.warehouse === "postgres" || this.isBindSupported()) { return `${query} cascade`; @@ -80,7 +78,7 @@ export class RedshiftAdapter extends Adapter implements IAdapter { return query; } - private createOrReplaceView(target: dataform.ITarget, query: string, bind: boolean) { + private createOrReplaceView(target: core.Target, query: string, bind: boolean) { const createQuery = `create or replace view ${this.resolveTarget(target)} as ${query}`; // Postgres doesn't support with no schema binding. if (bind || this.project.warehouse === "postgres") { @@ -89,8 +87,8 @@ export class RedshiftAdapter extends Adapter implements IAdapter { return `${createQuery} with no schema binding`; } - private createOrReplace(table: dataform.ITable) { - if (table.enumType === dataform.TableType.VIEW) { + private createOrReplace(table: core.Table) { + if (table.enumType === core.TableType.VIEW) { const isBindDefined = table.redshift && table.redshift.hasOwnProperty("bind"); const bindDefaultValue = semver.gte(this.dataformCoreVersion, "1.4.1") ? false : true; const bind = @@ -102,7 +100,7 @@ export class RedshiftAdapter extends Adapter implements IAdapter { .add(Task.statement(this.createOrReplaceView(table.target, table.query, bind))) ); } - const tempTableTarget = dataform.Target.create({ + const tempTableTarget = core.Target.create({ schema: table.target.schema, name: table.target.name + "_temp" }); @@ -110,7 +108,7 @@ export class RedshiftAdapter extends Adapter implements IAdapter { return Tasks.create() .add(Task.statement(this.dropIfExists(tempTableTarget, this.baseTableType(table.enumType)))) .add(Task.statement(this.createTable(table, tempTableTarget))) - .add(Task.statement(this.dropIfExists(table.target, dataform.TableMetadata.Type.TABLE))) + .add(Task.statement(this.dropIfExists(table.target, execution.TableMetadata_Type.TABLE))) .add( Task.statement( `alter table ${this.resolveTarget(tempTableTarget)} rename to "${table.target.name}"` @@ -118,7 +116,7 @@ export class RedshiftAdapter extends Adapter implements IAdapter { ); } - private createTable(table: dataform.ITable, target: dataform.ITarget) { + private createTable(table: core.Table, target: core.Target) { if (table.redshift) { let query = `create table ${this.resolveTarget(target)}`; @@ -137,7 +135,7 @@ export class RedshiftAdapter extends Adapter implements IAdapter { return `create table ${this.resolveTarget(target)} as ${table.query}`; } - private mergeInto(target: dataform.ITarget, query: string, uniqueKey: string[]) { + private mergeInto(target: core.Target, query: string, uniqueKey: string[]) { const finalTarget = this.resolveTarget(target); // Schema name not allowed for temporary tables. const tempTarget = `"${target.schema}__${target.name}_incremental_temp"`; diff --git a/core/adapters/snowflake.ts b/core/adapters/snowflake.ts index fa7634655..c47d78fe7 100644 --- a/core/adapters/snowflake.ts +++ b/core/adapters/snowflake.ts @@ -1,14 +1,15 @@ import { IAdapter } from "df/core/adapters"; import { Adapter } from "df/core/adapters/base"; import { Task, Tasks } from "df/core/tasks"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; export class SnowflakeAdapter extends Adapter implements IAdapter { - constructor(private readonly project: dataform.IProjectConfig, dataformCoreVersion: string) { + constructor(private readonly project: core.ProjectConfig, dataformCoreVersion: string) { super(dataformCoreVersion); } - public resolveTarget(target: dataform.ITarget) { + public resolveTarget(target: core.Target) { return `${!!target.database ? `"${target.database}".` : ""}"${target.schema}"."${target.name}"`; } @@ -17,9 +18,9 @@ export class SnowflakeAdapter extends Adapter implements IAdapter { } public publishTasks( - table: dataform.ITable, - runConfig: dataform.IRunConfig, - tableMetadata: dataform.ITableMetadata + table: core.Table, + runConfig: execution.RunConfig, + tableMetadata: execution.TableMetadata ): Tasks { const tasks = Tasks.create(); @@ -32,7 +33,7 @@ export class SnowflakeAdapter extends Adapter implements IAdapter { ); } - if (table.enumType === dataform.TableType.INCREMENTAL) { + if (table.enumType === core.TableType.INCREMENTAL) { if (!this.shouldWriteIncrementally(runConfig, tableMetadata)) { tasks.add(Task.statement(this.createOrReplace(table))); } else { @@ -62,10 +63,7 @@ export class SnowflakeAdapter extends Adapter implements IAdapter { return tasks; } - public assertTasks( - assertion: dataform.IAssertion, - projectConfig: dataform.IProjectConfig - ): Tasks { + public assertTasks(assertion: core.Assertion, projectConfig: core.ProjectConfig): Tasks { const tasks = Tasks.create(); const target = assertion.target; tasks.add(Task.statement(this.createOrReplaceView(target, assertion.query, false, false))); @@ -73,15 +71,25 @@ export class SnowflakeAdapter extends Adapter implements IAdapter { return tasks; } - private createOrReplaceView(target: dataform.ITarget, query: string, secure: boolean, materialized: boolean) { - return `create or replace ${secure ? "secure " : ""}${materialized ? "materialized " : ""}view ${this.resolveTarget( - target - )} as ${query}`; + private createOrReplaceView( + target: core.Target, + query: string, + secure: boolean, + materialized: boolean + ) { + return `create or replace ${secure ? "secure " : ""}${ + materialized ? "materialized " : "" + }view ${this.resolveTarget(target)} as ${query}`; } - private createOrReplace(table: dataform.ITable) { - if (table.enumType === dataform.TableType.VIEW) { - return this.createOrReplaceView(table.target, table.query, table.snowflake?.secure, table.materialized); + private createOrReplace(table: core.Table) { + if (table.enumType === core.TableType.VIEW) { + return this.createOrReplaceView( + table.target, + table.query, + table.snowflake?.secure, + table.materialized + ); } return `create or replace ${ table.snowflake?.transient ? "transient " : "" @@ -92,12 +100,7 @@ export class SnowflakeAdapter extends Adapter implements IAdapter { }as ${table.query}`; } - private mergeInto( - target: dataform.ITarget, - columns: string[], - query: string, - uniqueKey: string[] - ) { + private mergeInto(target: core.Target, columns: string[], query: string, uniqueKey: string[]) { return ` merge into ${this.resolveTarget(target)} T using (${query} diff --git a/core/adapters/sqldatawarehouse.ts b/core/adapters/sqldatawarehouse.ts index 893dae1f2..806d25ef0 100644 --- a/core/adapters/sqldatawarehouse.ts +++ b/core/adapters/sqldatawarehouse.ts @@ -1,10 +1,11 @@ import { IAdapter } from "df/core/adapters"; import { Adapter } from "df/core/adapters/base"; import { Task, Tasks } from "df/core/tasks"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; export class SQLDataWarehouseAdapter extends Adapter implements IAdapter { - constructor(private readonly project: dataform.IProjectConfig, dataformCoreVersion: string) { + constructor(private readonly project: core.ProjectConfig, dataformCoreVersion: string) { super(dataformCoreVersion); } @@ -13,14 +14,14 @@ export class SQLDataWarehouseAdapter extends Adapter implements IAdapter { return `'${stringContents.replace(/'/g, "''")}'`; } - public resolveTarget(target: dataform.ITarget) { + public resolveTarget(target: core.Target) { return `"${target.schema}"."${target.name}"`; } public publishTasks( - table: dataform.ITable, - runConfig: dataform.IRunConfig, - tableMetadata: dataform.ITableMetadata + table: core.Table, + runConfig: execution.RunConfig, + tableMetadata: execution.TableMetadata ): Tasks { const tasks = Tasks.create(); @@ -33,7 +34,7 @@ export class SQLDataWarehouseAdapter extends Adapter implements IAdapter { ); } - if (table.enumType === dataform.TableType.INCREMENTAL) { + if (table.enumType === core.TableType.INCREMENTAL) { if (!this.shouldWriteIncrementally(runConfig, tableMetadata)) { tasks.addAll(this.createOrReplace(table, !!tableMetadata)); } else { @@ -56,13 +57,10 @@ export class SQLDataWarehouseAdapter extends Adapter implements IAdapter { return tasks.concatenate(); } - public assertTasks( - assertion: dataform.IAssertion, - projectConfig: dataform.IProjectConfig - ): Tasks { + public assertTasks(assertion: core.Assertion, projectConfig: core.ProjectConfig): Tasks { const target = assertion.target; return Tasks.create() - .add(Task.statement(this.dropIfExists(target, dataform.TableMetadata.Type.VIEW))) + .add(Task.statement(this.dropIfExists(target, execution.TableMetadata_Type.VIEW))) .add( Task.statement(` create view ${this.resolveTarget(target)} @@ -71,8 +69,8 @@ export class SQLDataWarehouseAdapter extends Adapter implements IAdapter { .add(Task.assertion(`select sum(1) as row_count from ${this.resolveTarget(target)}`)); } - public dropIfExists(target: dataform.ITarget, type: dataform.TableMetadata.Type) { - if (type === dataform.TableMetadata.Type.VIEW) { + public dropIfExists(target: core.Target, type: execution.TableMetadata_Type) { + if (type === execution.TableMetadata_Type.VIEW) { return `drop view if exists ${this.resolveTarget(target)} `; } return `if object_id ('${this.resolveTarget( @@ -80,7 +78,7 @@ export class SQLDataWarehouseAdapter extends Adapter implements IAdapter { )}','U') is not null drop table ${this.resolveTarget(target)}`; } - public insertInto(target: dataform.ITarget, columns: string[], query: string) { + public insertInto(target: core.Target, columns: string[], query: string) { return ` insert into ${this.resolveTarget(target)} (${columns.join(",")}) @@ -89,8 +87,8 @@ from (${query} ) as insertions`; } - private createOrReplace(table: dataform.ITable, alreadyExists: boolean) { - if (table.enumType === dataform.TableType.VIEW) { + private createOrReplace(table: core.Table, alreadyExists: boolean) { + if (table.enumType === core.TableType.VIEW) { return Tasks.create().add( Task.statement( `${alreadyExists ? "alter" : "create"} view ${this.resolveTarget(table.target)} as ${ @@ -99,7 +97,7 @@ from (${query} ) ); } - const tempTableTarget = dataform.Target.create({ + const tempTableTarget = core.Target.create({ schema: table.target.schema, name: table.target.name + "_temp" }); @@ -107,7 +105,7 @@ from (${query} return Tasks.create() .add(Task.statement(this.dropIfExists(tempTableTarget, this.baseTableType(table.enumType)))) .add(Task.statement(this.createTable(table, tempTableTarget))) - .add(Task.statement(this.dropIfExists(table.target, dataform.TableMetadata.Type.TABLE))) + .add(Task.statement(this.dropIfExists(table.target, execution.TableMetadata_Type.TABLE))) .add( Task.statement( `rename object ${this.resolveTarget(tempTableTarget)} to ${table.target.name} ` @@ -115,7 +113,7 @@ from (${query} ); } - private createTable(table: dataform.ITable, target: dataform.ITarget) { + private createTable(table: core.Table, target: core.Target) { const distribution = table.sqlDataWarehouse && table.sqlDataWarehouse.distribution ? table.sqlDataWarehouse.distribution diff --git a/core/assertion.ts b/core/assertion.ts index 21d0b5094..83aee70ff 100644 --- a/core/assertion.ts +++ b/core/assertion.ts @@ -15,7 +15,8 @@ import { toResolvable, validateQueryString } from "df/core/utils"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; /** * Configuration options for `assertion` action types. @@ -62,7 +63,7 @@ export type AContextable = T | ((ctx: AssertionContext) => T); * @hidden */ export class Assertion { - public proto: dataform.IAssertion = dataform.Assertion.create(); + public proto: core.Assertion = core.Assertion.create(); // Hold a reference to the Session instance. public session: Session; @@ -116,8 +117,8 @@ export class Assertion { public hermetic(hermetic: boolean) { this.proto.hermeticity = hermetic - ? dataform.ActionHermeticity.HERMETIC - : dataform.ActionHermeticity.NON_HERMETIC; + ? core.ActionHermeticity.HERMETIC + : core.ActionHermeticity.NON_HERMETIC; } public disabled() { @@ -136,7 +137,7 @@ export class Assertion { } public description(description: string) { - this.proto.actionDescriptor = { description }; + this.proto.actionDescriptor = { ...this.proto.actionDescriptor, description }; return this; } @@ -187,9 +188,7 @@ export class AssertionContext implements ICommonContext { } public name(): string { - return this.assertion.session.finalizeName( - this.assertion.proto.target.name - ); + return this.assertion.session.finalizeName(this.assertion.proto.target.name); } public ref(ref: Resolvable | string[], ...rest: string[]) { @@ -207,9 +206,7 @@ export class AssertionContext implements ICommonContext { } public schema(): string { - return this.assertion.session.finalizeSchema( - this.assertion.proto.target.schema - ); + return this.assertion.session.finalizeSchema(this.assertion.proto.target.schema); } public database(): string { @@ -220,9 +217,7 @@ export class AssertionContext implements ICommonContext { return ""; } - return this.assertion.session.finalizeDatabase( - this.assertion.proto.target.database - ); + return this.assertion.session.finalizeDatabase(this.assertion.proto.target.database); } public dependencies(name: Resolvable | Resolvable[]) { diff --git a/core/column_descriptors.ts b/core/column_descriptors.ts index 7d0aacd82..a3c53f461 100644 --- a/core/column_descriptors.ts +++ b/core/column_descriptors.ts @@ -1,6 +1,7 @@ import { IColumnsDescriptor, IRecordDescriptor, IRecordDescriptorProperties } from "df/core/common"; import * as utils from "df/core/utils"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; /** * @hidden @@ -9,7 +10,7 @@ export class ColumnDescriptors { public static mapToColumnProtoArray( columns: IColumnsDescriptor, reportError: (e: Error) => void - ): dataform.IColumnDescriptor[] { + ): dataform.ColumnDescriptor[] { return Object.keys(columns) .map(column => ColumnDescriptors.mapColumnDescriptionToProto([column], columns[column], reportError) @@ -21,7 +22,7 @@ export class ColumnDescriptors { currentPath: string[], description: string | IRecordDescriptor, reportError: (e: Error) => void - ): dataform.IColumnDescriptor[] { + ): dataform.ColumnDescriptor[] { if (typeof description === "string") { return [ dataform.ColumnDescriptor.create({ @@ -36,7 +37,7 @@ export class ColumnDescriptors { IRecordDescriptorProperties(), `${currentPath.join(".")} column descriptor` ); - const columnDescriptor: dataform.IColumnDescriptor[] = !!description + const columnDescriptor: dataform.ColumnDescriptor[] = !!description ? [ dataform.ColumnDescriptor.create({ path: currentPath, diff --git a/core/declaration.ts b/core/declaration.ts index 3f605f475..8233faec5 100644 --- a/core/declaration.ts +++ b/core/declaration.ts @@ -8,7 +8,8 @@ import { } from "df/core/common"; import { Session } from "df/core/session"; import { checkExcessProperties, strictKeysOf } from "df/core/utils"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; /** * Configuration options for `declaration` action types. */ @@ -27,7 +28,7 @@ export const IDeclarationConfigProperties = strictKeysOf()([ * @hidden */ export class Declaration { - public proto: dataform.IDeclaration = dataform.Declaration.create(); + public proto: dataform.Declaration = dataform.Declaration.create(); public session: Session; diff --git a/core/gen_index.ts b/core/gen_index.ts index dbffd545b..a2c7a5245 100644 --- a/core/gen_index.ts +++ b/core/gen_index.ts @@ -1,6 +1,7 @@ import { decode64 } from "df/common/protos"; import * as utils from "df/core/utils"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; export function genIndex(base64EncodedConfig: string): string { const config = decode64(dataform.GenerateIndexConfig, base64EncodedConfig); @@ -23,7 +24,7 @@ export function genIndex(base64EncodedConfig: string): string { .join("\n"); const projectOverridesJsonString = JSON.stringify( - dataform.ProjectConfig.create(config.compileConfig.projectConfigOverride).toJSON() + core.ProjectConfig.create(config.compileConfig.projectConfigOverride).toJSON() ); // NOTE: diff --git a/core/main.ts b/core/main.ts index d8279b283..1f3385ce7 100644 --- a/core/main.ts +++ b/core/main.ts @@ -1,7 +1,8 @@ import { decode64, encode64 } from "df/common/protos"; import { Session } from "df/core/session"; import * as utils from "df/core/utils"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; /** * This is the main entry point into the user space code that should be invoked by the compilation wrapper sandbox. diff --git a/core/operation.ts b/core/operation.ts index c179bccb5..6bef45d95 100644 --- a/core/operation.ts +++ b/core/operation.ts @@ -18,7 +18,8 @@ import { strictKeysOf, toResolvable } from "df/core/utils"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; /** * Configuration options for `operations` action types. @@ -60,7 +61,7 @@ export const IIOperationConfigProperties = strictKeysOf()([ * @hidden */ export class Operation { - public proto: dataform.IOperation = dataform.Operation.create(); + public proto: core.Operation = core.Operation.create(); // Hold a reference to the Session instance. public session: Session; @@ -120,8 +121,8 @@ export class Operation { public hermetic(hermetic: boolean) { this.proto.hermeticity = hermetic - ? dataform.ActionHermeticity.HERMETIC - : dataform.ActionHermeticity.NON_HERMETIC; + ? core.ActionHermeticity.HERMETIC + : core.ActionHermeticity.NON_HERMETIC; } public disabled() { @@ -219,9 +220,7 @@ export class OperationContext implements ICommonContext { } public name(): string { - return this.operation.session.finalizeName( - this.operation.proto.target.name - ); + return this.operation.session.finalizeName(this.operation.proto.target.name); } public ref(ref: Resolvable | string[], ...rest: string[]) { @@ -239,9 +238,7 @@ export class OperationContext implements ICommonContext { } public schema(): string { - return this.operation.session.finalizeSchema( - this.operation.proto.target.schema - ); + return this.operation.session.finalizeSchema(this.operation.proto.target.schema); } public database(): string { @@ -252,9 +249,7 @@ export class OperationContext implements ICommonContext { return ""; } - return this.operation.session.finalizeDatabase( - this.operation.proto.target.database - ); + return this.operation.session.finalizeDatabase(this.operation.proto.target.database); } public dependencies(name: Resolvable | Resolvable[]) { diff --git a/core/session.ts b/core/session.ts index 2ee0c54d3..2ad67f848 100644 --- a/core/session.ts +++ b/core/session.ts @@ -21,7 +21,8 @@ import * as test from "df/core/test"; import * as utils from "df/core/utils"; import { setOrValidateTableEnumType, toResolvable } from "df/core/utils"; import { version as dataformCoreVersion } from "df/core/version"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; const SQL_DATA_WAREHOUSE_DIST_HASH_REGEXP = new RegExp("HASH\\s*\\(\\s*\\w*\\s*\\)\\s*"); @@ -35,11 +36,11 @@ const DEFAULT_CONFIG = { */ export interface IActionProto { fileName?: string; - dependencyTargets?: dataform.ITarget[]; - hermeticity?: dataform.ActionHermeticity; - target?: dataform.ITarget; - canonicalTarget?: dataform.ITarget; - parentAction?: dataform.ITarget; + dependencyTargets?: core.Target[]; + hermeticity?: core.ActionHermeticity; + target?: core.Target; + canonicalTarget?: core.Target; + parentAction?: core.Target; } type SqlxConfig = ( @@ -58,27 +59,27 @@ type Action = Table | Operation | Assertion | Declaration; export class Session { public rootDir: string; - public config: dataform.IProjectConfig; - public canonicalConfig: dataform.IProjectConfig; + public config: core.ProjectConfig; + public canonicalConfig: core.ProjectConfig; public actions: Action[]; public indexedActions: ActionIndex; public tests: { [name: string]: test.Test }; - public graphErrors: dataform.IGraphErrors; + public graphErrors: dataform.GraphErrors; constructor( rootDir?: string, - projectConfig?: dataform.IProjectConfig, - originalProjectConfig?: dataform.IProjectConfig + projectConfig?: core.ProjectConfig, + originalProjectConfig?: core.ProjectConfig ) { this.init(rootDir, projectConfig, originalProjectConfig); } public init( rootDir: string, - projectConfig?: dataform.IProjectConfig, - originalProjectConfig?: dataform.IProjectConfig + projectConfig?: core.ProjectConfig, + originalProjectConfig?: core.ProjectConfig ) { this.rootDir = rootDir; this.config = projectConfig || DEFAULT_CONFIG; @@ -91,7 +92,7 @@ export class Session { } public get projectConfig(): Pick< - dataform.IProjectConfig, + core.ProjectConfig, | "warehouse" | "defaultDatabase" | "defaultSchema" @@ -226,7 +227,11 @@ export class Session { } const resolved = allResolved.length > 0 ? allResolved[0] : undefined; - if (resolved && resolved instanceof Table && resolved.proto.enumType === dataform.TableType.INLINE) { + if ( + resolved && + resolved instanceof Table && + resolved.proto.enumType === core.TargetType.INLINE + ) { // TODO: Pretty sure this is broken as the proto.query value may not // be set yet as it happens during compilation. We should evalute the query here. return `(${resolved.proto.query})`; @@ -244,10 +249,9 @@ export class Session { return this.adapter().resolveTarget({ ...resolved.proto.target, database: - resolved.proto.target.database && - this.finalizeDatabase(resolved.proto.target.database), + resolved.proto.target.database && this.finalizeDatabase(resolved.proto.target.database), schema: this.finalizeSchema(resolved.proto.target.schema), - name: this.finalizeName(resolved.proto.target.name), + name: this.finalizeName(resolved.proto.target.name) }); } // TODO: Here we allow 'ref' to go unresolved. This is for backwards compatibility with projects @@ -262,8 +266,7 @@ export class Session { this.config, this.finalizeName(ref), this.finalizeSchema(this.config.defaultSchema), - this.config.defaultDatabase && - this.finalizeDatabase(this.config.defaultDatabase), + this.config.defaultDatabase && this.finalizeDatabase(this.config.defaultDatabase) ) ); } @@ -273,7 +276,7 @@ export class Session { this.config, this.finalizeName(ref.name), this.finalizeSchema(ref.schema), - ref.database && this.finalizeName(ref.database), + ref.database && this.finalizeName(ref.database) ) ); } @@ -324,7 +327,7 @@ export class Session { return assertion; } - public declare(dataset: dataform.ITarget): Declaration { + public declare(dataset: core.Target): Declaration { const declaration = new Declaration(); declaration.session = this; utils.setNameAndTarget(this, declaration.proto, dataset.name, dataset.schema, dataset.database); @@ -343,7 +346,7 @@ export class Session { return newTest; } - public compileError(err: Error | string, path?: string, actionTarget?: dataform.ITarget) { + public compileError(err: Error | string, path?: string, actionTarget?: core.Target) { const fileName = path || utils.getCallerFile(this.rootDir) || __filename; const compileError = dataform.CompilationError.create({ @@ -370,8 +373,8 @@ export class Session { ); } if ( - !!this.config.vars && - !Object.values(this.config.vars).every((value) => typeof value === 'string') + !!this.config.vars && + !Object.values(this.config.vars).every(value => typeof value === "string") ) { throw new Error("Custom variables defined in dataform.json can only be strings."); } @@ -380,15 +383,15 @@ export class Session { projectConfig: this.config, tables: this.compileGraphChunk( this.actions.filter(action => action instanceof Table), - dataform.Table.verify + core.Target.verify ), operations: this.compileGraphChunk( this.actions.filter(action => action instanceof Operation), - dataform.Operation.verify + core.Operation.verify ), assertions: this.compileGraphChunk( this.actions.filter(action => action instanceof Assertion), - dataform.Assertion.verify + core.Assertion.verify ), declarations: this.compileGraphChunk( this.actions.filter(action => action instanceof Declaration), @@ -439,17 +442,16 @@ export class Session { public finalizeDatabase(database: string): string { return this.adapter().normalizeIdentifier( - `${database}${this.getDatabaseSuffixWithUnderscore()}`); + `${database}${this.getDatabaseSuffixWithUnderscore()}` + ); } public finalizeSchema(schema: string): string { - return this.adapter().normalizeIdentifier( - `${schema}${this.getSchemaSuffixWithUnderscore()}`); + return this.adapter().normalizeIdentifier(`${schema}${this.getSchemaSuffixWithUnderscore()}`); } public finalizeName(name: string): string { - return this.adapter().normalizeIdentifier( - `${this.getTablePrefixWithUnderscore()}${name}`); + return this.adapter().normalizeIdentifier(`${this.getTablePrefixWithUnderscore()}${name}`); } private getDatabaseSuffixWithUnderscore() { @@ -485,7 +487,7 @@ export class Session { private fullyQualifyDependencies(actions: IActionProto[]) { actions.forEach(action => { - const fullyQualifiedDependencies: { [name: string]: dataform.ITarget } = {}; + const fullyQualifiedDependencies: { [name: string]: core.Target } = {}; for (const dependency of action.dependencyTargets) { const possibleDeps = this.indexedActions.find(dependency); if (possibleDeps.length === 0) { @@ -503,7 +505,7 @@ export class Session { // We found a single matching target, and fully-qualify it if it's a normal dependency, // or add all of its dependencies to ours if it's an 'inline' table. const protoDep = possibleDeps[0].proto; - if (protoDep instanceof dataform.Table && protoDep.enumType === dataform.TableType.INLINE) { + if (protoDep instanceof core.Target && protoDep.enumType === core.TargetType.INLINE) { protoDep.dependencyTargets.forEach(inlineDep => action.dependencyTargets.push(inlineDep) ); @@ -523,14 +525,14 @@ export class Session { }); } - private alterActionName(actions: IActionProto[], declarationTargets: dataform.ITarget[]) { + private alterActionName(actions: IActionProto[], declarationTargets: core.Target[]) { const { tablePrefix, schemaSuffix, databaseSuffix } = this.config; if (!tablePrefix && !schemaSuffix && !databaseSuffix) { return; } - const newTargetByOriginalTarget = new StringifiedMap( + const newTargetByOriginalTarget = new StringifiedMap( targetStringifier ); declarationTargets.forEach(declarationTarget => @@ -556,7 +558,7 @@ export class Session { }); // Fix up dependencies in case those dependencies' names have changed. - const getUpdatedTarget = (originalTarget: dataform.ITarget) => { + const getUpdatedTarget = (originalTarget: core.Target) => { // It's possible that we don't have a new Target for a dependency that failed to compile, // so fall back to the original Target. if (!newTargetByOriginalTarget.has(originalTarget)) { @@ -573,10 +575,10 @@ export class Session { }); } - private checkTableConfigValidity(tables: dataform.ITable[]) { + private checkTableConfigValidity(tables: core.Target[]) { tables.forEach(table => { // type - if (table.enumType === dataform.TableType.UNKNOWN_TYPE) { + if (table.enumType === core.TargetType.UNKNOWN_TYPE) { this.compileError( `Wrong type of table detected. Should only use predefined types: ${joinQuoted( TableType @@ -589,7 +591,7 @@ export class Session { // materialized if (!!table.materialized) { if ( - table.enumType !== dataform.TableType.VIEW || + table.enumType !== core.TargetType.VIEW || (this.config.warehouse !== "snowflake" && this.config.warehouse !== "bigquery") ) { this.compileError( @@ -602,7 +604,7 @@ export class Session { // snowflake config if (!!table.snowflake) { - if (table.snowflake.secure && table.enumType !== dataform.TableType.VIEW) { + if (table.snowflake.secure && table.enumType !== core.TargetType.VIEW) { this.compileError( new Error(`The 'secure' option is only valid for Snowflake views`), table.fileName, @@ -610,7 +612,7 @@ export class Session { ); } - if (table.snowflake.transient && table.enumType !== dataform.TableType.TABLE) { + if (table.snowflake.transient && table.enumType !== core.TargetType.TABLE) { this.compileError( new Error(`The 'transient' option is only valid for Snowflake tables`), table.fileName, @@ -620,8 +622,8 @@ export class Session { if ( table.snowflake.clusterBy?.length > 0 && - table.enumType !== dataform.TableType.TABLE && - table.enumType !== dataform.TableType.INCREMENTAL + table.enumType !== core.TargetType.TABLE && + table.enumType !== core.TargetType.INCREMENTAL ) { this.compileError( new Error(`The 'clusterBy' option is only valid for Snowflake tables`), @@ -662,8 +664,8 @@ export class Session { // Redshift config if (!!table.redshift) { const validatePropertyDefined = ( - opts: dataform.IRedshiftOptions, - prop: keyof dataform.IRedshiftOptions + opts: dataform.RedshiftOptions, + prop: keyof dataform.RedshiftOptions ) => { const value = opts[prop]; if (!opts.hasOwnProperty(prop)) { @@ -675,12 +677,12 @@ export class Session { } }; const validatePropertiesDefined = ( - opts: dataform.IRedshiftOptions, - props: Array + opts: dataform.RedshiftOptions, + props: Array ) => props.forEach(prop => validatePropertyDefined(opts, prop)); const validatePropertyValueInValues = ( - opts: dataform.IRedshiftOptions, - prop: keyof dataform.IRedshiftOptions & ("distStyle" | "sortStyle"), + opts: dataform.RedshiftOptions, + prop: keyof dataform.RedshiftOptions & ("distStyle" | "sortStyle"), values: readonly string[] ) => { if (!!opts[prop] && !values.includes(opts[prop])) { @@ -714,7 +716,7 @@ export class Session { table.bigquery.clusterBy?.length || table.bigquery.partitionExpirationDays || table.bigquery.requirePartitionFilter) && - table.enumType === dataform.TableType.VIEW + table.enumType === core.TargetType.VIEW ) { this.compileError( `partitionBy/clusterBy/requirePartitionFilter/partitionExpirationDays are not valid for BigQuery views; they are only valid for tables`, @@ -724,7 +726,7 @@ export class Session { } else if ( !table.bigquery.partitionBy && (table.bigquery.partitionExpirationDays || table.bigquery.requirePartitionFilter) && - table.enumType === dataform.TableType.TABLE + table.enumType === core.TargetType.TABLE ) { this.compileError( `requirePartitionFilter/partitionExpirationDays are not valid for non partitioned BigQuery tables`, @@ -756,7 +758,7 @@ export class Session { } // Ignored properties - if (table.enumType === dataform.TableType.INLINE) { + if (table.enumType === core.TargetType.INLINE) { Table.INLINE_IGNORED_PROPS.forEach(ignoredProp => { if (objectExistsOrIsNonEmpty(table[ignoredProp])) { this.compileError( @@ -770,7 +772,7 @@ export class Session { }); } - private checkTestNameUniqueness(tests: dataform.ITest[]) { + private checkTestNameUniqueness(tests: dataform.Test[]) { const allNames: string[] = []; tests.forEach(testProto => { if (allNames.includes(testProto.name)) { @@ -815,7 +817,7 @@ export class Session { return; } if ( - [dataform.ActionHermeticity.HERMETIC, dataform.ActionHermeticity.NON_HERMETIC].includes( + [core.ActionHermeticity.HERMETIC, core.ActionHermeticity.NON_HERMETIC].includes( action.hermeticity ) ) { @@ -832,9 +834,9 @@ export class Session { } private removeNonUniqueActionsFromCompiledGraph(compiledGraph: dataform.CompiledGraph) { - function getNonUniqueTargets(targets: dataform.ITarget[]): StringifiedSet { - const allTargets = new StringifiedSet(targetStringifier); - const nonUniqueTargets = new StringifiedSet(targetStringifier); + function getNonUniqueTargets(targets: core.Target[]): StringifiedSet { + const allTargets = new StringifiedSet(targetStringifier); + const nonUniqueTargets = new StringifiedSet(targetStringifier); targets.forEach(target => { if (allTargets.has(target)) { @@ -903,7 +905,7 @@ function definesDataset(type: string) { return type === "view" || type === "table" || type === "inline" || type === "incremental"; } -function getCanonicalProjectConfig(originalProjectConfig: dataform.IProjectConfig) { +function getCanonicalProjectConfig(originalProjectConfig: core.ProjectConfig) { return { warehouse: originalProjectConfig.warehouse, defaultSchema: originalProjectConfig.defaultSchema, @@ -979,7 +981,7 @@ class ActionIndex { } } - public find(target: dataform.ITarget) { + public find(target: core.Target) { if (!!target.database) { if (!!target.schema) { return ( diff --git a/core/table.ts b/core/table.ts index d0aa86ee8..2d8981e4c 100644 --- a/core/table.ts +++ b/core/table.ts @@ -21,7 +21,8 @@ import { toResolvable, validateQueryString } from "df/core/utils"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; /** * @hidden @@ -379,23 +380,22 @@ export interface ITableContext extends ICommonContext { * @hidden */ export class Table { - public static readonly INLINE_IGNORED_PROPS: Array = - [ - "bigquery", - "redshift", - "snowflake", - "sqlDataWarehouse", - "presto", - "preOps", - "postOps", - "actionDescriptor", - "disabled", - "where" - ]; - - public proto: dataform.ITable = dataform.Table.create({ + public static readonly INLINE_IGNORED_PROPS: Array = [ + "bigquery", + "redshift", + "snowflake", + "sqlDataWarehouse", + "presto", + "preOps", + "postOps", + "actionDescriptor", + "disabled", + "where" + ]; + + public proto: core.Target = core.Target.create({ type: "view", - enumType: dataform.TableType.VIEW, + enumType: core.TargetType.VIEW, disabled: false, tags: [] }); @@ -523,18 +523,18 @@ export class Table { this.proto.materialized = materialized; } - public snowflake(snowflake: dataform.ISnowflakeOptions) { + public snowflake(snowflake: profiles.SnowflakeOptions) { checkExcessProperties( (e: Error) => this.session.compileError(e), snowflake, ISnowflakeOptionsProperties(), "snowflake config" ); - this.proto.snowflake = dataform.SnowflakeOptions.create(snowflake); + this.proto.snowflake = profiles.SnowflakeOptions.create(snowflake); return this; } - public sqldatawarehouse(sqlDataWarehouse: dataform.ISQLDataWarehouseOptions) { + public sqldatawarehouse(sqlDataWarehouse: dataform.SQLDataWarehouseOptions) { checkExcessProperties( (e: Error) => this.session.compileError(e), sqlDataWarehouse, @@ -545,7 +545,7 @@ export class Table { return this; } - public redshift(redshift: dataform.IRedshiftOptions) { + public redshift(redshift: dataform.RedshiftOptions) { checkExcessProperties( (e: Error) => this.session.compileError(e), redshift, @@ -556,14 +556,14 @@ export class Table { return this; } - public bigquery(bigquery: dataform.IBigQueryOptions) { + public bigquery(bigquery: profiles.BigQueryOptions) { checkExcessProperties( (e: Error) => this.session.compileError(e), bigquery, IBigQueryOptionsProperties(), "bigquery config" ); - this.proto.bigquery = dataform.BigQueryOptions.create(bigquery); + this.proto.bigquery = profiles.BigQueryOptions.create(bigquery); if (!!bigquery.labels) { if (!this.proto.actionDescriptor) { this.proto.actionDescriptor = {}; @@ -573,14 +573,14 @@ export class Table { return this; } - public presto(presto: dataform.IPrestoOptions) { + public presto(presto: profiles.PrestoOptions) { checkExcessProperties( (e: Error) => this.session.compileError(e), presto, IPrestoOptionsProperties(), "presto config" ); - this.proto.presto = dataform.PrestoOptions.create(presto); + this.proto.presto = profiles.PrestoOptions.create(presto); return this; } @@ -595,8 +595,8 @@ export class Table { public hermetic(hermetic: boolean) { this.proto.hermeticity = hermetic - ? dataform.ActionHermeticity.HERMETIC - : dataform.ActionHermeticity.NON_HERMETIC; + ? core.ActionHermeticity.HERMETIC + : core.ActionHermeticity.NON_HERMETIC; } public tags(value: string | string[]) { @@ -716,7 +716,7 @@ export class Table { this.proto.query = context.apply(this.contextableQuery); - if (this.proto.enumType === dataform.TableType.INCREMENTAL) { + if (this.proto.enumType === core.TargetType.INCREMENTAL) { this.proto.incrementalQuery = incrementalContext.apply(this.contextableQuery); this.proto.incrementalPreOps = this.contextifyOps(this.contextablePreOps, incrementalContext); @@ -772,9 +772,7 @@ export class TableContext implements ITableContext { } public name(): string { - return this.table.session.finalizeName( - this.table.proto.target.name - ); + return this.table.session.finalizeName(this.table.proto.target.name); } public ref(ref: Resolvable | string[], ...rest: string[]): string { @@ -792,9 +790,7 @@ export class TableContext implements ITableContext { } public schema(): string { - return this.table.session.finalizeSchema( - this.table.proto.target.schema - ); + return this.table.session.finalizeSchema(this.table.proto.target.schema); } public database(): string { @@ -803,9 +799,7 @@ export class TableContext implements ITableContext { return ""; } - return this.table.session.finalizeDatabase( - this.table.proto.target.database - ); + return this.table.session.finalizeDatabase(this.table.proto.target.database); } public type(type: TableType) { @@ -841,17 +835,17 @@ export class TableContext implements ITableContext { return ""; } - public redshift(redshift: dataform.IRedshiftOptions) { + public redshift(redshift: dataform.RedshiftOptions) { this.table.redshift(redshift); return ""; } - public bigquery(bigquery: dataform.IBigQueryOptions) { + public bigquery(bigquery: profiles.BigQueryOptions) { this.table.bigquery(bigquery); return ""; } - public presto(presto: dataform.IPrestoOptions) { + public presto(presto: profiles.PrestoOptions) { this.table.presto(presto); return ""; } diff --git a/core/targets.ts b/core/targets.ts index 3ffe8040f..9cddb78ea 100644 --- a/core/targets.ts +++ b/core/targets.ts @@ -1,15 +1,16 @@ import { JSONObjectStringifier } from "df/common/strings/stringifier"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; /** * Produces an unambigous mapping to and from a string representation. */ -export const targetStringifier = JSONObjectStringifier.create(); +export const targetStringifier = JSONObjectStringifier.create(); /** * Returns true if both targets are equal. */ -export function targetsAreEqual(a: dataform.ITarget, b: dataform.ITarget) { +export function targetsAreEqual(a: core.Target, b: core.Target) { return a.database === b.database && a.schema === b.schema && a.name === b.name; } @@ -21,7 +22,7 @@ export function targetsAreEqual(a: dataform.ITarget, b: dataform.ITarget) { * This is an ambiguous transformation, multiple targets may map to the same string * and it should not be used for indexing. Use {@code targetStringifier} instead. */ -export function targetAsReadableString(target: dataform.ITarget): string { +export function targetAsReadableString(target: core.Target): string { const nameParts = [target.name, target.schema]; if (!!target.database) { nameParts.push(target.database); diff --git a/core/tasks.ts b/core/tasks.ts index bbf6c01cb..2e23f6980 100644 --- a/core/tasks.ts +++ b/core/tasks.ts @@ -1,4 +1,5 @@ -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; export function concatenateQueries(statements: string[], modifier?: (mod: string) => string) { return statements @@ -56,7 +57,7 @@ export class Task { .type("assertion") .statement(statement); } - private proto: dataform.IExecutionTask = dataform.ExecutionTask.create(); + private proto: dataform.ExecutionTask = dataform.ExecutionTask.create(); public type(v: string) { this.proto.type = v; diff --git a/core/test.ts b/core/test.ts index 782abf61f..4d8aca474 100644 --- a/core/test.ts +++ b/core/test.ts @@ -12,7 +12,8 @@ import { stringifyResolvable, toResolvable } from "df/core/utils"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; /** * Configuration options for unit tests. @@ -30,13 +31,12 @@ const ITestConfigProperties = strictKeysOf()(["type", "dataset", "n * @hidden */ export class Test { - public proto: dataform.ITest = dataform.Test.create(); + public proto: dataform.Test = dataform.Test.create(); public session: Session; - public contextableInputs = new StringifiedMap< - dataform.ITarget, - Contextable - >(targetStringifier); + public contextableInputs = new StringifiedMap>( + targetStringifier + ); private datasetToTest: Resolvable; private contextableQuery: Contextable; @@ -90,7 +90,7 @@ export class Test { new Error(`Dataset ${stringifyResolvable(this.datasetToTest)} could not be found.`), this.proto.fileName ); - } else if (dataset.proto.enumType === dataform.TableType.INCREMENTAL) { + } else if (dataset.proto.enumType === core.TargetType.INCREMENTAL) { this.session.compileError( new Error("Running tests on incremental datasets is not yet supported."), this.proto.fileName @@ -210,11 +210,11 @@ class RefReplacingContext implements ITableContext { return ""; } - public redshift(redshift: dataform.IRedshiftOptions) { + public redshift(redshift: dataform.RedshiftOptions) { return ""; } - public bigquery(bigquery: dataform.IBigQueryOptions) { + public bigquery(bigquery: profiles.BigQueryOptions) { return ""; } diff --git a/core/utils.ts b/core/utils.ts index a8680ef47..e02ac177c 100644 --- a/core/utils.ts +++ b/core/utils.ts @@ -5,7 +5,8 @@ import { Declaration } from "df/core/declaration"; import { Operation } from "df/core/operation"; import { IActionProto, Session } from "df/core/session"; import { Table } from "df/core/table"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; const pathSeperator = (() => { if (typeof process !== "undefined") { @@ -104,7 +105,7 @@ function getCurrentStack(): NodeJS.CallSite[] { } } -export function graphHasErrors(graph: dataform.ICompiledGraph) { +export function graphHasErrors(graph: dataform.CompiledGraph) { return graph.graphErrors?.compilationErrors.length > 0; } @@ -135,7 +136,7 @@ function isResolvableArray(parts: any[]): parts is [string, string?, string?] { return parts.length > 0 && parts.length <= 3; } -export function resolvableAsTarget(resolvable: Resolvable): dataform.ITarget { +export function resolvableAsTarget(resolvable: Resolvable): core.Target { if (typeof resolvable === "string") { return { name: resolvable @@ -165,14 +166,14 @@ export function ambiguousActionNameMsg( export function target( adapter: adapters.IAdapter, - config: dataform.IProjectConfig, + config: core.ProjectConfig, name: string, schema?: string, database?: string -): dataform.ITarget { +): core.Target { schema = schema || config.defaultSchema; database = database || config.defaultDatabase; - return dataform.Target.create({ + return core.Target.create({ name: adapter.normalizeIdentifier(name), schema: !!schema ? adapter.normalizeIdentifier(schema || config.defaultSchema) : undefined, database: !!database ? adapter.normalizeIdentifier(database) : undefined @@ -250,34 +251,38 @@ export function throwIfInvalid(proto: T, verify: (proto: T) => string) { export function tableTypeStringToEnum(type: string, throwIfUnknown: boolean) { switch (type) { case "table": - return dataform.TableType.TABLE; + return core.TargetType.TABLE; case "incremental": - return dataform.TableType.INCREMENTAL; + return core.TargetType.INCREMENTAL; case "view": - return dataform.TableType.VIEW; + return core.TargetType.VIEW; case "inline": - return dataform.TableType.INLINE; + return core.TargetType.INLINE; default: { if (throwIfUnknown) { throw new Error(`Unexpected table type: ${type}`); } - return dataform.TableType.UNKNOWN_TYPE; + return core.TargetType.UNKNOWN_TYPE; } } } -export function tableTypeEnumToString(enumType: dataform.TableType) { - return dataform.TableType[enumType].toLowerCase(); +export function tableTypeEnumToString(enumType: core.TargetType) { + return core.TargetType[enumType].toLowerCase(); } -export function setOrValidateTableEnumType(table: dataform.ITable) { - let enumTypeFromStr: dataform.TableType|null = null; +export function setOrValidateTableEnumType(table: core.Target) { + let enumTypeFromStr: core.TargetType | null = null; if (table.type !== "" && table.type !== undefined) { enumTypeFromStr = tableTypeStringToEnum(table.type, true); } - if (table.enumType === dataform.TableType.UNKNOWN_TYPE || table.enumType === undefined) { + if (table.enumType === core.TargetType.UNKNOWN_TYPE || table.enumType === undefined) { table.enumType = enumTypeFromStr!; } else if (enumTypeFromStr !== null && table.enumType !== enumTypeFromStr) { - throw new Error(`Table str type "${table.type}" and enumType "${tableTypeEnumToString(table.enumType)}" are not equivalent.`); + throw new Error( + `Table str type "${table.type}" and enumType "${tableTypeEnumToString( + table.enumType + )}" are not equivalent.` + ); } } diff --git a/sandbox/vm/compile.ts b/sandbox/vm/compile.ts index 4ce36a5c7..17b5c665b 100644 --- a/sandbox/vm/compile.ts +++ b/sandbox/vm/compile.ts @@ -1,7 +1,8 @@ import * as path from "path"; import { CompilerFunction, NodeVM } from "vm2"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; import { createCoreExecutionRequest, createGenIndexConfig } from "df/sandbox/vm/create_config"; function missingValidCorePackageError() { @@ -9,7 +10,7 @@ function missingValidCorePackageError() { `Could not find a recent installed version of @dataform/core in the project. Ensure packages are installed and upgrade to a recent version.` ); } -export function compile(compileConfig: dataform.ICompileConfig) { +export function compile(compileConfig: dataform.CompileConfig) { const vmIndexFileName = path.resolve(path.join(compileConfig.projectDir, "index.js")); const indexGeneratorVm = new NodeVM({ @@ -76,7 +77,7 @@ export function compile(compileConfig: dataform.ICompileConfig) { } export function listenForCompileRequest() { - process.on("message", (compileConfig: dataform.ICompileConfig) => { + process.on("message", (compileConfig: dataform.CompileConfig) => { try { const compiledResult = compile(compileConfig); process.send(compiledResult); diff --git a/sandbox/vm/create_config.ts b/sandbox/vm/create_config.ts index 1223dff4e..30358b4f2 100644 --- a/sandbox/vm/create_config.ts +++ b/sandbox/vm/create_config.ts @@ -1,9 +1,10 @@ import * as glob from "glob"; import { encode64 } from "df/common/protos"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; -export function createGenIndexConfig(compileConfig: dataform.ICompileConfig): string { +export function createGenIndexConfig(compileConfig: dataform.CompileConfig): string { const includePaths: string[] = []; glob.sync("includes/*.js", { cwd: compileConfig.projectDir }).forEach(path => { if (includePaths.indexOf(path) < 0) { @@ -33,7 +34,7 @@ export function createGenIndexConfig(compileConfig: dataform.ICompileConfig): st /** * @returns a base64 encoded {@see dataform.CoreExecutionRequest} proto. */ -export function createCoreExecutionRequest(compileConfig: dataform.ICompileConfig): string { +export function createCoreExecutionRequest(compileConfig: dataform.CompileConfig): string { const filePaths = Array.from( new Set(glob.sync("!(node_modules)/**/*.*", { cwd: compileConfig.projectDir })) ); diff --git a/tests/api/api.spec.ts b/tests/api/api.spec.ts index d0dcb4a8d..723a21fdb 100644 --- a/tests/api/api.spec.ts +++ b/tests/api/api.spec.ts @@ -7,7 +7,8 @@ import { IDbAdapter } from "df/api/dbadapters"; import { BigQueryDbAdapter } from "df/api/dbadapters/bigquery"; import { sleep, sleepUntil } from "df/common/promises"; import { targetAsReadableString, targetsAreEqual } from "df/core/targets"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; import { suite, test } from "df/testing"; import { asPlainObject, cleanSql } from "df/tests/utils"; @@ -18,7 +19,7 @@ suite("@dataform/api", () => { // ^ // d // Made with asciiflow.com - const TEST_GRAPH: dataform.ICompiledGraph = dataform.CompiledGraph.create({ + const TEST_GRAPH: dataform.CompiledGraph = dataform.CompiledGraph.create({ projectConfig: { warehouse: "redshift" }, tables: [ { @@ -91,7 +92,7 @@ suite("@dataform/api", () => { test("build_with_errors", () => { expect(() => { - const graphWithErrors: dataform.ICompiledGraph = dataform.CompiledGraph.create({ + const graphWithErrors: dataform.CompiledGraph = dataform.CompiledGraph.create({ projectConfig: { warehouse: "redshift" }, graphErrors: { compilationErrors: [{ message: "Some critical error" }] }, tables: [{ target: { schema: "schema", name: "a" } }] @@ -110,7 +111,7 @@ suite("@dataform/api", () => { }); test("action_types", () => { - const graph: dataform.ICompiledGraph = dataform.CompiledGraph.create({ + const graph: dataform.CompiledGraph = dataform.CompiledGraph.create({ projectConfig: { warehouse: "redshift" }, tables: [ { target: { schema: "schema", name: "a" }, type: "table" }, @@ -135,33 +136,33 @@ suite("@dataform/api", () => { expect(executedGraph.actions.length).greaterThan(0); - graph.tables.forEach((t: dataform.ITable) => { + graph.tables.forEach((t: core.Target) => { const action = executedGraph.actions.find(item => targetsAreEqual(item.target, t.target)); expect(action).to.include({ type: "table", target: t.target, tableType: t.type }); }); - graph.operations.forEach((o: dataform.IOperation) => { + graph.operations.forEach((o: core.Operation) => { const action = executedGraph.actions.find(item => targetsAreEqual(item.target, o.target)); expect(action).to.include({ type: "operation", target: o.target }); }); - graph.assertions.forEach((a: dataform.IAssertion) => { + graph.assertions.forEach((a: core.Assertion) => { const action = executedGraph.actions.find(item => targetsAreEqual(item.target, a.target)); expect(action).to.include({ type: "assertion" }); }); }); test("table_enum_types", () => { - const graph: dataform.ICompiledGraph = dataform.CompiledGraph.create({ + const graph: dataform.CompiledGraph = dataform.CompiledGraph.create({ projectConfig: { warehouse: "bigquery" }, tables: [ - { target: { schema: "schema", name: "a" }, enumType: dataform.TableType.TABLE }, + { target: { schema: "schema", name: "a" }, enumType: core.TargetType.TABLE }, { target: { schema: "schema", name: "b" }, - enumType: dataform.TableType.INCREMENTAL, + enumType: core.TargetType.INCREMENTAL, where: "test" }, - { target: { schema: "schema", name: "c" }, enumType: dataform.TableType.VIEW } + { target: { schema: "schema", name: "c" }, enumType: core.TargetType.VIEW } ] }); @@ -170,24 +171,26 @@ suite("@dataform/api", () => { expect(executedGraph.actions.length).greaterThan(0); - graph.tables.forEach((t: dataform.ITable) => { + graph.tables.forEach((t: core.Target) => { const action = executedGraph.actions.find(item => targetsAreEqual(item.target, t.target)); expect(action).to.include({ type: "table", target: t.target, - tableType: dataform.TableType[t.enumType].toLowerCase(), + tableType: core.TargetType[t.enumType].toLowerCase() }); }); }); test("table_enum_and_str_types_should_match", () => { - const graph: dataform.ICompiledGraph = dataform.CompiledGraph.create({ + const graph: dataform.CompiledGraph = dataform.CompiledGraph.create({ projectConfig: { warehouse: "bigquery" }, - tables: [{ - target: { schema: "schema", name: "a" }, - enumType: dataform.TableType.TABLE, - type: "incremental", - }] + tables: [ + { + target: { schema: "schema", name: "a" }, + enumType: core.TargetType.TABLE, + type: "incremental" + } + ] }); expect(() => new Builder(graph, {}, TEST_STATE)).to.throw( @@ -203,7 +206,7 @@ suite("@dataform/api", () => { "sqldatawarehouse", "snowflake" ]) { - const graph: dataform.ICompiledGraph = dataform.CompiledGraph.create({ + const graph: dataform.CompiledGraph = dataform.CompiledGraph.create({ projectConfig: { warehouse: "redshift" }, tables: [ { @@ -267,7 +270,7 @@ suite("@dataform/api", () => { // +-> op_c // // op_d +---> tab_a - const TEST_GRAPH_WITH_TAGS: dataform.ICompiledGraph = dataform.CompiledGraph.create({ + const TEST_GRAPH_WITH_TAGS: dataform.CompiledGraph = dataform.CompiledGraph.create({ projectConfig: { warehouse: "bigquery", defaultLocation: "US" }, operations: [ { @@ -303,7 +306,7 @@ suite("@dataform/api", () => { }); test("prune removes inline tables", async () => { - const graph: dataform.ICompiledGraph = dataform.CompiledGraph.create({ + const graph: dataform.CompiledGraph = dataform.CompiledGraph.create({ projectConfig: { warehouse: "bigquery", defaultLocation: "US" }, tables: [ { target: { schema: "schema", name: "a" }, type: "table" }, @@ -442,7 +445,7 @@ suite("@dataform/api", () => { schema: "schema", name: "incremental" }, - type: dataform.TableMetadata.Type.TABLE, + type: execution.TableMetadata_Type.TABLE, fields: [ { name: "existing_field" @@ -470,7 +473,7 @@ suite("@dataform/api", () => { }); test("bigquery_materialized", () => { - const testGraph: dataform.ICompiledGraph = dataform.CompiledGraph.create({ + const testGraph: dataform.CompiledGraph = dataform.CompiledGraph.create({ projectConfig: { warehouse: "bigquery", defaultDatabase: "deeb", defaultLocation: "US" }, tables: [ { @@ -492,7 +495,7 @@ suite("@dataform/api", () => { } ] }); - const expectedExecutionActions: dataform.IExecutionAction[] = [ + const expectedExecutionActions: dataform.ExecutionAction[] = [ { type: "table", tableType: "view", @@ -508,7 +511,7 @@ suite("@dataform/api", () => { } ], dependencyTargets: [], - hermeticity: dataform.ActionHermeticity.HERMETIC + hermeticity: core.ActionHermeticity.HERMETIC }, { type: "table", @@ -524,7 +527,7 @@ suite("@dataform/api", () => { } ], dependencyTargets: [], - hermeticity: dataform.ActionHermeticity.HERMETIC + hermeticity: core.ActionHermeticity.HERMETIC } ]; const executionGraph = new Builder(testGraph, {}, dataform.WarehouseState.create({})).build(); @@ -534,7 +537,7 @@ suite("@dataform/api", () => { }); test("snowflake_materialized", () => { - const testGraph: dataform.ICompiledGraph = dataform.CompiledGraph.create({ + const testGraph: dataform.CompiledGraph = dataform.CompiledGraph.create({ projectConfig: { warehouse: "snowflake" }, tables: [ { @@ -556,7 +559,7 @@ suite("@dataform/api", () => { } ] }); - const expectedExecutionActions: dataform.IExecutionAction[] = [ + const expectedExecutionActions: dataform.ExecutionAction[] = [ { type: "table", tableType: "view", @@ -571,7 +574,7 @@ suite("@dataform/api", () => { } ], dependencyTargets: [], - hermeticity: dataform.ActionHermeticity.HERMETIC + hermeticity: core.ActionHermeticity.HERMETIC }, { type: "table", @@ -587,7 +590,7 @@ suite("@dataform/api", () => { } ], dependencyTargets: [], - hermeticity: dataform.ActionHermeticity.HERMETIC + hermeticity: core.ActionHermeticity.HERMETIC } ]; const executionGraph = new Builder(testGraph, {}, dataform.WarehouseState.create({})).build(); @@ -597,7 +600,7 @@ suite("@dataform/api", () => { }); test("redshift_create", () => { - const testGraph: dataform.ICompiledGraph = dataform.CompiledGraph.create({ + const testGraph: dataform.CompiledGraph = dataform.CompiledGraph.create({ projectConfig: { warehouse: "redshift" }, dataformCoreVersion: "1.4.1", tables: [ @@ -694,7 +697,7 @@ suite("@dataform/api", () => { }); test("redshift_create after bind support dropped", () => { - const testGraph: dataform.ICompiledGraph = dataform.CompiledGraph.create({ + const testGraph: dataform.CompiledGraph = dataform.CompiledGraph.create({ projectConfig: { warehouse: "redshift" }, dataformCoreVersion: "1.11.0", tables: [ @@ -724,7 +727,7 @@ suite("@dataform/api", () => { }); test("postgres_create", () => { - const testGraph: dataform.ICompiledGraph = dataform.CompiledGraph.create({ + const testGraph: dataform.CompiledGraph = dataform.CompiledGraph.create({ projectConfig: { warehouse: "postgres" }, dataformCoreVersion: "1.4.1", tables: [ @@ -757,7 +760,7 @@ suite("@dataform/api", () => { }); test("bigquery_partitionby", () => { - const testGraph: dataform.ICompiledGraph = dataform.CompiledGraph.create({ + const testGraph: dataform.CompiledGraph = dataform.CompiledGraph.create({ projectConfig: { warehouse: "bigquery", defaultDatabase: "deeb", defaultLocation: "US" }, tables: [ { @@ -782,7 +785,7 @@ suite("@dataform/api", () => { } ] }); - const expectedExecutionActions: dataform.IExecutionAction[] = [ + const expectedExecutionActions: dataform.ExecutionAction[] = [ { type: "table", tableType: "table", @@ -798,7 +801,7 @@ suite("@dataform/api", () => { } ], dependencyTargets: [], - hermeticity: dataform.ActionHermeticity.HERMETIC + hermeticity: core.ActionHermeticity.HERMETIC }, { type: "table", @@ -814,7 +817,7 @@ suite("@dataform/api", () => { } ], dependencyTargets: [], - hermeticity: dataform.ActionHermeticity.HERMETIC + hermeticity: core.ActionHermeticity.HERMETIC } ]; const executionGraph = new Builder(testGraph, {}, dataform.WarehouseState.create({})).build(); @@ -824,7 +827,7 @@ suite("@dataform/api", () => { }); test("bigquery_options", () => { - const testGraph: dataform.ICompiledGraph = dataform.CompiledGraph.create({ + const testGraph: dataform.CompiledGraph = dataform.CompiledGraph.create({ projectConfig: { warehouse: "bigquery", defaultDatabase: "deeb", defaultLocation: "US" }, tables: [ { @@ -851,7 +854,7 @@ suite("@dataform/api", () => { } ] }); - const expectedExecutionActions: dataform.IExecutionAction[] = [ + const expectedExecutionActions: dataform.ExecutionAction[] = [ { type: "table", tableType: "table", @@ -867,7 +870,7 @@ suite("@dataform/api", () => { } ], dependencyTargets: [], - hermeticity: dataform.ActionHermeticity.HERMETIC + hermeticity: core.ActionHermeticity.HERMETIC }, { type: "table", @@ -883,7 +886,7 @@ suite("@dataform/api", () => { } ], dependencyTargets: [], - hermeticity: dataform.ActionHermeticity.HERMETIC + hermeticity: core.ActionHermeticity.HERMETIC } ]; const executionGraph = new Builder(testGraph, {}, dataform.WarehouseState.create({})).build(); @@ -893,7 +896,7 @@ suite("@dataform/api", () => { }); test("bigquery_clusterby", () => { - const testGraph: dataform.ICompiledGraph = dataform.CompiledGraph.create({ + const testGraph: dataform.CompiledGraph = dataform.CompiledGraph.create({ projectConfig: { warehouse: "bigquery", defaultDatabase: "deeb", defaultLocation: "US" }, tables: [ { @@ -918,7 +921,7 @@ suite("@dataform/api", () => { } ] }); - const expectedExecutionActions: dataform.IExecutionAction[] = [ + const expectedExecutionActions: dataform.ExecutionAction[] = [ { type: "table", tableType: "table", @@ -934,7 +937,7 @@ suite("@dataform/api", () => { } ], dependencyTargets: [], - hermeticity: dataform.ActionHermeticity.HERMETIC + hermeticity: core.ActionHermeticity.HERMETIC }, { type: "table", @@ -950,7 +953,7 @@ suite("@dataform/api", () => { } ], dependencyTargets: [], - hermeticity: dataform.ActionHermeticity.HERMETIC + hermeticity: core.ActionHermeticity.HERMETIC } ]; const executionGraph = new Builder(testGraph, {}, dataform.WarehouseState.create({})).build(); @@ -960,7 +963,7 @@ suite("@dataform/api", () => { }); test("bigquery_additional_options", () => { - const testGraph: dataform.ICompiledGraph = dataform.CompiledGraph.create({ + const testGraph: dataform.CompiledGraph = dataform.CompiledGraph.create({ projectConfig: { warehouse: "bigquery", defaultDatabase: "deeb", defaultLocation: "US" }, tables: [ { @@ -988,7 +991,7 @@ suite("@dataform/api", () => { } ] }); - const expectedExecutionActions: dataform.IExecutionAction[] = [ + const expectedExecutionActions: dataform.ExecutionAction[] = [ { type: "table", tableType: "table", @@ -1004,7 +1007,7 @@ suite("@dataform/api", () => { } ], dependencyTargets: [], - hermeticity: dataform.ActionHermeticity.HERMETIC + hermeticity: core.ActionHermeticity.HERMETIC }, { type: "table", @@ -1020,7 +1023,7 @@ suite("@dataform/api", () => { } ], dependencyTargets: [], - hermeticity: dataform.ActionHermeticity.HERMETIC + hermeticity: core.ActionHermeticity.HERMETIC } ]; const executionGraph = new Builder(testGraph, {}, dataform.WarehouseState.create({})).build(); @@ -1030,7 +1033,7 @@ suite("@dataform/api", () => { }); test("snowflake", () => { - const testGraph: dataform.ICompiledGraph = dataform.CompiledGraph.create({ + const testGraph: dataform.CompiledGraph = dataform.CompiledGraph.create({ projectConfig: { warehouse: "snowflake" }, tables: [ { @@ -1151,7 +1154,7 @@ suite("@dataform/api", () => { }); suite("run", () => { - const RUN_TEST_GRAPH: dataform.IExecutionGraph = dataform.ExecutionGraph.create({ + const RUN_TEST_GRAPH: dataform.ExecutionGraph = dataform.ExecutionGraph.create({ projectConfig: { warehouse: "bigquery", defaultSchema: "foo", @@ -1165,7 +1168,7 @@ suite("@dataform/api", () => { warehouseState: { tables: [ { - type: dataform.TableMetadata.Type.TABLE, + type: execution.TableMetadata_Type.TABLE, target: { schema: "schema1", name: "target1" @@ -1508,7 +1511,7 @@ suite("@dataform/api", () => { }); test("execute_with_cancel", async () => { - const CANCEL_TEST_GRAPH: dataform.IExecutionGraph = dataform.ExecutionGraph.create({ + const CANCEL_TEST_GRAPH: dataform.ExecutionGraph = dataform.ExecutionGraph.create({ projectConfig: { warehouse: "bigquery", defaultSchema: "foo", @@ -1570,7 +1573,7 @@ suite("@dataform/api", () => { }); test("continues after setMetadata fails", async () => { - const METADATA_TEST_GRAPH: dataform.IExecutionGraph = dataform.ExecutionGraph.create({ + const METADATA_TEST_GRAPH: dataform.ExecutionGraph = dataform.ExecutionGraph.create({ projectConfig: { warehouse: "bigquery", defaultSchema: "foo", @@ -1642,7 +1645,7 @@ suite("@dataform/api", () => { }); }); -function cleanTiming(runResult: dataform.IRunResult) { +function cleanTiming(runResult: dataform.RunResult) { const newRunResult = dataform.RunResult.create(runResult); delete newRunResult.timing; newRunResult.actions.forEach(actionResult => { diff --git a/tests/api/examples.spec.ts b/tests/api/examples.spec.ts index 9c76b9245..3d2769e26 100644 --- a/tests/api/examples.spec.ts +++ b/tests/api/examples.spec.ts @@ -4,7 +4,8 @@ import * as path from "path"; import { Builder, compile } from "df/api"; import { targetAsReadableString } from "df/core/targets"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; import { suite, test } from "df/testing"; import { cleanSql } from "df/tests/utils"; @@ -99,7 +100,7 @@ suite("examples", () => { // Check JS blocks get processed. const exampleJsBlocks = graph.tables.find( - (t: dataform.ITable) => + (t: core.Target) => targetAsReadableString(t.target) === dotJoined( databaseWithSuffix("tada-analytics"), @@ -108,12 +109,12 @@ suite("examples", () => { ) ); expect(exampleJsBlocks.type).equals("table"); - expect(exampleJsBlocks.enumType).equals(dataform.TableType.TABLE); + expect(exampleJsBlocks.enumType).equals(core.TargetType.TABLE); expect(exampleJsBlocks.query.trim()).equals("select 1 as foo"); // Check we can import and use an external package. const exampleIncremental = graph.tables.find( - (t: dataform.ITable) => + (t: core.Target) => targetAsReadableString(t.target) === dotJoined( databaseWithSuffix("tada-analytics"), @@ -136,7 +137,7 @@ suite("examples", () => { ); const exampleIsIncremental = graph.tables.filter( - (t: dataform.ITable) => + (t: core.Target) => targetAsReadableString(t.target) === dotJoined( databaseWithSuffix("tada-analytics"), @@ -167,11 +168,11 @@ suite("examples", () => { // Check tables defined in includes are not included. const exampleIgnore = graph.tables.find( - (t: dataform.ITable) => targetAsReadableString(t.target) === "example_ignore" + (t: core.Target) => targetAsReadableString(t.target) === "example_ignore" ); expect(exampleIgnore).equal(undefined); const exampleIgnore2 = graph.tables.find( - (t: dataform.ITable) => + (t: core.Target) => targetAsReadableString(t.target) === dotJoined( databaseWithSuffix("tada-analytics"), @@ -183,7 +184,7 @@ suite("examples", () => { // Check SQL files with raw back-ticks get escaped. const exampleBackticks = graph.tables.find( - (t: dataform.ITable) => + (t: core.Target) => targetAsReadableString(t.target) === dotJoined( databaseWithSuffix("tada-analytics"), @@ -201,7 +202,7 @@ suite("examples", () => { // Check deferred calls to table resolve to the correct definitions file. const exampleDeferred = graph.tables.find( - (t: dataform.ITable) => + (t: core.Target) => targetAsReadableString(t.target) === dotJoined( databaseWithSuffix("tada-analytics"), @@ -213,7 +214,7 @@ suite("examples", () => { // Check inline tables const exampleInline = graph.tables.find( - (t: dataform.ITable) => + (t: core.Target) => targetAsReadableString(t.target) === dotJoined( databaseWithSuffix("tada-analytics"), @@ -222,7 +223,7 @@ suite("examples", () => { ) ); expect(exampleInline.type).equals("inline"); - expect(exampleInline.enumType).equals(dataform.TableType.INLINE); + expect(exampleInline.enumType).equals(core.TargetType.INLINE); expect(exampleInline.query.trim()).equals( `select * from \`${dotJoined( databaseWithSuffix("tada-analytics"), @@ -231,7 +232,7 @@ suite("examples", () => { )}\`` ); expect(exampleInline.dependencyTargets).eql([ - dataform.Target.create({ + core.Target.create({ database: databaseWithSuffix("tada-analytics"), schema: schemaWithSuffix("df_integration_test"), name: "sample_data" @@ -239,7 +240,7 @@ suite("examples", () => { ]); const exampleUsingInline = graph.tables.find( - (t: dataform.ITable) => + (t: core.Target) => targetAsReadableString(t.target) === dotJoined( databaseWithSuffix("tada-analytics"), @@ -248,7 +249,7 @@ suite("examples", () => { ) ); expect(exampleUsingInline.type).equals("table"); - expect(exampleUsingInline.enumType).equals(dataform.TableType.TABLE); + expect(exampleUsingInline.enumType).equals(core.TargetType.TABLE); expect(exampleUsingInline.query.trim()).equals( `select * from (\n\nselect * from \`${dotJoined( databaseWithSuffix("tada-analytics"), @@ -257,7 +258,7 @@ suite("examples", () => { )}\`\n)\nwhere true` ); expect(exampleUsingInline.dependencyTargets).eql([ - dataform.Target.create({ + core.Target.create({ database: databaseWithSuffix("tada-analytics"), schema: schemaWithSuffix("df_integration_test"), name: "sample_data" @@ -266,7 +267,7 @@ suite("examples", () => { // Check view const exampleView = graph.tables.find( - (t: dataform.ITable) => + (t: core.Target) => targetAsReadableString(t.target) === dotJoined( databaseWithSuffix("tada-analytics"), @@ -275,7 +276,7 @@ suite("examples", () => { ) ); expect(exampleView.type).equals("view"); - expect(exampleView.enumType).equals(dataform.TableType.VIEW); + expect(exampleView.enumType).equals(core.TargetType.VIEW); expect(exampleView.query.trim()).equals( `select * from \`${dotJoined( databaseWithSuffix("tada-analytics"), @@ -294,31 +295,31 @@ suite("examples", () => { )}\`` ); expect(exampleView.target).deep.equals( - dataform.Target.create({ + core.Target.create({ database: databaseWithSuffix("tada-analytics"), schema: schemaWithSuffix("df_integration_test"), name: "example_view" }) ); expect(exampleView.canonicalTarget).deep.equals( - dataform.Target.create({ + core.Target.create({ database: "tada-analytics", schema: "df_integration_test", name: "example_view" }) ); expect(exampleView.dependencyTargets).eql([ - dataform.Target.create({ + core.Target.create({ database: databaseWithSuffix("tada-analytics"), schema: schemaWithSuffix("df_integration_test"), name: "sample_data" }), - dataform.Target.create({ + core.Target.create({ database: databaseWithSuffix("tada-analytics"), schema: schemaWithSuffix("override_schema"), name: "override_schema_example" }), - dataform.Target.create({ + core.Target.create({ database: databaseWithSuffix("override_database"), schema: schemaWithSuffix("df_integration_test"), name: "override_database_example" @@ -328,7 +329,7 @@ suite("examples", () => { // Check materialized view const exampleMaterializedView = graph.tables.find( - (t: dataform.ITable) => + (t: core.Target) => targetAsReadableString(t.target) === dotJoined( databaseWithSuffix("tada-analytics"), @@ -337,7 +338,7 @@ suite("examples", () => { ) ); expect(exampleMaterializedView.type).equals("view"); - expect(exampleMaterializedView.enumType).equals(dataform.TableType.VIEW); + expect(exampleMaterializedView.enumType).equals(core.TargetType.VIEW); expect(exampleMaterializedView.materialized).equals(true); expect(exampleMaterializedView.query.trim()).equals( `select * from \`${dotJoined( @@ -347,21 +348,21 @@ suite("examples", () => { )}\`\n` + `group by 1` ); expect(exampleMaterializedView.target).deep.equals( - dataform.Target.create({ + core.Target.create({ database: databaseWithSuffix("tada-analytics"), schema: schemaWithSuffix("df_integration_test"), name: "example_materialized_view" }) ); expect(exampleMaterializedView.canonicalTarget).deep.equals( - dataform.Target.create({ + core.Target.create({ database: "tada-analytics", schema: "df_integration_test", name: "example_materialized_view" }) ); expect(exampleMaterializedView.dependencyTargets).eql([ - dataform.Target.create({ + core.Target.create({ database: databaseWithSuffix("tada-analytics"), schema: schemaWithSuffix("df_integration_test"), name: "sample_data" @@ -371,7 +372,7 @@ suite("examples", () => { // Check table const exampleTable = graph.tables.find( - (t: dataform.ITable) => + (t: core.Target) => targetAsReadableString(t.target) === dotJoined( databaseWithSuffix("tada-analytics"), @@ -380,7 +381,7 @@ suite("examples", () => { ) ); expect(exampleTable.type).equals("table"); - expect(exampleTable.enumType).equals(dataform.TableType.TABLE); + expect(exampleTable.enumType).equals(core.TargetType.TABLE); expect(exampleTable.query.trim()).equals( `select * from \`${dotJoined( databaseWithSuffix("tada-analytics"), @@ -389,7 +390,7 @@ suite("examples", () => { )}\`\n\n-- here \${"is"} a \`comment\n\n/* \${"another"} \` backtick \` containing \`\`\`comment */` ); expect(exampleTable.dependencyTargets).eql([ - dataform.Target.create({ + core.Target.create({ database: databaseWithSuffix("tada-analytics"), schema: schemaWithSuffix("df_integration_test"), name: "sample_data" @@ -412,7 +413,7 @@ suite("examples", () => { // Check Table with tags const exampleTableWithTags = graph.tables.find( - (t: dataform.ITable) => + (t: core.Target) => targetAsReadableString(t.target) === dotJoined( databaseWithSuffix("tada-analytics"), @@ -442,7 +443,7 @@ suite("examples", () => { )}\` group by sample) as data where index_row_count > 1` ); expect(exampleTableWithTagsUniqueKeyAssertion.dependencyTargets).eql([ - dataform.Target.create({ + core.Target.create({ database: databaseWithSuffix("tada-analytics"), schema: schemaWithSuffix("df_integration_test"), name: "example_table_with_tags" @@ -469,7 +470,7 @@ suite("examples", () => { )}\` where not (sample is not null)` ); expect(exampleTableWithTagsRowConditionsAssertion.dependencyTargets).eql([ - dataform.Target.create({ + core.Target.create({ database: databaseWithSuffix("tada-analytics"), schema: schemaWithSuffix("df_integration_test"), name: "example_table_with_tags" @@ -478,7 +479,7 @@ suite("examples", () => { // Check sample data const exampleSampleData = graph.tables.find( - (t: dataform.ITable) => + (t: core.Target) => targetAsReadableString(t.target) === dotJoined( databaseWithSuffix("tada-analytics"), @@ -487,7 +488,7 @@ suite("examples", () => { ) ); expect(exampleSampleData.type).equals("view"); - expect(exampleSampleData.enumType).equals(dataform.TableType.VIEW); + expect(exampleSampleData.enumType).equals(core.TargetType.VIEW); expect(exampleSampleData.query.trim()).equals( "select 1 as sample union all\nselect 2 as sample union all\nselect 3 as sample" ); @@ -507,7 +508,7 @@ suite("examples", () => { // Check database override defined in "config {}". const exampleUsingOverriddenDatabase = graph.tables.find( - (t: dataform.ITable) => + (t: core.Target) => targetAsReadableString(t.target) === dotJoined( databaseWithSuffix("override_database"), @@ -520,14 +521,14 @@ suite("examples", () => { databaseWithSuffix("override_database") ); expect(exampleUsingOverriddenDatabase.type).equals("view"); - expect(exampleUsingOverriddenDatabase.enumType).equals(dataform.TableType.VIEW); + expect(exampleUsingOverriddenDatabase.enumType).equals(core.TargetType.VIEW); expect(exampleUsingOverriddenDatabase.query.trim()).equals( "select 1 as test_database_override" ); // Check schema overrides defined in "config {}" const exampleUsingOverriddenSchema = graph.tables.find( - (t: dataform.ITable) => + (t: core.Target) => targetAsReadableString(t.target) === dotJoined( databaseWithSuffix("tada-analytics"), @@ -540,14 +541,14 @@ suite("examples", () => { schemaWithSuffix("override_schema") ); expect(exampleUsingOverriddenSchema.type).equals("view"); - expect(exampleUsingOverriddenSchema.enumType).equals(dataform.TableType.VIEW); + expect(exampleUsingOverriddenSchema.enumType).equals(core.TargetType.VIEW); expect(exampleUsingOverriddenSchema.query.trim()).equals( "select 1 as test_schema_override" ); // Check schema overrides defined in "config {}" -- case with schema unchanged const exampleUsingOverriddenSchemaUnchanged = graph.tables.find( - (t: dataform.ITable) => + (t: core.Target) => targetAsReadableString(t.target) === dotJoined( databaseWithSuffix("tada-analytics"), @@ -560,14 +561,14 @@ suite("examples", () => { schemaWithSuffix("df_integration_test") ); expect(exampleUsingOverriddenSchemaUnchanged.type).equals("view"); - expect(exampleUsingOverriddenSchemaUnchanged.enumType).equals(dataform.TableType.VIEW); + expect(exampleUsingOverriddenSchemaUnchanged.enumType).equals(core.TargetType.VIEW); expect(exampleUsingOverriddenSchemaUnchanged.query.trim()).equals( "select 1 as test_schema_override" ); // Check assertion const exampleAssertion = graph.assertions.find( - (a: dataform.IAssertion) => + (a: core.Assertion) => targetAsReadableString(a.target) === dotJoined( databaseWithSuffix("tada-analytics"), @@ -584,7 +585,7 @@ suite("examples", () => { )}\` where sample = 100` ); expect(exampleAssertion.dependencyTargets).eql([ - dataform.Target.create({ + core.Target.create({ database: databaseWithSuffix("tada-analytics"), schema: schemaWithSuffix("df_integration_test"), name: "sample_data" @@ -599,7 +600,7 @@ suite("examples", () => { // Check Assertion with tags const exampleAssertionWithTags = graph.assertions.find( - (a: dataform.IAssertion) => + (a: core.Assertion) => targetAsReadableString(a.target) === dotJoined( databaseWithSuffix("tada-analytics"), @@ -614,7 +615,7 @@ suite("examples", () => { // Check example operations file const exampleOperations = graph.operations.find( - (o: dataform.IOperation) => + (o: core.Operation) => targetAsReadableString(o.target) === dotJoined( databaseWithSuffix("tada-analytics"), @@ -637,17 +638,17 @@ suite("examples", () => { )}\`\n` ]); expect(exampleOperations.dependencyTargets).eql([ - dataform.Target.create({ + core.Target.create({ database: databaseWithSuffix("tada-analytics"), schema: schemaWithSuffix("override_schema"), name: "override_schema_example" }), - dataform.Target.create({ + core.Target.create({ database: databaseWithSuffix("override_database"), schema: schemaWithSuffix("df_integration_test"), name: "override_database_example" }), - dataform.Target.create({ + core.Target.create({ database: databaseWithSuffix("tada-analytics"), schema: schemaWithSuffix("df_integration_test"), name: "sample_data" @@ -657,7 +658,7 @@ suite("examples", () => { // Check example operation with output. const exampleOperationWithOutput = graph.operations.find( - (o: dataform.IOperation) => + (o: core.Operation) => targetAsReadableString(o.target) === dotJoined( databaseWithSuffix("tada-analytics"), @@ -677,7 +678,7 @@ suite("examples", () => { )}\` AS (SELECT * FROM \`some_database_name.some_external_schema_name.very_important_external_table\`)` ]); expect(exampleOperationWithOutput.dependencyTargets).eql([ - dataform.Target.create({ + core.Target.create({ database: "some_database_name", schema: "some_external_schema_name", name: "very_important_external_table" @@ -697,7 +698,7 @@ suite("examples", () => { // Check Operation with tags const exampleOperationsWithTags = graph.operations.find( - (o: dataform.IOperation) => + (o: core.Operation) => targetAsReadableString(o.target) === dotJoined( databaseWithSuffix("tada-analytics"), @@ -714,7 +715,7 @@ suite("examples", () => { "some_database_name.some_external_schema_name.very_important_external_table" ); expect(exampleDeclaration.target).eql( - dataform.Target.create({ + core.Target.create({ database: "some_database_name", schema: "some_external_schema_name", name: "very_important_external_table" @@ -743,7 +744,7 @@ suite("examples", () => { // Check double backslashes don't get converted to singular. const exampleDoubleBackslash = graph.tables.find( - (t: dataform.ITable) => + (t: core.Target) => targetAsReadableString(t.target) === dotJoined( databaseWithSuffix("tada-analytics"), @@ -766,11 +767,11 @@ suite("examples", () => { test("backwards_compatibility", async () => { const graph = await compile({ projectDir: "examples/backwards_compatibility" }); - const tableNames = graph.tables.map((t: dataform.ITable) => t.target.name); + const tableNames = graph.tables.map((t: core.Target) => t.target.name); // Make sure it compiles. expect(tableNames).includes("example"); - const example = graph.tables.filter((t: dataform.ITable) => t.target.name === "example")[0]; + const example = graph.tables.filter((t: core.Target) => t.target.name === "example")[0]; expect(example.type).equals("table"); expect(example.query.trim()).equals("select 1 as foo_bar"); diff --git a/tests/cli/cli.spec.ts b/tests/cli/cli.spec.ts index bc13399d1..4bf61dac6 100644 --- a/tests/cli/cli.spec.ts +++ b/tests/cli/cli.spec.ts @@ -52,7 +52,7 @@ suite(__filename, () => { filePath, ` config { type: "table" } -select 1 as \${dataform.projectConfig.vars.testVar2} +select 1 as \${core.ProjectConfig.vars.testVar2} ` ); diff --git a/tests/core/core.spec.ts b/tests/core/core.spec.ts index 9254475a3..dafe62129 100644 --- a/tests/core/core.spec.ts +++ b/tests/core/core.spec.ts @@ -1,47 +1,48 @@ -import {expect} from "chai"; +import { expect } from "chai"; import * as fs from "fs-extra"; import * as path from "path"; import * as compilers from "df/core/compilers"; -import {Session} from "df/core/session"; -import {targetAsReadableString} from "df/core/targets"; -import {dataform} from "df/protos/ts"; -import {suite, test} from "df/testing"; -import {asPlainObject} from "df/tests/utils"; +import { Session } from "df/core/session"; +import { targetAsReadableString } from "df/core/targets"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; +import { suite, test } from "df/testing"; +import { asPlainObject } from "df/tests/utils"; class TestConfigs { - public static redshift: dataform.IProjectConfig = { + public static redshift: core.ProjectConfig = { warehouse: "redshift", defaultSchema: "schema" }; - public static redshiftWithSuffix: dataform.IProjectConfig = { + public static redshiftWithSuffix: core.ProjectConfig = { ...TestConfigs.redshift, schemaSuffix: "suffix" }; - public static redshiftWithPrefix: dataform.IProjectConfig = { + public static redshiftWithPrefix: core.ProjectConfig = { ...TestConfigs.redshift, tablePrefix: "prefix" }; - public static bigquery: dataform.IProjectConfig = { + public static bigquery: core.ProjectConfig = { warehouse: "bigquery", defaultSchema: "schema", defaultLocation: "US" }; - public static bigqueryWithDatabase: dataform.IProjectConfig = { + public static bigqueryWithDatabase: core.ProjectConfig = { ...TestConfigs.bigquery, - defaultDatabase: "test-db", + defaultDatabase: "test-db" }; - public static bigqueryWithDatabaseAndSuffix: dataform.IProjectConfig = { + public static bigqueryWithDatabaseAndSuffix: core.ProjectConfig = { ...TestConfigs.bigqueryWithDatabase, - databaseSuffix: "suffix", + databaseSuffix: "suffix" }; - public static snowflake: dataform.IProjectConfig = { + public static snowflake: core.ProjectConfig = { warehouse: "snowflake", defaultSchema: "schema" }; @@ -74,7 +75,7 @@ suite("@dataform/core", () => { .publish("example", { type: "table", schema: "schema2", - dependencies: [{schema: "schema", name: "example"}], + dependencies: [{ schema: "schema", name: "example" }], description: "test description" }) .query(_ => "select 1 as test") @@ -95,7 +96,7 @@ suite("@dataform/core", () => { table => targetAsReadableString(table.target) === `schema.${tableWithPrefix("example")}` ); expect(t.type).equals("table"); - expect(t.enumType).equals(dataform.TableType.TABLE); + expect(t.enumType).equals(core.TargetType.TABLE); expect(t.actionDescriptor).eql({ description: "this is a table", columns: [ @@ -117,7 +118,7 @@ suite("@dataform/core", () => { table => targetAsReadableString(table.target) === `schema2.${tableWithPrefix("example")}` ); expect(t2.type).equals("table"); - expect(t2.enumType).equals(dataform.TableType.TABLE); + expect(t2.enumType).equals(core.TargetType.TABLE); expect(t2.actionDescriptor).eql({ description: "test description" }); @@ -126,7 +127,7 @@ suite("@dataform/core", () => { expect(t2.dependencyTargets.map(dependency => targetAsReadableString(dependency))).includes( `schema.${tableWithPrefix("example")}` ); - expect(dataform.Target.create(t2.canonicalTarget).toJSON()).deep.equals({ + expect(core.Target.create(t2.canonicalTarget).toJSON()).deep.equals({ name: "example", schema: "schema2" }); @@ -138,7 +139,7 @@ suite("@dataform/core", () => { expect((t3.target.name = `${tableWithPrefix("my_table")}`)); expect((t3.target.schema = "test_schema")); expect(t3.type).equals("table"); - expect(t3.enumType).equals(dataform.TableType.TABLE); + expect(t3.enumType).equals(core.TargetType.TABLE); }); }); @@ -163,7 +164,7 @@ suite("@dataform/core", () => { .publish("example", { type: "table", schema: "schema2", - dependencies: [{schema: "schema", name: "example"}], + dependencies: [{ schema: "schema", name: "example" }], description: "test description" }) .query(_ => "select 1 as test") @@ -184,7 +185,7 @@ suite("@dataform/core", () => { table => targetAsReadableString(table.target) === `${schemaWithSuffix("schema")}.example` ); expect(t.type).equals("table"); - expect(t.enumType).equals(dataform.TableType.TABLE); + expect(t.enumType).equals(core.TargetType.TABLE); expect(t.actionDescriptor).eql({ description: "this is a table", columns: [ @@ -201,7 +202,7 @@ suite("@dataform/core", () => { table => targetAsReadableString(table.target) === `${schemaWithSuffix("schema2")}.example` ); expect(t2.type).equals("table"); - expect(t2.enumType).equals(dataform.TableType.TABLE); + expect(t2.enumType).equals(core.TargetType.TABLE); expect(t.actionDescriptor).eql({ description: "this is a table", columns: [ @@ -224,7 +225,7 @@ suite("@dataform/core", () => { expect((t3.target.name = "my_table")); expect((t3.target.schema = schemaWithSuffix("test_schema"))); expect(t3.type).equals("table"); - expect(t3.enumType).equals(dataform.TableType.TABLE); + expect(t3.enumType).equals(core.TargetType.TABLE); }); }); @@ -252,7 +253,7 @@ suite("@dataform/core", () => { disabled: false, fileName: path.basename(__filename), type: "incremental", - enumType: "INCREMENTAL", + enumType: "INCREMENTAL" } ]); }); @@ -273,7 +274,7 @@ suite("@dataform/core", () => { const session = new Session(path.dirname(__filename), overrideConfig, originalConfig); session.publish("dataset"); session.assert("assertion"); - session.declare({name: "declaration"}); + session.declare({ name: "declaration" }); session.operate("operation"); const graph = session.compile(); @@ -283,7 +284,7 @@ suite("@dataform/core", () => { ...graph.assertions, ...graph.declarations, ...graph.operations - ].map(action => dataform.Target.create(action.canonicalTarget).toJSON()) + ].map(action => core.Target.create(action.canonicalTarget).toJSON()) ).deep.equals([ { database: "database", @@ -315,7 +316,7 @@ suite("@dataform/core", () => { defaultDatabase: "database", defaultLocation: "US" }; - const overrideConfig = {...originalConfig, defaultSchema: "otherschema"}; + const overrideConfig = { ...originalConfig, defaultSchema: "otherschema" }; const session = new Session(path.dirname(__filename), overrideConfig, originalConfig); session .publish("view", { @@ -327,9 +328,11 @@ suite("@dataform/core", () => { schema: "schema" }); const graph = session.compile(); - expect(graph.graphErrors.compilationErrors.map(error => error.message)).deep.equals(Array(2).fill( - 'Duplicate canonical target detected. Canonical targets must be unique across tables, declarations, assertions, and operations:\n"{"schema":"schema","name":"view","database":"database"}"' - )); + expect(graph.graphErrors.compilationErrors.map(error => error.message)).deep.equals( + Array(2).fill( + 'Duplicate canonical target detected. Canonical targets must be unique across tables, declarations, assertions, and operations:\n"{"schema":"schema","name":"view","database":"database"}"' + ) + ); }); test("validation_type_incremental", () => { @@ -349,9 +352,9 @@ suite("@dataform/core", () => { test("validation_type", () => { const sessionSuccess = new Session(path.dirname(__filename), TestConfigs.redshift); - sessionSuccess.publish("exampleSuccess1", {type: "table"}); - sessionSuccess.publish("exampleSuccess2", {type: "view"}); - sessionSuccess.publish("exampleSuccess3", {type: "incremental"}).where("test"); + sessionSuccess.publish("exampleSuccess1", { type: "table" }); + sessionSuccess.publish("exampleSuccess2", { type: "view" }); + sessionSuccess.publish("exampleSuccess3", { type: "incremental" }).where("test"); const cgSuccess = sessionSuccess.compile(); expect(cgSuccess.graphErrors.compilationErrors).deep.equals([]); @@ -363,7 +366,7 @@ suite("@dataform/core", () => { { fileName: "core.spec.js", actionName: "schema.exampleFail", - actionTarget: {schema: "schema", name: "exampleFail"}, + actionTarget: { schema: "schema", name: "exampleFail" }, message: 'Wrong type of table detected. Should only use predefined types: "table" | "view" | "incremental" | "inline"' } @@ -462,15 +465,15 @@ suite("@dataform/core", () => { }); const expectedResults = [ - {name: "schema.example_absent_distKey", message: `Property "distKey" is not defined`}, - {name: "schema.example_absent_distStyle", message: `Property "distStyle" is not defined`}, + { name: "schema.example_absent_distKey", message: `Property "distKey" is not defined` }, + { name: "schema.example_absent_distStyle", message: `Property "distStyle" is not defined` }, { name: "schema.example_wrong_distStyle", message: `Wrong value of "distStyle" property. Should only use predefined values: "even" | "key" | "all"` }, - {name: "schema.example_absent_sortKeys", message: `Property "sortKeys" is not defined`}, - {name: "schema.example_empty_sortKeys", message: `Property "sortKeys" is not defined`}, - {name: "schema.example_absent_sortStyle", message: `Property "sortStyle" is not defined`}, + { name: "schema.example_absent_sortKeys", message: `Property "sortKeys" is not defined` }, + { name: "schema.example_empty_sortKeys", message: `Property "sortKeys" is not defined` }, + { name: "schema.example_absent_sortStyle", message: `Property "sortStyle" is not defined` }, { name: "schema.example_wrong_sortStyle", message: `Wrong value of "sortStyle" property. Should only use predefined values: "compound" | "interleaved"` @@ -545,7 +548,7 @@ suite("@dataform/core", () => { const graph = session.compile(); expect( - graph.graphErrors.compilationErrors.map(({message, actionName}) => ({ + graph.graphErrors.compilationErrors.map(({ message, actionName }) => ({ message, actionName })) @@ -610,7 +613,7 @@ suite("@dataform/core", () => { const graph = session.compile(); expect( - graph.graphErrors.compilationErrors.map(({message, actionName}) => ({ + graph.graphErrors.compilationErrors.map(({ message, actionName }) => ({ message, actionName })) @@ -661,7 +664,7 @@ suite("@dataform/core", () => { const graph = session.compile(); expect(graph.tables[0].bigquery).to.deep.equals( - dataform.BigQueryOptions.create({ + profiles.BigQueryOptions.create({ clusterBy: ["some_column", "some_other_column"], partitionBy: "some_partition", partitionExpirationDays: 7, @@ -670,7 +673,7 @@ suite("@dataform/core", () => { ); expect(graph.tables[1].materialized).to.equals(true); expect(graph.tables[2].bigquery).to.deep.equals( - dataform.BigQueryOptions.create({ + profiles.BigQueryOptions.create({ additionalOptions: { friendlyName: "name" } @@ -681,7 +684,7 @@ suite("@dataform/core", () => { test("validation_type_inline", () => { const session = new Session(path.dirname(__filename), TestConfigs.redshift); - session.publish("a", {type: "table"}).query(_ => "select 1 as test"); + session.publish("a", { type: "table" }).query(_ => "select 1 as test"); session .publish("b", { type: "inline", @@ -691,7 +694,7 @@ suite("@dataform/core", () => { sortKeys: ["column1", "column2"], sortStyle: "compound" }, - columns: {test: "test description b"}, + columns: { test: "test description b" }, disabled: true }) .preOps(_ => ["pre_op_b"]) @@ -701,7 +704,7 @@ suite("@dataform/core", () => { session .publish("c", { type: "table", - columns: {test: "test description c"} + columns: { test: "test description c" } }) .preOps(_ => ["pre_op_c"]) .postOps(_ => ["post_op_c"]) @@ -713,7 +716,7 @@ suite("@dataform/core", () => { table => targetAsReadableString(table.target) === "schema.a" ); expect(tableA.type).equals("table"); - expect(tableA.enumType).equals(dataform.TableType.TABLE); + expect(tableA.enumType).equals(core.TargetType.TABLE); expect( tableA.dependencyTargets.map(dependency => targetAsReadableString(dependency)) ).deep.equals([]); @@ -723,7 +726,7 @@ suite("@dataform/core", () => { table => targetAsReadableString(table.target) === "schema.b" ); expect(tableB.type).equals("inline"); - expect(tableB.enumType).equals(dataform.TableType.INLINE); + expect(tableB.enumType).equals(core.TargetType.INLINE); expect( tableB.dependencyTargets.map(dependency => targetAsReadableString(dependency)) ).includes("schema.a"); @@ -753,7 +756,7 @@ suite("@dataform/core", () => { table => targetAsReadableString(table.target) === "schema.c" ); expect(tableC.type).equals("table"); - expect(tableC.enumType).equals(dataform.TableType.TABLE); + expect(tableC.enumType).equals(core.TargetType.TABLE); expect( tableC.dependencyTargets.map(dependency => targetAsReadableString(dependency)) ).includes("schema.a"); @@ -832,7 +835,7 @@ suite("@dataform/core", () => { session.publish(`a`, _ => "select 1 as test"); session.publish(`b`, ctx => `select * from ${ctx.ref("a")}`); session.publish(`c`, ctx => `select * from ${ctx.ref(undefined)}`); - session.publish(`d`, ctx => `select * from ${ctx.ref({schema: "schema", name: "a"})}`); + session.publish(`d`, ctx => `select * from ${ctx.ref({ schema: "schema", name: "a" })}`); session.publish(`g`, ctx => `select * from ${ctx.ref("schema", "a")}`); session.publish(`h`, ctx => `select * from ${ctx.ref(["schema", "a"])}`); session @@ -909,70 +912,84 @@ suite("@dataform/core", () => { ); [ - {testConfig: TestConfigs.redshift, target: 'schema'}, - {testConfig: TestConfigs.redshiftWithSuffix, target: 'schema_suffix'}, - ].forEach(({testConfig, target}) => { + { testConfig: TestConfigs.redshift, target: "schema" }, + { testConfig: TestConfigs.redshiftWithSuffix, target: "schema_suffix" } + ].forEach(({ testConfig, target }) => { test(`schema/suffix: "${target}"`, () => { const session = new Session(path.dirname(__filename), testConfig); - session.publish("test", {type: "table"}) - .query(ctx => ctx.schema()); + session.publish("test", { type: "table" }).query(ctx => ctx.schema()); const graph = session.compile(); - const testTable = graph.tables - .find(table => targetAsReadableString(table.target) === `${target}.test`); + const testTable = graph.tables.find( + table => targetAsReadableString(table.target) === `${target}.test` + ); - expect(testTable.query).deep.equals(target) + expect(testTable.query).deep.equals(target); }); }); [ - {testConfig: TestConfigs.redshift, target: 'schema.test', name: 'test'}, - {testConfig: TestConfigs.redshiftWithPrefix, target: 'schema.prefix_test', name: 'prefix_test'}, - ].forEach(({testConfig, target, name}) => { + { testConfig: TestConfigs.redshift, target: "schema.test", name: "test" }, + { + testConfig: TestConfigs.redshiftWithPrefix, + target: "schema.prefix_test", + name: "prefix_test" + } + ].forEach(({ testConfig, target, name }) => { test(`name/prefix: "${target}"`, () => { const session = new Session(path.dirname(__filename), testConfig); - session.publish("test", {type: "table"}) - .query(ctx => ctx.name()); + session.publish("test", { type: "table" }).query(ctx => ctx.name()); const graph = session.compile(); - const testTable = graph.tables - .find(table => targetAsReadableString(table.target) === target); + const testTable = graph.tables.find( + table => targetAsReadableString(table.target) === target + ); - expect(testTable.query).deep.equals(name) + expect(testTable.query).deep.equals(name); }); }); [ - {testConfig: TestConfigs.bigqueryWithDatabase, target: 'test-db.schema.test', database: 'test-db'}, - {testConfig: TestConfigs.bigqueryWithDatabaseAndSuffix, target: 'test-db_suffix.schema.test', database: 'test-db_suffix'}, - ].forEach(({testConfig, target, database}) => { + { + testConfig: TestConfigs.bigqueryWithDatabase, + target: "test-db.schema.test", + database: "test-db" + }, + { + testConfig: TestConfigs.bigqueryWithDatabaseAndSuffix, + target: "test-db_suffix.schema.test", + database: "test-db_suffix" + } + ].forEach(({ testConfig, target, database }) => { test(`database/suffix: "${target}"`, () => { const session = new Session(path.dirname(__filename), testConfig); - session.publish("test", {type: "table"}) - .query(ctx => ctx.database()); + session.publish("test", { type: "table" }).query(ctx => ctx.database()); const graph = session.compile(); - const testTable = graph.tables - .find(table => targetAsReadableString(table.target) === target); + const testTable = graph.tables.find( + table => targetAsReadableString(table.target) === target + ); - expect(testTable.query).deep.equals(database) + expect(testTable.query).deep.equals(database); }); }); test(`database fails when undefined`, () => { const session = new Session(path.dirname(__filename), TestConfigs.redshift); - session.publish("test", {type: "table"}).query(ctx => ctx.database()); + session.publish("test", { type: "table" }).query(ctx => ctx.database()); const graph = session.compile(); - const testTable = graph.tables - .find(table => targetAsReadableString(table.target) === 'schema.test'); + const testTable = graph.tables.find( + table => targetAsReadableString(table.target) === "schema.test" + ); - expect(graph.graphErrors.compilationErrors[0].message).deep - .equals("Warehouse does not support multiple databases"); + expect(graph.graphErrors.compilationErrors[0].message).deep.equals( + "Warehouse does not support multiple databases" + ); expect(testTable.query).deep.equals(""); }); }); @@ -1021,9 +1038,9 @@ suite("@dataform/core", () => { }); [ - {testConfig: TestConfigs.redshift, finalizedSchema: 'schema'}, - {testConfig: TestConfigs.redshiftWithSuffix, finalizedSchema: 'schema_suffix'}, - ].forEach(({testConfig, finalizedSchema}) => { + { testConfig: TestConfigs.redshift, finalizedSchema: "schema" }, + { testConfig: TestConfigs.redshiftWithSuffix, finalizedSchema: "schema_suffix" } + ].forEach(({ testConfig, finalizedSchema }) => { test(`schema with suffix: "${finalizedSchema}"`, () => { const session = new Session(path.dirname(__filename), testConfig); session.operate("operate-1", ctx => ctx.schema()).hasOutput(true); @@ -1035,9 +1052,9 @@ suite("@dataform/core", () => { }); [ - {testConfig: TestConfigs.redshift, finalizedName: 'operate-1'}, - {testConfig: TestConfigs.redshiftWithPrefix, finalizedName: 'prefix_operate-1'}, - ].forEach(({testConfig, finalizedName}) => { + { testConfig: TestConfigs.redshift, finalizedName: "operate-1" }, + { testConfig: TestConfigs.redshiftWithPrefix, finalizedName: "prefix_operate-1" } + ].forEach(({ testConfig, finalizedName }) => { test(`name with prefix: "${finalizedName}"`, () => { const session = new Session(path.dirname(__filename), testConfig); session.operate("operate-1", ctx => ctx.name()).hasOutput(true); @@ -1049,9 +1066,9 @@ suite("@dataform/core", () => { }); [ - {testConfig: TestConfigs.bigqueryWithDatabase, finalizedDatabase: 'test-db'}, - {testConfig: TestConfigs.bigqueryWithDatabaseAndSuffix, finalizedDatabase: 'test-db_suffix'}, - ].forEach(({testConfig, finalizedDatabase}) => { + { testConfig: TestConfigs.bigqueryWithDatabase, finalizedDatabase: "test-db" }, + { testConfig: TestConfigs.bigqueryWithDatabaseAndSuffix, finalizedDatabase: "test-db_suffix" } + ].forEach(({ testConfig, finalizedDatabase }) => { test(`database with suffix: "${finalizedDatabase}"`, () => { const session = new Session(path.dirname(__filename), testConfig); session.operate("operate-1", ctx => ctx.database()).hasOutput(true); @@ -1069,8 +1086,9 @@ suite("@dataform/core", () => { const graph = session.compile(); - expect(graph.graphErrors.compilationErrors[0].message).deep - .equals("Warehouse does not support multiple databases"); + expect(graph.graphErrors.compilationErrors[0].message).deep.equals( + "Warehouse does not support multiple databases" + ); expect(JSON.stringify(graph.operations[0].queries)).deep.equals('[""]'); }); }); @@ -1114,34 +1132,34 @@ suite("@dataform/core", () => { test("duplicate actions in compiled graph", () => { const session = new Session(path.dirname(__filename), TestConfigs.redshift); - session.publish("a") + session.publish("a"); session.publish("a"); session.publish("b"); // unique action - session.publish("c") + session.publish("c"); - session.operate("a") - session.operate("d") // unique action - session.operate("e") // unique action + session.operate("a"); + session.operate("d"); // unique action + session.operate("e"); // unique action - session.declare({name: "a"}) - session.declare({name: "f"}) // unique action - session.declare({name: "g"}) + session.declare({ name: "a" }); + session.declare({ name: "f" }); // unique action + session.declare({ name: "g" }); - session.assert("c") - session.assert("g") + session.assert("c"); + session.assert("g"); const cGraph = session.compile(); expect( [].concat(cGraph.tables, cGraph.assertions, cGraph.operations, cGraph.declarations).length - ).equals(4) + ).equals(4); }); test("same action names in different schemas (ambiguity)", () => { const session = new Session(path.dirname(__filename), TestConfigs.redshift); - session.publish("a", {schema: "foo"}); - session.publish("a", {schema: "bar"}); - session.publish("b", {schema: "foo"}).dependencies("a"); + session.publish("a", { schema: "foo" }); + session.publish("a", { schema: "bar" }); + session.publish("b", { schema: "foo" }).dependencies("a"); const cGraph = session.compile(); expect( cGraph.graphErrors.compilationErrors.filter(item => @@ -1154,8 +1172,8 @@ suite("@dataform/core", () => { test("same action name in same schema", () => { const session = new Session(path.dirname(__filename), TestConfigs.redshift); - session.publish("a", {schema: "schema2"}).dependencies("b"); - session.publish("a", {schema: "schema2"}); + session.publish("a", { schema: "schema2" }).dependencies("b"); + session.publish("a", { schema: "schema2" }); session.publish("b"); const cGraph = session.compile(); expect( @@ -1168,8 +1186,8 @@ suite("@dataform/core", () => { test("same action names in different schemas", () => { const session = new Session(path.dirname(__filename), TestConfigs.redshift); session.publish("b"); - session.publish("a", {schema: "schema1"}).dependencies("b"); - session.publish("a", {schema: "schema2"}); + session.publish("a", { schema: "schema1" }).dependencies("b"); + session.publish("a", { schema: "schema2" }); const cGraph = session.compile(); expect(cGraph.graphErrors.compilationErrors).deep.equals([]); }); @@ -1190,11 +1208,11 @@ suite("@dataform/core", () => { test("defaultLocation must be set in BigQuery", () => { const session = new Session(path.dirname(__filename), { warehouse: "bigquery", - defaultSchema: "schema", + defaultSchema: "schema" }); const graph = session.compile(); expect(graph.graphErrors.compilationErrors.map(error => error.message)).deep.equals([ - "A defaultLocation is required for BigQuery. This can be configured in dataform.json.", + "A defaultLocation is required for BigQuery. This can be configured in dataform.json." ]); }); @@ -1208,8 +1226,8 @@ suite("@dataform/core", () => { str_var: "str" } } as any); - - expect(() => { + + expect(() => { sessionFail.compile(); }).to.throw("Custom variables defined in dataform.json can only be strings."); @@ -1265,7 +1283,7 @@ suite("@dataform/core", () => { select 1 as test from \\\`x\\\``.trim(); - const {sql, js} = compilers.extractJsBlocks(TEST_SQL_FILE); + const { sql, js } = compilers.extractJsBlocks(TEST_SQL_FILE); expect(sql).equals(EXPECTED_SQL); expect(js).equals(EXPECTED_JS); }); @@ -1348,9 +1366,9 @@ select '\${\`bar\`}' suite("assert", () => { [ - {testConfig: TestConfigs.redshift, assertion: 'schema'}, - {testConfig: TestConfigs.redshiftWithSuffix, assertion: 'schema_suffix'}, - ].forEach(({testConfig, assertion}) => { + { testConfig: TestConfigs.redshift, assertion: "schema" }, + { testConfig: TestConfigs.redshiftWithSuffix, assertion: "schema_suffix" } + ].forEach(({ testConfig, assertion }) => { test(`schema: ${assertion}`, () => { const session = new Session(path.dirname(__filename), testConfig); @@ -1363,9 +1381,9 @@ select '\${\`bar\`}' }); [ - {testConfig: TestConfigs.redshift, finalizedName: 'name'}, - {testConfig: TestConfigs.redshiftWithPrefix, finalizedName: 'prefix_name'}, - ].forEach(({testConfig, finalizedName}) => { + { testConfig: TestConfigs.redshift, finalizedName: "name" }, + { testConfig: TestConfigs.redshiftWithPrefix, finalizedName: "prefix_name" } + ].forEach(({ testConfig, finalizedName }) => { test(`name: ${finalizedName}`, () => { const session = new Session(path.dirname(__filename), testConfig); @@ -1378,11 +1396,14 @@ select '\${\`bar\`}' }); [ - {testConfig: TestConfigs.bigqueryWithDatabase, finalizedDatabase: 'test-db'}, - {testConfig: TestConfigs.bigqueryWithDatabaseAndSuffix, finalizedDatabase: 'test-db_suffix'}, - ].forEach(({testConfig, finalizedDatabase}) => { + { testConfig: TestConfigs.bigqueryWithDatabase, finalizedDatabase: "test-db" }, + { testConfig: TestConfigs.bigqueryWithDatabaseAndSuffix, finalizedDatabase: "test-db_suffix" } + ].forEach(({ testConfig, finalizedDatabase }) => { test(`database: ${finalizedDatabase}`, () => { - const session = new Session(path.dirname(__filename), {...testConfig, defaultDatabase: 'test-db'}); + const session = new Session(path.dirname(__filename), { + ...testConfig, + defaultDatabase: "test-db" + }); session.assert("database", ctx => ctx.database()); @@ -1399,8 +1420,9 @@ select '\${\`bar\`}' const graph = session.compile(); - expect(graph.graphErrors.compilationErrors[0].message).deep - .equals("Warehouse does not support multiple databases"); + expect(graph.graphErrors.compilationErrors[0].message).deep.equals( + "Warehouse does not support multiple databases" + ); expect(JSON.stringify(graph.assertions[0].query)).to.deep.equal('""'); }); }); diff --git a/tests/integration/bigquery.spec.ts b/tests/integration/bigquery.spec.ts index e8eda349d..1a1384ea8 100644 --- a/tests/integration/bigquery.spec.ts +++ b/tests/integration/bigquery.spec.ts @@ -7,7 +7,8 @@ import { BigQueryDbAdapter } from "df/api/dbadapters/bigquery"; import * as adapters from "df/core/adapters"; import { BigQueryAdapter } from "df/core/adapters/bigquery"; import { targetAsReadableString } from "df/core/targets"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; import { suite, test } from "df/testing"; import { compile, dropAllTables, getTableRows, keyBy } from "df/tests/integration/utils"; @@ -267,7 +268,7 @@ suite("@dataform/integration/bigquery", { parallel: true }, ({ before, after }) const view = keyBy(compiledGraph.tables, t => targetAsReadableString(t.target))[ "dataform-integration-tests.df_integration_test_eu_evaluate.example_view" ]; - let evaluations = await dbadapter.evaluate(dataform.Table.create(view)); + let evaluations = await dbadapter.evaluate(core.Target.create(view)); expect(evaluations.length).to.equal(1); expect(evaluations[0].status).to.equal( dataform.QueryEvaluation.QueryEvaluationStatus.SUCCESS @@ -276,7 +277,7 @@ suite("@dataform/integration/bigquery", { parallel: true }, ({ before, after }) const materializedView = keyBy(compiledGraph.tables, t => targetAsReadableString(t.target))[ "dataform-integration-tests.df_integration_test_eu_evaluate.example_materialized_view" ]; - evaluations = await dbadapter.evaluate(dataform.Table.create(materializedView)); + evaluations = await dbadapter.evaluate(core.Target.create(materializedView)); expect(evaluations.length).to.equal(1); expect(evaluations[0].status).to.equal( dataform.QueryEvaluation.QueryEvaluationStatus.SUCCESS @@ -285,7 +286,7 @@ suite("@dataform/integration/bigquery", { parallel: true }, ({ before, after }) const table = keyBy(compiledGraph.tables, t => targetAsReadableString(t.target))[ "dataform-integration-tests.df_integration_test_eu_evaluate.example_table" ]; - evaluations = await dbadapter.evaluate(dataform.Table.create(table)); + evaluations = await dbadapter.evaluate(core.Target.create(table)); expect(evaluations.length).to.equal(1); expect(evaluations[0].status).to.equal( dataform.QueryEvaluation.QueryEvaluationStatus.SUCCESS @@ -294,7 +295,7 @@ suite("@dataform/integration/bigquery", { parallel: true }, ({ before, after }) const operation = keyBy(compiledGraph.operations, t => targetAsReadableString(t.target))[ "dataform-integration-tests.df_integration_test_eu_evaluate.example_operation" ]; - evaluations = await dbadapter.evaluate(dataform.Operation.create(operation)); + evaluations = await dbadapter.evaluate(core.Operation.create(operation)); expect(evaluations.length).to.equal(1); expect(evaluations[0].status).to.equal( dataform.QueryEvaluation.QueryEvaluationStatus.SUCCESS @@ -303,7 +304,7 @@ suite("@dataform/integration/bigquery", { parallel: true }, ({ before, after }) const assertion = keyBy(compiledGraph.assertions, t => targetAsReadableString(t.target))[ "dataform-integration-tests.df_integration_test_eu_assertions_evaluate.example_assertion_pass" ]; - evaluations = await dbadapter.evaluate(dataform.Assertion.create(assertion)); + evaluations = await dbadapter.evaluate(core.Assertion.create(assertion)); expect(evaluations.length).to.equal(1); expect(evaluations[0].status).to.equal( dataform.QueryEvaluation.QueryEvaluationStatus.SUCCESS @@ -312,7 +313,7 @@ suite("@dataform/integration/bigquery", { parallel: true }, ({ before, after }) const incremental = keyBy(compiledGraph.tables, t => targetAsReadableString(t.target))[ "dataform-integration-tests.df_integration_test_eu_evaluate.example_incremental" ]; - evaluations = await dbadapter.evaluate(dataform.Table.create(incremental)); + evaluations = await dbadapter.evaluate(core.Target.create(incremental)); expect(evaluations.length).to.equal(2); expect(evaluations[0].status).to.equal( dataform.QueryEvaluation.QueryEvaluationStatus.SUCCESS @@ -330,8 +331,8 @@ suite("@dataform/integration/bigquery", { parallel: true }, ({ before, after }) }); let evaluations = await dbadapter.evaluate( - dataform.Table.create({ - enumType: dataform.TableType.TABLE, + core.Target.create({ + enumType: core.TargetType.TABLE, preOps: ["declare var string; set var = 'val';"], query: "select var as col;", target: target("example_valid_variable") @@ -343,8 +344,8 @@ suite("@dataform/integration/bigquery", { parallel: true }, ({ before, after }) ); evaluations = await dbadapter.evaluate( - dataform.Table.create({ - enumType: dataform.TableType.TABLE, + core.Target.create({ + enumType: core.TargetType.TABLE, query: "select var as col;", target: target("example_invalid_variable") }) @@ -357,8 +358,8 @@ suite("@dataform/integration/bigquery", { parallel: true }, ({ before, after }) test("invalid table fails validation and error parsed correctly", async () => { const evaluations = await dbadapter.evaluate( - dataform.Table.create({ - enumType: dataform.TableType.TABLE, + core.Target.create({ + enumType: core.TargetType.TABLE, query: "selects\n1 as x", target: { name: "EXAMPLE_ILLEGAL_TABLE", @@ -379,8 +380,8 @@ suite("@dataform/integration/bigquery", { parallel: true }, ({ before, after }) suite("publish tasks", { parallel: true }, async () => { test("incremental pre and post ops, core version <= 1.4.8", async () => { // 1.4.8 used `preOps` and `postOps` instead of `incrementalPreOps` and `incrementalPostOps`. - const table: dataform.ITable = { - enumType: dataform.TableType.INCREMENTAL, + const table: core.Target = { + enumType: core.TargetType.INCREMENTAL, query: "query", preOps: ["preop task1", "preop task2"], incrementalQuery: "", diff --git a/tests/integration/bigquery_project/definitions/sample_data.sqlx b/tests/integration/bigquery_project/definitions/sample_data.sqlx index fdd52e59c..af8b58b5b 100644 --- a/tests/integration/bigquery_project/definitions/sample_data.sqlx +++ b/tests/integration/bigquery_project/definitions/sample_data.sqlx @@ -3,6 +3,6 @@ config { hermetic: false } -select ${when(dataform.projectConfig.vars.fooVar === "bar", "1", "2")} as val union all +select ${when(core.ProjectConfig.vars.fooVar === "bar", "1", "2")} as val union all select 2 as val union all -select ${when(dataform.projectConfig.warehouse === "bigquery", "3", "2")} as val +select ${when(core.ProjectConfig.warehouse === "bigquery", "3", "2")} as val diff --git a/tests/integration/postgres.spec.ts b/tests/integration/postgres.spec.ts index 74e3ba529..6bc446cbb 100644 --- a/tests/integration/postgres.spec.ts +++ b/tests/integration/postgres.spec.ts @@ -5,7 +5,8 @@ import * as dbadapters from "df/api/dbadapters"; import * as adapters from "df/core/adapters"; import { RedshiftAdapter } from "df/core/adapters/redshift"; import { targetAsReadableString } from "df/core/targets"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; import { suite, test } from "df/testing"; import { compile, getTableRows, keyBy } from "df/tests/integration/utils"; import { PostgresFixture } from "df/tools/postgres/postgres_fixture"; @@ -239,7 +240,7 @@ suite("@dataform/integration/postgres", { parallel: true }, ({ before, after }) const view = keyBy(compiledGraph.tables, t => targetAsReadableString(t.target))[ "df_integration_test_evaluate.example_view" ]; - let evaluations = await dbadapter.evaluate(dataform.Table.create(view)); + let evaluations = await dbadapter.evaluate(core.Target.create(view)); expect(evaluations.length).to.equal(1); expect(evaluations[0].status).to.equal( dataform.QueryEvaluation.QueryEvaluationStatus.SUCCESS @@ -248,7 +249,7 @@ suite("@dataform/integration/postgres", { parallel: true }, ({ before, after }) const table = keyBy(compiledGraph.tables, t => targetAsReadableString(t.target))[ "df_integration_test_evaluate.example_table" ]; - evaluations = await dbadapter.evaluate(dataform.Table.create(table)); + evaluations = await dbadapter.evaluate(core.Target.create(table)); expect(evaluations.length).to.equal(1); expect(evaluations[0].status).to.equal( dataform.QueryEvaluation.QueryEvaluationStatus.SUCCESS @@ -257,7 +258,7 @@ suite("@dataform/integration/postgres", { parallel: true }, ({ before, after }) const assertion = keyBy(compiledGraph.assertions, t => targetAsReadableString(t.target))[ "df_integration_test_assertions_evaluate.example_assertion_pass" ]; - evaluations = await dbadapter.evaluate(dataform.Assertion.create(assertion)); + evaluations = await dbadapter.evaluate(core.Assertion.create(assertion)); expect(evaluations.length).to.equal(1); expect(evaluations[0].status).to.equal( dataform.QueryEvaluation.QueryEvaluationStatus.SUCCESS @@ -266,7 +267,7 @@ suite("@dataform/integration/postgres", { parallel: true }, ({ before, after }) const incremental = keyBy(compiledGraph.tables, t => targetAsReadableString(t.target))[ "df_integration_test_evaluate.example_incremental" ]; - evaluations = await dbadapter.evaluate(dataform.Table.create(incremental)); + evaluations = await dbadapter.evaluate(core.Target.create(incremental)); expect(evaluations.length).to.equal(2); expect(evaluations[0].status).to.equal( dataform.QueryEvaluation.QueryEvaluationStatus.SUCCESS @@ -278,8 +279,8 @@ suite("@dataform/integration/postgres", { parallel: true }, ({ before, after }) test("invalid table fails validation", async () => { const evaluations = await dbadapter.evaluate( - dataform.Table.create({ - enumType: dataform.TableType.TABLE, + core.Target.create({ + enumType: core.TargetType.TABLE, query: "thisisillegal", target: { schema: "df_integration_test", @@ -298,8 +299,8 @@ suite("@dataform/integration/postgres", { parallel: true }, ({ before, after }) suite("publish tasks", async () => { test("incremental pre and post ops, core version <= 1.4.8", async () => { // 1.4.8 used `preOps` and `postOps` instead of `incrementalPreOps` and `incrementalPostOps`. - const table: dataform.ITable = { - enumType: dataform.TableType.INCREMENTAL, + const table: core.Target = { + enumType: core.TargetType.INCREMENTAL, query: "query", preOps: ["preop task1", "preop task2"], incrementalQuery: "", diff --git a/tests/integration/postgres_project/definitions/sample_data.sqlx b/tests/integration/postgres_project/definitions/sample_data.sqlx index f008e44b1..7f78e1123 100644 --- a/tests/integration/postgres_project/definitions/sample_data.sqlx +++ b/tests/integration/postgres_project/definitions/sample_data.sqlx @@ -2,6 +2,6 @@ config { type: "view" } -select ${when(dataform.projectConfig.vars.fooVar === "bar", "1", "2")} as val union all +select ${when(core.ProjectConfig.vars.fooVar === "bar", "1", "2")} as val union all select 2 as val union all -select ${when(dataform.projectConfig.warehouse === "postgres", "3", "2")} as val +select ${when(core.ProjectConfig.warehouse === "postgres", "3", "2")} as val diff --git a/tests/integration/presto.spec.ts b/tests/integration/presto.spec.ts index 30da2208b..ea809b757 100644 --- a/tests/integration/presto.spec.ts +++ b/tests/integration/presto.spec.ts @@ -3,7 +3,8 @@ import { expect } from "chai"; import * as dfapi from "df/api"; import * as dbadapters from "df/api/dbadapters"; import { targetToName } from "df/core/utils"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; import { suite, test } from "df/testing"; import { compile, keyBy } from "df/tests/integration/utils"; import { PrestoFixture } from "df/tools/presto/presto_fixture"; diff --git a/tests/integration/redshift.spec.ts b/tests/integration/redshift.spec.ts index 8a873289f..9da764b79 100644 --- a/tests/integration/redshift.spec.ts +++ b/tests/integration/redshift.spec.ts @@ -5,7 +5,8 @@ import * as dbadapters from "df/api/dbadapters"; import * as adapters from "df/core/adapters"; import { RedshiftAdapter } from "df/core/adapters/redshift"; import { targetToName } from "df/core/utils"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; import { suite, test } from "df/testing"; import { compile, getTableRows, keyBy } from "df/tests/integration/utils"; @@ -261,7 +262,7 @@ suite("@dataform/integration/redshift", { parallel: true }, ({ before, after }) const view = keyBy(compiledGraph.tables, t => targetToName(t.target))[ "df_integration_test_evaluate.example_view" ]; - let evaluations = await dbadapter.evaluate(dataform.Table.create(view)); + let evaluations = await dbadapter.evaluate(core.Target.create(view)); expect(evaluations.length).to.equal(1); expect(evaluations[0].status).to.equal( dataform.QueryEvaluation.QueryEvaluationStatus.SUCCESS @@ -270,7 +271,7 @@ suite("@dataform/integration/redshift", { parallel: true }, ({ before, after }) const table = keyBy(compiledGraph.tables, t => targetToName(t.target))[ "df_integration_test_evaluate.example_table" ]; - evaluations = await dbadapter.evaluate(dataform.Table.create(table)); + evaluations = await dbadapter.evaluate(core.Target.create(table)); expect(evaluations.length).to.equal(1); expect(evaluations[0].status).to.equal( dataform.QueryEvaluation.QueryEvaluationStatus.SUCCESS @@ -279,7 +280,7 @@ suite("@dataform/integration/redshift", { parallel: true }, ({ before, after }) const assertion = keyBy(compiledGraph.assertions, t => targetToName(t.target))[ "df_integration_test_assertions_evaluate.example_assertion_pass" ]; - evaluations = await dbadapter.evaluate(dataform.Assertion.create(assertion)); + evaluations = await dbadapter.evaluate(core.Assertion.create(assertion)); expect(evaluations.length).to.equal(1); expect(evaluations[0].status).to.equal( dataform.QueryEvaluation.QueryEvaluationStatus.SUCCESS @@ -288,7 +289,7 @@ suite("@dataform/integration/redshift", { parallel: true }, ({ before, after }) const incremental = keyBy(compiledGraph.tables, t => targetToName(t.target))[ "df_integration_test_evaluate.example_incremental" ]; - evaluations = await dbadapter.evaluate(dataform.Table.create(incremental)); + evaluations = await dbadapter.evaluate(core.Target.create(incremental)); expect(evaluations.length).to.equal(2); expect(evaluations[0].status).to.equal( dataform.QueryEvaluation.QueryEvaluationStatus.SUCCESS @@ -300,8 +301,8 @@ suite("@dataform/integration/redshift", { parallel: true }, ({ before, after }) test("invalid table fails validation", async () => { const evaluations = await dbadapter.evaluate( - dataform.Table.create({ - enumType: dataform.TableType.TABLE, + core.Target.create({ + enumType: core.TargetType.TABLE, query: "thisisillegal", target: { schema: "df_integration_test", @@ -320,8 +321,8 @@ suite("@dataform/integration/redshift", { parallel: true }, ({ before, after }) suite("publish tasks", async () => { test("incremental pre and post ops, core version <= 1.4.8", async () => { // 1.4.8 used `preOps` and `postOps` instead of `incrementalPreOps` and `incrementalPostOps`. - const table: dataform.ITable = { - enumType: dataform.TableType.INCREMENTAL, + const table: core.Target = { + enumType: core.TargetType.INCREMENTAL, query: "query", preOps: ["preop task1", "preop task2"], incrementalQuery: "", diff --git a/tests/integration/redshift_project/definitions/sample_data.sqlx b/tests/integration/redshift_project/definitions/sample_data.sqlx index 653830be3..ec1635f65 100644 --- a/tests/integration/redshift_project/definitions/sample_data.sqlx +++ b/tests/integration/redshift_project/definitions/sample_data.sqlx @@ -2,6 +2,6 @@ config { type: "view" } -select ${when(dataform.projectConfig.vars.fooVar === "bar", "1", "2")} as val union all +select ${when(core.ProjectConfig.vars.fooVar === "bar", "1", "2")} as val union all select 2 as val union all -select ${when(dataform.projectConfig.warehouse === "redshift", "3", "2")} as val +select ${when(core.ProjectConfig.warehouse === "redshift", "3", "2")} as val diff --git a/tests/integration/snowflake.spec.ts b/tests/integration/snowflake.spec.ts index 225a6af53..3fb20aca2 100644 --- a/tests/integration/snowflake.spec.ts +++ b/tests/integration/snowflake.spec.ts @@ -5,7 +5,8 @@ import * as dbadapters from "df/api/dbadapters"; import * as adapters from "df/core/adapters"; import { SnowflakeAdapter } from "df/core/adapters/snowflake"; import { targetAsReadableString } from "df/core/targets"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; import { suite, test } from "df/testing"; import { compile, dropAllTables, getTableRows, keyBy } from "df/tests/integration/utils"; @@ -286,7 +287,7 @@ suite("@dataform/integration/snowflake", ({ before, after }) => { const view = keyBy(compiledGraph.tables, t => targetAsReadableString(t.target))[ "INTEGRATION_TESTS.DF_INTEGRATION_TEST_EVALUATE.EXAMPLE_VIEW" ]; - let evaluations = await dbadapter.evaluate(dataform.Table.create(view)); + let evaluations = await dbadapter.evaluate(core.Target.create(view)); expect(evaluations.length).to.equal(1); expect(evaluations[0].status).to.equal( dataform.QueryEvaluation.QueryEvaluationStatus.SUCCESS @@ -295,7 +296,7 @@ suite("@dataform/integration/snowflake", ({ before, after }) => { const assertion = keyBy(compiledGraph.assertions, t => targetAsReadableString(t.target))[ "INTEGRATION_TESTS.DF_INTEGRATION_TEST_ASSERTIONS_EVALUATE.EXAMPLE_ASSERTION_PASS" ]; - evaluations = await dbadapter.evaluate(dataform.Assertion.create(assertion)); + evaluations = await dbadapter.evaluate(core.Assertion.create(assertion)); expect(evaluations.length).to.equal(1); expect(evaluations[0].status).to.equal( dataform.QueryEvaluation.QueryEvaluationStatus.SUCCESS @@ -304,7 +305,7 @@ suite("@dataform/integration/snowflake", ({ before, after }) => { const incremental = keyBy(compiledGraph.tables, t => targetAsReadableString(t.target))[ "INTEGRATION_TESTS.DF_INTEGRATION_TEST_EVALUATE.EXAMPLE_INCREMENTAL" ]; - evaluations = await dbadapter.evaluate(dataform.Table.create(incremental)); + evaluations = await dbadapter.evaluate(core.Target.create(incremental)); expect(evaluations.length).to.equal(2); expect(evaluations[0].status).to.equal( dataform.QueryEvaluation.QueryEvaluationStatus.SUCCESS @@ -316,8 +317,8 @@ suite("@dataform/integration/snowflake", ({ before, after }) => { test("invalid table fails validation and error parsed correctly", async () => { const evaluations = await dbadapter.evaluate( - dataform.Table.create({ - enumType: dataform.TableType.TABLE, + core.Target.create({ + enumType: core.TargetType.TABLE, query: "selects\n1 as x", target: { name: "EXAMPLE_ILLEGAL_TABLE", @@ -338,8 +339,8 @@ suite("@dataform/integration/snowflake", ({ before, after }) => { suite("publish tasks", async () => { test("incremental pre and post ops, core version <= 1.4.8", async () => { // 1.4.8 used `preOps` and `postOps` instead of `incrementalPreOps` and `incrementalPostOps`. - const table: dataform.ITable = { - enumType: dataform.TableType.INCREMENTAL, + const table: core.Target = { + enumType: core.TargetType.INCREMENTAL, query: "query", preOps: ["preop task1", "preop task2"], incrementalQuery: "", diff --git a/tests/integration/snowflake_project/definitions/sample_data.sqlx b/tests/integration/snowflake_project/definitions/sample_data.sqlx index 2ae4dc2bc..cda91fd46 100644 --- a/tests/integration/snowflake_project/definitions/sample_data.sqlx +++ b/tests/integration/snowflake_project/definitions/sample_data.sqlx @@ -2,6 +2,6 @@ config { type: "view" } -select ${when(dataform.projectConfig.vars.fooVar === "bar", "1", "2")} as val union all +select ${when(core.ProjectConfig.vars.fooVar === "bar", "1", "2")} as val union all select 2 as val union all -select ${when(dataform.projectConfig.warehouse === "snowflake", "3", "2")} as val +select ${when(core.ProjectConfig.warehouse === "snowflake", "3", "2")} as val diff --git a/tests/integration/sqldatawarehouse.spec.ts b/tests/integration/sqldatawarehouse.spec.ts index 1e63dc072..0e1227ae9 100644 --- a/tests/integration/sqldatawarehouse.spec.ts +++ b/tests/integration/sqldatawarehouse.spec.ts @@ -5,7 +5,8 @@ import * as dbadapters from "df/api/dbadapters"; import * as adapters from "df/core/adapters"; import { SQLDataWarehouseAdapter } from "df/core/adapters/sqldatawarehouse"; import { targetToName } from "df/core/utils"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; import { suite, test } from "df/testing"; import { compile, dropAllTables, getTableRows, keyBy } from "df/tests/integration/utils"; @@ -156,7 +157,7 @@ suite("@dataform/integration/sqldatawarehouse", { parallel: true }, ({ before, a const view = keyBy(compiledGraph.tables, t => targetToName(t.target))[ "df_integration_test_evaluate.example_view" ]; - let evaluations = await dbadapter.evaluate(dataform.Table.create(view)); + let evaluations = await dbadapter.evaluate(core.Target.create(view)); expect(evaluations.length).to.equal(1); expect(evaluations[0].status).to.equal( dataform.QueryEvaluation.QueryEvaluationStatus.SUCCESS @@ -165,7 +166,7 @@ suite("@dataform/integration/sqldatawarehouse", { parallel: true }, ({ before, a const table = keyBy(compiledGraph.tables, t => targetToName(t.target))[ "df_integration_test_evaluate.example_table" ]; - evaluations = await dbadapter.evaluate(dataform.Table.create(table)); + evaluations = await dbadapter.evaluate(core.Target.create(table)); expect(evaluations.length).to.equal(1); expect(evaluations[0].status).to.equal( dataform.QueryEvaluation.QueryEvaluationStatus.SUCCESS @@ -174,7 +175,7 @@ suite("@dataform/integration/sqldatawarehouse", { parallel: true }, ({ before, a const assertion = keyBy(compiledGraph.assertions, t => targetToName(t.target))[ "df_integration_test_assertions_evaluate.example_assertion_pass" ]; - evaluations = await dbadapter.evaluate(dataform.Assertion.create(assertion)); + evaluations = await dbadapter.evaluate(core.Assertion.create(assertion)); expect(evaluations.length).to.equal(1); expect(evaluations[0].status).to.equal( dataform.QueryEvaluation.QueryEvaluationStatus.SUCCESS @@ -183,7 +184,7 @@ suite("@dataform/integration/sqldatawarehouse", { parallel: true }, ({ before, a const incremental = keyBy(compiledGraph.tables, t => targetToName(t.target))[ "df_integration_test_evaluate.example_incremental" ]; - evaluations = await dbadapter.evaluate(dataform.Table.create(incremental)); + evaluations = await dbadapter.evaluate(core.Target.create(incremental)); expect(evaluations.length).to.equal(2); expect(evaluations[0].status).to.equal( dataform.QueryEvaluation.QueryEvaluationStatus.SUCCESS @@ -195,8 +196,8 @@ suite("@dataform/integration/sqldatawarehouse", { parallel: true }, ({ before, a test("invalid table fails validation and error parsed correctly", async () => { const evaluations = await dbadapter.evaluate( - dataform.Table.create({ - enumType: dataform.TableType.TABLE, + core.Target.create({ + enumType: core.TargetType.TABLE, query: "selects\n1 as x", target: { schema: "df_integration_test", @@ -218,8 +219,8 @@ suite("@dataform/integration/sqldatawarehouse", { parallel: true }, ({ before, a suite("publish tasks", async () => { test("incremental pre and post ops, core version <= 1.4.8", async () => { // 1.4.8 used `preOps` and `postOps` instead of `incrementalPreOps` and `incrementalPostOps`. - const table: dataform.ITable = { - enumType: dataform.TableType.INCREMENTAL, + const table: core.Target = { + enumType: core.TargetType.INCREMENTAL, query: "query", preOps: ["preop task1", "preop task2"], incrementalQuery: "", diff --git a/tests/integration/sqldatawarehouse_project/definitions/sample_data.sqlx b/tests/integration/sqldatawarehouse_project/definitions/sample_data.sqlx index 6e3945764..90ec28b23 100644 --- a/tests/integration/sqldatawarehouse_project/definitions/sample_data.sqlx +++ b/tests/integration/sqldatawarehouse_project/definitions/sample_data.sqlx @@ -1,5 +1,5 @@ config { type: "view" } -select ${when(dataform.projectConfig.vars.fooVar === "bar", "1", "2")} as val union all +select ${when(core.ProjectConfig.vars.fooVar === "bar", "1", "2")} as val union all select 2 as val union all -select ${when(dataform.projectConfig.warehouse === "sqldatawarehouse", "3", "2")} as val +select ${when(core.ProjectConfig.warehouse === "sqldatawarehouse", "3", "2")} as val diff --git a/tests/integration/utils.ts b/tests/integration/utils.ts index 372574b57..d3b84cc1f 100644 --- a/tests/integration/utils.ts +++ b/tests/integration/utils.ts @@ -3,7 +3,8 @@ import { expect } from "chai"; import * as dfapi from "df/api"; import * as dbadapters from "df/api/dbadapters"; import * as adapters from "df/core/adapters"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; export function keyBy(values: V[], keyFn: (value: V) => string): { [key: string]: V } { return values.reduce((map, value) => { @@ -13,7 +14,7 @@ export function keyBy(values: V[], keyFn: (value: V) => string): { [key: stri } export async function dropAllTables( - tables: dataform.ITableMetadata[], + tables: execution.TableMetadata[], adapter: adapters.IAdapter, dbadapter: dbadapters.IDbAdapter ) { @@ -23,7 +24,7 @@ export async function dropAllTables( } export async function getTableRows( - target: dataform.ITarget, + target: core.Target, adapter: adapters.IAdapter, dbadapter: dbadapters.IDbAdapter ) { @@ -33,7 +34,7 @@ export async function getTableRows( export async function compile( projectDir: string, schemaSuffixOverride: string, - projectConfigOverrides?: dataform.IProjectConfig + projectConfigOverrides?: core.ProjectConfig ) { const compiledGraph = await dfapi.compile({ projectDir, diff --git a/vscode/server.ts b/vscode/server.ts index 1ac15a94e..b21879241 100644 --- a/vscode/server.ts +++ b/vscode/server.ts @@ -1,5 +1,6 @@ import { ChildProcess, spawn } from "child_process"; -import { dataform } from "df/protos/ts"; +import * as core from "df/protos/core"; +import * as execution from "df/protos/execution"; import { createConnection, HandlerResult, @@ -12,7 +13,7 @@ import { TextDocument } from "vscode-languageserver-textdocument"; const connection = createConnection(ProposedFeatures.all); const documents: TextDocuments = new TextDocuments(TextDocument); -let CACHED_COMPILE_GRAPH: dataform.ICompiledGraph = null; +let CACHED_COMPILE_GRAPH: dataform.CompiledGraph = null; let WORKSPACE_ROOT_FOLDER: string = null; connection.onInitialize(() => { @@ -55,7 +56,7 @@ async function compileAndValidate() { }); const compileResult = await getProcessResult(spawnedProcess); - const parsedResult: dataform.ICompiledGraph = JSON.parse(compileResult.stdout); + const parsedResult: dataform.CompiledGraph = JSON.parse(compileResult.stdout); if (parsedResult?.graphErrors?.compilationErrors) { parsedResult.graphErrors.compilationErrors.forEach(compilationError => { connection.sendNotification("error", compilationError.message); @@ -79,7 +80,7 @@ async function getProcessResult(childProcess: ChildProcess) { function gatherAllActions( graph = CACHED_COMPILE_GRAPH -): Array { +): Array { return [].concat(graph.tables, graph.operations, graph.assertions, graph.declarations); } From 8ddd7b6cadd4bbfb5eacfdb4b8cc2de0dc1557bf Mon Sep 17 00:00:00 2001 From: Elias Kassell Date: Fri, 17 Feb 2023 15:41:20 +0000 Subject: [PATCH 8/9] More proto conversion --- api/commands/build.ts | 4 +- api/commands/compile.ts | 8 ++-- api/commands/prune.ts | 6 +-- api/dbadapters/bigquery.ts | 2 +- api/utils/graphs.ts | 10 ++--- cli/console.ts | 2 +- cli/util.ts | 2 +- core/adapters/redshift.ts | 2 + core/column_descriptors.ts | 42 +++++++++---------- core/declaration.ts | 8 +--- core/main.ts | 4 +- core/operation.ts | 6 --- core/session.ts | 66 +++++++++++++++--------------- core/table.ts | 53 ++++++++++-------------- core/test.ts | 2 +- core/utils.ts | 28 ++++++------- sandbox/vm/create_config.ts | 4 +- tests/api/api.spec.ts | 40 +++++++++--------- tests/api/examples.spec.ts | 4 +- tests/core/core.spec.ts | 18 ++++---- tests/integration/bigquery.spec.ts | 5 +-- vscode/server.ts | 6 +-- 22 files changed, 150 insertions(+), 172 deletions(-) diff --git a/api/commands/build.ts b/api/commands/build.ts index c461d56f8..8eca5a2b0 100644 --- a/api/commands/build.ts +++ b/api/commands/build.ts @@ -9,7 +9,7 @@ import * as core from "df/protos/core"; import * as execution from "df/protos/execution"; export async function build( - compiledGraph: dataform.CompiledGraph, + compiledGraph: core.CompiledGraph, runConfig: execution.RunConfig, dbadapter: dbadapters.IDbAdapter ) { @@ -45,7 +45,7 @@ export class Builder { private readonly adapter: adapters.IAdapter; constructor( - private readonly prunedGraph: dataform.CompiledGraph, + private readonly prunedGraph: core.CompiledGraph, private readonly runConfig: execution.RunConfig, private readonly warehouseState: dataform.WarehouseState ) { diff --git a/api/commands/compile.ts b/api/commands/compile.ts index 81f45288c..ee708ace3 100644 --- a/api/commands/compile.ts +++ b/api/commands/compile.ts @@ -27,7 +27,7 @@ export class CompilationTimeoutError extends Error {} export async function compile( compileConfig: dataform.CompileConfig = {} -): Promise { +): Promise { // Resolve the path in case it hasn't been resolved already. path.resolve(compileConfig.projectDir); @@ -57,12 +57,12 @@ export async function compile( const result = await CompileChildProcess.forkProcess().compile(compileConfig); - let compileResult: dataform.CompiledGraph; + let compileResult: core.CompiledGraph; if (compileConfig.useMain) { const decodedResult = decode64(dataform.CoreExecutionResponse, result); - compileResult = dataform.CompiledGraph.create(decodedResult.compile.compiledGraph); + compileResult = core.CompiledGraph.create(decodedResult.compile.compiledGraph); } else { - compileResult = decode64(dataform.CompiledGraph, result); + compileResult = decode64(core.CompiledGraph, result); } compileResult.tables.forEach(setOrValidateTableEnumType); diff --git a/api/commands/prune.ts b/api/commands/prune.ts index 14adb23ae..b9318649e 100644 --- a/api/commands/prune.ts +++ b/api/commands/prune.ts @@ -6,9 +6,9 @@ import * as execution from "df/protos/execution"; type CompileAction = core.Target | core.Operation | core.Assertion; export function prune( - compiledGraph: dataform.CompiledGraph, + compiledGraph: core.CompiledGraph, runConfig: execution.RunConfig -): dataform.CompiledGraph { +): core.CompiledGraph { compiledGraph.tables.forEach(utils.setOrValidateTableEnumType); const includedActionNames = computeIncludedActionNames(compiledGraph, runConfig); return { @@ -26,7 +26,7 @@ export function prune( } function computeIncludedActionNames( - compiledGraph: dataform.CompiledGraph, + compiledGraph: core.CompiledGraph, runConfig: execution.RunConfig ): Set { // Remove inline tables. diff --git a/api/dbadapters/bigquery.ts b/api/dbadapters/bigquery.ts index b43004fef..7629f546d 100644 --- a/api/dbadapters/bigquery.ts +++ b/api/dbadapters/bigquery.ts @@ -494,7 +494,7 @@ function convertFieldType(type: string) { } function addDescriptionToMetadata( - columnDescriptions: dataform.ColumnDescriptor[], + columnDescriptions: core.ColumnDescriptor[], metadataArray: TableField[] ): TableField[] { const findDescription = (path: string[]) => diff --git a/api/utils/graphs.ts b/api/utils/graphs.ts index 079f0ba0a..660ac4ad2 100644 --- a/api/utils/graphs.ts +++ b/api/utils/graphs.ts @@ -3,16 +3,16 @@ import { targetStringifier } from "df/core/targets"; import * as core from "df/protos/core"; import * as execution from "df/protos/execution"; -export const combineAllActions = (graph: dataform.CompiledGraph) => { - return ([] as Array).concat( +export const combineAllActions = (graph: core.CompiledGraph) => { + return ([] as Array).concat( graph.tables || ([] as core.Target[]), graph.operations || ([] as core.Operation[]), graph.assertions || ([] as core.Assertion[]), - graph.declarations || ([] as dataform.Declaration[]) + graph.declarations || ([] as core.Declaration[]) ); }; -export function actionsByTarget(compiledGraph: dataform.CompiledGraph) { +export function actionsByTarget(compiledGraph: core.CompiledGraph) { return new StringifiedMap( targetStringifier, combineAllActions(compiledGraph) @@ -22,7 +22,7 @@ export function actionsByTarget(compiledGraph: dataform.CompiledGraph) { ); } -export function actionsByCanonicalTarget(compiledGraph: dataform.CompiledGraph) { +export function actionsByCanonicalTarget(compiledGraph: core.CompiledGraph) { return new StringifiedMap( targetStringifier, combineAllActions(compiledGraph) diff --git a/cli/console.ts b/cli/console.ts index afa57382f..fac13c74a 100644 --- a/cli/console.ts +++ b/cli/console.ts @@ -103,7 +103,7 @@ export function printInitCredsResult(writtenFilePath: string) { writeStdOut("To change connection settings, edit this file directly."); } -export function printCompiledGraph(graph: dataform.CompiledGraph, verbose: boolean) { +export function printCompiledGraph(graph: core.CompiledGraph, verbose: boolean) { if (verbose) { writeStdOut(prettyJsonStringify(graph)); } else { diff --git a/cli/util.ts b/cli/util.ts index 9c9b2cb73..d0d4f4c4d 100644 --- a/cli/util.ts +++ b/cli/util.ts @@ -13,6 +13,6 @@ export function assertPathExists(checkPath: string) { } } -export function compiledGraphHasErrors(graph: dataform.CompiledGraph) { +export function compiledGraphHasErrors(graph: core.CompiledGraph) { return graph.graphErrors?.compilationErrors?.length > 0; } diff --git a/core/adapters/redshift.ts b/core/adapters/redshift.ts index 9b29b312c..5cda99e87 100644 --- a/core/adapters/redshift.ts +++ b/core/adapters/redshift.ts @@ -7,8 +7,10 @@ import * as core from "df/protos/core"; import * as execution from "df/protos/execution"; export class RedshiftAdapter extends Adapter implements IAdapter { + dataformCoreVersion: string; constructor(private readonly project: core.ProjectConfig, dataformCoreVersion: string) { super(dataformCoreVersion); + this.dataformCoreVersion = dataformCoreVersion; } public resolveTarget(target: core.Target) { diff --git a/core/column_descriptors.ts b/core/column_descriptors.ts index a3c53f461..d78eb258d 100644 --- a/core/column_descriptors.ts +++ b/core/column_descriptors.ts @@ -10,7 +10,7 @@ export class ColumnDescriptors { public static mapToColumnProtoArray( columns: IColumnsDescriptor, reportError: (e: Error) => void - ): dataform.ColumnDescriptor[] { + ): core.ColumnDescriptor[] { return Object.keys(columns) .map(column => ColumnDescriptors.mapColumnDescriptionToProto([column], columns[column], reportError) @@ -22,10 +22,10 @@ export class ColumnDescriptors { currentPath: string[], description: string | IRecordDescriptor, reportError: (e: Error) => void - ): dataform.ColumnDescriptor[] { + ): core.ColumnDescriptor[] { if (typeof description === "string") { return [ - dataform.ColumnDescriptor.create({ + core.ColumnDescriptor.create({ description, path: currentPath }) @@ -37,9 +37,9 @@ export class ColumnDescriptors { IRecordDescriptorProperties(), `${currentPath.join(".")} column descriptor` ); - const columnDescriptor: dataform.ColumnDescriptor[] = !!description + const columnDescriptor: core.ColumnDescriptor[] = !!description ? [ - dataform.ColumnDescriptor.create({ + core.ColumnDescriptor.create({ path: currentPath, description: description.description, displayName: description.displayName, @@ -71,11 +71,11 @@ export class ColumnDescriptors { public static mapAggregation(aggregation: string) { switch (aggregation) { case "sum": - return dataform.ColumnDescriptor.Aggregation.SUM; + return core.ColumnDescriptor_Aggregation.SUM; case "distinct": - return dataform.ColumnDescriptor.Aggregation.DISTINCT; + return core.ColumnDescriptor_Aggregation.DISTINCT; case "derived": - return dataform.ColumnDescriptor.Aggregation.DERIVED; + return core.ColumnDescriptor_Aggregation.DERIVED; case undefined: return undefined; default: @@ -83,15 +83,15 @@ export class ColumnDescriptors { } } - public static mapFromAggregation(aggregation: dataform.ColumnDescriptor.Aggregation) { + public static mapFromAggregation(aggregation: core.ColumnDescriptor_Aggregation) { switch (aggregation) { - case dataform.ColumnDescriptor.Aggregation.SUM: + case core.ColumnDescriptor_Aggregation.SUM: return "sum"; - case dataform.ColumnDescriptor.Aggregation.DISTINCT: + case core.ColumnDescriptor_Aggregation.DISTINCT: return "distinct"; - case dataform.ColumnDescriptor.Aggregation.DERIVED: + case core.ColumnDescriptor_Aggregation.DERIVED: return "derived"; - case dataform.ColumnDescriptor.Aggregation.UNKNOWN_AGGREGATION: + case core.ColumnDescriptor_Aggregation.UNKNOWN_AGGREGATION: return undefined; case undefined: return undefined; @@ -103,11 +103,11 @@ export class ColumnDescriptors { public static mapDimensionType(dimensionType: string) { switch (dimensionType) { case "category": - return dataform.ColumnDescriptor.DimensionType.CATEGORY; + return core.ColumnDescriptor_DimensionType.CATEGORY; case "timestamp": - return dataform.ColumnDescriptor.DimensionType.TIMESTAMP; + return core.ColumnDescriptor_DimensionType.TIMESTAMP; case "number": - return dataform.ColumnDescriptor.DimensionType.NUMBER; + return core.ColumnDescriptor_DimensionType.NUMBER; case undefined: return undefined; default: @@ -115,15 +115,15 @@ export class ColumnDescriptors { } } - public static mapFromDimensionType(dimensionType: dataform.ColumnDescriptor.DimensionType) { + public static mapFromDimensionType(dimensionType: core.ColumnDescriptor_DimensionType) { switch (dimensionType) { - case dataform.ColumnDescriptor.DimensionType.CATEGORY: + case core.ColumnDescriptor_DimensionType.CATEGORY: return "category"; - case dataform.ColumnDescriptor.DimensionType.TIMESTAMP: + case core.ColumnDescriptor_DimensionType.TIMESTAMP: return "timestamp"; - case dataform.ColumnDescriptor.DimensionType.NUMBER: + case core.ColumnDescriptor_DimensionType.NUMBER: return "number"; - case dataform.ColumnDescriptor.DimensionType.UNKNOWN_DIMENSION: + case core.ColumnDescriptor_DimensionType.UNKNOWN_DIMENSION: return undefined; case undefined: return undefined; diff --git a/core/declaration.ts b/core/declaration.ts index 8233faec5..50ec4c002 100644 --- a/core/declaration.ts +++ b/core/declaration.ts @@ -28,7 +28,7 @@ export const IDeclarationConfigProperties = strictKeysOf()([ * @hidden */ export class Declaration { - public proto: dataform.Declaration = dataform.Declaration.create(); + public proto: core.Declaration = core.Declaration.create(); public session: Session; @@ -49,17 +49,11 @@ export class Declaration { } public description(description: string) { - if (!this.proto.actionDescriptor) { - this.proto.actionDescriptor = {}; - } this.proto.actionDescriptor.description = description; return this; } public columns(columns: IColumnsDescriptor) { - if (!this.proto.actionDescriptor) { - this.proto.actionDescriptor = {}; - } this.proto.actionDescriptor.columns = ColumnDescriptors.mapToColumnProtoArray( columns, (e: Error) => this.session.compileError(e) diff --git a/core/main.ts b/core/main.ts index 1f3385ce7..29ce25bbc 100644 --- a/core/main.ts +++ b/core/main.ts @@ -7,13 +7,13 @@ import * as execution from "df/protos/execution"; /** * This is the main entry point into the user space code that should be invoked by the compilation wrapper sandbox. * - * @param encodedCoreExecutionRequest a base64 encoded {@see dataform.CoreExecutionRequest} proto. + * @param encodedCoreExecutionRequest a base64 encoded {@see core.CoreExecutionRequest} proto. * @returns a base64 encoded {@see dataform.CoreExecutionResponse} proto. */ export function main(encodedCoreExecutionRequest: string): string { const globalAny = global as any; - const request = decode64(dataform.CoreExecutionRequest, encodedCoreExecutionRequest); + const request = decode64(core.CoreExecutionRequest, encodedCoreExecutionRequest); const compileRequest = request.compile; // Read the project config from the root of the project. diff --git a/core/operation.ts b/core/operation.ts index 6bef45d95..e975c0e46 100644 --- a/core/operation.ts +++ b/core/operation.ts @@ -146,17 +146,11 @@ export class Operation { } public description(description: string) { - if (!this.proto.actionDescriptor) { - this.proto.actionDescriptor = {}; - } this.proto.actionDescriptor.description = description; return this; } public columns(columns: IColumnsDescriptor) { - if (!this.proto.actionDescriptor) { - this.proto.actionDescriptor = {}; - } this.proto.actionDescriptor.columns = ColumnDescriptors.mapToColumnProtoArray( columns, (e: Error) => this.session.compileError(e) diff --git a/core/session.ts b/core/session.ts index 2ad67f848..3a452d350 100644 --- a/core/session.ts +++ b/core/session.ts @@ -26,10 +26,10 @@ import * as execution from "df/protos/execution"; const SQL_DATA_WAREHOUSE_DIST_HASH_REGEXP = new RegExp("HASH\\s*\\(\\s*\\w*\\s*\\)\\s*"); -const DEFAULT_CONFIG = { +const DEFAULT_CONFIG = core.ProjectConfig.create({ defaultSchema: "dataform", assertionSchema: "dataform_assertions" -}; +}); /** * @hidden @@ -66,7 +66,7 @@ export class Session { public indexedActions: ActionIndex; public tests: { [name: string]: test.Test }; - public graphErrors: dataform.GraphErrors; + public graphErrors: core.GraphErrors; constructor( rootDir?: string, @@ -230,7 +230,7 @@ export class Session { if ( resolved && resolved instanceof Table && - resolved.proto.enumType === core.TargetType.INLINE + resolved.proto.enumType === core.TableType.INLINE ) { // TODO: Pretty sure this is broken as the proto.query value may not // be set yet as it happens during compilation. We should evalute the query here. @@ -349,7 +349,7 @@ export class Session { public compileError(err: Error | string, path?: string, actionTarget?: core.Target) { const fileName = path || utils.getCallerFile(this.rootDir) || __filename; - const compileError = dataform.CompilationError.create({ + const compileError = core.CompilationError.create({ fileName, actionName: !!actionTarget ? targetAsReadableString(actionTarget) : undefined, actionTarget @@ -363,7 +363,7 @@ export class Session { this.graphErrors.compilationErrors.push(compileError); } - public compile(): dataform.CompiledGraph { + public compile(): core.CompiledGraph { this.indexedActions = new ActionIndex(this.adapter(), this.actions); if (this.config.warehouse === "bigquery" && !this.config.defaultLocation) { @@ -379,11 +379,11 @@ export class Session { throw new Error("Custom variables defined in dataform.json can only be strings."); } - const compiledGraph = dataform.CompiledGraph.create({ + const compiledGraph = core.CompiledGraph.create({ projectConfig: this.config, tables: this.compileGraphChunk( this.actions.filter(action => action instanceof Table), - core.Target.verify + core.Table.verify ), operations: this.compileGraphChunk( this.actions.filter(action => action instanceof Operation), @@ -395,9 +395,9 @@ export class Session { ), declarations: this.compileGraphChunk( this.actions.filter(action => action instanceof Declaration), - dataform.Declaration.verify + core.Declaration.verify ), - tests: this.compileGraphChunk(Object.values(this.tests), dataform.Test.verify), + tests: this.compileGraphChunk(Object.values(this.tests), core.Test.verify), graphErrors: this.graphErrors, dataformCoreVersion, targets: this.actions.map(action => action.proto.target) @@ -432,12 +432,12 @@ export class Session { ); } - utils.throwIfInvalid(compiledGraph, dataform.CompiledGraph.verify); + utils.throwIfInvalid(compiledGraph, core.CompiledGraph.verify); return compiledGraph; } public compileToBase64() { - return encode64(dataform.CompiledGraph, this.compile()); + return encode64(core.CompiledGraph, this.compile()); } public finalizeDatabase(database: string): string { @@ -575,10 +575,10 @@ export class Session { }); } - private checkTableConfigValidity(tables: core.Target[]) { + private checkTableConfigValidity(tables: core.Table[]) { tables.forEach(table => { // type - if (table.enumType === core.TargetType.UNKNOWN_TYPE) { + if (table.enumType === core.TableType.UNKNOWN_TYPE) { this.compileError( `Wrong type of table detected. Should only use predefined types: ${joinQuoted( TableType @@ -591,7 +591,7 @@ export class Session { // materialized if (!!table.materialized) { if ( - table.enumType !== core.TargetType.VIEW || + table.enumType !== core.TableType.VIEW || (this.config.warehouse !== "snowflake" && this.config.warehouse !== "bigquery") ) { this.compileError( @@ -604,7 +604,7 @@ export class Session { // snowflake config if (!!table.snowflake) { - if (table.snowflake.secure && table.enumType !== core.TargetType.VIEW) { + if (table.snowflake.secure && table.enumType !== core.TableType.VIEW) { this.compileError( new Error(`The 'secure' option is only valid for Snowflake views`), table.fileName, @@ -612,7 +612,7 @@ export class Session { ); } - if (table.snowflake.transient && table.enumType !== core.TargetType.TABLE) { + if (table.snowflake.transient && table.enumType !== core.TableType.TABLE) { this.compileError( new Error(`The 'transient' option is only valid for Snowflake tables`), table.fileName, @@ -622,8 +622,8 @@ export class Session { if ( table.snowflake.clusterBy?.length > 0 && - table.enumType !== core.TargetType.TABLE && - table.enumType !== core.TargetType.INCREMENTAL + table.enumType !== core.TableType.TABLE && + table.enumType !== core.TableType.INCREMENTAL ) { this.compileError( new Error(`The 'clusterBy' option is only valid for Snowflake tables`), @@ -664,8 +664,8 @@ export class Session { // Redshift config if (!!table.redshift) { const validatePropertyDefined = ( - opts: dataform.RedshiftOptions, - prop: keyof dataform.RedshiftOptions + opts: core.RedshiftOptions, + prop: keyof core.RedshiftOptions ) => { const value = opts[prop]; if (!opts.hasOwnProperty(prop)) { @@ -677,12 +677,12 @@ export class Session { } }; const validatePropertiesDefined = ( - opts: dataform.RedshiftOptions, - props: Array + opts: core.RedshiftOptions, + props: Array ) => props.forEach(prop => validatePropertyDefined(opts, prop)); const validatePropertyValueInValues = ( - opts: dataform.RedshiftOptions, - prop: keyof dataform.RedshiftOptions & ("distStyle" | "sortStyle"), + opts: core.RedshiftOptions, + prop: keyof core.RedshiftOptions & ("distStyle" | "sortStyle"), values: readonly string[] ) => { if (!!opts[prop] && !values.includes(opts[prop])) { @@ -716,7 +716,7 @@ export class Session { table.bigquery.clusterBy?.length || table.bigquery.partitionExpirationDays || table.bigquery.requirePartitionFilter) && - table.enumType === core.TargetType.VIEW + table.enumType === core.TableType.VIEW ) { this.compileError( `partitionBy/clusterBy/requirePartitionFilter/partitionExpirationDays are not valid for BigQuery views; they are only valid for tables`, @@ -726,7 +726,7 @@ export class Session { } else if ( !table.bigquery.partitionBy && (table.bigquery.partitionExpirationDays || table.bigquery.requirePartitionFilter) && - table.enumType === core.TargetType.TABLE + table.enumType === core.TableType.TABLE ) { this.compileError( `requirePartitionFilter/partitionExpirationDays are not valid for non partitioned BigQuery tables`, @@ -758,7 +758,7 @@ export class Session { } // Ignored properties - if (table.enumType === core.TargetType.INLINE) { + if (table.enumType === core.TableType.INLINE) { Table.INLINE_IGNORED_PROPS.forEach(ignoredProp => { if (objectExistsOrIsNonEmpty(table[ignoredProp])) { this.compileError( @@ -772,7 +772,7 @@ export class Session { }); } - private checkTestNameUniqueness(tests: dataform.Test[]) { + private checkTestNameUniqueness(tests: core.Test[]) { const allNames: string[] = []; tests.forEach(testProto => { if (allNames.includes(testProto.name)) { @@ -833,7 +833,7 @@ export class Session { }); } - private removeNonUniqueActionsFromCompiledGraph(compiledGraph: dataform.CompiledGraph) { + private removeNonUniqueActionsFromCompiledGraph(compiledGraph: core.CompiledGraph) { function getNonUniqueTargets(targets: core.Target[]): StringifiedSet { const allTargets = new StringifiedSet(targetStringifier); const nonUniqueTargets = new StringifiedSet(targetStringifier); @@ -905,13 +905,13 @@ function definesDataset(type: string) { return type === "view" || type === "table" || type === "inline" || type === "incremental"; } -function getCanonicalProjectConfig(originalProjectConfig: core.ProjectConfig) { - return { +function getCanonicalProjectConfig(originalProjectConfig: core.ProjectConfig): core.ProjectConfig { + return core.ProjectConfig.create({ warehouse: originalProjectConfig.warehouse, defaultSchema: originalProjectConfig.defaultSchema, defaultDatabase: originalProjectConfig.defaultDatabase, assertionSchema: originalProjectConfig.assertionSchema - }; + }); } function joinQuoted(values: readonly string[]) { diff --git a/core/table.ts b/core/table.ts index 2d8981e4c..7e5f351f2 100644 --- a/core/table.ts +++ b/core/table.ts @@ -380,7 +380,7 @@ export interface ITableContext extends ICommonContext { * @hidden */ export class Table { - public static readonly INLINE_IGNORED_PROPS: Array = [ + public static readonly INLINE_IGNORED_PROPS: Array = [ "bigquery", "redshift", "snowflake", @@ -393,9 +393,9 @@ export class Table { "where" ]; - public proto: core.Target = core.Target.create({ + public proto: core.Table = core.Table.create({ type: "view", - enumType: core.TargetType.VIEW, + enumType: core.TableType.VIEW, disabled: false, tags: [] }); @@ -435,19 +435,19 @@ export class Table { this.protected(); } if (config.redshift) { - this.redshift(config.redshift); + this.redshift(core.RedshiftOptions.create(config.redshift)); } if (config.bigquery) { - this.bigquery(config.bigquery); + this.bigquery(core.BigQueryOptions.create(config.bigquery)); } if (config.snowflake) { - this.snowflake(config.snowflake); + this.snowflake(core.SnowflakeOptions.create(config.snowflake)); } if (config.sqldatawarehouse) { - this.sqldatawarehouse(config.sqldatawarehouse); + this.sqldatawarehouse(core.SQLDataWarehouseOptions.create(config.sqldatawarehouse)); } if (config.presto) { - this.presto(config.presto); + this.presto(core.PrestoOptions.create(config.presto)); } if (config.tags) { this.tags(config.tags); @@ -523,64 +523,61 @@ export class Table { this.proto.materialized = materialized; } - public snowflake(snowflake: profiles.SnowflakeOptions) { + public snowflake(snowflake: core.SnowflakeOptions) { checkExcessProperties( (e: Error) => this.session.compileError(e), snowflake, ISnowflakeOptionsProperties(), "snowflake config" ); - this.proto.snowflake = profiles.SnowflakeOptions.create(snowflake); + this.proto.snowflake = core.SnowflakeOptions.create(snowflake); return this; } - public sqldatawarehouse(sqlDataWarehouse: dataform.SQLDataWarehouseOptions) { + public sqldatawarehouse(sqlDataWarehouse: core.SQLDataWarehouseOptions) { checkExcessProperties( (e: Error) => this.session.compileError(e), sqlDataWarehouse, ISQLDataWarehouseOptionsProperties(), "sqldatawarehouse config" ); - this.proto.sqlDataWarehouse = dataform.SQLDataWarehouseOptions.create(sqlDataWarehouse); + this.proto.sqlDataWarehouse = core.SQLDataWarehouseOptions.create(sqlDataWarehouse); return this; } - public redshift(redshift: dataform.RedshiftOptions) { + public redshift(redshift: core.RedshiftOptions) { checkExcessProperties( (e: Error) => this.session.compileError(e), redshift, IRedshiftOptionsProperties(), "redshift config" ); - this.proto.redshift = dataform.RedshiftOptions.create(redshift); + this.proto.redshift = core.RedshiftOptions.create(redshift); return this; } - public bigquery(bigquery: profiles.BigQueryOptions) { + public bigquery(bigquery: core.BigQueryOptions) { checkExcessProperties( (e: Error) => this.session.compileError(e), bigquery, IBigQueryOptionsProperties(), "bigquery config" ); - this.proto.bigquery = profiles.BigQueryOptions.create(bigquery); + this.proto.bigquery = core.BigQueryOptions.create(bigquery); if (!!bigquery.labels) { - if (!this.proto.actionDescriptor) { - this.proto.actionDescriptor = {}; - } this.proto.actionDescriptor.bigqueryLabels = bigquery.labels; } return this; } - public presto(presto: profiles.PrestoOptions) { + public presto(presto: core.PrestoOptions) { checkExcessProperties( (e: Error) => this.session.compileError(e), presto, IPrestoOptionsProperties(), "presto config" ); - this.proto.presto = profiles.PrestoOptions.create(presto); + this.proto.presto = core.PrestoOptions.create(presto); return this; } @@ -610,17 +607,11 @@ export class Table { } public description(description: string) { - if (!this.proto.actionDescriptor) { - this.proto.actionDescriptor = {}; - } this.proto.actionDescriptor.description = description; return this; } public columns(columns: IColumnsDescriptor) { - if (!this.proto.actionDescriptor) { - this.proto.actionDescriptor = {}; - } this.proto.actionDescriptor.columns = ColumnDescriptors.mapToColumnProtoArray( columns, (e: Error) => this.session.compileError(e) @@ -716,7 +707,7 @@ export class Table { this.proto.query = context.apply(this.contextableQuery); - if (this.proto.enumType === core.TargetType.INCREMENTAL) { + if (this.proto.enumType === core.TableType.INCREMENTAL) { this.proto.incrementalQuery = incrementalContext.apply(this.contextableQuery); this.proto.incrementalPreOps = this.contextifyOps(this.contextablePreOps, incrementalContext); @@ -835,17 +826,17 @@ export class TableContext implements ITableContext { return ""; } - public redshift(redshift: dataform.RedshiftOptions) { + public redshift(redshift: core.RedshiftOptions) { this.table.redshift(redshift); return ""; } - public bigquery(bigquery: profiles.BigQueryOptions) { + public bigquery(bigquery: core.BigQueryOptions) { this.table.bigquery(bigquery); return ""; } - public presto(presto: profiles.PrestoOptions) { + public presto(presto: core.PrestoOptions) { this.table.presto(presto); return ""; } diff --git a/core/test.ts b/core/test.ts index 4d8aca474..80b1b7c55 100644 --- a/core/test.ts +++ b/core/test.ts @@ -90,7 +90,7 @@ export class Test { new Error(`Dataset ${stringifyResolvable(this.datasetToTest)} could not be found.`), this.proto.fileName ); - } else if (dataset.proto.enumType === core.TargetType.INCREMENTAL) { + } else if (dataset.proto.enumType === core.TableType.INCREMENTAL) { this.session.compileError( new Error("Running tests on incremental datasets is not yet supported."), this.proto.fileName diff --git a/core/utils.ts b/core/utils.ts index e02ac177c..1c20cde81 100644 --- a/core/utils.ts +++ b/core/utils.ts @@ -105,7 +105,7 @@ function getCurrentStack(): NodeJS.CallSite[] { } } -export function graphHasErrors(graph: dataform.CompiledGraph) { +export function graphHasErrors(graph: core.CompiledGraph) { return graph.graphErrors?.compilationErrors.length > 0; } @@ -138,11 +138,11 @@ function isResolvableArray(parts: any[]): parts is [string, string?, string?] { export function resolvableAsTarget(resolvable: Resolvable): core.Target { if (typeof resolvable === "string") { - return { + return core.Target.create({ name: resolvable - }; + }); } - return resolvable; + return core.Target.create(resolvable); } export function stringifyResolvable(res: Resolvable) { @@ -251,32 +251,32 @@ export function throwIfInvalid(proto: T, verify: (proto: T) => string) { export function tableTypeStringToEnum(type: string, throwIfUnknown: boolean) { switch (type) { case "table": - return core.TargetType.TABLE; + return core.TableType.TABLE; case "incremental": - return core.TargetType.INCREMENTAL; + return core.TableType.INCREMENTAL; case "view": - return core.TargetType.VIEW; + return core.TableType.VIEW; case "inline": - return core.TargetType.INLINE; + return core.TableType.INLINE; default: { if (throwIfUnknown) { throw new Error(`Unexpected table type: ${type}`); } - return core.TargetType.UNKNOWN_TYPE; + return core.TableType.UNKNOWN_TYPE; } } } -export function tableTypeEnumToString(enumType: core.TargetType) { - return core.TargetType[enumType].toLowerCase(); +export function tableTypeEnumToString(enumType: core.TableType) { + return core.TableType[enumType].toLowerCase(); } -export function setOrValidateTableEnumType(table: core.Target) { - let enumTypeFromStr: core.TargetType | null = null; +export function setOrValidateTableEnumType(table: core.Table) { + let enumTypeFromStr: core.TableType | null = null; if (table.type !== "" && table.type !== undefined) { enumTypeFromStr = tableTypeStringToEnum(table.type, true); } - if (table.enumType === core.TargetType.UNKNOWN_TYPE || table.enumType === undefined) { + if (table.enumType === core.TableType.UNKNOWN_TYPE || table.enumType === undefined) { table.enumType = enumTypeFromStr!; } else if (enumTypeFromStr !== null && table.enumType !== enumTypeFromStr) { throw new Error( diff --git a/sandbox/vm/create_config.ts b/sandbox/vm/create_config.ts index 30358b4f2..e828fac0a 100644 --- a/sandbox/vm/create_config.ts +++ b/sandbox/vm/create_config.ts @@ -32,14 +32,14 @@ export function createGenIndexConfig(compileConfig: dataform.CompileConfig): str } /** - * @returns a base64 encoded {@see dataform.CoreExecutionRequest} proto. + * @returns a base64 encoded {@see core.CoreExecutionRequest} proto. */ export function createCoreExecutionRequest(compileConfig: dataform.CompileConfig): string { const filePaths = Array.from( new Set(glob.sync("!(node_modules)/**/*.*", { cwd: compileConfig.projectDir })) ); - return encode64(dataform.CoreExecutionRequest, { + return encode64(core.CoreExecutionRequest, { // Add the list of file paths to the compile config if not already set. compile: { compileConfig: { filePaths, ...compileConfig } } }); diff --git a/tests/api/api.spec.ts b/tests/api/api.spec.ts index 723a21fdb..23b391490 100644 --- a/tests/api/api.spec.ts +++ b/tests/api/api.spec.ts @@ -19,7 +19,7 @@ suite("@dataform/api", () => { // ^ // d // Made with asciiflow.com - const TEST_GRAPH: dataform.CompiledGraph = dataform.CompiledGraph.create({ + const TEST_GRAPH: core.CompiledGraph = core.CompiledGraph.create({ projectConfig: { warehouse: "redshift" }, tables: [ { @@ -92,7 +92,7 @@ suite("@dataform/api", () => { test("build_with_errors", () => { expect(() => { - const graphWithErrors: dataform.CompiledGraph = dataform.CompiledGraph.create({ + const graphWithErrors: core.CompiledGraph = core.CompiledGraph.create({ projectConfig: { warehouse: "redshift" }, graphErrors: { compilationErrors: [{ message: "Some critical error" }] }, tables: [{ target: { schema: "schema", name: "a" } }] @@ -104,14 +104,14 @@ suite("@dataform/api", () => { }); test("trying to fully refresh a protected dataset fails", () => { - const testGraph = dataform.CompiledGraph.create(TEST_GRAPH); + const testGraph = core.CompiledGraph.create(TEST_GRAPH); testGraph.tables[0].protected = true; const builder = new Builder(TEST_GRAPH, { fullRefresh: true }, TEST_STATE); expect(() => builder.build()).to.throw(); }); test("action_types", () => { - const graph: dataform.CompiledGraph = dataform.CompiledGraph.create({ + const graph: core.CompiledGraph = core.CompiledGraph.create({ projectConfig: { warehouse: "redshift" }, tables: [ { target: { schema: "schema", name: "a" }, type: "table" }, @@ -153,7 +153,7 @@ suite("@dataform/api", () => { }); test("table_enum_types", () => { - const graph: dataform.CompiledGraph = dataform.CompiledGraph.create({ + const graph: core.CompiledGraph = core.CompiledGraph.create({ projectConfig: { warehouse: "bigquery" }, tables: [ { target: { schema: "schema", name: "a" }, enumType: core.TargetType.TABLE }, @@ -182,7 +182,7 @@ suite("@dataform/api", () => { }); test("table_enum_and_str_types_should_match", () => { - const graph: dataform.CompiledGraph = dataform.CompiledGraph.create({ + const graph: core.CompiledGraph = core.CompiledGraph.create({ projectConfig: { warehouse: "bigquery" }, tables: [ { @@ -206,7 +206,7 @@ suite("@dataform/api", () => { "sqldatawarehouse", "snowflake" ]) { - const graph: dataform.CompiledGraph = dataform.CompiledGraph.create({ + const graph: core.CompiledGraph = core.CompiledGraph.create({ projectConfig: { warehouse: "redshift" }, tables: [ { @@ -270,7 +270,7 @@ suite("@dataform/api", () => { // +-> op_c // // op_d +---> tab_a - const TEST_GRAPH_WITH_TAGS: dataform.CompiledGraph = dataform.CompiledGraph.create({ + const TEST_GRAPH_WITH_TAGS: core.CompiledGraph = core.CompiledGraph.create({ projectConfig: { warehouse: "bigquery", defaultLocation: "US" }, operations: [ { @@ -306,7 +306,7 @@ suite("@dataform/api", () => { }); test("prune removes inline tables", async () => { - const graph: dataform.CompiledGraph = dataform.CompiledGraph.create({ + const graph: core.CompiledGraph = core.CompiledGraph.create({ projectConfig: { warehouse: "bigquery", defaultLocation: "US" }, tables: [ { target: { schema: "schema", name: "a" }, type: "table" }, @@ -424,7 +424,7 @@ suite("@dataform/api", () => { suite("sql_generating", () => { test("bigquery_incremental", () => { - const graph = dataform.CompiledGraph.create({ + const graph = core.CompiledGraph.create({ projectConfig: { warehouse: "bigquery", defaultDatabase: "deeb", defaultLocation: "US" }, tables: [ { @@ -473,7 +473,7 @@ suite("@dataform/api", () => { }); test("bigquery_materialized", () => { - const testGraph: dataform.CompiledGraph = dataform.CompiledGraph.create({ + const testGraph: core.CompiledGraph = core.CompiledGraph.create({ projectConfig: { warehouse: "bigquery", defaultDatabase: "deeb", defaultLocation: "US" }, tables: [ { @@ -537,7 +537,7 @@ suite("@dataform/api", () => { }); test("snowflake_materialized", () => { - const testGraph: dataform.CompiledGraph = dataform.CompiledGraph.create({ + const testGraph: core.CompiledGraph = core.CompiledGraph.create({ projectConfig: { warehouse: "snowflake" }, tables: [ { @@ -600,7 +600,7 @@ suite("@dataform/api", () => { }); test("redshift_create", () => { - const testGraph: dataform.CompiledGraph = dataform.CompiledGraph.create({ + const testGraph: core.CompiledGraph = core.CompiledGraph.create({ projectConfig: { warehouse: "redshift" }, dataformCoreVersion: "1.4.1", tables: [ @@ -697,7 +697,7 @@ suite("@dataform/api", () => { }); test("redshift_create after bind support dropped", () => { - const testGraph: dataform.CompiledGraph = dataform.CompiledGraph.create({ + const testGraph: core.CompiledGraph = core.CompiledGraph.create({ projectConfig: { warehouse: "redshift" }, dataformCoreVersion: "1.11.0", tables: [ @@ -727,7 +727,7 @@ suite("@dataform/api", () => { }); test("postgres_create", () => { - const testGraph: dataform.CompiledGraph = dataform.CompiledGraph.create({ + const testGraph: core.CompiledGraph = core.CompiledGraph.create({ projectConfig: { warehouse: "postgres" }, dataformCoreVersion: "1.4.1", tables: [ @@ -760,7 +760,7 @@ suite("@dataform/api", () => { }); test("bigquery_partitionby", () => { - const testGraph: dataform.CompiledGraph = dataform.CompiledGraph.create({ + const testGraph: core.CompiledGraph = core.CompiledGraph.create({ projectConfig: { warehouse: "bigquery", defaultDatabase: "deeb", defaultLocation: "US" }, tables: [ { @@ -827,7 +827,7 @@ suite("@dataform/api", () => { }); test("bigquery_options", () => { - const testGraph: dataform.CompiledGraph = dataform.CompiledGraph.create({ + const testGraph: core.CompiledGraph = core.CompiledGraph.create({ projectConfig: { warehouse: "bigquery", defaultDatabase: "deeb", defaultLocation: "US" }, tables: [ { @@ -896,7 +896,7 @@ suite("@dataform/api", () => { }); test("bigquery_clusterby", () => { - const testGraph: dataform.CompiledGraph = dataform.CompiledGraph.create({ + const testGraph: core.CompiledGraph = core.CompiledGraph.create({ projectConfig: { warehouse: "bigquery", defaultDatabase: "deeb", defaultLocation: "US" }, tables: [ { @@ -963,7 +963,7 @@ suite("@dataform/api", () => { }); test("bigquery_additional_options", () => { - const testGraph: dataform.CompiledGraph = dataform.CompiledGraph.create({ + const testGraph: core.CompiledGraph = core.CompiledGraph.create({ projectConfig: { warehouse: "bigquery", defaultDatabase: "deeb", defaultLocation: "US" }, tables: [ { @@ -1033,7 +1033,7 @@ suite("@dataform/api", () => { }); test("snowflake", () => { - const testGraph: dataform.CompiledGraph = dataform.CompiledGraph.create({ + const testGraph: core.CompiledGraph = core.CompiledGraph.create({ projectConfig: { warehouse: "snowflake" }, tables: [ { diff --git a/tests/api/examples.spec.ts b/tests/api/examples.spec.ts index 3d2769e26..681f8779a 100644 --- a/tests/api/examples.spec.ts +++ b/tests/api/examples.spec.ts @@ -498,7 +498,7 @@ suite("examples", () => { dataform.ActionDescriptor.create({ description: "This is some sample data.", columns: [ - dataform.ColumnDescriptor.create({ + core.ColumnDescriptor.create({ description: "Sample integers.", path: ["sample"] }) @@ -688,7 +688,7 @@ suite("examples", () => { dataform.ActionDescriptor.create({ description: "An example operations file which outputs a dataset.", columns: [ - dataform.ColumnDescriptor.create({ + core.ColumnDescriptor.create({ description: "Just 1!", path: ["TEST"] }) diff --git a/tests/core/core.spec.ts b/tests/core/core.spec.ts index dafe62129..9c1ad305b 100644 --- a/tests/core/core.spec.ts +++ b/tests/core/core.spec.ts @@ -100,11 +100,11 @@ suite("@dataform/core", () => { expect(t.actionDescriptor).eql({ description: "this is a table", columns: [ - dataform.ColumnDescriptor.create({ + core.ColumnDescriptor.create({ description: "test description", path: ["test"] }), - dataform.ColumnDescriptor.create({ + core.ColumnDescriptor.create({ description: "test2 description", path: ["test2"], tags: ["tag1", "tag2"] @@ -189,7 +189,7 @@ suite("@dataform/core", () => { expect(t.actionDescriptor).eql({ description: "this is a table", columns: [ - dataform.ColumnDescriptor.create({ + core.ColumnDescriptor.create({ description: "test description", path: ["test"] }) @@ -206,7 +206,7 @@ suite("@dataform/core", () => { expect(t.actionDescriptor).eql({ description: "this is a table", columns: [ - dataform.ColumnDescriptor.create({ + core.ColumnDescriptor.create({ description: "test description", path: ["test"] }) @@ -732,7 +732,7 @@ suite("@dataform/core", () => { ).includes("schema.a"); expect(tableB.actionDescriptor).eql({ columns: [ - dataform.ColumnDescriptor.create({ + core.ColumnDescriptor.create({ description: "test description b", path: ["test"] }) @@ -762,7 +762,7 @@ suite("@dataform/core", () => { ).includes("schema.a"); expect(tableC.actionDescriptor).eql({ columns: [ - dataform.ColumnDescriptor.create({ + core.ColumnDescriptor.create({ description: "test description c", path: ["test"] }) @@ -814,12 +814,12 @@ suite("@dataform/core", () => { column => column.displayName === "colly display name" ); expect(collyColumn).to.eql( - dataform.ColumnDescriptor.create({ + core.ColumnDescriptor.create({ path: ["colly"], displayName: "colly display name", description: "colly description", - dimensionType: dataform.ColumnDescriptor.DimensionType.TIMESTAMP, - aggregation: dataform.ColumnDescriptor.Aggregation.DISTINCT, + dimensionType: core.ColumnDescriptor_DimensionType.TIMESTAMP, + aggregation: core.ColumnDescriptor_Aggregation.DISTINCT, expression: "1" }) ); diff --git a/tests/integration/bigquery.spec.ts b/tests/integration/bigquery.spec.ts index 1a1384ea8..fcadcd923 100644 --- a/tests/integration/bigquery.spec.ts +++ b/tests/integration/bigquery.spec.ts @@ -486,10 +486,7 @@ suite("@dataform/integration/bigquery", { parallel: true }, ({ before, after }) }); }); -async function cleanWarehouse( - compiledGraph: dataform.CompiledGraph, - dbadapter: dbadapters.IDbAdapter -) { +async function cleanWarehouse(compiledGraph: core.CompiledGraph, dbadapter: dbadapters.IDbAdapter) { await dropAllTables( (await dfapi.build(compiledGraph, {}, dbadapter)).warehouseState.tables, adapters.create(compiledGraph.projectConfig, compiledGraph.dataformCoreVersion), diff --git a/vscode/server.ts b/vscode/server.ts index b21879241..350d69890 100644 --- a/vscode/server.ts +++ b/vscode/server.ts @@ -13,7 +13,7 @@ import { TextDocument } from "vscode-languageserver-textdocument"; const connection = createConnection(ProposedFeatures.all); const documents: TextDocuments = new TextDocuments(TextDocument); -let CACHED_COMPILE_GRAPH: dataform.CompiledGraph = null; +let CACHED_COMPILE_GRAPH: core.CompiledGraph = null; let WORKSPACE_ROOT_FOLDER: string = null; connection.onInitialize(() => { @@ -56,7 +56,7 @@ async function compileAndValidate() { }); const compileResult = await getProcessResult(spawnedProcess); - const parsedResult: dataform.CompiledGraph = JSON.parse(compileResult.stdout); + const parsedResult: core.CompiledGraph = JSON.parse(compileResult.stdout); if (parsedResult?.graphErrors?.compilationErrors) { parsedResult.graphErrors.compilationErrors.forEach(compilationError => { connection.sendNotification("error", compilationError.message); @@ -80,7 +80,7 @@ async function getProcessResult(childProcess: ChildProcess) { function gatherAllActions( graph = CACHED_COMPILE_GRAPH -): Array { +): Array { return [].concat(graph.tables, graph.operations, graph.assertions, graph.declarations); } From 6da44776f4f8ab675074e26c3e716be0f11aab54 Mon Sep 17 00:00:00 2001 From: Elias Kassell Date: Fri, 17 Feb 2023 17:19:10 +0000 Subject: [PATCH 9/9] Progress adding object type inference --- .../npm_translate_lock_LTE4Nzc1MDcwNjU= | 4 +-- core/adapters/index.ts | 6 ++-- core/session.ts | 25 ++++++++++------ package.json | 2 +- pnpm-lock.yaml | 2 +- tools/BUILD | 30 ------------------- tools/ts_proto_library.bzl | 8 ++--- 7 files changed, 27 insertions(+), 50 deletions(-) diff --git a/.aspect/rules/external_repository_action_cache/npm_translate_lock_LTE4Nzc1MDcwNjU= b/.aspect/rules/external_repository_action_cache/npm_translate_lock_LTE4Nzc1MDcwNjU= index 0d77b7840..bc67cf6e5 100755 --- a/.aspect/rules/external_repository_action_cache/npm_translate_lock_LTE4Nzc1MDcwNjU= +++ b/.aspect/rules/external_repository_action_cache/npm_translate_lock_LTE4Nzc1MDcwNjU= @@ -1,4 +1,4 @@ # Input hashes for repository rule npm_translate_lock(name = "npm", pnpm_lock = "//:pnpm-lock.yaml"). # This file should be checked into version control along with the pnpm-lock.yaml file. -pnpm-lock.yaml=-960674938 -package.json=-1148013635 +pnpm-lock.yaml=374681099 +package.json=-1895465316 diff --git a/core/adapters/index.ts b/core/adapters/index.ts index 69d8869fe..dfefd2579 100644 --- a/core/adapters/index.ts +++ b/core/adapters/index.ts @@ -133,7 +133,7 @@ export function collectEvaluationQueries( validationQueries.push({ query: queryModifier(queryOrAction) }); } else { try { - if (queryOrAction instanceof core.Table) { + if (queryOrAction.$type === "dataform.Table") { if (queryOrAction.enumType === core.TableType.INCREMENTAL) { const incrementalTableQueries = queryOrAction.incrementalPreOps.concat( queryOrAction.incrementalQuery, @@ -161,7 +161,7 @@ export function collectEvaluationQueries( } else { tableQueries.forEach(q => validationQueries.push({ query: queryModifier(q) })); } - } else if (queryOrAction instanceof core.Operation) { + } else if (queryOrAction.$type === "dataform.Operation") { if (concatenate) { validationQueries.push({ query: concatenateQueries(queryOrAction.queries, queryModifier) @@ -169,7 +169,7 @@ export function collectEvaluationQueries( } else { queryOrAction.queries.forEach(q => validationQueries.push({ query: queryModifier(q) })); } - } else if (queryOrAction instanceof core.Assertion) { + } else if (queryOrAction.$type === "dataform.Assertion") { validationQueries.push({ query: queryModifier(queryOrAction.query) }); } else { throw new Error("Unrecognized evaluate type."); diff --git a/core/session.ts b/core/session.ts index 3a452d350..ec7632d43 100644 --- a/core/session.ts +++ b/core/session.ts @@ -88,7 +88,7 @@ export class Session { ); this.actions = []; this.tests = {}; - this.graphErrors = { compilationErrors: [] }; + this.graphErrors = core.GraphErrors.create({ compilationErrors: [] }); } public get projectConfig(): Pick< @@ -200,11 +200,13 @@ export class Session { .queries(actionOptions.sqlContextable); break; case "declaration": - this.declare({ - database: sqlxConfig.database, - schema: sqlxConfig.schema, - name: sqlxConfig.name - }).config(sqlxConfig); + this.declare( + core.Target.create({ + database: sqlxConfig.database, + schema: sqlxConfig.schema, + name: sqlxConfig.name + }) + ).config(sqlxConfig); break; case "test": const testCase = this.test(sqlxConfig.name) @@ -382,8 +384,12 @@ export class Session { const compiledGraph = core.CompiledGraph.create({ projectConfig: this.config, tables: this.compileGraphChunk( - this.actions.filter(action => action instanceof Table), - core.Table.verify + this.actions.filter(action => action instanceof Table) as Table[], + (proto: Table) => core.Table.create(proto as any) as any + ), + operations: this.compileGraphChunk( + this.actions.filter(action => action instanceof Table) as Table[], + (table: Table) => core.Table.create(table as any) ), operations: this.compileGraphChunk( this.actions.filter(action => action instanceof Operation), @@ -468,7 +474,7 @@ export class Session { private compileGraphChunk( actions: Array<{ proto: IActionProto; compile(): T }>, - verify: (proto: T) => string + verify: (proto: T) => any ): T[] { const compiledChunks: T[] = []; @@ -476,6 +482,7 @@ export class Session { try { const compiledChunk = action.compile(); utils.throwIfInvalid(compiledChunk, verify); + compiledChunks.push(compiledChunk); } catch (e) { this.compileError(e, action.proto.fileName, action.proto.target); diff --git a/package.json b/package.json index 6dd094506..a12dc7ed7 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "@types/long": "^4.0.0", "@types/moo": "^0.5.0", "@types/mssql": "^6.0.8", - "@types/node": "^12.12.6", + "@types/node": "^12.20.55", "@types/node-cache": "^4.2.5", "@types/object-hash": "^1.3.1", "@types/pg": "^7.14.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1b2af510c..c7ea1efc4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -31,7 +31,7 @@ specifiers: '@types/long': ^4.0.0 '@types/moo': ^0.5.0 '@types/mssql': ^6.0.8 - '@types/node': ^12.12.6 + '@types/node': ^12.20.55 '@types/node-cache': ^4.2.5 '@types/object-hash': ^1.3.1 '@types/pg': ^7.14.5 diff --git a/tools/BUILD b/tools/BUILD index 67b0a5af6..c8a8c9ae0 100644 --- a/tools/BUILD +++ b/tools/BUILD @@ -1,4 +1,3 @@ -# load("//:node_modules/ts-proto/package_json.bzl", _ts_proto_bin_factories = "bin") load("@npm//:ts-proto/package_json.bzl", _ts_proto_bin_factories = "bin") load("@rules_proto_grpc//:defs.bzl", "proto_plugin") @@ -15,32 +14,3 @@ proto_plugin( tool = ":protoc-gen-ts-proto", use_built_in_shell_environment = False, ) - -# load("@rules_proto_grpc//:defs.bzl", "proto_plugin") -# load("@npm//:@protobuf-ts/plugin/package_json.bzl", protobuf_ts_plugin = "bin") - -# package(default_visibility = ["//visibility:public"]) - -# exports_files(["ts_proto_library.bzl"]) - -# protobuf_ts_plugin.protoc_gen_ts_binary( -# name = "protoc_gen_ts", -# ) - -# proto_plugin( -# name = "ts_proto_compile", -# outputs = [ -# "{protopath}.ts", -# ], -# tool = ":protoc_gen_ts", -# use_built_in_shell_environment = False, -# ) - -# proto_plugin( -# name = "ts_grpc_proto_compile", -# outputs = [ -# "{protopath}.client.ts", -# ], -# tool = ":protoc_gen_ts", -# use_built_in_shell_environment = False, -# ) diff --git a/tools/ts_proto_library.bzl b/tools/ts_proto_library.bzl index 947648f48..d3f2d39af 100644 --- a/tools/ts_proto_library.bzl +++ b/tools/ts_proto_library.bzl @@ -15,9 +15,6 @@ def _ts_proto_compile_impl(ctx): "BAZEL_BINDIR": ctx.bin_dir.path, } return proto_compile_impl(ctx, base_env = base_env) - # return proto_compile_impl(ctx) - -# proto_compile_attrs.extra_protoc_args = # based on https://github.com/aspect-build/rules_js/issues/397 ts_proto_compile = rule( @@ -31,7 +28,10 @@ ts_proto_compile = rule( ], doc = "List of protoc plugins to apply", ), - extra_protoc_args = attr.string_list(default = ["--ts_proto_opt=esModuleInterop=true"]), + extra_protoc_args = attr.string_list(default = [ + "--ts_proto_opt=esModuleInterop=true", + "--ts_proto_opt=outputTypeRegistry=true", + ]), ), toolchains = [ str(Label("@rules_proto_grpc//protobuf:toolchain_type")),