Merge changes If73657de,I2602fe22
* changes:
Support perfetto::DynamicString in legacy macro
Support perfetto::DynamicString event name
diff --git a/Android.bp b/Android.bp
index e24a5fe..32a0e4f 100644
--- a/Android.bp
+++ b/Android.bp
@@ -8800,6 +8800,7 @@
"src/trace_processor/importers/syscalls/syscall_tracker_unittest.cc",
"src/trace_processor/importers/systrace/systrace_parser_unittest.cc",
"src/trace_processor/ref_counted_unittest.cc",
+ "src/trace_processor/trace_sorter_queue_unittest.cc",
"src/trace_processor/trace_sorter_unittest.cc",
],
}
@@ -8858,6 +8859,14 @@
name: "perfetto_src_trace_processor_util_util",
}
+// GN: //src/trace_processor/views:unittests
+filegroup {
+ name: "perfetto_src_trace_processor_views_unittests",
+ srcs: [
+ "src/trace_processor/views/macros_unittest.cc",
+ ],
+}
+
// GN: //src/trace_processor/views:views
filegroup {
name: "perfetto_src_trace_processor_views_views",
@@ -10062,6 +10071,7 @@
":perfetto_src_trace_processor_util_protozero_to_text",
":perfetto_src_trace_processor_util_unittests",
":perfetto_src_trace_processor_util_util",
+ ":perfetto_src_trace_processor_views_unittests",
":perfetto_src_trace_processor_views_views",
":perfetto_src_traced_probes_android_log_android_log",
":perfetto_src_traced_probes_android_log_unittests",
diff --git a/BUILD b/BUILD
index cec57ae..803b225 100644
--- a/BUILD
+++ b/BUILD
@@ -1618,6 +1618,7 @@
"src/trace_processor/trace_processor_storage_impl.h",
"src/trace_processor/trace_sorter.cc",
"src/trace_processor/trace_sorter.h",
+ "src/trace_processor/trace_sorter_queue.h",
"src/trace_processor/virtual_destructors.cc",
],
)
diff --git a/docs/analysis/common-queries.md b/docs/analysis/common-queries.md
new file mode 100644
index 0000000..98e8c1f
--- /dev/null
+++ b/docs/analysis/common-queries.md
@@ -0,0 +1,59 @@
+# Common queries
+
+This page acts as a reference guide for queries which often appear when
+performing ad-hoc analysis.
+
+## Computing CPU time for slices
+If collecting traces which including scheduling information (i.e. from ftrace)
+as well as userspace slices (i.e. from atrace), the actual time spent running
+on a CPU for each userspace slice can be computed: this is commonly known as
+the "CPU time" for a slice.
+
+Firstly, setup the views to simplify subsequent queries:
+```
+DROP VIEW IF EXISTS slice_with_utid;
+CREATE VIEW slice_with_utid AS
+SELECT
+ ts,
+ dur,
+ slice.name as slice_name,
+ slice.id as slice_id, utid,
+ thread.name as thread_name
+FROM slice
+JOIN thread_track ON thread_track.id = slice.track_id
+JOIN thread USING (utid);
+
+DROP TABLE IF EXISTS slice_thread_state_breakdown;
+CREATE VIRTUAL TABLE slice_thread_state_breakdown
+USING SPAN_LEFT_JOIN(
+ slice_with_utid PARTITIONED utid,
+ thread_state PARTITIONED utid
+);
+```
+
+Then, to compute the CPU time for all slices in the trace:
+```
+SELECT slice_id, slice_name, SUM(dur) AS cpu_time
+FROM slice_thread_state_breakdown
+WHERE state = 'Running'
+GROUP BY slice_id;
+```
+
+You can also compute CPU time for a specific slice:
+```
+SELECT slice_name, SUM(dur) AS cpu_time
+FROM slice_thread_state_breakdown
+WHERE slice_id = <your slice id> AND state = 'Running';
+```
+
+These queries can be varied easily to compute other similar metrics.
+For example to get the time spent "runnable" and in "uninterruptible sleep":
+```
+SELECT
+ slice_id,
+ slice_name,
+ SUM(CASE state = 'R' THEN dur ELSE 0 END) AS runnable_time,
+ SUM(CASE state = 'D' THEN dur ELSE 0 END) AS uninterruptible_time
+FROM slice_thread_state_breakdown
+GROUP BY slice_id;
+```
diff --git a/docs/contributing/common-tasks.md b/docs/contributing/common-tasks.md
index 111c4d8..5ef5dae 100644
--- a/docs/contributing/common-tasks.md
+++ b/docs/contributing/common-tasks.md
@@ -6,7 +6,7 @@
1. Find the `format` file for your event. The location of the file depends where `tracefs` is mounted but can often be found at `/sys/kernel/debug/tracing/events/EVENT_GROUP/EVENT_NAME/format`.
2. Copy the format file into the codebase at `src/traced/probes/ftrace/test/data/synthetic/events/EVENT_GROUP/EVENT_NAME/format`.
-3. Add the event to [src/traced/probes/ftrace/proto_gen/event_list](/src/traced/probes/ftrace/proto_gen/event_list).
+3. Add the event to [src/tools/ftrace_proto_gen/event_list](/src/tools/ftrace_proto_gen/event_list).
4. Run `tools/run_ftrace_proto_gen`. This will update `protos/perfetto/trace/ftrace/ftrace_event.proto` and `protos/perfetto/trace/ftrace/GROUP_NAME.proto`.
5. Run `tools/gen_all out/YOUR_BUILD_DIRECTORY`. This will update `src/traced/probes/ftrace/event_info.cc` and `protos/perfetto/trace/perfetto_trace.proto`.
6. If special handling in `trace_processor` is desired update [src/trace_processor/importers/ftrace/ftrace_parser.cc](/src/trace_processor/importers/ftrace/ftrace_parser.cc) to parse the event.
diff --git a/docs/toc.md b/docs/toc.md
index 0142029..be3b621 100644
--- a/docs/toc.md
+++ b/docs/toc.md
@@ -36,6 +36,7 @@
* [Trace analysis](#)
* [Trace Processor (SQL)](analysis/trace-processor.md)
* [Trace-based metrics](analysis/metrics.md)
+ * [Common queries](analysis/common-queries.md)
* [SQL tables](analysis/sql-tables.autogen)
* [Stats table](analysis/sql-stats.autogen)
diff --git a/infra/luci/recipes/perfetto.py b/infra/luci/recipes/perfetto.py
index 8b9fb0d..5df8c89 100644
--- a/infra/luci/recipes/perfetto.py
+++ b/infra/luci/recipes/perfetto.py
@@ -43,15 +43,7 @@
'name': 'trace_processor_shell'
},
{
- 'name':
- 'traceconv',
-
- # traceconv is really a host exeutable, doesn't make sense to build
- # it when cross-compiling .
- 'exclude_platforms': [
- 'android-arm', 'android-arm64', 'android-x86', 'android-x64',
- 'linux-arm', 'linux-arm64'
- ]
+ 'name': 'traceconv',
},
{
'name': 'tracebox',
diff --git a/infra/perfetto.dev/package-lock.json b/infra/perfetto.dev/package-lock.json
index b722b8c..c76c332 100644
--- a/infra/perfetto.dev/package-lock.json
+++ b/infra/perfetto.dev/package-lock.json
@@ -1,13 +1,3744 @@
{
"name": "perfetto-dev",
"version": "1.0.0",
- "lockfileVersion": 1,
+ "lockfileVersion": 2,
"requires": true,
- "dependencies": {
- "@braintree/sanitize-url": {
+ "packages": {
+ "": {
+ "name": "perfetto-dev",
+ "version": "1.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "mermaid": "^9.1.1"
+ },
+ "devDependencies": {
+ "argparse": "^2.0.1",
+ "ejs": "^3.0.1",
+ "fs-extra": "^9.0.0",
+ "highlight.js": "^10.1.2",
+ "marked": "^4.0.16",
+ "node-sass": "^7.0.1",
+ "node-watch": "^0.7.3",
+ "protobufjs": "^6.9.0"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
+ "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/highlight": "^7.16.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
+ "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight": {
+ "version": "7.17.12",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz",
+ "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.16.7",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@braintree/sanitize-url": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.0.tgz",
+ "integrity": "sha512-mgmE7XBYY/21erpzhexk4Cj1cyTQ9LzvnTxtzM17BJ7ERMNE6W72mQRo0I1Ud8eFJ+RVVIcBNhLFZ3GX4XFz5w=="
+ },
+ "node_modules/@gar/promisify": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz",
+ "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==",
+ "dev": true
+ },
+ "node_modules/@npmcli/fs": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz",
+ "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==",
+ "dev": true,
+ "dependencies": {
+ "@gar/promisify": "^1.0.1",
+ "semver": "^7.3.5"
+ }
+ },
+ "node_modules/@npmcli/move-file": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz",
+ "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==",
+ "dev": true,
+ "dependencies": {
+ "mkdirp": "^1.0.4",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@protobufjs/aspromise": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
+ "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=",
+ "dev": true
+ },
+ "node_modules/@protobufjs/base64": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
+ "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==",
+ "dev": true
+ },
+ "node_modules/@protobufjs/codegen": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
+ "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==",
+ "dev": true
+ },
+ "node_modules/@protobufjs/eventemitter": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
+ "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=",
+ "dev": true
+ },
+ "node_modules/@protobufjs/fetch": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
+ "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=",
+ "dev": true,
+ "dependencies": {
+ "@protobufjs/aspromise": "^1.1.1",
+ "@protobufjs/inquire": "^1.1.0"
+ }
+ },
+ "node_modules/@protobufjs/float": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
+ "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=",
+ "dev": true
+ },
+ "node_modules/@protobufjs/inquire": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
+ "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=",
+ "dev": true
+ },
+ "node_modules/@protobufjs/path": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
+ "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=",
+ "dev": true
+ },
+ "node_modules/@protobufjs/pool": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
+ "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=",
+ "dev": true
+ },
+ "node_modules/@protobufjs/utf8": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
+ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=",
+ "dev": true
+ },
+ "node_modules/@tootallnate/once": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
+ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/@types/long": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz",
+ "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==",
+ "dev": true
+ },
+ "node_modules/@types/minimist": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz",
+ "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==",
+ "dev": true
+ },
+ "node_modules/@types/node": {
+ "version": "13.13.41",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.41.tgz",
+ "integrity": "sha512-qLT9IvHiXJfdrje9VmsLzun7cQ65obsBTmtU3EOnCSLFOoSHx1hpiRHoBnpdbyFqnzqdUUIv81JcEJQCB8un9g==",
+ "dev": true
+ },
+ "node_modules/@types/normalize-package-data": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz",
+ "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==",
+ "dev": true
+ },
+ "node_modules/abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+ "dev": true
+ },
+ "node_modules/agent-base": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "dev": true,
+ "dependencies": {
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
+ "node_modules/agentkeepalive": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz",
+ "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.1.0",
+ "depd": "^1.1.2",
+ "humanize-ms": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 8.0.0"
+ }
+ },
+ "node_modules/aggregate-error": {
"version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-3.1.0.tgz",
- "integrity": "sha512-GcIY79elgB+azP74j8vqkiXz8xLFfIzbQJdlwOPisgbKT00tviJQuEghOXSMVxJ00HoYJbGswr4kcllUc4xCcg=="
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "dev": true,
+ "dependencies": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/aproba": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
+ "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==",
+ "dev": true
+ },
+ "node_modules/are-we-there-yet": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
+ "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==",
+ "dev": true,
+ "dependencies": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^3.6.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/are-we-there-yet/node_modules/readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "node_modules/arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/asn1": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
+ "dev": true,
+ "dependencies": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "node_modules/assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/async": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz",
+ "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==",
+ "dev": true
+ },
+ "node_modules/async-foreach": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
+ "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "dev": true
+ },
+ "node_modules/at-least-node": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
+ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/aws4": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
+ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==",
+ "dev": true
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "node_modules/bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
+ "dev": true,
+ "dependencies": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/cacache": {
+ "version": "15.3.0",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz",
+ "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==",
+ "dev": true,
+ "dependencies": {
+ "@npmcli/fs": "^1.0.0",
+ "@npmcli/move-file": "^1.0.1",
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "glob": "^7.1.4",
+ "infer-owner": "^1.0.4",
+ "lru-cache": "^6.0.0",
+ "minipass": "^3.1.1",
+ "minipass-collect": "^1.0.2",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.2",
+ "mkdirp": "^1.0.3",
+ "p-map": "^4.0.0",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^3.0.2",
+ "ssri": "^8.0.1",
+ "tar": "^6.0.2",
+ "unique-filename": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase-keys": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz",
+ "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==",
+ "dev": true,
+ "dependencies": {
+ "camelcase": "^5.3.1",
+ "map-obj": "^4.0.0",
+ "quick-lru": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==",
+ "dev": true
+ },
+ "node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/chownr": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "node_modules/color-support": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
+ "dev": true,
+ "bin": {
+ "color-support": "bin.js"
+ }
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dev": true,
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "node_modules/console-control-strings": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==",
+ "dev": true
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/d3": {
+ "version": "5.16.0",
+ "resolved": "https://registry.npmjs.org/d3/-/d3-5.16.0.tgz",
+ "integrity": "sha512-4PL5hHaHwX4m7Zr1UapXW23apo6pexCgdetdJ5kTmADpG/7T9Gkxw0M0tf/pjoB63ezCCm0u5UaFYy2aMt0Mcw==",
+ "dependencies": {
+ "d3-array": "1",
+ "d3-axis": "1",
+ "d3-brush": "1",
+ "d3-chord": "1",
+ "d3-collection": "1",
+ "d3-color": "1",
+ "d3-contour": "1",
+ "d3-dispatch": "1",
+ "d3-drag": "1",
+ "d3-dsv": "1",
+ "d3-ease": "1",
+ "d3-fetch": "1",
+ "d3-force": "1",
+ "d3-format": "1",
+ "d3-geo": "1",
+ "d3-hierarchy": "1",
+ "d3-interpolate": "1",
+ "d3-path": "1",
+ "d3-polygon": "1",
+ "d3-quadtree": "1",
+ "d3-random": "1",
+ "d3-scale": "2",
+ "d3-scale-chromatic": "1",
+ "d3-selection": "1",
+ "d3-shape": "1",
+ "d3-time": "1",
+ "d3-time-format": "2",
+ "d3-timer": "1",
+ "d3-transition": "1",
+ "d3-voronoi": "1",
+ "d3-zoom": "1"
+ }
+ },
+ "node_modules/d3-array": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz",
+ "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw=="
+ },
+ "node_modules/d3-axis": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.12.tgz",
+ "integrity": "sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ=="
+ },
+ "node_modules/d3-brush": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.1.6.tgz",
+ "integrity": "sha512-7RW+w7HfMCPyZLifTz/UnJmI5kdkXtpCbombUSs8xniAyo0vIbrDzDwUJB6eJOgl9u5DQOt2TQlYumxzD1SvYA==",
+ "dependencies": {
+ "d3-dispatch": "1",
+ "d3-drag": "1",
+ "d3-interpolate": "1",
+ "d3-selection": "1",
+ "d3-transition": "1"
+ }
+ },
+ "node_modules/d3-chord": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.6.tgz",
+ "integrity": "sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==",
+ "dependencies": {
+ "d3-array": "1",
+ "d3-path": "1"
+ }
+ },
+ "node_modules/d3-collection": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz",
+ "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A=="
+ },
+ "node_modules/d3-color": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz",
+ "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q=="
+ },
+ "node_modules/d3-contour": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-1.3.2.tgz",
+ "integrity": "sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==",
+ "dependencies": {
+ "d3-array": "^1.1.1"
+ }
+ },
+ "node_modules/d3-delaunay": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.2.tgz",
+ "integrity": "sha512-IMLNldruDQScrcfT+MWnazhHbDJhcRJyOEBAJfwQnHle1RPh6WDuLvxNArUju2VSMSUuKlY5BGHRJ2cYyoFLQQ==",
+ "dependencies": {
+ "delaunator": "5"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-dispatch": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz",
+ "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA=="
+ },
+ "node_modules/d3-drag": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.5.tgz",
+ "integrity": "sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==",
+ "dependencies": {
+ "d3-dispatch": "1",
+ "d3-selection": "1"
+ }
+ },
+ "node_modules/d3-dsv": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.2.0.tgz",
+ "integrity": "sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g==",
+ "dependencies": {
+ "commander": "2",
+ "iconv-lite": "0.4",
+ "rw": "1"
+ },
+ "bin": {
+ "csv2json": "bin/dsv2json",
+ "csv2tsv": "bin/dsv2dsv",
+ "dsv2dsv": "bin/dsv2dsv",
+ "dsv2json": "bin/dsv2json",
+ "json2csv": "bin/json2dsv",
+ "json2dsv": "bin/json2dsv",
+ "json2tsv": "bin/json2dsv",
+ "tsv2csv": "bin/dsv2dsv",
+ "tsv2json": "bin/dsv2json"
+ }
+ },
+ "node_modules/d3-ease": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.7.tgz",
+ "integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ=="
+ },
+ "node_modules/d3-fetch": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-1.2.0.tgz",
+ "integrity": "sha512-yC78NBVcd2zFAyR/HnUiBS7Lf6inSCoWcSxFfw8FYL7ydiqe80SazNwoffcqOfs95XaLo7yebsmQqDKSsXUtvA==",
+ "dependencies": {
+ "d3-dsv": "1"
+ }
+ },
+ "node_modules/d3-force": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz",
+ "integrity": "sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==",
+ "dependencies": {
+ "d3-collection": "1",
+ "d3-dispatch": "1",
+ "d3-quadtree": "1",
+ "d3-timer": "1"
+ }
+ },
+ "node_modules/d3-format": {
+ "version": "1.4.5",
+ "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz",
+ "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ=="
+ },
+ "node_modules/d3-geo": {
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.12.1.tgz",
+ "integrity": "sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==",
+ "dependencies": {
+ "d3-array": "1"
+ }
+ },
+ "node_modules/d3-hierarchy": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz",
+ "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ=="
+ },
+ "node_modules/d3-interpolate": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz",
+ "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==",
+ "dependencies": {
+ "d3-color": "1"
+ }
+ },
+ "node_modules/d3-path": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz",
+ "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg=="
+ },
+ "node_modules/d3-polygon": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.6.tgz",
+ "integrity": "sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ=="
+ },
+ "node_modules/d3-quadtree": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.7.tgz",
+ "integrity": "sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA=="
+ },
+ "node_modules/d3-random": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.2.tgz",
+ "integrity": "sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ=="
+ },
+ "node_modules/d3-scale": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz",
+ "integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==",
+ "dependencies": {
+ "d3-array": "^1.2.0",
+ "d3-collection": "1",
+ "d3-format": "1",
+ "d3-interpolate": "1",
+ "d3-time": "1",
+ "d3-time-format": "2"
+ }
+ },
+ "node_modules/d3-scale-chromatic": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz",
+ "integrity": "sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==",
+ "dependencies": {
+ "d3-color": "1",
+ "d3-interpolate": "1"
+ }
+ },
+ "node_modules/d3-selection": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz",
+ "integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg=="
+ },
+ "node_modules/d3-shape": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz",
+ "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==",
+ "dependencies": {
+ "d3-path": "1"
+ }
+ },
+ "node_modules/d3-time": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz",
+ "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA=="
+ },
+ "node_modules/d3-time-format": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz",
+ "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==",
+ "dependencies": {
+ "d3-time": "1"
+ }
+ },
+ "node_modules/d3-timer": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz",
+ "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw=="
+ },
+ "node_modules/d3-transition": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.3.2.tgz",
+ "integrity": "sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==",
+ "dependencies": {
+ "d3-color": "1",
+ "d3-dispatch": "1",
+ "d3-ease": "1",
+ "d3-interpolate": "1",
+ "d3-selection": "^1.1.0",
+ "d3-timer": "1"
+ }
+ },
+ "node_modules/d3-voronoi": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.4.tgz",
+ "integrity": "sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg=="
+ },
+ "node_modules/d3-zoom": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.8.3.tgz",
+ "integrity": "sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ==",
+ "dependencies": {
+ "d3-dispatch": "1",
+ "d3-drag": "1",
+ "d3-interpolate": "1",
+ "d3-selection": "1",
+ "d3-transition": "1"
+ }
+ },
+ "node_modules/dagre": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/dagre/-/dagre-0.8.5.tgz",
+ "integrity": "sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==",
+ "dependencies": {
+ "graphlib": "^2.1.8",
+ "lodash": "^4.17.15"
+ }
+ },
+ "node_modules/dagre-d3": {
+ "version": "0.6.4",
+ "resolved": "https://registry.npmjs.org/dagre-d3/-/dagre-d3-0.6.4.tgz",
+ "integrity": "sha512-e/6jXeCP7/ptlAM48clmX4xTZc5Ek6T6kagS7Oz2HrYSdqcLZFLqpAfh7ldbZRFfxCZVyh61NEPR08UQRVxJzQ==",
+ "dependencies": {
+ "d3": "^5.14",
+ "dagre": "^0.8.5",
+ "graphlib": "^2.1.8",
+ "lodash": "^4.17.15"
+ }
+ },
+ "node_modules/dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
+ "dev": true,
+ "dependencies": {
+ "assert-plus": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decamelize-keys": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
+ "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==",
+ "dev": true,
+ "dependencies": {
+ "decamelize": "^1.1.0",
+ "map-obj": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decamelize-keys/node_modules/map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/delaunator": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz",
+ "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==",
+ "dependencies": {
+ "robust-predicates": "^3.0.0"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/delegates": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==",
+ "dev": true
+ },
+ "node_modules/depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/dompurify": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.3.6.tgz",
+ "integrity": "sha512-OFP2u/3T1R5CEgWCEONuJ1a5+MFKnOYpkywpUSxv/dj1LeBT1erK+JwM7zK0ROy2BRhqVCf0LRw/kHqKuMkVGg=="
+ },
+ "node_modules/ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
+ "dev": true,
+ "dependencies": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "node_modules/ejs": {
+ "version": "3.1.8",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz",
+ "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==",
+ "dev": true,
+ "dependencies": {
+ "jake": "^10.8.5"
+ },
+ "bin": {
+ "ejs": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "node_modules/encoding": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
+ "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "iconv-lite": "^0.6.2"
+ }
+ },
+ "node_modules/encoding/node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/env-paths": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
+ "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/err-code": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
+ "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==",
+ "dev": true
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
+ },
+ "node_modules/extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
+ "dev": true,
+ "engines": [
+ "node >=0.6.0"
+ ]
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "node_modules/filelist": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
+ "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
+ "dev": true,
+ "dependencies": {
+ "minimatch": "^5.0.1"
+ }
+ },
+ "node_modules/filelist/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/filelist/node_modules/minimatch": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz",
+ "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/form-data": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+ "dev": true,
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 0.12"
+ }
+ },
+ "node_modules/fs-extra": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
+ "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+ "dev": true,
+ "dependencies": {
+ "at-least-node": "^1.0.0",
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/fs-minipass": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
+ "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+ "dev": true,
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "node_modules/gauge": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz",
+ "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==",
+ "dev": true,
+ "dependencies": {
+ "aproba": "^1.0.3 || ^2.0.0",
+ "color-support": "^1.1.2",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.1",
+ "object-assign": "^4.1.1",
+ "signal-exit": "^3.0.0",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1",
+ "wide-align": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/gaze": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
+ "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==",
+ "dev": true,
+ "dependencies": {
+ "globule": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
+ "dev": true,
+ "dependencies": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/globule": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz",
+ "integrity": "sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==",
+ "dev": true,
+ "dependencies": {
+ "glob": "~7.1.1",
+ "lodash": "~4.17.10",
+ "minimatch": "~3.0.2"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.6",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
+ "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==",
+ "dev": true
+ },
+ "node_modules/graphlib": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz",
+ "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==",
+ "dependencies": {
+ "lodash": "^4.17.15"
+ }
+ },
+ "node_modules/har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/har-validator": {
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
+ "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
+ "deprecated": "this library is no longer supported",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.12.3",
+ "har-schema": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/hard-rejection": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
+ "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/has-unicode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==",
+ "dev": true
+ },
+ "node_modules/highlight.js": {
+ "version": "10.6.0",
+ "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.6.0.tgz",
+ "integrity": "sha512-8mlRcn5vk/r4+QcqerapwBYTe+iPL5ih6xrNylxrnBdHQiijDETfXX7VIxC3UiCRiINBJfANBAsPzAvRQj8RpQ==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/hosted-git-info": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
+ "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/http-cache-semantics": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
+ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==",
+ "dev": true
+ },
+ "node_modules/http-proxy-agent": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
+ "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
+ "dev": true,
+ "dependencies": {
+ "@tootallnate/once": "1",
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
+ "dev": true,
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ },
+ "engines": {
+ "node": ">=0.8",
+ "npm": ">=1.3.7"
+ }
+ },
+ "node_modules/https-proxy-agent": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+ "dev": true,
+ "dependencies": {
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/humanize-ms": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
+ "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.0.0"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/infer-owner": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
+ "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
+ "dev": true
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "node_modules/internmap": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
+ "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/ip": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz",
+ "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==",
+ "dev": true
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "dev": true
+ },
+ "node_modules/is-core-module": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
+ "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
+ "dev": true,
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-lambda": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz",
+ "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==",
+ "dev": true
+ },
+ "node_modules/is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==",
+ "dev": true
+ },
+ "node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "node_modules/isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==",
+ "dev": true
+ },
+ "node_modules/jake": {
+ "version": "10.8.5",
+ "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz",
+ "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==",
+ "dev": true,
+ "dependencies": {
+ "async": "^3.2.3",
+ "chalk": "^4.0.2",
+ "filelist": "^1.0.1",
+ "minimatch": "^3.0.4"
+ },
+ "bin": {
+ "jake": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/jake/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jake/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jake/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jake/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/jake/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jake/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/js-base64": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
+ "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==",
+ "dev": true
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ },
+ "node_modules/jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==",
+ "dev": true
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true
+ },
+ "node_modules/json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
+ "dev": true
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "node_modules/json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==",
+ "dev": true
+ },
+ "node_modules/jsonfile": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "dev": true,
+ "dependencies": {
+ "universalify": "^2.0.0"
+ },
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/jsprim": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
+ "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
+ "dev": true,
+ "dependencies": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.4.0",
+ "verror": "1.10.0"
+ },
+ "engines": {
+ "node": ">=0.6.0"
+ }
+ },
+ "node_modules/khroma": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz",
+ "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g=="
+ },
+ "node_modules/kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true
+ },
+ "node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
+ "node_modules/long": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
+ "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==",
+ "dev": true
+ },
+ "node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/make-fetch-happen": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz",
+ "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==",
+ "dev": true,
+ "dependencies": {
+ "agentkeepalive": "^4.1.3",
+ "cacache": "^15.2.0",
+ "http-cache-semantics": "^4.1.0",
+ "http-proxy-agent": "^4.0.1",
+ "https-proxy-agent": "^5.0.0",
+ "is-lambda": "^1.0.1",
+ "lru-cache": "^6.0.0",
+ "minipass": "^3.1.3",
+ "minipass-collect": "^1.0.2",
+ "minipass-fetch": "^1.3.2",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.4",
+ "negotiator": "^0.6.2",
+ "promise-retry": "^2.0.1",
+ "socks-proxy-agent": "^6.0.0",
+ "ssri": "^8.0.0"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/map-obj": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
+ "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/marked": {
+ "version": "4.0.16",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.16.tgz",
+ "integrity": "sha512-wahonIQ5Jnyatt2fn8KqF/nIqZM8mh3oRu2+l5EANGMhu6RFjiSG52QNE2eWzFMI94HqYSgN184NurgNG6CztA==",
+ "dev": true,
+ "bin": {
+ "marked": "bin/marked.js"
+ },
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/meow": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz",
+ "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/minimist": "^1.2.0",
+ "camelcase-keys": "^6.2.2",
+ "decamelize": "^1.2.0",
+ "decamelize-keys": "^1.1.0",
+ "hard-rejection": "^2.1.0",
+ "minimist-options": "4.1.0",
+ "normalize-package-data": "^3.0.0",
+ "read-pkg-up": "^7.0.1",
+ "redent": "^3.0.0",
+ "trim-newlines": "^3.0.0",
+ "type-fest": "^0.18.0",
+ "yargs-parser": "^20.2.3"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mermaid": {
+ "version": "9.1.1",
+ "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-9.1.1.tgz",
+ "integrity": "sha512-2RVD+WkzZ4VDyO9gQvQAuQ/ux2gLigJtKDTlbwjYqOR/NwsVzTSfGm/kx648/qWJsg6Sv04tE9BWCO8s6a+pFA==",
+ "dependencies": {
+ "@braintree/sanitize-url": "^6.0.0",
+ "d3": "^7.0.0",
+ "dagre": "^0.8.5",
+ "dagre-d3": "^0.6.4",
+ "dompurify": "2.3.6",
+ "graphlib": "^2.1.8",
+ "khroma": "^2.0.0",
+ "moment-mini": "^2.24.0",
+ "stylis": "^4.0.10"
+ }
+ },
+ "node_modules/mermaid/node_modules/commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/mermaid/node_modules/d3": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/d3/-/d3-7.4.4.tgz",
+ "integrity": "sha512-97FE+MYdAlV3R9P74+R3Uar7wUKkIFu89UWMjEaDhiJ9VxKvqaMxauImy8PC2DdBkdM2BxJOIoLxPrcZUyrKoQ==",
+ "dependencies": {
+ "d3-array": "3",
+ "d3-axis": "3",
+ "d3-brush": "3",
+ "d3-chord": "3",
+ "d3-color": "3",
+ "d3-contour": "3",
+ "d3-delaunay": "6",
+ "d3-dispatch": "3",
+ "d3-drag": "3",
+ "d3-dsv": "3",
+ "d3-ease": "3",
+ "d3-fetch": "3",
+ "d3-force": "3",
+ "d3-format": "3",
+ "d3-geo": "3",
+ "d3-hierarchy": "3",
+ "d3-interpolate": "3",
+ "d3-path": "3",
+ "d3-polygon": "3",
+ "d3-quadtree": "3",
+ "d3-random": "3",
+ "d3-scale": "4",
+ "d3-scale-chromatic": "3",
+ "d3-selection": "3",
+ "d3-shape": "3",
+ "d3-time": "3",
+ "d3-time-format": "4",
+ "d3-timer": "3",
+ "d3-transition": "3",
+ "d3-zoom": "3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/mermaid/node_modules/d3-array": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.1.6.tgz",
+ "integrity": "sha512-DCbBBNuKOeiR9h04ySRBMW52TFVc91O9wJziuyXw6Ztmy8D3oZbmCkOO3UHKC7ceNJsN2Mavo9+vwV8EAEUXzA==",
+ "dependencies": {
+ "internmap": "1 - 2"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/mermaid/node_modules/d3-axis": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz",
+ "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/mermaid/node_modules/d3-brush": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz",
+ "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==",
+ "dependencies": {
+ "d3-dispatch": "1 - 3",
+ "d3-drag": "2 - 3",
+ "d3-interpolate": "1 - 3",
+ "d3-selection": "3",
+ "d3-transition": "3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/mermaid/node_modules/d3-chord": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz",
+ "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==",
+ "dependencies": {
+ "d3-path": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/mermaid/node_modules/d3-color": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
+ "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/mermaid/node_modules/d3-contour": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-3.0.1.tgz",
+ "integrity": "sha512-0Oc4D0KyhwhM7ZL0RMnfGycLN7hxHB8CMmwZ3+H26PWAG0ozNuYG5hXSDNgmP1SgJkQMrlG6cP20HoaSbvcJTQ==",
+ "dependencies": {
+ "d3-array": "2 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/mermaid/node_modules/d3-dispatch": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz",
+ "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/mermaid/node_modules/d3-drag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz",
+ "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==",
+ "dependencies": {
+ "d3-dispatch": "1 - 3",
+ "d3-selection": "3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/mermaid/node_modules/d3-dsv": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz",
+ "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==",
+ "dependencies": {
+ "commander": "7",
+ "iconv-lite": "0.6",
+ "rw": "1"
+ },
+ "bin": {
+ "csv2json": "bin/dsv2json.js",
+ "csv2tsv": "bin/dsv2dsv.js",
+ "dsv2dsv": "bin/dsv2dsv.js",
+ "dsv2json": "bin/dsv2json.js",
+ "json2csv": "bin/json2dsv.js",
+ "json2dsv": "bin/json2dsv.js",
+ "json2tsv": "bin/json2dsv.js",
+ "tsv2csv": "bin/dsv2dsv.js",
+ "tsv2json": "bin/dsv2json.js"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/mermaid/node_modules/d3-ease": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
+ "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/mermaid/node_modules/d3-fetch": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz",
+ "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==",
+ "dependencies": {
+ "d3-dsv": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/mermaid/node_modules/d3-force": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz",
+ "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==",
+ "dependencies": {
+ "d3-dispatch": "1 - 3",
+ "d3-quadtree": "1 - 3",
+ "d3-timer": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/mermaid/node_modules/d3-format": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz",
+ "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/mermaid/node_modules/d3-geo": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.0.1.tgz",
+ "integrity": "sha512-Wt23xBych5tSy9IYAM1FR2rWIBFWa52B/oF/GYe5zbdHrg08FU8+BuI6X4PvTwPDdqdAdq04fuWJpELtsaEjeA==",
+ "dependencies": {
+ "d3-array": "2.5.0 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/mermaid/node_modules/d3-hierarchy": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz",
+ "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/mermaid/node_modules/d3-interpolate": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
+ "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
+ "dependencies": {
+ "d3-color": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/mermaid/node_modules/d3-path": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.0.1.tgz",
+ "integrity": "sha512-gq6gZom9AFZby0YLduxT1qmrp4xpBA1YZr19OI717WIdKE2OM5ETq5qrHLb301IgxhLwcuxvGZVLeeWc/k1I6w==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/mermaid/node_modules/d3-polygon": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz",
+ "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/mermaid/node_modules/d3-quadtree": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz",
+ "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/mermaid/node_modules/d3-random": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz",
+ "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/mermaid/node_modules/d3-scale": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
+ "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
+ "dependencies": {
+ "d3-array": "2.10.0 - 3",
+ "d3-format": "1 - 3",
+ "d3-interpolate": "1.2.0 - 3",
+ "d3-time": "2.1.1 - 3",
+ "d3-time-format": "2 - 4"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/mermaid/node_modules/d3-scale-chromatic": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz",
+ "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==",
+ "dependencies": {
+ "d3-color": "1 - 3",
+ "d3-interpolate": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/mermaid/node_modules/d3-selection": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
+ "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/mermaid/node_modules/d3-shape": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.1.0.tgz",
+ "integrity": "sha512-tGDh1Muf8kWjEDT/LswZJ8WF85yDZLvVJpYU9Nq+8+yW1Z5enxrmXOhTArlkaElU+CTn0OTVNli+/i+HP45QEQ==",
+ "dependencies": {
+ "d3-path": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/mermaid/node_modules/d3-time": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.0.0.tgz",
+ "integrity": "sha512-zmV3lRnlaLI08y9IMRXSDshQb5Nj77smnfpnd2LrBa/2K281Jijactokeak14QacHs/kKq0AQ121nidNYlarbQ==",
+ "dependencies": {
+ "d3-array": "2 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/mermaid/node_modules/d3-time-format": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
+ "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
+ "dependencies": {
+ "d3-time": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/mermaid/node_modules/d3-timer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
+ "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/mermaid/node_modules/d3-transition": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz",
+ "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==",
+ "dependencies": {
+ "d3-color": "1 - 3",
+ "d3-dispatch": "1 - 3",
+ "d3-ease": "1 - 3",
+ "d3-interpolate": "1 - 3",
+ "d3-timer": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "d3-selection": "2 - 3"
+ }
+ },
+ "node_modules/mermaid/node_modules/d3-zoom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz",
+ "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==",
+ "dependencies": {
+ "d3-dispatch": "1 - 3",
+ "d3-drag": "2 - 3",
+ "d3-interpolate": "1 - 3",
+ "d3-selection": "2 - 3",
+ "d3-transition": "2 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/mermaid/node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dev": true,
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/min-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
+ "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist-options": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz",
+ "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==",
+ "dev": true,
+ "dependencies": {
+ "arrify": "^1.0.1",
+ "is-plain-obj": "^1.1.0",
+ "kind-of": "^6.0.3"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/minipass": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz",
+ "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minipass-collect": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
+ "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
+ "dev": true,
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/minipass-fetch": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz",
+ "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==",
+ "dev": true,
+ "dependencies": {
+ "minipass": "^3.1.0",
+ "minipass-sized": "^1.0.3",
+ "minizlib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "optionalDependencies": {
+ "encoding": "^0.1.12"
+ }
+ },
+ "node_modules/minipass-flush": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
+ "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
+ "dev": true,
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/minipass-pipeline": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
+ "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
+ "dev": true,
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minipass-sized": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz",
+ "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==",
+ "dev": true,
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minizlib": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
+ "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+ "dev": true,
+ "dependencies": {
+ "minipass": "^3.0.0",
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "dev": true,
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/moment-mini": {
+ "version": "2.24.0",
+ "resolved": "https://registry.npmjs.org/moment-mini/-/moment-mini-2.24.0.tgz",
+ "integrity": "sha512-9ARkWHBs+6YJIvrIp0Ik5tyTTtP9PoV0Ssu2Ocq5y9v8+NOOpWiRshAp8c4rZVWTOe+157on/5G+zj5pwIQFEQ=="
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/nan": {
+ "version": "2.14.2",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz",
+ "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==",
+ "dev": true
+ },
+ "node_modules/negotiator": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/node-gyp": {
+ "version": "8.4.1",
+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz",
+ "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==",
+ "dev": true,
+ "dependencies": {
+ "env-paths": "^2.2.0",
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.2.6",
+ "make-fetch-happen": "^9.1.0",
+ "nopt": "^5.0.0",
+ "npmlog": "^6.0.0",
+ "rimraf": "^3.0.2",
+ "semver": "^7.3.5",
+ "tar": "^6.1.2",
+ "which": "^2.0.2"
+ },
+ "bin": {
+ "node-gyp": "bin/node-gyp.js"
+ },
+ "engines": {
+ "node": ">= 10.12.0"
+ }
+ },
+ "node_modules/node-gyp/node_modules/are-we-there-yet": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz",
+ "integrity": "sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw==",
+ "dev": true,
+ "dependencies": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^3.6.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16"
+ }
+ },
+ "node_modules/node-gyp/node_modules/gauge": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz",
+ "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==",
+ "dev": true,
+ "dependencies": {
+ "aproba": "^1.0.3 || ^2.0.0",
+ "color-support": "^1.1.3",
+ "console-control-strings": "^1.1.0",
+ "has-unicode": "^2.0.1",
+ "signal-exit": "^3.0.7",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1",
+ "wide-align": "^1.1.5"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/node-gyp/node_modules/npmlog": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz",
+ "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==",
+ "dev": true,
+ "dependencies": {
+ "are-we-there-yet": "^3.0.0",
+ "console-control-strings": "^1.1.0",
+ "gauge": "^4.0.3",
+ "set-blocking": "^2.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/node-gyp/node_modules/readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/node-sass": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-7.0.1.tgz",
+ "integrity": "sha512-uMy+Xt29NlqKCFdFRZyXKOTqGt+QaKHexv9STj2WeLottnlqZEEWx6Bj0MXNthmFRRdM/YwyNo/8Tr46TOM0jQ==",
+ "dev": true,
+ "hasInstallScript": true,
+ "dependencies": {
+ "async-foreach": "^0.1.3",
+ "chalk": "^4.1.2",
+ "cross-spawn": "^7.0.3",
+ "gaze": "^1.0.0",
+ "get-stdin": "^4.0.1",
+ "glob": "^7.0.3",
+ "lodash": "^4.17.15",
+ "meow": "^9.0.0",
+ "nan": "^2.13.2",
+ "node-gyp": "^8.4.1",
+ "npmlog": "^5.0.0",
+ "request": "^2.88.0",
+ "sass-graph": "4.0.0",
+ "stdout-stream": "^1.4.0",
+ "true-case-path": "^1.0.2"
+ },
+ "bin": {
+ "node-sass": "bin/node-sass"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/node-sass/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/node-sass/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/node-sass/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/node-sass/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/node-sass/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/node-sass/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/node-watch": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/node-watch/-/node-watch-0.7.3.tgz",
+ "integrity": "sha512-3l4E8uMPY1HdMMryPRUAl+oIHtXtyiTlIiESNSVSNxcPfzAFzeTbXFQkZfAwBbo0B1qMSG8nUABx+Gd+YrbKrQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/nopt": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
+ "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
+ "dev": true,
+ "dependencies": {
+ "abbrev": "1"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/normalize-package-data": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
+ "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
+ "dev": true,
+ "dependencies": {
+ "hosted-git-info": "^4.0.1",
+ "is-core-module": "^2.5.0",
+ "semver": "^7.3.4",
+ "validate-npm-package-license": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/npmlog": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
+ "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
+ "dev": true,
+ "dependencies": {
+ "are-we-there-yet": "^2.0.0",
+ "console-control-strings": "^1.1.0",
+ "gauge": "^3.0.0",
+ "set-blocking": "^2.0.0"
+ }
+ },
+ "node_modules/oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/p-map": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+ "dev": true,
+ "dependencies": {
+ "aggregate-error": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true
+ },
+ "node_modules/performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+ "dev": true
+ },
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "dev": true
+ },
+ "node_modules/promise-inflight": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
+ "dev": true
+ },
+ "node_modules/promise-retry": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
+ "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==",
+ "dev": true,
+ "dependencies": {
+ "err-code": "^2.0.2",
+ "retry": "^0.12.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/protobufjs": {
+ "version": "6.10.2",
+ "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.10.2.tgz",
+ "integrity": "sha512-27yj+04uF6ya9l+qfpH187aqEzfCF4+Uit0I9ZBQVqK09hk/SQzKa2MUqUpXaVa7LOFRg1TSSr3lVxGOk6c0SQ==",
+ "dev": true,
+ "hasInstallScript": 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.1",
+ "@types/node": "^13.7.0",
+ "long": "^4.0.0"
+ },
+ "bin": {
+ "pbjs": "bin/pbjs",
+ "pbts": "bin/pbts"
+ }
+ },
+ "node_modules/psl": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
+ "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
+ "dev": true
+ },
+ "node_modules/punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/qs": {
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
+ "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/quick-lru": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz",
+ "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/read-pkg": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+ "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+ "dev": true,
+ "dependencies": {
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^2.5.0",
+ "parse-json": "^5.0.0",
+ "type-fest": "^0.6.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/read-pkg-up": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
+ "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^4.1.0",
+ "read-pkg": "^5.2.0",
+ "type-fest": "^0.8.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/read-pkg-up/node_modules/type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/read-pkg/node_modules/hosted-git-info": {
+ "version": "2.8.9",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
+ "dev": true
+ },
+ "node_modules/read-pkg/node_modules/normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "dev": true,
+ "dependencies": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "node_modules/read-pkg/node_modules/semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/read-pkg/node_modules/type-fest": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+ "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/redent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
+ "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
+ "dev": true,
+ "dependencies": {
+ "indent-string": "^4.0.0",
+ "strip-indent": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/request": {
+ "version": "2.88.2",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
+ "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
+ "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142",
+ "dev": true,
+ "dependencies": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.3",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.5.0",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
+ "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
+ "dev": true,
+ "dependencies": {
+ "is-core-module": "^2.8.1",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/retry": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
+ "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/robust-predicates": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.1.tgz",
+ "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g=="
+ },
+ "node_modules/rw": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
+ "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q="
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "node_modules/sass-graph": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-4.0.0.tgz",
+ "integrity": "sha512-WSO/MfXqKH7/TS8RdkCX3lVkPFQzCgbqdGsmSKq6tlPU+GpGEsa/5aW18JqItnqh+lPtcjifqdZ/VmiILkKckQ==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.0.0",
+ "lodash": "^4.17.11",
+ "scss-tokenizer": "^0.3.0",
+ "yargs": "^17.2.1"
+ },
+ "bin": {
+ "sassgraph": "bin/sassgraph"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/scss-tokenizer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.3.0.tgz",
+ "integrity": "sha512-14Zl9GcbBvOT9057ZKjpz5yPOyUWG2ojd9D5io28wHRYsOrs7U95Q+KNL87+32p8rc+LvDpbu/i9ZYjM9Q+FsQ==",
+ "dev": true,
+ "dependencies": {
+ "js-base64": "^2.4.3",
+ "source-map": "^0.7.1"
+ }
+ },
+ "node_modules/scss-tokenizer/node_modules/source-map": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
+ "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
+ "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true
+ },
+ "node_modules/smart-buffer": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
+ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6.0.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/socks": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz",
+ "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==",
+ "dev": true,
+ "dependencies": {
+ "ip": "^1.1.5",
+ "smart-buffer": "^4.2.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/socks-proxy-agent": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.0.tgz",
+ "integrity": "sha512-wWqJhjb32Q6GsrUqzuFkukxb/zzide5quXYcMVpIjxalDBBYy2nqKCFQ/9+Ie4dvOYSQdOk3hUlZSdzZOd3zMQ==",
+ "dev": true,
+ "dependencies": {
+ "agent-base": "^6.0.2",
+ "debug": "^4.3.3",
+ "socks": "^2.6.2"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/spdx-correct": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
+ "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
+ "dev": true,
+ "dependencies": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-exceptions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
+ "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
+ "dev": true
+ },
+ "node_modules/spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "dev": true,
+ "dependencies": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-license-ids": {
+ "version": "3.0.11",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz",
+ "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==",
+ "dev": true
+ },
+ "node_modules/sshpk": {
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
+ "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
+ "dev": true,
+ "dependencies": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ },
+ "bin": {
+ "sshpk-conv": "bin/sshpk-conv",
+ "sshpk-sign": "bin/sshpk-sign",
+ "sshpk-verify": "bin/sshpk-verify"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ssri": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
+ "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==",
+ "dev": true,
+ "dependencies": {
+ "minipass": "^3.1.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/stdout-stream": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz",
+ "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==",
+ "dev": true,
+ "dependencies": {
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-indent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
+ "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
+ "dev": true,
+ "dependencies": {
+ "min-indent": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/stylis": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.1.tgz",
+ "integrity": "sha512-lVrM/bNdhVX2OgBFNa2YJ9Lxj7kPzylieHd3TNjuGE0Re9JB7joL5VUKOVH1kdNNJTgGPpT8hmwIAPLaSyEVFQ=="
+ },
+ "node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/tar": {
+ "version": "6.1.11",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz",
+ "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==",
+ "dev": true,
+ "dependencies": {
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "minipass": "^3.0.0",
+ "minizlib": "^2.1.1",
+ "mkdirp": "^1.0.3",
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/tough-cookie": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
+ "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+ "dev": true,
+ "dependencies": {
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/trim-newlines": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz",
+ "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/true-case-path": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz",
+ "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.2"
+ }
+ },
+ "node_modules/tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true
+ },
+ "node_modules/type-fest": {
+ "version": "0.18.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
+ "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/unique-filename": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
+ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
+ "dev": true,
+ "dependencies": {
+ "unique-slug": "^2.0.0"
+ }
+ },
+ "node_modules/unique-slug": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
+ "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
+ "dev": true,
+ "dependencies": {
+ "imurmurhash": "^0.1.4"
+ }
+ },
+ "node_modules/universalify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "node_modules/uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "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.",
+ "dev": true,
+ "bin": {
+ "uuid": "bin/uuid"
+ }
+ },
+ "node_modules/validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "dependencies": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "node_modules/verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "dev": true,
+ "engines": [
+ "node >=0.6.0"
+ ],
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/wide-align": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
+ "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^1.0.2 || 2 || 3 || 4"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ },
+ "node_modules/yargs": {
+ "version": "17.5.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz",
+ "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==",
+ "dev": true,
+ "dependencies": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs/node_modules/yargs-parser": {
+ "version": "21.0.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz",
+ "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ }
+ }
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
+ "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.16.7"
+ }
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
+ "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
+ "dev": true
+ },
+ "@babel/highlight": {
+ "version": "7.17.12",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz",
+ "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.16.7",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "@braintree/sanitize-url": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.0.tgz",
+ "integrity": "sha512-mgmE7XBYY/21erpzhexk4Cj1cyTQ9LzvnTxtzM17BJ7ERMNE6W72mQRo0I1Ud8eFJ+RVVIcBNhLFZ3GX4XFz5w=="
+ },
+ "@gar/promisify": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz",
+ "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==",
+ "dev": true
+ },
+ "@npmcli/fs": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz",
+ "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==",
+ "dev": true,
+ "requires": {
+ "@gar/promisify": "^1.0.1",
+ "semver": "^7.3.5"
+ }
+ },
+ "@npmcli/move-file": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz",
+ "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==",
+ "dev": true,
+ "requires": {
+ "mkdirp": "^1.0.4",
+ "rimraf": "^3.0.2"
+ }
},
"@protobufjs/aspromise": {
"version": "1.1.2",
@@ -73,24 +3804,72 @@
"integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=",
"dev": true
},
+ "@tootallnate/once": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
+ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
+ "dev": true
+ },
"@types/long": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz",
"integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==",
"dev": true
},
+ "@types/minimist": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz",
+ "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==",
+ "dev": true
+ },
"@types/node": {
"version": "13.13.41",
"resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.41.tgz",
"integrity": "sha512-qLT9IvHiXJfdrje9VmsLzun7cQ65obsBTmtU3EOnCSLFOoSHx1hpiRHoBnpdbyFqnzqdUUIv81JcEJQCB8un9g==",
"dev": true
},
+ "@types/normalize-package-data": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz",
+ "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==",
+ "dev": true
+ },
"abbrev": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
"dev": true
},
+ "agent-base": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "dev": true,
+ "requires": {
+ "debug": "4"
+ }
+ },
+ "agentkeepalive": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz",
+ "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.0",
+ "depd": "^1.1.2",
+ "humanize-ms": "^1.2.1"
+ }
+ },
+ "aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "dev": true,
+ "requires": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ }
+ },
"ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -103,16 +3882,10 @@
"uri-js": "^4.2.2"
}
},
- "amdefine": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
- "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
- "dev": true
- },
"ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"dev": true
},
"ansi-styles": {
@@ -125,19 +3898,32 @@
}
},
"aproba": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
- "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
+ "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==",
"dev": true
},
"are-we-there-yet": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
- "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
+ "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==",
"dev": true,
"requires": {
"delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
+ "readable-stream": "^3.6.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
}
},
"argparse": {
@@ -146,16 +3932,16 @@
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true
},
- "array-find-index": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
- "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==",
"dev": true
},
"asn1": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
- "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
"dev": true,
"requires": {
"safer-buffer": "~2.1.0"
@@ -164,13 +3950,13 @@
"assert-plus": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
"dev": true
},
"async": {
- "version": "0.9.2",
- "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
- "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=",
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz",
+ "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==",
"dev": true
},
"async-foreach": {
@@ -182,7 +3968,7 @@
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
"dev": true
},
"at-least-node": {
@@ -194,7 +3980,7 @@
"aws-sign2": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+ "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
"dev": true
},
"aws4": {
@@ -212,7 +3998,7 @@
"bcrypt-pbkdf": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+ "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
"dev": true,
"requires": {
"tweetnacl": "^0.14.3"
@@ -228,40 +4014,53 @@
"concat-map": "0.0.1"
}
},
- "buffer-from": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
- "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
- },
- "camel-case": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
- "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
+ "cacache": {
+ "version": "15.3.0",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz",
+ "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==",
+ "dev": true,
"requires": {
- "no-case": "^2.2.0",
- "upper-case": "^1.1.1"
+ "@npmcli/fs": "^1.0.0",
+ "@npmcli/move-file": "^1.0.1",
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "glob": "^7.1.4",
+ "infer-owner": "^1.0.4",
+ "lru-cache": "^6.0.0",
+ "minipass": "^3.1.1",
+ "minipass-collect": "^1.0.2",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.2",
+ "mkdirp": "^1.0.3",
+ "p-map": "^4.0.0",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^3.0.2",
+ "ssri": "^8.0.1",
+ "tar": "^6.0.2",
+ "unique-filename": "^1.1.1"
}
},
"camelcase": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
- "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true
},
"camelcase-keys": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
- "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz",
+ "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==",
"dev": true,
"requires": {
- "camelcase": "^2.0.0",
- "map-obj": "^1.0.0"
+ "camelcase": "^5.3.1",
+ "map-obj": "^4.0.0",
+ "quick-lru": "^4.0.1"
}
},
"caseless": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==",
"dev": true
},
"chalk": {
@@ -281,65 +4080,23 @@
"integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
"dev": true
},
- "clean-css": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz",
- "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==",
- "requires": {
- "source-map": "~0.6.0"
- }
+ "clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+ "dev": true
},
"cliui": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
- "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
"dev": true,
"requires": {
- "string-width": "^3.1.0",
- "strip-ansi": "^5.2.0",
- "wrap-ansi": "^5.1.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- },
- "string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "dev": true,
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- },
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "dev": true,
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- }
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
}
},
- "code-point-at": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
- "dev": true
- },
"color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
@@ -355,6 +4112,12 @@
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
"dev": true
},
+ "color-support": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
+ "dev": true
+ },
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -378,7 +4141,7 @@
"console-control-strings": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
- "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+ "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==",
"dev": true
},
"core-util-is": {
@@ -398,20 +4161,6 @@
"which": "^2.0.1"
}
},
- "css-b64-images": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/css-b64-images/-/css-b64-images-0.2.5.tgz",
- "integrity": "sha1-QgBdgyBLK0pdk7axpWRBM7WSegI="
- },
- "currently-unhandled": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
- "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
- "dev": true,
- "requires": {
- "array-find-index": "^1.0.1"
- }
- },
"d3": {
"version": "5.16.0",
"resolved": "https://registry.npmjs.org/d3/-/d3-5.16.0.tgz",
@@ -499,6 +4248,14 @@
"d3-array": "^1.1.1"
}
},
+ "d3-delaunay": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.2.tgz",
+ "integrity": "sha512-IMLNldruDQScrcfT+MWnazhHbDJhcRJyOEBAJfwQnHle1RPh6WDuLvxNArUju2VSMSUuKlY5BGHRJ2cYyoFLQQ==",
+ "requires": {
+ "delaunator": "5"
+ }
+ },
"d3-dispatch": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz",
@@ -699,16 +4456,17 @@
"dashdash": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
"dev": true,
"requires": {
"assert-plus": "^1.0.0"
}
},
"debug": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
- "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
"requires": {
"ms": "2.1.2"
}
@@ -716,25 +4474,62 @@
"decamelize": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
"dev": true
},
+ "decamelize-keys": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
+ "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==",
+ "dev": true,
+ "requires": {
+ "decamelize": "^1.1.0",
+ "map-obj": "^1.0.0"
+ },
+ "dependencies": {
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==",
+ "dev": true
+ }
+ }
+ },
+ "delaunator": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz",
+ "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==",
+ "requires": {
+ "robust-predicates": "^3.0.0"
+ }
+ },
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
"dev": true
},
"delegates": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
- "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+ "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==",
"dev": true
},
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
+ "dev": true
+ },
+ "dompurify": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.3.6.tgz",
+ "integrity": "sha512-OFP2u/3T1R5CEgWCEONuJ1a5+MFKnOYpkywpUSxv/dj1LeBT1erK+JwM7zK0ROy2BRhqVCf0LRw/kHqKuMkVGg=="
+ },
"ecc-jsbn": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+ "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
"dev": true,
"requires": {
"jsbn": "~0.1.0",
@@ -742,32 +4537,52 @@
}
},
"ejs": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz",
- "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==",
+ "version": "3.1.8",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz",
+ "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==",
"dev": true,
"requires": {
- "jake": "^10.6.1"
+ "jake": "^10.8.5"
}
},
"emoji-regex": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"dev": true
},
- "entity-decode": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/entity-decode/-/entity-decode-2.0.2.tgz",
- "integrity": "sha512-5CCY/3ci4MC1m2jlumNjWd7VBFt4VfFnmSqSNmVcXq4gxM3Vmarxtt+SvmBnzwLS669MWdVuXboNVj1qN2esVg==",
+ "encoding": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
+ "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
+ "dev": true,
+ "optional": true,
"requires": {
- "he": "^1.1.1"
+ "iconv-lite": "^0.6.2"
+ },
+ "dependencies": {
+ "iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ }
+ }
}
},
"env-paths": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz",
- "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
+ "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
+ "dev": true
+ },
+ "err-code": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
+ "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==",
"dev": true
},
"error-ex": {
@@ -779,6 +4594,12 @@
"is-arrayish": "^0.2.1"
}
},
+ "escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true
+ },
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
@@ -794,7 +4615,7 @@
"extsprintf": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
"dev": true
},
"fast-deep-equal": {
@@ -810,28 +4631,48 @@
"dev": true
},
"filelist": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz",
- "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
+ "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
"dev": true,
"requires": {
- "minimatch": "^3.0.4"
+ "minimatch": "^5.0.1"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "minimatch": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz",
+ "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ }
+ }
}
},
"find-up": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
- "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
"requires": {
- "path-exists": "^2.0.0",
- "pinkie-promise": "^2.0.0"
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
}
},
"forever-agent": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==",
"dev": true
},
"form-data": {
@@ -879,19 +4720,20 @@
"dev": true
},
"gauge": {
- "version": "2.7.4",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
- "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz",
+ "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==",
"dev": true,
"requires": {
- "aproba": "^1.0.3",
+ "aproba": "^1.0.3 || ^2.0.0",
+ "color-support": "^1.1.2",
"console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
+ "has-unicode": "^2.0.1",
+ "object-assign": "^4.1.1",
"signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1",
+ "wide-align": "^1.1.2"
}
},
"gaze": {
@@ -912,13 +4754,13 @@
"get-stdin": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
- "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==",
"dev": true
},
"getpass": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
"dev": true,
"requires": {
"assert-plus": "^1.0.0"
@@ -966,7 +4808,7 @@
"har-schema": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+ "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==",
"dev": true
},
"har-validator": {
@@ -979,6 +4821,12 @@
"har-schema": "^2.0.0"
}
},
+ "hard-rejection": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
+ "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==",
+ "dev": true
+ },
"has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
@@ -988,15 +4836,6 @@
"function-bind": "^1.1.1"
}
},
- "has-ansi": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
- "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
@@ -1006,14 +4845,9 @@
"has-unicode": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
- "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==",
"dev": true
},
- "he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
- },
"highlight.js": {
"version": "10.6.0",
"resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.6.0.tgz",
@@ -1021,29 +4855,35 @@
"dev": true
},
"hosted-git-info": {
- "version": "2.8.8",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
- "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
+ "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "http-cache-semantics": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
+ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==",
"dev": true
},
- "html-minifier": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz",
- "integrity": "sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==",
+ "http-proxy-agent": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
+ "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
+ "dev": true,
"requires": {
- "camel-case": "^3.0.0",
- "clean-css": "^4.2.1",
- "commander": "^2.19.0",
- "he": "^1.2.0",
- "param-case": "^2.1.1",
- "relateurl": "^0.2.7",
- "uglify-js": "^3.5.1"
+ "@tootallnate/once": "1",
+ "agent-base": "6",
+ "debug": "4"
}
},
"http-signature": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
"dev": true,
"requires": {
"assert-plus": "^1.0.0",
@@ -1051,6 +4891,25 @@
"sshpk": "^1.7.0"
}
},
+ "https-proxy-agent": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+ "dev": true,
+ "requires": {
+ "agent-base": "6",
+ "debug": "4"
+ }
+ },
+ "humanize-ms": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
+ "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.0.0"
+ }
+ },
"iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -1059,14 +4918,23 @@
"safer-buffer": ">= 2.1.2 < 3"
}
},
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true
+ },
"indent-string": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
- "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
- "dev": true,
- "requires": {
- "repeating": "^2.0.0"
- }
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "dev": true
+ },
+ "infer-owner": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
+ "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
+ "dev": true
},
"inflight": {
"version": "1.0.6",
@@ -1084,46 +4952,54 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
+ "internmap": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
+ "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg=="
+ },
+ "ip": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz",
+ "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==",
+ "dev": true
+ },
"is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
"dev": true
},
"is-core-module": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz",
- "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==",
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
+ "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
"dev": true,
"requires": {
"has": "^1.0.3"
}
},
- "is-finite": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz",
- "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==",
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"dev": true
},
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
+ "is-lambda": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz",
+ "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==",
+ "dev": true
+ },
+ "is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
+ "dev": true
},
"is-typedarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
- "dev": true
- },
- "is-utf8": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
- "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==",
"dev": true
},
"isarray": {
@@ -1141,19 +5017,70 @@
"isstream": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==",
"dev": true
},
"jake": {
- "version": "10.8.2",
- "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz",
- "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==",
+ "version": "10.8.5",
+ "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz",
+ "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==",
"dev": true,
"requires": {
- "async": "0.9.x",
- "chalk": "^2.4.2",
+ "async": "^3.2.3",
+ "chalk": "^4.0.2",
"filelist": "^1.0.1",
"minimatch": "^3.0.4"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
}
},
"js-base64": {
@@ -1162,16 +5089,28 @@
"integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==",
"dev": true
},
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ },
"jsbn": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==",
+ "dev": true
+ },
+ "json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
"dev": true
},
"json-schema": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
"dev": true
},
"json-schema-traverse": {
@@ -1183,7 +5122,7 @@
"json-stringify-safe": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==",
"dev": true
},
"jsonfile": {
@@ -1197,57 +5136,47 @@
}
},
"jsprim": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
- "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
+ "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
"dev": true,
"requires": {
"assert-plus": "1.0.0",
"extsprintf": "1.3.0",
- "json-schema": "0.2.3",
+ "json-schema": "0.4.0",
"verror": "1.10.0"
}
},
"khroma": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/khroma/-/khroma-1.2.0.tgz",
- "integrity": "sha512-DlKk5y243dujy8fOH02aRnnewLfiHJV0s8aXaVrCohgBf3s7fEAn6gc6LLQ21agODlFZS8ufrn+juu70uCA9Tw=="
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz",
+ "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g=="
},
- "load-json-file": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
- "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^2.2.0",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0",
- "strip-bom": "^2.0.0"
- }
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ },
+ "lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true
},
"locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"dev": true,
"requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- },
- "dependencies": {
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
- "dev": true
- }
+ "p-locate": "^4.1.0"
}
},
"lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
"long": {
"version": "4.0.0",
@@ -1255,21 +5184,6 @@
"integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==",
"dev": true
},
- "loud-rejection": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
- "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
- "dev": true,
- "requires": {
- "currently-unhandled": "^0.4.1",
- "signal-exit": "^3.0.0"
- }
- },
- "lower-case": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
- "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw="
- },
"lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
@@ -1279,82 +5193,368 @@
"yallist": "^4.0.0"
}
},
+ "make-fetch-happen": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz",
+ "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==",
+ "dev": true,
+ "requires": {
+ "agentkeepalive": "^4.1.3",
+ "cacache": "^15.2.0",
+ "http-cache-semantics": "^4.1.0",
+ "http-proxy-agent": "^4.0.1",
+ "https-proxy-agent": "^5.0.0",
+ "is-lambda": "^1.0.1",
+ "lru-cache": "^6.0.0",
+ "minipass": "^3.1.3",
+ "minipass-collect": "^1.0.2",
+ "minipass-fetch": "^1.3.2",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.4",
+ "negotiator": "^0.6.2",
+ "promise-retry": "^2.0.1",
+ "socks-proxy-agent": "^6.0.0",
+ "ssri": "^8.0.0"
+ }
+ },
"map-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
- "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
+ "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==",
"dev": true
},
"marked": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/marked/-/marked-0.8.2.tgz",
- "integrity": "sha512-EGwzEeCcLniFX51DhTpmTom+dSA/MG/OBUDjnWtHbEnjAH180VzUeAw+oE4+Zv+CoYBWyRlYOTR0N8SO9R1PVw==",
+ "version": "4.0.16",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.16.tgz",
+ "integrity": "sha512-wahonIQ5Jnyatt2fn8KqF/nIqZM8mh3oRu2+l5EANGMhu6RFjiSG52QNE2eWzFMI94HqYSgN184NurgNG6CztA==",
"dev": true
},
"meow": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
- "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz",
+ "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==",
"dev": true,
"requires": {
- "camelcase-keys": "^2.0.0",
- "decamelize": "^1.1.2",
- "loud-rejection": "^1.0.0",
- "map-obj": "^1.0.1",
- "minimist": "^1.1.3",
- "normalize-package-data": "^2.3.4",
- "object-assign": "^4.0.1",
- "read-pkg-up": "^1.0.1",
- "redent": "^1.0.0",
- "trim-newlines": "^1.0.0"
+ "@types/minimist": "^1.2.0",
+ "camelcase-keys": "^6.2.2",
+ "decamelize": "^1.2.0",
+ "decamelize-keys": "^1.1.0",
+ "hard-rejection": "^2.1.0",
+ "minimist-options": "4.1.0",
+ "normalize-package-data": "^3.0.0",
+ "read-pkg-up": "^7.0.1",
+ "redent": "^3.0.0",
+ "trim-newlines": "^3.0.0",
+ "type-fest": "^0.18.0",
+ "yargs-parser": "^20.2.3"
}
},
"mermaid": {
- "version": "8.9.0",
- "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-8.9.0.tgz",
- "integrity": "sha512-J582tyE1vkdNu4BGgfwXnFo4Mu6jpuc4uK96mIenavaak9kr4T5gaMmYCo/7edwq/vTBkx/soZ5LcJo5WXZ1BQ==",
+ "version": "9.1.1",
+ "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-9.1.1.tgz",
+ "integrity": "sha512-2RVD+WkzZ4VDyO9gQvQAuQ/ux2gLigJtKDTlbwjYqOR/NwsVzTSfGm/kx648/qWJsg6Sv04tE9BWCO8s6a+pFA==",
"requires": {
- "@braintree/sanitize-url": "^3.1.0",
- "d3": "^5.7.0",
- "dagre": "^0.8.4",
+ "@braintree/sanitize-url": "^6.0.0",
+ "d3": "^7.0.0",
+ "dagre": "^0.8.5",
"dagre-d3": "^0.6.4",
- "entity-decode": "^2.0.2",
- "graphlib": "^2.1.7",
- "he": "^1.2.0",
- "khroma": "^1.1.0",
- "minify": "^4.1.1",
- "moment-mini": "^2.22.1",
- "stylis": "^3.5.2"
+ "dompurify": "2.3.6",
+ "graphlib": "^2.1.8",
+ "khroma": "^2.0.0",
+ "moment-mini": "^2.24.0",
+ "stylis": "^4.0.10"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="
+ },
+ "d3": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/d3/-/d3-7.4.4.tgz",
+ "integrity": "sha512-97FE+MYdAlV3R9P74+R3Uar7wUKkIFu89UWMjEaDhiJ9VxKvqaMxauImy8PC2DdBkdM2BxJOIoLxPrcZUyrKoQ==",
+ "requires": {
+ "d3-array": "3",
+ "d3-axis": "3",
+ "d3-brush": "3",
+ "d3-chord": "3",
+ "d3-color": "3",
+ "d3-contour": "3",
+ "d3-delaunay": "6",
+ "d3-dispatch": "3",
+ "d3-drag": "3",
+ "d3-dsv": "3",
+ "d3-ease": "3",
+ "d3-fetch": "3",
+ "d3-force": "3",
+ "d3-format": "3",
+ "d3-geo": "3",
+ "d3-hierarchy": "3",
+ "d3-interpolate": "3",
+ "d3-path": "3",
+ "d3-polygon": "3",
+ "d3-quadtree": "3",
+ "d3-random": "3",
+ "d3-scale": "4",
+ "d3-scale-chromatic": "3",
+ "d3-selection": "3",
+ "d3-shape": "3",
+ "d3-time": "3",
+ "d3-time-format": "4",
+ "d3-timer": "3",
+ "d3-transition": "3",
+ "d3-zoom": "3"
+ }
+ },
+ "d3-array": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.1.6.tgz",
+ "integrity": "sha512-DCbBBNuKOeiR9h04ySRBMW52TFVc91O9wJziuyXw6Ztmy8D3oZbmCkOO3UHKC7ceNJsN2Mavo9+vwV8EAEUXzA==",
+ "requires": {
+ "internmap": "1 - 2"
+ }
+ },
+ "d3-axis": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz",
+ "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw=="
+ },
+ "d3-brush": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz",
+ "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==",
+ "requires": {
+ "d3-dispatch": "1 - 3",
+ "d3-drag": "2 - 3",
+ "d3-interpolate": "1 - 3",
+ "d3-selection": "3",
+ "d3-transition": "3"
+ }
+ },
+ "d3-chord": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz",
+ "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==",
+ "requires": {
+ "d3-path": "1 - 3"
+ }
+ },
+ "d3-color": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
+ "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA=="
+ },
+ "d3-contour": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-3.0.1.tgz",
+ "integrity": "sha512-0Oc4D0KyhwhM7ZL0RMnfGycLN7hxHB8CMmwZ3+H26PWAG0ozNuYG5hXSDNgmP1SgJkQMrlG6cP20HoaSbvcJTQ==",
+ "requires": {
+ "d3-array": "2 - 3"
+ }
+ },
+ "d3-dispatch": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz",
+ "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg=="
+ },
+ "d3-drag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz",
+ "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==",
+ "requires": {
+ "d3-dispatch": "1 - 3",
+ "d3-selection": "3"
+ }
+ },
+ "d3-dsv": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz",
+ "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==",
+ "requires": {
+ "commander": "7",
+ "iconv-lite": "0.6",
+ "rw": "1"
+ }
+ },
+ "d3-ease": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
+ "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w=="
+ },
+ "d3-fetch": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz",
+ "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==",
+ "requires": {
+ "d3-dsv": "1 - 3"
+ }
+ },
+ "d3-force": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz",
+ "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==",
+ "requires": {
+ "d3-dispatch": "1 - 3",
+ "d3-quadtree": "1 - 3",
+ "d3-timer": "1 - 3"
+ }
+ },
+ "d3-format": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz",
+ "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA=="
+ },
+ "d3-geo": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.0.1.tgz",
+ "integrity": "sha512-Wt23xBych5tSy9IYAM1FR2rWIBFWa52B/oF/GYe5zbdHrg08FU8+BuI6X4PvTwPDdqdAdq04fuWJpELtsaEjeA==",
+ "requires": {
+ "d3-array": "2.5.0 - 3"
+ }
+ },
+ "d3-hierarchy": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz",
+ "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA=="
+ },
+ "d3-interpolate": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
+ "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
+ "requires": {
+ "d3-color": "1 - 3"
+ }
+ },
+ "d3-path": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.0.1.tgz",
+ "integrity": "sha512-gq6gZom9AFZby0YLduxT1qmrp4xpBA1YZr19OI717WIdKE2OM5ETq5qrHLb301IgxhLwcuxvGZVLeeWc/k1I6w=="
+ },
+ "d3-polygon": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz",
+ "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg=="
+ },
+ "d3-quadtree": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz",
+ "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw=="
+ },
+ "d3-random": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz",
+ "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ=="
+ },
+ "d3-scale": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
+ "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
+ "requires": {
+ "d3-array": "2.10.0 - 3",
+ "d3-format": "1 - 3",
+ "d3-interpolate": "1.2.0 - 3",
+ "d3-time": "2.1.1 - 3",
+ "d3-time-format": "2 - 4"
+ }
+ },
+ "d3-scale-chromatic": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz",
+ "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==",
+ "requires": {
+ "d3-color": "1 - 3",
+ "d3-interpolate": "1 - 3"
+ }
+ },
+ "d3-selection": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
+ "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ=="
+ },
+ "d3-shape": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.1.0.tgz",
+ "integrity": "sha512-tGDh1Muf8kWjEDT/LswZJ8WF85yDZLvVJpYU9Nq+8+yW1Z5enxrmXOhTArlkaElU+CTn0OTVNli+/i+HP45QEQ==",
+ "requires": {
+ "d3-path": "1 - 3"
+ }
+ },
+ "d3-time": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.0.0.tgz",
+ "integrity": "sha512-zmV3lRnlaLI08y9IMRXSDshQb5Nj77smnfpnd2LrBa/2K281Jijactokeak14QacHs/kKq0AQ121nidNYlarbQ==",
+ "requires": {
+ "d3-array": "2 - 3"
+ }
+ },
+ "d3-time-format": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
+ "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
+ "requires": {
+ "d3-time": "1 - 3"
+ }
+ },
+ "d3-timer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
+ "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA=="
+ },
+ "d3-transition": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz",
+ "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==",
+ "requires": {
+ "d3-color": "1 - 3",
+ "d3-dispatch": "1 - 3",
+ "d3-ease": "1 - 3",
+ "d3-interpolate": "1 - 3",
+ "d3-timer": "1 - 3"
+ }
+ },
+ "d3-zoom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz",
+ "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==",
+ "requires": {
+ "d3-dispatch": "1 - 3",
+ "d3-drag": "2 - 3",
+ "d3-interpolate": "1 - 3",
+ "d3-selection": "2 - 3",
+ "d3-transition": "2 - 3"
+ }
+ },
+ "iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ }
+ }
}
},
"mime-db": {
- "version": "1.45.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz",
- "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==",
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
"dev": true
},
"mime-types": {
- "version": "2.1.28",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz",
- "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==",
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"dev": true,
"requires": {
- "mime-db": "1.45.0"
+ "mime-db": "1.52.0"
}
},
- "minify": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/minify/-/minify-4.1.3.tgz",
- "integrity": "sha512-ykuscavxivSmVpcCzsXmsVTukWYLUUtPhHj0w2ILvHDGqC+hsuTCihBn9+PJBd58JNvWTNg9132J9nrrI2anzA==",
- "requires": {
- "clean-css": "^4.1.6",
- "css-b64-images": "~0.2.5",
- "debug": "^4.1.0",
- "html-minifier": "^4.0.0",
- "terser": "^4.0.0",
- "try-catch": "^2.0.0",
- "try-to-catch": "^1.0.2"
- }
+ "min-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
+ "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
+ "dev": true
},
"minimatch": {
"version": "3.0.4",
@@ -1365,21 +5565,74 @@
"brace-expansion": "^1.1.7"
}
},
- "minimist": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
- "dev": true
+ "minimist-options": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz",
+ "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==",
+ "dev": true,
+ "requires": {
+ "arrify": "^1.0.1",
+ "is-plain-obj": "^1.1.0",
+ "kind-of": "^6.0.3"
+ }
},
"minipass": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz",
- "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==",
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz",
+ "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==",
"dev": true,
"requires": {
"yallist": "^4.0.0"
}
},
+ "minipass-collect": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
+ "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "minipass-fetch": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz",
+ "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==",
+ "dev": true,
+ "requires": {
+ "encoding": "^0.1.12",
+ "minipass": "^3.1.0",
+ "minipass-sized": "^1.0.3",
+ "minizlib": "^2.0.0"
+ }
+ },
+ "minipass-flush": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
+ "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "minipass-pipeline": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
+ "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "minipass-sized": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz",
+ "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
"minizlib": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
@@ -1391,13 +5644,10 @@
}
},
"mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.5"
- }
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "dev": true
},
"moment-mini": {
"version": "2.24.0",
@@ -1407,7 +5657,8 @@
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
},
"nan": {
"version": "2.14.2",
@@ -1415,98 +5666,159 @@
"integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==",
"dev": true
},
- "no-case": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
- "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
- "requires": {
- "lower-case": "^1.1.1"
- }
+ "negotiator": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+ "dev": true
},
"node-gyp": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz",
- "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==",
+ "version": "8.4.1",
+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz",
+ "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==",
"dev": true,
"requires": {
"env-paths": "^2.2.0",
"glob": "^7.1.4",
- "graceful-fs": "^4.2.3",
+ "graceful-fs": "^4.2.6",
+ "make-fetch-happen": "^9.1.0",
"nopt": "^5.0.0",
- "npmlog": "^4.1.2",
- "request": "^2.88.2",
+ "npmlog": "^6.0.0",
"rimraf": "^3.0.2",
- "semver": "^7.3.2",
- "tar": "^6.0.2",
+ "semver": "^7.3.5",
+ "tar": "^6.1.2",
"which": "^2.0.2"
},
"dependencies": {
- "semver": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
- "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
+ "are-we-there-yet": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz",
+ "integrity": "sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw==",
"dev": true,
"requires": {
- "lru-cache": "^6.0.0"
+ "delegates": "^1.0.0",
+ "readable-stream": "^3.6.0"
+ }
+ },
+ "gauge": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz",
+ "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==",
+ "dev": true,
+ "requires": {
+ "aproba": "^1.0.3 || ^2.0.0",
+ "color-support": "^1.1.3",
+ "console-control-strings": "^1.1.0",
+ "has-unicode": "^2.0.1",
+ "signal-exit": "^3.0.7",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1",
+ "wide-align": "^1.1.5"
+ }
+ },
+ "npmlog": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz",
+ "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==",
+ "dev": true,
+ "requires": {
+ "are-we-there-yet": "^3.0.0",
+ "console-control-strings": "^1.1.0",
+ "gauge": "^4.0.3",
+ "set-blocking": "^2.0.0"
+ }
+ },
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
}
}
}
},
"node-sass": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-5.0.0.tgz",
- "integrity": "sha512-opNgmlu83ZCF792U281Ry7tak9IbVC+AKnXGovcQ8LG8wFaJv6cLnRlc6DIHlmNxWEexB5bZxi9SZ9JyUuOYjw==",
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-7.0.1.tgz",
+ "integrity": "sha512-uMy+Xt29NlqKCFdFRZyXKOTqGt+QaKHexv9STj2WeLottnlqZEEWx6Bj0MXNthmFRRdM/YwyNo/8Tr46TOM0jQ==",
"dev": true,
"requires": {
"async-foreach": "^0.1.3",
- "chalk": "^1.1.1",
+ "chalk": "^4.1.2",
"cross-spawn": "^7.0.3",
"gaze": "^1.0.0",
"get-stdin": "^4.0.1",
"glob": "^7.0.3",
"lodash": "^4.17.15",
- "meow": "^3.7.0",
- "mkdirp": "^0.5.1",
+ "meow": "^9.0.0",
"nan": "^2.13.2",
- "node-gyp": "^7.1.0",
- "npmlog": "^4.0.0",
+ "node-gyp": "^8.4.1",
+ "npmlog": "^5.0.0",
"request": "^2.88.0",
- "sass-graph": "2.2.5",
+ "sass-graph": "4.0.0",
"stdout-stream": "^1.4.0",
"true-case-path": "^1.0.2"
},
"dependencies": {
"ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true
- },
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
+ "color-convert": "^2.0.1"
}
},
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
}
}
},
"node-watch": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/node-watch/-/node-watch-0.7.1.tgz",
- "integrity": "sha512-UWblPYuZYrkCQCW5PxAwYSxaELNBLUckrTBBk8xr1/bUgyOkYYTsUcV4e3ytcazFEOyiRyiUrsG37pu6I0I05g==",
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/node-watch/-/node-watch-0.7.3.tgz",
+ "integrity": "sha512-3l4E8uMPY1HdMMryPRUAl+oIHtXtyiTlIiESNSVSNxcPfzAFzeTbXFQkZfAwBbo0B1qMSG8nUABx+Gd+YrbKrQ==",
"dev": true
},
"nopt": {
@@ -1519,35 +5831,29 @@
}
},
"normalize-package-data": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
- "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
+ "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
"dev": true,
"requires": {
- "hosted-git-info": "^2.1.4",
- "resolve": "^1.10.0",
- "semver": "2 || 3 || 4 || 5",
+ "hosted-git-info": "^4.0.1",
+ "is-core-module": "^2.5.0",
+ "semver": "^7.3.4",
"validate-npm-package-license": "^3.0.1"
}
},
"npmlog": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
- "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
+ "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
"dev": true,
"requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
+ "are-we-there-yet": "^2.0.0",
+ "console-control-strings": "^1.1.0",
+ "gauge": "^3.0.0",
+ "set-blocking": "^2.0.0"
}
},
- "number-is-nan": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
- "dev": true
- },
"oauth-sign": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
@@ -1579,12 +5885,21 @@
}
},
"p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"dev": true,
"requires": {
- "p-limit": "^2.0.0"
+ "p-limit": "^2.2.0"
+ }
+ },
+ "p-map": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+ "dev": true,
+ "requires": {
+ "aggregate-error": "^3.0.0"
}
},
"p-try": {
@@ -1593,31 +5908,23 @@
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true
},
- "param-case": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
- "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
- "requires": {
- "no-case": "^2.2.0"
- }
- },
"parse-json": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
"dev": true,
"requires": {
- "error-ex": "^1.2.0"
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
}
},
"path-exists": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
- "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
- "dev": true,
- "requires": {
- "pinkie-promise": "^2.0.0"
- }
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
},
"path-is-absolute": {
"version": "1.0.1",
@@ -1632,55 +5939,39 @@
"dev": true
},
"path-parse": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
- "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"dev": true
},
- "path-type": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
- "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- }
- },
"performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
"dev": true
},
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- },
- "pinkie": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
- "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
- "dev": true
- },
- "pinkie-promise": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
- "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
- "dev": true,
- "requires": {
- "pinkie": "^2.0.0"
- }
- },
"process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"dev": true
},
+ "promise-inflight": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
+ "dev": true
+ },
+ "promise-retry": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
+ "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==",
+ "dev": true,
+ "requires": {
+ "err-code": "^2.0.2",
+ "retry": "^0.12.0"
+ }
+ },
"protobufjs": {
"version": "6.10.2",
"resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.10.2.tgz",
@@ -1715,30 +6006,78 @@
"dev": true
},
"qs": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
+ "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==",
+ "dev": true
+ },
+ "quick-lru": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz",
+ "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==",
"dev": true
},
"read-pkg": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
- "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+ "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
"dev": true,
"requires": {
- "load-json-file": "^1.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^1.0.0"
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^2.5.0",
+ "parse-json": "^5.0.0",
+ "type-fest": "^0.6.0"
+ },
+ "dependencies": {
+ "hosted-git-info": {
+ "version": "2.8.9",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
+ "dev": true
+ },
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ },
+ "type-fest": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+ "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
+ "dev": true
+ }
}
},
"read-pkg-up": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
- "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
+ "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
"dev": true,
"requires": {
- "find-up": "^1.0.0",
- "read-pkg": "^1.0.0"
+ "find-up": "^4.1.0",
+ "read-pkg": "^5.2.0",
+ "type-fest": "^0.8.1"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "dev": true
+ }
}
},
"readable-stream": {
@@ -1757,27 +6096,13 @@
}
},
"redent": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
- "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
+ "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
"dev": true,
"requires": {
- "indent-string": "^2.1.0",
- "strip-indent": "^1.0.1"
- }
- },
- "relateurl": {
- "version": "0.2.7",
- "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
- "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk="
- },
- "repeating": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
- "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
- "dev": true,
- "requires": {
- "is-finite": "^1.0.0"
+ "indent-string": "^4.0.0",
+ "strip-indent": "^3.0.0"
}
},
"request": {
@@ -1814,22 +6139,23 @@
"integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
"dev": true
},
- "require-main-filename": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
- "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
- "dev": true
- },
"resolve": {
- "version": "1.20.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
- "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
+ "version": "1.22.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
+ "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
"dev": true,
"requires": {
- "is-core-module": "^2.2.0",
- "path-parse": "^1.0.6"
+ "is-core-module": "^2.8.1",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
}
},
+ "retry": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
+ "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=",
+ "dev": true
+ },
"rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
@@ -1839,6 +6165,11 @@
"glob": "^7.1.3"
}
},
+ "robust-predicates": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.1.tgz",
+ "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g=="
+ },
"rw": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
@@ -1856,43 +6187,43 @@
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"sass-graph": {
- "version": "2.2.5",
- "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.5.tgz",
- "integrity": "sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-4.0.0.tgz",
+ "integrity": "sha512-WSO/MfXqKH7/TS8RdkCX3lVkPFQzCgbqdGsmSKq6tlPU+GpGEsa/5aW18JqItnqh+lPtcjifqdZ/VmiILkKckQ==",
"dev": true,
"requires": {
"glob": "^7.0.0",
- "lodash": "^4.0.0",
- "scss-tokenizer": "^0.2.3",
- "yargs": "^13.3.2"
+ "lodash": "^4.17.11",
+ "scss-tokenizer": "^0.3.0",
+ "yargs": "^17.2.1"
}
},
"scss-tokenizer": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
- "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.3.0.tgz",
+ "integrity": "sha512-14Zl9GcbBvOT9057ZKjpz5yPOyUWG2ojd9D5io28wHRYsOrs7U95Q+KNL87+32p8rc+LvDpbu/i9ZYjM9Q+FsQ==",
"dev": true,
"requires": {
- "js-base64": "^2.1.8",
- "source-map": "^0.4.2"
+ "js-base64": "^2.4.3",
+ "source-map": "^0.7.1"
},
"dependencies": {
"source-map": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
- "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
- "dev": true,
- "requires": {
- "amdefine": ">=0.0.4"
- }
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
+ "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
+ "dev": true
}
}
},
"semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
+ "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
},
"set-blocking": {
"version": "2.0.0",
@@ -1916,23 +6247,36 @@
"dev": true
},
"signal-exit": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
- "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
"dev": true
},
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ "smart-buffer": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
+ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
+ "dev": true
},
- "source-map-support": {
- "version": "0.5.19",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
- "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
+ "socks": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz",
+ "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==",
+ "dev": true,
"requires": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
+ "ip": "^1.1.5",
+ "smart-buffer": "^4.2.0"
+ }
+ },
+ "socks-proxy-agent": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.0.tgz",
+ "integrity": "sha512-wWqJhjb32Q6GsrUqzuFkukxb/zzide5quXYcMVpIjxalDBBYy2nqKCFQ/9+Ie4dvOYSQdOk3hUlZSdzZOd3zMQ==",
+ "dev": true,
+ "requires": {
+ "agent-base": "^6.0.2",
+ "debug": "^4.3.3",
+ "socks": "^2.6.2"
}
},
"spdx-correct": {
@@ -1962,15 +6306,15 @@
}
},
"spdx-license-ids": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz",
- "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==",
+ "version": "3.0.11",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz",
+ "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==",
"dev": true
},
"sshpk": {
- "version": "1.16.1",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
- "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
+ "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
"dev": true,
"requires": {
"asn1": "~0.2.3",
@@ -1984,6 +6328,15 @@
"tweetnacl": "~0.14.0"
}
},
+ "ssri": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
+ "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.1.1"
+ }
+ },
"stdout-stream": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz",
@@ -1993,17 +6346,6 @@
"readable-stream": "^2.0.1"
}
},
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -2013,37 +6355,39 @@
"safe-buffer": "~5.1.0"
}
},
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dev": true,
"requires": {
- "ansi-regex": "^2.0.0"
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
}
},
- "strip-bom": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
- "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dev": true,
"requires": {
- "is-utf8": "^0.2.0"
+ "ansi-regex": "^5.0.1"
}
},
"strip-indent": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
- "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
+ "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
"dev": true,
"requires": {
- "get-stdin": "^4.0.1"
+ "min-indent": "^1.0.0"
}
},
"stylis": {
- "version": "3.5.4",
- "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz",
- "integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q=="
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.1.tgz",
+ "integrity": "sha512-lVrM/bNdhVX2OgBFNa2YJ9Lxj7kPzylieHd3TNjuGE0Re9JB7joL5VUKOVH1kdNNJTgGPpT8hmwIAPLaSyEVFQ=="
},
"supports-color": {
"version": "5.5.0",
@@ -2054,10 +6398,16 @@
"has-flag": "^3.0.0"
}
},
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true
+ },
"tar": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz",
- "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==",
+ "version": "6.1.11",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz",
+ "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==",
"dev": true,
"requires": {
"chownr": "^2.0.0",
@@ -2066,24 +6416,6 @@
"minizlib": "^2.1.1",
"mkdirp": "^1.0.3",
"yallist": "^4.0.0"
- },
- "dependencies": {
- "mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "dev": true
- }
- }
- },
- "terser": {
- "version": "4.8.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz",
- "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==",
- "requires": {
- "commander": "^2.20.0",
- "source-map": "~0.6.1",
- "source-map-support": "~0.5.12"
}
},
"tough-cookie": {
@@ -2097,9 +6429,9 @@
}
},
"trim-newlines": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
- "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz",
+ "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==",
"dev": true
},
"true-case-path": {
@@ -2111,16 +6443,6 @@
"glob": "^7.1.2"
}
},
- "try-catch": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/try-catch/-/try-catch-2.0.1.tgz",
- "integrity": "sha512-LsOrmObN/2WdM+y2xG+t16vhYrQsnV8wftXIcIOWZhQcBJvKGYuamJGwnU98A7Jxs2oZNkJztXlphEOoA0DWqg=="
- },
- "try-to-catch": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/try-to-catch/-/try-to-catch-1.1.1.tgz",
- "integrity": "sha512-ikUlS+/BcImLhNYyIgZcEmq4byc31QpC+46/6Jm5ECWkVFhf8SM2Fp/0pMVXPX6vk45SMCwrP4Taxucne8I0VA=="
- },
"tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
@@ -2136,10 +6458,29 @@
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
"dev": true
},
- "uglify-js": {
- "version": "3.12.7",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.12.7.tgz",
- "integrity": "sha512-SIZhkoh+U/wjW+BHGhVwE9nt8tWJspncloBcFapkpGRwNPqcH8pzX36BXe3TPBjzHWPMUZotpCigak/udWNr1Q=="
+ "type-fest": {
+ "version": "0.18.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
+ "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==",
+ "dev": true
+ },
+ "unique-filename": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
+ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
+ "dev": true,
+ "requires": {
+ "unique-slug": "^2.0.0"
+ }
+ },
+ "unique-slug": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
+ "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
+ "dev": true,
+ "requires": {
+ "imurmurhash": "^0.1.4"
+ }
},
"universalify": {
"version": "2.0.0",
@@ -2147,11 +6488,6 @@
"integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
"dev": true
},
- "upper-case": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
- "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg="
- },
"uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -2203,63 +6539,49 @@
"isexe": "^2.0.0"
}
},
- "which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
- "dev": true
- },
"wide-align": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
- "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
+ "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
"dev": true,
"requires": {
- "string-width": "^1.0.2 || 2"
+ "string-width": "^1.0.2 || 2 || 3 || 4"
}
},
"wrap-ansi": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
- "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"dev": true,
"requires": {
- "ansi-styles": "^3.2.0",
- "string-width": "^3.0.0",
- "strip-ansi": "^5.0.0"
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
},
"dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- },
- "string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
+ "color-convert": "^2.0.1"
}
},
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
- "ansi-regex": "^4.1.0"
+ "color-name": "~1.1.4"
}
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
}
}
},
@@ -2270,9 +6592,9 @@
"dev": true
},
"y18n": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz",
- "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==",
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
"dev": true
},
"yallist": {
@@ -2282,83 +6604,33 @@
"dev": true
},
"yargs": {
- "version": "13.3.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
- "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
+ "version": "17.5.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz",
+ "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==",
"dev": true,
"requires": {
- "cliui": "^5.0.0",
- "find-up": "^3.0.0",
- "get-caller-file": "^2.0.1",
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "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.0.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^13.1.2"
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.0.0"
},
"dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "yargs-parser": {
+ "version": "21.0.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz",
+ "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==",
"dev": true
- },
- "find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "dev": true,
- "requires": {
- "locate-path": "^3.0.0"
- }
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- },
- "string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "dev": true,
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- },
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "dev": true,
- "requires": {
- "ansi-regex": "^4.1.0"
- }
}
}
},
"yargs-parser": {
- "version": "13.1.2",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
- "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
- "dev": true,
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "dev": true
- }
- }
+ "version": "20.2.9",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "dev": true
}
}
}
diff --git a/infra/perfetto.dev/package.json b/infra/perfetto.dev/package.json
index dbf62d1..9b25114 100644
--- a/infra/perfetto.dev/package.json
+++ b/infra/perfetto.dev/package.json
@@ -7,16 +7,16 @@
"author": "Perfetto Team",
"license": "Apache-2.0",
"dependencies": {
- "mermaid": "^8.5.0"
+ "mermaid": "^9.1.1"
},
"devDependencies": {
"argparse": "^2.0.1",
"ejs": "^3.0.1",
"fs-extra": "^9.0.0",
"highlight.js": "^10.1.2",
- "marked": "^0.8.0",
- "node-sass": "^5.0.0",
- "node-watch": "^0.7.1",
+ "marked": "^4.0.16",
+ "node-sass": "^7.0.1",
+ "node-watch": "^0.7.3",
"protobufjs": "^6.9.0"
}
}
diff --git a/infra/perfetto.dev/src/markdown_render.js b/infra/perfetto.dev/src/markdown_render.js
index 21d03ed..4a0b788 100644
--- a/infra/perfetto.dev/src/markdown_render.js
+++ b/infra/perfetto.dev/src/markdown_render.js
@@ -180,7 +180,7 @@
renderer.heading = renderHeading;
renderer.paragraph = renderParagraph;
- return marked(rawMarkdown, {renderer: renderer});
+ return marked.marked.parse(rawMarkdown, {renderer: renderer});
}
function main() {
diff --git a/protos/perfetto/trace/interned_data/interned_data.proto b/protos/perfetto/trace/interned_data/interned_data.proto
index 86b8a9f..eddd7b1 100644
--- a/protos/perfetto/trace/interned_data/interned_data.proto
+++ b/protos/perfetto/trace/interned_data/interned_data.proto
@@ -53,7 +53,7 @@
// emitted proactively in advance of referring to them in later packets.
//
// Next reserved id: 8 (up to 15).
-// Next id: 28.
+// Next id: 29.
message InternedData {
// TODO(eseckler): Replace iid fields inside interned messages with
// map<iid, message> type fields in InternedData.
@@ -70,6 +70,7 @@
repeated DebugAnnotationName debug_annotation_names = 3;
repeated DebugAnnotationValueTypeName debug_annotation_value_type_names = 27;
repeated SourceLocation source_locations = 4;
+ repeated UnsymbolizedSourceLocation unsymbolized_source_locations = 28;
repeated LogMessageBody log_message_body = 20;
repeated HistogramName histogram_names = 25;
diff --git a/protos/perfetto/trace/perfetto_trace.proto b/protos/perfetto/trace/perfetto_trace.proto
index 7d60276..622c929 100644
--- a/protos/perfetto/trace/perfetto_trace.proto
+++ b/protos/perfetto/trace/perfetto_trace.proto
@@ -7372,10 +7372,18 @@
// Interned data types:
// --------------------
+// A source location, represented as a native symbol.
+// This is similar to `message Frame` from
+// protos/perfetto/trace/profiling/profile_common.proto, but for abitrary
+// source code locations (for example in track event args), not stack frames.
+message UnsymbolizedSourceLocation {
+ optional uint64 iid = 1;
+ optional uint64 mapping_id = 2;
+ optional uint64 rel_pc = 3;
+}
+
message SourceLocation {
optional uint64 iid = 1;
-
- // We intend to add a binary symbol version of this in the future.
optional string file_name = 2;
optional string function_name = 3;
optional uint32 line_number = 4;
@@ -7919,6 +7927,16 @@
// A static string representing the mojo interface name of the message that is
// being handled.
optional string mojo_interface_tag = 3;
+
+ // Refers to an interned UnsymbolizedSourceLocation.
+ // The UnsymbolizedSourceLocation contains the interface method that's being
+ // handled, represented as a native symbol.
+ // The native symbol can be symbolized after the trace is recorded.
+ // Not using a symbolized source location for official Chromium builds to
+ // reduce binary size - emitting file/function names as strings into the
+ // trace requires storing them in the binary, which causes a significant
+ // binary size bloat for Chromium.
+ optional uint64 mojo_interface_method_iid = 4;
}
// End of protos/perfetto/trace/track_event/chrome_mojo_event_info.proto
@@ -8396,7 +8414,7 @@
// emitted proactively in advance of referring to them in later packets.
//
// Next reserved id: 8 (up to 15).
-// Next id: 28.
+// Next id: 29.
message InternedData {
// TODO(eseckler): Replace iid fields inside interned messages with
// map<iid, message> type fields in InternedData.
@@ -8413,6 +8431,7 @@
repeated DebugAnnotationName debug_annotation_names = 3;
repeated DebugAnnotationValueTypeName debug_annotation_value_type_names = 27;
repeated SourceLocation source_locations = 4;
+ repeated UnsymbolizedSourceLocation unsymbolized_source_locations = 28;
repeated LogMessageBody log_message_body = 20;
repeated HistogramName histogram_names = 25;
diff --git a/protos/perfetto/trace/track_event/chrome_mojo_event_info.proto b/protos/perfetto/trace/track_event/chrome_mojo_event_info.proto
index d7ace5d..6c37136 100644
--- a/protos/perfetto/trace/track_event/chrome_mojo_event_info.proto
+++ b/protos/perfetto/trace/track_event/chrome_mojo_event_info.proto
@@ -33,4 +33,14 @@
// A static string representing the mojo interface name of the message that is
// being handled.
optional string mojo_interface_tag = 3;
+
+ // Refers to an interned UnsymbolizedSourceLocation.
+ // The UnsymbolizedSourceLocation contains the interface method that's being
+ // handled, represented as a native symbol.
+ // The native symbol can be symbolized after the trace is recorded.
+ // Not using a symbolized source location for official Chromium builds to
+ // reduce binary size - emitting file/function names as strings into the
+ // trace requires storing them in the binary, which causes a significant
+ // binary size bloat for Chromium.
+ optional uint64 mojo_interface_method_iid = 4;
}
diff --git a/protos/perfetto/trace/track_event/source_location.proto b/protos/perfetto/trace/track_event/source_location.proto
index 81ed7cf..2a6a6e8 100644
--- a/protos/perfetto/trace/track_event/source_location.proto
+++ b/protos/perfetto/trace/track_event/source_location.proto
@@ -22,10 +22,18 @@
// Interned data types:
// --------------------
+// A source location, represented as a native symbol.
+// This is similar to `message Frame` from
+// protos/perfetto/trace/profiling/profile_common.proto, but for abitrary
+// source code locations (for example in track event args), not stack frames.
+message UnsymbolizedSourceLocation {
+ optional uint64 iid = 1;
+ optional uint64 mapping_id = 2;
+ optional uint64 rel_pc = 3;
+}
+
message SourceLocation {
optional uint64 iid = 1;
-
- // We intend to add a binary symbol version of this in the future.
optional string file_name = 2;
optional string function_name = 3;
optional uint32 line_number = 4;
diff --git a/protos/third_party/chromium/chrome_track_event.proto b/protos/third_party/chromium/chrome_track_event.proto
index d8ee813..ccc9d07 100644
--- a/protos/third_party/chromium/chrome_track_event.proto
+++ b/protos/third_party/chromium/chrome_track_event.proto
@@ -764,29 +764,6 @@
optional FrameTreeNodeInfo frame_tree_node = 4;
optional RenderFrameHost render_frame_host = 5;
- enum NavigationType {
- NAVIGATION_TYPE_UNSPECIFIED = 0;
- RELOAD = 1;
- RELOAD_BYPASSING_CACHE = 2;
- RELOAD_ORIGINAL_REQUEST_URL = 3;
- RESTORE = 4;
- RESTORE_WITH_POST = 5;
- HISTORY_SAME_DOCUMENT = 6;
- HISTORY_DIFFERENT_DOCUMENT = 7;
- SAME_DOCUMENT = 8;
- DIFFERENT_DOCUMENT = 9;
- }
- optional NavigationType navigation_type = 6;
-
- enum FrameType {
- FRAME_TYPE_UNSPECIFIED = 0;
- SUBFRAME = 1;
- PRIMARY_MAIN_FRAME = 2;
- PRERENDER_MAIN_FRAME = 3;
- FENCED_FRAME_ROOT = 4;
- }
- optional FrameType frame_type = 7;
-
// Additional untyped debug information associated with this
// NavigationHandle/Request, populated via TracedProto::AddDebugAnnotations
// API.
@@ -803,7 +780,7 @@
message ChromeTrackEvent {
// Extension range for Chrome: 1000-1999
- // Next ID: 1039
+ // Next ID: 1037
extend TrackEvent {
optional ChromeAppState chrome_app_state = 1000;
@@ -885,7 +862,5 @@
optional DeviceThermalState device_thermal_state = 1036;
optional NavigationHandle navigation = 1037;
-
- optional NavigationHandle navigation_when_created = 1038;
}
}
diff --git a/src/trace_processor/BUILD.gn b/src/trace_processor/BUILD.gn
index 06b7918..bd5c02c 100644
--- a/src/trace_processor/BUILD.gn
+++ b/src/trace_processor/BUILD.gn
@@ -159,6 +159,7 @@
"trace_processor_storage_impl.h",
"trace_sorter.cc",
"trace_sorter.h",
+ "trace_sorter_queue.h",
"virtual_destructors.cc",
]
deps = [
@@ -416,6 +417,7 @@
"importers/syscalls/syscall_tracker_unittest.cc",
"importers/systrace/systrace_parser_unittest.cc",
"ref_counted_unittest.cc",
+ "trace_sorter_queue_unittest.cc",
"trace_sorter_unittest.cc",
]
deps = [
@@ -456,6 +458,8 @@
"types:unittests",
"util:descriptors",
"util:unittests",
+ "views",
+ "views:unittests",
]
if (enable_perfetto_trace_processor_sqlite) {
diff --git a/src/trace_processor/db/view_unittest.cc b/src/trace_processor/db/view_unittest.cc
index ef34e7d..977b4fe 100644
--- a/src/trace_processor/db/view_unittest.cc
+++ b/src/trace_processor/db/view_unittest.cc
@@ -107,7 +107,7 @@
#define PERFETTO_TP_EVENT_VIEW_DEF(NAME, FROM, JOIN, COL) \
NAME(TestEventView, "event_view") \
- FROM(TestEventTable, event) \
+ FROM(TestEventTable, event, PERFETTO_TP_VIEW_NO_FROM_COLUMNS) \
JOIN(TestTrackTable, track, id, event, track_id, View::kIdAlwaysPresent) \
COL(id, event, id) \
COL(ts, event, ts) \
@@ -240,7 +240,7 @@
#define PERFETTO_TP_THREAD_EVENT_VIEW_DEF(NAME, FROM, JOIN, COL) \
NAME(TestThreadEventView, "thread_event_view") \
- FROM(TestEventTable, event) \
+ FROM(TestEventTable, event, PERFETTO_TP_VIEW_NO_FROM_COLUMNS) \
JOIN(TestThreadTrackTable, track, id, event, track_id, View::kNoFlag) \
JOIN(TestThreadTable, thread, id, track, utid, View::kIdAlwaysPresent) \
COL(id, event, id) \
@@ -435,7 +435,7 @@
COL(track_name, track, name) \
COL(utid, thread, id) \
COL(thread_name, thread, name) \
- FROM(TestSliceTable, slice) \
+ FROM(TestSliceTable, slice, PERFETTO_TP_VIEW_NO_FROM_COLUMNS) \
JOIN(TestThreadTrackTable, track, id, slice, track_id, View::kNoFlag) \
JOIN(TestThreadTable, thread, id, track, utid, View::kIdAlwaysPresent)
PERFETTO_TP_DECLARE_VIEW(PERFETTO_TP_THREAD_SLICE_VIEW_DEF);
diff --git a/src/trace_processor/timestamped_trace_piece.h b/src/trace_processor/timestamped_trace_piece.h
index 1b1a0f6..6d8a83d 100644
--- a/src/trace_processor/timestamped_trace_piece.h
+++ b/src/trace_processor/timestamped_trace_piece.h
@@ -81,17 +81,11 @@
// compiler (even clang-cl) requires -D_ENABLE_EXTENDED_ALIGNED_STORAGE. Given
// the alignment here is purely a performance enhancment with no other
// functional requirement, disable it on Win.
-#if !PERFETTO_BUILDFLAG(PERFETTO_OS_WIN)
-#define PERFETTO_TTS_ALIGNMENT alignas(64)
-#else
-#define PERFETTO_TTS_ALIGNMENT
-#endif
// A TimestampedTracePiece is (usually a reference to) a piece of a trace that
// is sorted by TraceSorter.
-struct PERFETTO_TTS_ALIGNMENT TimestampedTracePiece {
- enum class Type {
- kInvalid = 0,
+struct TimestampedTracePiece {
+ enum class Type : uint8_t {
kFtraceEvent,
kTracePacket,
kInlineSchedSwitch,
@@ -100,63 +94,45 @@
kFuchsiaRecord,
kTrackEvent,
kSystraceLine,
+ kInvalid,
+ kSize = kInvalid,
};
- TimestampedTracePiece(int64_t ts,
- uint64_t idx,
- TraceBlobView tbv,
- RefPtr<PacketSequenceStateGeneration> sequence_state)
- : packet_data{std::move(tbv), std::move(sequence_state)},
- timestamp(ts),
- packet_idx(idx),
- type(Type::kTracePacket) {}
+ TimestampedTracePiece(int64_t ts, TracePacketData tpd)
+ : packet_data(std::move(tpd)), timestamp(ts), type(Type::kTracePacket) {}
- TimestampedTracePiece(int64_t ts, uint64_t idx, FtraceEventData fed)
- : ftrace_event(std::move(fed)),
- timestamp(ts),
- packet_idx(idx),
- type(Type::kFtraceEvent) {}
+ TimestampedTracePiece(int64_t ts, FtraceEventData fed)
+ : ftrace_event(std::move(fed)), timestamp(ts), type(Type::kFtraceEvent) {}
- TimestampedTracePiece(int64_t ts, uint64_t idx, std::string value)
- : json_value(std::move(value)),
- timestamp(ts),
- packet_idx(idx),
- type(Type::kJsonValue) {}
+ TimestampedTracePiece(int64_t ts, std::string value)
+ : json_value(std::move(value)), timestamp(ts), type(Type::kJsonValue) {}
- TimestampedTracePiece(int64_t ts,
- uint64_t idx,
- std::unique_ptr<FuchsiaRecord> fr)
+ // TODO(b/234446893): Remove unique_ptr
+ TimestampedTracePiece(int64_t ts, std::unique_ptr<FuchsiaRecord> fr)
: fuchsia_record(std::move(fr)),
timestamp(ts),
- packet_idx(idx),
type(Type::kFuchsiaRecord) {}
- TimestampedTracePiece(int64_t ts,
- uint64_t idx,
- std::unique_ptr<TrackEventData> ted)
+ // TODO(b/234446893): Remove unique_ptr
+ TimestampedTracePiece(int64_t ts, std::unique_ptr<TrackEventData> ted)
: track_event_data(std::move(ted)),
timestamp(ts),
- packet_idx(idx),
type(Type::kTrackEvent) {}
- TimestampedTracePiece(int64_t ts,
- uint64_t idx,
- std::unique_ptr<SystraceLine> ted)
+ // TODO(b/234446893): Remove unique_ptr
+ TimestampedTracePiece(int64_t ts, std::unique_ptr<SystraceLine> ted)
: systrace_line(std::move(ted)),
timestamp(ts),
- packet_idx(idx),
type(Type::kSystraceLine) {}
- TimestampedTracePiece(int64_t ts, uint64_t idx, InlineSchedSwitch iss)
+ TimestampedTracePiece(int64_t ts, InlineSchedSwitch iss)
: sched_switch(std::move(iss)),
timestamp(ts),
- packet_idx(idx),
type(Type::kInlineSchedSwitch) {}
- TimestampedTracePiece(int64_t ts, uint64_t idx, InlineSchedWaking isw)
+ TimestampedTracePiece(int64_t ts, InlineSchedWaking isw)
: sched_waking(std::move(isw)),
timestamp(ts),
- packet_idx(idx),
type(Type::kInlineSchedWaking) {}
TimestampedTracePiece(TimestampedTracePiece&& ttp) noexcept {
@@ -194,7 +170,6 @@
std::unique_ptr<SystraceLine>(std::move(ttp.systrace_line));
}
timestamp = ttp.timestamp;
- packet_idx = ttp.packet_idx;
type = ttp.type;
// Invalidate |ttp|.
@@ -241,33 +216,6 @@
}
}
- // For std::lower_bound().
- static inline bool Compare(const TimestampedTracePiece& x, int64_t ts) {
- return x.timestamp < ts;
- }
-
- // For std::sort().
- inline bool operator<(const TimestampedTracePiece& o) const {
- return timestamp < o.timestamp ||
- (timestamp == o.timestamp && packet_idx < o.packet_idx);
- }
-
- // For std::sort(). Without this the compiler will fall back on invoking
- // move operators on temporary objects.
- friend void swap(TimestampedTracePiece& a, TimestampedTracePiece& b) {
- // We know that TimestampedTracePiece is 64-byte aligned (because of the
- // alignas(64) in the declaration above). We also know that swapping it is
- // trivial and we can just swap the memory without invoking move operators.
- // The cast to aligned_storage below allows the compiler to turn this into
- // a bunch of movaps with large XMM registers (128/256/512 bit depending on
- // -mavx).
- using AS =
- typename std::aligned_storage<sizeof(TimestampedTracePiece),
- alignof(TimestampedTracePiece)>::type;
- using std::swap;
- swap(reinterpret_cast<AS&>(a), reinterpret_cast<AS&>(b));
- }
-
// Fields ordered for packing.
// Data for different types of TimestampedTracePiece.
@@ -283,18 +231,9 @@
};
int64_t timestamp;
- uint64_t packet_idx;
Type type;
};
-// std::sort<TTS> is an extremely hot path in TraceProcessor (in trace_sorter.h)
-// When TTS is 512-bit wide, we can leverage SIMD instructions to swap it by
-// declaring it aligned at its own size, without losing any space in the
-// CircularQueue due to fragmentation. This makes a 6% difference in the
-// ingestion time of a large trace. See the comments above in the swap() above.
-static_assert(sizeof(TimestampedTracePiece) <= 64,
- "TimestampedTracePiece cannot grow beyond 64 bytes");
-
} // namespace trace_processor
} // namespace perfetto
diff --git a/src/trace_processor/trace_sorter.cc b/src/trace_processor/trace_sorter.cc
index 766508f..6fcc80f 100644
--- a/src/trace_processor/trace_sorter.cc
+++ b/src/trace_processor/trace_sorter.cc
@@ -15,11 +15,14 @@
*/
#include <algorithm>
+#include <memory>
#include <utility>
#include "perfetto/ext/base/utils.h"
#include "src/trace_processor/importers/proto/proto_trace_parser.h"
+#include "src/trace_processor/timestamped_trace_piece.h"
#include "src/trace_processor/trace_sorter.h"
+#include "src/trace_processor/trace_sorter_queue.h"
namespace perfetto {
namespace trace_processor {
@@ -50,12 +53,12 @@
auto sort_end = events_.begin() + static_cast<ssize_t>(sort_start_idx_);
PERFETTO_DCHECK(std::is_sorted(events_.begin(), sort_end));
auto sort_begin = std::lower_bound(events_.begin(), sort_end, sort_min_ts_,
- &TimestampedTracePiece::Compare);
+ &TimestampedDescriptor::Compare);
std::sort(sort_begin, events_.end());
sort_start_idx_ = 0;
sort_min_ts_ = 0;
- // At this point |events_| must be fully sorted.
+ // At this point |events_| must be fully sorted
PERFETTO_DCHECK(std::is_sorted(events_.begin(), events_.end()));
}
@@ -79,7 +82,7 @@
// to avoid re-scanning all the queues all the times) but doesn't seem worth it.
// With Android traces (that have 8 CPUs) this function accounts for ~1-3% cpu
// time in a profiler.
-void TraceSorter::SortAndExtractEventsUntilPacket(uint64_t limit_packet_idx) {
+void TraceSorter::SortAndExtractEventsUntilPacket(uint64_t limit_offset) {
constexpr int64_t kTsMax = std::numeric_limits<int64_t>::max();
for (;;) {
size_t min_queue_idx = 0; // The index of the queue with the min(ts).
@@ -116,7 +119,7 @@
auto& events = queue.events_;
if (queue.needs_sorting())
queue.Sort();
- PERFETTO_DCHECK(queue.min_ts_ == events.front().timestamp);
+ PERFETTO_DCHECK(queue.min_ts_ == events.front().ts);
PERFETTO_DCHECK(queue.min_ts_ == global_min_ts_);
// Now that we identified the min-queue, extract all events from it until
@@ -124,13 +127,13 @@
// limit, whichever comes first.
size_t num_extracted = 0;
for (auto& event : events) {
- if (event.packet_idx >= limit_packet_idx ||
- event.timestamp > min_queue_ts[1]) {
+ if (event.descriptor.offset() >= limit_offset ||
+ event.ts > min_queue_ts[1]) {
break;
}
++num_extracted;
- MaybePushEvent(min_queue_idx, std::move(event));
+ MaybePushEvent(min_queue_idx, event);
} // for (event: events)
if (!num_extracted) {
@@ -143,6 +146,10 @@
// and global time bounds.
events.erase_front(num_extracted);
+ // After evicting elements we can empty memory in the front of the
+ // queue.
+ variadic_queue_.FreeMemory();
+
// Update the global_{min,max}_ts to reflect the bounds after extraction.
if (events.empty()) {
queue.min_ts_ = kTsMax;
@@ -156,7 +163,7 @@
for (auto& q : queues_)
global_max_ts_ = std::max(global_max_ts_, q.max_ts_);
} else {
- queue.min_ts_ = queue.events_.front().timestamp;
+ queue.min_ts_ = queue.events_.front().ts;
global_min_ts_ = std::min(queue.min_ts_, min_queue_ts[1]);
}
} // for(;;)
@@ -174,8 +181,9 @@
#endif
}
-void TraceSorter::MaybePushEvent(size_t queue_idx, TimestampedTracePiece ttp) {
- int64_t timestamp = ttp.timestamp;
+void TraceSorter::MaybePushEvent(size_t queue_idx,
+ const TimestampedDescriptor& ts_desc) {
+ int64_t timestamp = ts_desc.ts;
if (timestamp < latest_pushed_event_ts_)
context_->storage->IncrementStats(stats::sorter_push_event_out_of_order);
@@ -184,13 +192,34 @@
if (PERFETTO_UNLIKELY(bypass_next_stage_for_testing_))
return;
- if (queue_idx == 0) {
- // queues_[0] is for non-ftrace packets.
- parser_->ParseTracePacket(timestamp, std::move(ttp));
- } else {
- // Ftrace queues start at offset 1. So queues_[1] = cpu[0] and so on.
- uint32_t cpu = static_cast<uint32_t>(queue_idx - 1);
- parser_->ParseFtracePacket(cpu, timestamp, std::move(ttp));
+ switch (ts_desc.descriptor.type()) {
+ case Type::kInlineSchedSwitch:
+ ParseTracePacket<InlineSchedSwitch>(queue_idx, ts_desc);
+ return;
+ case Type::kInlineSchedWaking:
+ ParseTracePacket<InlineSchedWaking>(queue_idx, ts_desc);
+ return;
+ case Type::kFtraceEvent:
+ ParseTracePacket<FtraceEventData>(queue_idx, ts_desc);
+ return;
+ case Type::kTracePacket:
+ ParseTracePacket<TracePacketData>(queue_idx, ts_desc);
+ return;
+ case Type::kTrackEvent:
+ ParseTracePacket<std::unique_ptr<TrackEventData>>(queue_idx, ts_desc);
+ return;
+ case Type::kFuchsiaRecord:
+ ParseTracePacket<std::unique_ptr<FuchsiaRecord>>(queue_idx, ts_desc);
+ return;
+ case Type::kJsonValue:
+ ParseTracePacket<std::string>(queue_idx, ts_desc);
+ return;
+ case Type::kSystraceLine:
+ ParseTracePacket<std::unique_ptr<SystraceLine>>(queue_idx, ts_desc);
+ return;
+ case Type::kInvalid:
+ PERFETTO_DFATAL("Invalid TimestampedTracePiece type");
+ return;
}
}
diff --git a/src/trace_processor/trace_sorter.h b/src/trace_processor/trace_sorter.h
index 7df33a6..9e05aeb 100644
--- a/src/trace_processor/trace_sorter.h
+++ b/src/trace_processor/trace_sorter.h
@@ -23,13 +23,20 @@
#include <vector>
#include "perfetto/ext/base/circular_queue.h"
+#include "perfetto/ext/base/utils.h"
#include "perfetto/trace_processor/basic_types.h"
#include "perfetto/trace_processor/trace_blob_view.h"
+#include "src/trace_processor/importers/common/trace_parser.h"
#include "src/trace_processor/timestamped_trace_piece.h"
+#include "src/trace_processor/trace_sorter_queue.h"
namespace perfetto {
namespace trace_processor {
+namespace trace_sorter_internal {
+class VariadicQueue;
+} // namespace trace_sorter_internal
+
class PacketSequenceState;
struct SystraceLine;
@@ -80,6 +87,9 @@
// within the first partition where sorting should start, and sort all events
// from there to the end.
class TraceSorter {
+ private:
+ using VariadicQueue = trace_sorter_internal::VariadicQueue;
+
public:
enum class SortingMode {
kDefault,
@@ -92,33 +102,34 @@
inline void PushTracePacket(int64_t timestamp,
PacketSequenceState* state,
- TraceBlobView packet) {
- AppendNonFtraceEvent(TimestampedTracePiece(timestamp, packet_idx_++,
- std::move(packet),
- state->current_generation()));
+ TraceBlobView event) {
+ uint32_t offset = variadic_queue_.Append(
+ TracePacketData{std::move(event), state->current_generation()});
+ AppendNonFtraceEvent(timestamp, offset, Type::kTracePacket);
}
inline void PushJsonValue(int64_t timestamp, std::string json_value) {
- AppendNonFtraceEvent(
- TimestampedTracePiece(timestamp, packet_idx_++, std::move(json_value)));
+ uint32_t offset = variadic_queue_.Append(std::move(json_value));
+ AppendNonFtraceEvent(timestamp, offset, Type::kJsonValue);
}
inline void PushFuchsiaRecord(int64_t timestamp,
- std::unique_ptr<FuchsiaRecord> record) {
- AppendNonFtraceEvent(
- TimestampedTracePiece(timestamp, packet_idx_++, std::move(record)));
+ std::unique_ptr<FuchsiaRecord> fuchsia_record) {
+ uint32_t offset = variadic_queue_.Append(std::move(fuchsia_record));
+ AppendNonFtraceEvent(timestamp, offset, Type::kFuchsiaRecord);
}
inline void PushSystraceLine(std::unique_ptr<SystraceLine> systrace_line) {
- int64_t timestamp = systrace_line->ts;
- AppendNonFtraceEvent(TimestampedTracePiece(timestamp, packet_idx_++,
- std::move(systrace_line)));
+ auto ts = systrace_line->ts;
+ auto offset = variadic_queue_.Append(std::move(systrace_line));
+ AppendNonFtraceEvent(ts, offset, Type::kSystraceLine);
}
- inline void PushTrackEventPacket(int64_t timestamp,
- std::unique_ptr<TrackEventData> data) {
- AppendNonFtraceEvent(
- TimestampedTracePiece(timestamp, packet_idx_++, std::move(data)));
+ inline void PushTrackEventPacket(
+ int64_t timestamp,
+ std::unique_ptr<TrackEventData> track_event) {
+ uint32_t offset = variadic_queue_.Append(std::move(track_event));
+ AppendNonFtraceEvent(timestamp, offset, Type::kTrackEvent);
}
inline void PushFtraceEvent(uint32_t cpu,
@@ -126,9 +137,10 @@
TraceBlobView event,
PacketSequenceState* state) {
auto* queue = GetQueue(cpu + 1);
- queue->Append(TimestampedTracePiece(
- timestamp, packet_idx_++,
- FtraceEventData{std::move(event), state->current_generation()}));
+ uint32_t offset = variadic_queue_.Append(
+ FtraceEventData{std::move(event), state->current_generation()});
+ queue->Append(TimestampedDescriptor{
+ timestamp, Descriptor(offset, Type::kFtraceEvent)});
UpdateGlobalTs(queue);
}
inline void PushInlineFtraceEvent(uint32_t cpu,
@@ -139,26 +151,31 @@
// sorted by timestamp. In such situations, we will have to sort at the end
// of the batch. We can do better as both sub-sequences are sorted however.
// Consider adding extra queues, or pushing them in a merge-sort fashion
- // instead.
+ // // instead.
auto* queue = GetQueue(cpu + 1);
- queue->Append(
- TimestampedTracePiece(timestamp, packet_idx_++, inline_sched_switch));
+ uint32_t offset = variadic_queue_.Append(inline_sched_switch);
+ queue->Append(TimestampedDescriptor{
+ timestamp, Descriptor(offset, Type::kInlineSchedSwitch)});
UpdateGlobalTs(queue);
}
inline void PushInlineFtraceEvent(uint32_t cpu,
int64_t timestamp,
InlineSchedWaking inline_sched_waking) {
auto* queue = GetQueue(cpu + 1);
- queue->Append(
- TimestampedTracePiece(timestamp, packet_idx_++, inline_sched_waking));
+
+ uint32_t offset = variadic_queue_.Append(inline_sched_waking);
+ queue->Append(TimestampedDescriptor{
+ timestamp,
+ Descriptor(offset, TimestampedTracePiece::Type::kInlineSchedWaking)});
UpdateGlobalTs(queue);
}
void ExtractEventsForced() {
- SortAndExtractEventsUntilPacket(packet_idx_);
+ uint32_t cur_mem_block_offset = variadic_queue_.NextOffset();
+ SortAndExtractEventsUntilPacket(cur_mem_block_offset);
queues_.resize(0);
- packet_idx_for_extraction_ = packet_idx_;
+ offset_for_extraction_ = cur_mem_block_offset;
flushes_since_extraction_ = 0;
}
@@ -170,25 +187,86 @@
return;
}
- SortAndExtractEventsUntilPacket(packet_idx_for_extraction_);
- packet_idx_for_extraction_ = packet_idx_;
+ SortAndExtractEventsUntilPacket(offset_for_extraction_);
+ offset_for_extraction_ = variadic_queue_.NextOffset();
flushes_since_extraction_ = 0;
}
int64_t max_timestamp() const { return global_max_ts_; }
private:
+ using Type = TimestampedTracePiece::Type;
+ // Stores offset and type of metadat.
+ struct Descriptor {
+ public:
+ static constexpr uint8_t kTypeBits = 4;
+ static constexpr uint64_t kTypeMask = (1 << kTypeBits) - 1;
+ static constexpr uint64_t kOffsetShift = kTypeBits;
+ static constexpr uint64_t kMaxType = kTypeMask;
+
+ static_assert(static_cast<uint8_t>(TimestampedTracePiece::Type::kSize) <=
+ kTypeMask,
+ "Too many bits for type");
+
+ Descriptor(uint32_t offset, TimestampedTracePiece::Type type)
+ : packed_value_((static_cast<uint64_t>(offset) << kOffsetShift) |
+ static_cast<uint64_t>(type)) {}
+
+ uint32_t offset() const {
+ return static_cast<uint32_t>(packed_value_ >> kOffsetShift);
+ }
+
+ TimestampedTracePiece::Type type() const {
+ return static_cast<TimestampedTracePiece::Type>(packed_value_ &
+ kTypeMask);
+ }
+
+ private:
+ uint64_t packed_value_ = 0;
+ };
+
+ struct TimestampedDescriptor {
+ int64_t ts;
+ Descriptor descriptor;
+
+ // For std::lower_bound().
+ static inline bool Compare(const TimestampedDescriptor& x, int64_t ts) {
+ return x.ts < ts;
+ }
+
+ // For std::sort().
+ inline bool operator<(const TimestampedDescriptor& desc) const {
+ return ts < desc.ts ||
+ (ts == desc.ts && descriptor.offset() < desc.descriptor.offset());
+ }
+
+ // For std::sort(). Without this the compiler will fall back on invoking
+ // move operators on temporary objects.
+ friend void swap(TimestampedDescriptor& a, TimestampedDescriptor& b) {
+ // TimestampedDescriptor is 16 bytes + trivially swappable so it can be
+ // done without doing any moving.
+ using AS =
+ typename std::aligned_storage<sizeof(TimestampedDescriptor),
+ alignof(TimestampedDescriptor)>::type;
+ using std::swap;
+ swap(reinterpret_cast<AS&>(a), reinterpret_cast<AS&>(b));
+ }
+ };
+
+ static_assert(sizeof(TimestampedDescriptor) == 16,
+ "TimestampeDescriptor cannot grow beyond 16 bytes");
+
static constexpr uint32_t kNoBatch = std::numeric_limits<uint32_t>::max();
struct Queue {
- inline void Append(TimestampedTracePiece ttp) {
- const int64_t timestamp = ttp.timestamp;
- events_.emplace_back(std::move(ttp));
- min_ts_ = std::min(min_ts_, timestamp);
+ inline void Append(TimestampedDescriptor ts_desc) {
+ auto ts = ts_desc.ts;
+ events_.emplace_back(std::move(ts_desc));
+ min_ts_ = std::min(min_ts_, ts);
// Events are often seen in order.
- if (PERFETTO_LIKELY(timestamp >= max_ts_)) {
- max_ts_ = timestamp;
+ if (PERFETTO_LIKELY(ts >= max_ts_)) {
+ max_ts_ = ts;
} else {
// The event is breaking ordering. The first time it happens, keep
// track of which index we are at. We know that everything before that
@@ -198,9 +276,9 @@
if (sort_start_idx_ == 0) {
PERFETTO_DCHECK(events_.size() >= 2);
sort_start_idx_ = events_.size() - 1;
- sort_min_ts_ = timestamp;
+ sort_min_ts_ = ts;
} else {
- sort_min_ts_ = std::min(sort_min_ts_, timestamp);
+ sort_min_ts_ = std::min(sort_min_ts_, ts);
}
}
@@ -210,7 +288,7 @@
bool needs_sorting() const { return sort_start_idx_ != 0; }
void Sort();
- base::CircularQueue<TimestampedTracePiece> events_;
+ base::CircularQueue<TimestampedDescriptor> events_;
int64_t min_ts_ = std::numeric_limits<int64_t>::max();
int64_t max_ts_ = 0;
size_t sort_start_idx_ = 0;
@@ -225,9 +303,9 @@
return &queues_[index];
}
- inline void AppendNonFtraceEvent(TimestampedTracePiece ttp) {
+ inline void AppendNonFtraceEvent(int64_t ts, uint32_t offset, Type type) {
Queue* queue = GetQueue(0);
- queue->Append(std::move(ttp));
+ queue->Append(TimestampedDescriptor{ts, Descriptor{offset, type}});
UpdateGlobalTs(queue);
}
@@ -236,8 +314,27 @@
global_max_ts_ = std::max(global_max_ts_, queue->max_ts_);
}
- void MaybePushEvent(size_t queue_idx,
- TimestampedTracePiece ttp) PERFETTO_ALWAYS_INLINE;
+ template <typename T>
+ void ParseTracePacket(size_t queue_idx,
+ const TimestampedDescriptor& ts_desc) {
+ if (queue_idx == 0) {
+ // queues_[0] is for non-ftrace packets.
+ parser_->ParseTracePacket(
+ ts_desc.ts,
+ TimestampedTracePiece(ts_desc.ts, variadic_queue_.Evict<T>(
+ ts_desc.descriptor.offset())));
+ } else {
+ // Ftrace queues start at offset 1. So queues_[1] = cpu[0] and so on.
+ uint32_t cpu = static_cast<uint32_t>(queue_idx - 1);
+ parser_->ParseFtracePacket(
+ cpu, ts_desc.ts,
+ TimestampedTracePiece(ts_desc.ts, variadic_queue_.Evict<T>(
+ ts_desc.descriptor.offset())));
+ }
+ }
+
+ void MaybePushEvent(size_t queue_idx, const TimestampedDescriptor& ts_desc)
+ PERFETTO_ALWAYS_INLINE;
TraceProcessorContext* context_;
std::unique_ptr<TraceParser> parser_;
@@ -246,14 +343,17 @@
// forced extractionn at the end of the trace.
SortingMode sorting_mode_ = SortingMode::kDefault;
- // The packet index until which events should be extracted. Set based
- // on the packet index in |OnReadBuffer|.
- uint64_t packet_idx_for_extraction_ = 0;
+ // The packet offset until which events should be extracted. Set based
+ // on the packet offset in |OnReadBuffer|.
+ uint32_t offset_for_extraction_ = 0;
// The number of flushes which have happened since the last incremental
// extraction.
uint32_t flushes_since_extraction_ = 0;
+ // Stores the metadata for each event type in a memory efficient manner.
+ VariadicQueue variadic_queue_;
+
// queues_[0] is the general (non-ftrace) queue.
// queues_[1] is the ftrace queue for CPU(0).
// queues_[x] is the ftrace queue for CPU(x - 1).
@@ -265,10 +365,8 @@
// min(e.timestamp for e in queues_).
int64_t global_min_ts_ = std::numeric_limits<int64_t>::max();
- // Monotonic increasing value used to index timestamped trace pieces.
- uint64_t packet_idx_ = 0;
-
- // Used for performance tests. True when setting TRACE_PROCESSOR_SORT_ONLY=1.
+ // Used for performance tests. True when setting
+ // TRACE_PROCESSOR_SORT_ONLY=1.
bool bypass_next_stage_for_testing_ = false;
// max(e.ts for e pushed to next stage)
diff --git a/src/trace_processor/trace_sorter_queue.h b/src/trace_processor/trace_sorter_queue.h
new file mode 100644
index 0000000..e69ad8f
--- /dev/null
+++ b/src/trace_processor/trace_sorter_queue.h
@@ -0,0 +1,174 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef SRC_TRACE_PROCESSOR_TRACE_SORTER_QUEUE_H_
+#define SRC_TRACE_PROCESSOR_TRACE_SORTER_QUEUE_H_
+
+#include "src/trace_processor/timestamped_trace_piece.h"
+
+namespace perfetto {
+namespace trace_processor {
+namespace trace_sorter_internal {
+
+// 1MB is good tradeoff between having big enough memory blocks so that we don't
+// need to often append and remove blocks for big traces, but small enough to
+// not overuse memory for small traces.
+static constexpr uint32_t kDefaultSize = 1 * 1024 * 1024; // 1MB
+
+// Used for storing the data for all different TimestampedTracePiece data types.
+class VariadicQueue {
+ public:
+ VariadicQueue() : VariadicQueue(kDefaultSize) {}
+
+ // Moves TimestampedTracePiece data type to the end of the queue storage.
+ template <typename T>
+ uint32_t Append(T value) {
+ PERFETTO_DCHECK(!mem_blocks_.empty());
+
+ if (PERFETTO_UNLIKELY(!mem_blocks_.back().HasSpace<T>())) {
+ mem_blocks_.emplace_back(Block(block_size_));
+ }
+
+ auto& back_block = mem_blocks_.back();
+ PERFETTO_DCHECK(back_block.HasSpace<T>());
+ return GlobalMemOffsetFromLastBlockOffset(
+ back_block.Append(std::move(value)));
+ }
+
+ // Moves object out of queue storage.
+ template <typename T>
+ T Evict(uint32_t global_offset) {
+ uint32_t block = (global_offset / block_size_) - deleted_blocks_;
+ uint32_t block_offset = global_offset % block_size_;
+ return mem_blocks_[block].Evict<T>(block_offset);
+ }
+
+ // Clears the empty front of queue storage.
+ void FreeMemory() {
+ while (mem_blocks_.size() > 1 && mem_blocks_.front().empty()) {
+ mem_blocks_.pop_front();
+ deleted_blocks_++;
+ }
+ }
+
+ // Returns the offset value in which new element can be stored.
+ uint32_t NextOffset() const {
+ PERFETTO_DCHECK(!mem_blocks_.empty());
+ return GlobalMemOffsetFromLastBlockOffset(mem_blocks_.back().offset());
+ }
+
+ static VariadicQueue VariadicQueueForTesting(uint32_t size) {
+ return VariadicQueue(size);
+ }
+
+ private:
+ // Implementation note: this class stores an extra 8 bytes in debug builds to
+ // store the size of the type stored inside.
+ class Block {
+ public:
+ explicit Block(uint32_t block_size)
+ : size_(block_size),
+ storage_(
+ base::AlignedAllocTyped<uint64_t>(size_ / sizeof(uint64_t))) {}
+
+ template <typename T>
+ bool HasSpace() const {
+#if PERFETTO_DCHECK_IS_ON()
+ return sizeof(T) + sizeof(uint64_t) <= size_ - offset_;
+#else
+ return sizeof(T) <= size_ - offset_;
+#endif
+ }
+
+ template <typename T>
+ uint32_t Append(T value) {
+ static_assert(alignof(T) <= 8,
+ "Class must have at most 8 byte alignment");
+
+ PERFETTO_DCHECK(offset_ % 8 == 0);
+ PERFETTO_DCHECK(HasSpace<T>());
+
+ uint32_t cur_offset = offset_;
+ char* storage_begin_ptr = reinterpret_cast<char*>(storage_.get());
+ char* ptr = storage_begin_ptr + cur_offset;
+#if PERFETTO_DCHECK_IS_ON()
+ uint64_t* size_ptr = reinterpret_cast<uint64_t*>(ptr);
+ *size_ptr = sizeof(T);
+ ptr += sizeof(uint64_t);
+#endif
+ new (ptr) T(std::move(value));
+ num_elements_++;
+ ptr += sizeof(T);
+ offset_ =
+ RoundUpToPowerOf8(static_cast<uint32_t>(ptr - storage_begin_ptr));
+ return cur_offset;
+ }
+
+ template <typename T>
+ T Evict(uint32_t offset) {
+ PERFETTO_DCHECK(offset < size_);
+ PERFETTO_DCHECK(offset % 8 == 0);
+
+ char* ptr = reinterpret_cast<char*>(storage_.get()) + offset;
+#if PERFETTO_DCHECK_IS_ON()
+ uint64_t size = *reinterpret_cast<uint64_t*>(ptr);
+ ptr += sizeof(uint64_t);
+ PERFETTO_DCHECK(size == sizeof(T));
+#endif
+ T* type_ptr = reinterpret_cast<T*>(ptr);
+ T out(std::move(*type_ptr));
+ if (!std::is_trivially_destructible<T>::value) {
+ type_ptr->~T();
+ }
+
+ num_elements_evicted_++;
+ return out;
+ }
+
+ uint32_t offset() const { return offset_; }
+ bool empty() { return num_elements_ == num_elements_evicted_; }
+
+ private:
+ static inline uint32_t RoundUpToPowerOf8(uint32_t offset) {
+ return (offset + 7) & (~0u << 3);
+ }
+ uint32_t size_;
+ uint32_t num_elements_ = 0;
+ uint32_t num_elements_evicted_ = 0;
+ base::AlignedUniquePtr<uint64_t> storage_;
+ uint32_t offset_ = 0;
+ };
+
+ explicit VariadicQueue(uint32_t block_size) : block_size_(block_size) {
+ mem_blocks_.emplace_back(Block(block_size_));
+ }
+
+ uint32_t GlobalMemOffsetFromLastBlockOffset(uint32_t block_offset) const {
+ return (deleted_blocks_ + static_cast<uint32_t>(mem_blocks_.size()) - 1) *
+ block_size_ +
+ block_offset;
+ }
+
+ const uint32_t block_size_ = kDefaultSize;
+ std::deque<Block> mem_blocks_;
+ uint32_t deleted_blocks_ = 0;
+};
+
+} // namespace trace_sorter_internal
+} // namespace trace_processor
+} // namespace perfetto
+
+#endif // SRC_TRACE_PROCESSOR_TRACE_SORTER_QUEUE_H_
diff --git a/src/trace_processor/trace_sorter_queue_unittest.cc b/src/trace_processor/trace_sorter_queue_unittest.cc
new file mode 100644
index 0000000..caafa129
--- /dev/null
+++ b/src/trace_processor/trace_sorter_queue_unittest.cc
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "src/trace_processor/trace_sorter_queue.h"
+#include "gtest/gtest.h"
+#include "src/trace_processor/types/variadic.h"
+#include "test/gtest_and_gmock.h"
+
+namespace perfetto {
+namespace trace_processor {
+namespace trace_sorter_internal {
+
+#if PERFETTO_DCHECK_IS_ON()
+constexpr uint32_t RESERVED_SIZE_BYTES = 8ul;
+#else
+constexpr uint32_t RESERVED_SIZE_BYTES = 0ul;
+#endif
+
+using ::testing::_;
+
+TEST(VariadicQueueUnittest, AddAndEvict) {
+ VariadicQueue queue =
+ VariadicQueue::VariadicQueueForTesting(8 + RESERVED_SIZE_BYTES);
+ auto offset = queue.Append<int64_t>(10);
+ int64_t evicted_val = queue.Evict<int64_t>(offset);
+ ASSERT_EQ(evicted_val, 10l);
+}
+
+TEST(VariadicQueueUnittest, AddAndEvictFirstElement) {
+ VariadicQueue queue =
+ VariadicQueue::VariadicQueueForTesting(8 + RESERVED_SIZE_BYTES);
+ auto offset1 = queue.Append<int64_t>(10);
+ auto offset2 = queue.Append<int64_t>(20);
+ ASSERT_EQ(queue.Evict<int64_t>(offset1), 10);
+ ASSERT_EQ(queue.Evict<int64_t>(offset2), 20);
+}
+
+TEST(VariadicQueueUnittest, AppendAfterEviction) {
+ VariadicQueue queue =
+ VariadicQueue::VariadicQueueForTesting(8 + RESERVED_SIZE_BYTES);
+ auto offset = queue.Append<int64_t>(10);
+ ASSERT_EQ(queue.Evict<int64_t>(offset), 10);
+ queue.Append<int64_t>(20);
+}
+
+TEST(VariadicQueueUnittest, FreeAllMemory) {
+ VariadicQueue queue =
+ VariadicQueue::VariadicQueueForTesting(8 + RESERVED_SIZE_BYTES);
+ auto offset1 = queue.Append<int64_t>(10);
+ auto offset2 = queue.Append<int64_t>(20);
+ ASSERT_EQ(queue.Evict<int64_t>(offset1), 10);
+ ASSERT_EQ(queue.Evict<int64_t>(offset2), 20);
+ queue.FreeMemory();
+}
+
+TEST(VariadicQueueUnittest, FreeMemoryPartially) {
+ VariadicQueue queue =
+ VariadicQueue::VariadicQueueForTesting(8 + RESERVED_SIZE_BYTES);
+ auto offset1 = queue.Append<int64_t>(10);
+ queue.Append<int64_t>(20);
+ ASSERT_EQ(queue.Evict<int64_t>(offset1), 10);
+ queue.FreeMemory();
+}
+
+TEST(VariadicQueueUnittest, AppendDifferentSizes) {
+ VariadicQueue queue =
+ VariadicQueue::VariadicQueueForTesting(8 + RESERVED_SIZE_BYTES);
+ auto offset_long_long = queue.Append<int64_t>(10);
+ auto offset_int = queue.Append<int32_t>(20);
+ auto offset_short = queue.Append<int16_t>(30);
+ auto offset_char = queue.Append<char>('s');
+ ASSERT_EQ(queue.Evict<int64_t>(offset_long_long), 10l);
+ ASSERT_EQ(queue.Evict<int32_t>(offset_int), 20);
+ ASSERT_EQ(queue.Evict<int16_t>(offset_short), static_cast<int16_t>(30));
+ ASSERT_EQ(queue.Evict<char>(offset_char), 's');
+}
+
+} // namespace trace_sorter_internal
+} // namespace trace_processor
+} // namespace perfetto
diff --git a/src/trace_processor/views/BUILD.gn b/src/trace_processor/views/BUILD.gn
index a1ba42b..acb08a5 100644
--- a/src/trace_processor/views/BUILD.gn
+++ b/src/trace_processor/views/BUILD.gn
@@ -25,3 +25,14 @@
"../tables",
]
}
+
+source_set("unittests") {
+ testonly = true
+ sources = [ "macros_unittest.cc" ]
+ deps = [
+ ":views",
+ "../../../gn:default_deps",
+ "../../../gn:gtest_and_gmock",
+ "../tables",
+ ]
+}
diff --git a/src/trace_processor/views/macros.h b/src/trace_processor/views/macros.h
index f16f9a2..1ac74ec 100644
--- a/src/trace_processor/views/macros.h
+++ b/src/trace_processor/views/macros.h
@@ -49,12 +49,23 @@
// COL(name, slice, name)
// COL(track_id, slice, track_id)
// COL(track_name, track, name)
-// FROM(SliceTable, slice)
+// FROM(SliceTable, slice, PERFETTO_TP_VIEW_NO_FROM_COLUMNS)
// JOIN(TrackTable, track, id, slice, track_id, View::kIdAlwaysPresent)
// PERFETTO_TP_DECLARE_VIEW(PERFETTO_TP_SLICE_TRACK_VIEW_DEF);
//
// And in a .cc file:
// PERFETTO_TP_DEFINE_VIEW(SliceWithTrackView);
+//
+// A shorter (and less error prone) version of the syntax, can be used if you
+// want to expose all the columns from the slice table. This involves passing
+// the table defintion macro for the slice table instead of
+// PERFETTO_TP_VIEW_NO_FROM_COLUMNS to the FROM macro:
+// #define PERFETTO_TP_SLICE_TRACK_VIEW_DEF(NAME, FROM, JOIN, COL)
+// NAME(SliceWithTrackView, "slice_with_track")
+// COL(track_name, track, name)
+// FROM(SliceTable, slice, PERFETTO_TP_SLICE_TABLE_DEF)
+// JOIN(TrackTable, track, id, slice, track_id, View::kIdAlwaysPresent)
+// PERFETTO_TP_DECLARE_VIEW(PERFETTO_TP_SLICE_TRACK_VIEW_DEF);
// The macro used to define C++ views.
// See the top of the file for how this should be used.
@@ -63,9 +74,12 @@
// definition is a function macro taking four arguments:
// 1. NAME, a function macro taking two arguments: the name of the new class
// being defined and the name of the table when exposed to SQLite.
-// 2. FROM, a function macro taking two arguments: a) the class name of the
-// "root" table of this view b) the name of this table for use in the
-// JOIN and COL macros (see below).
+// 2. FROM, a function macro taking 3 arguments:
+// a) the class name of the "root" table of this view
+// b) the name of this table for use in the JOIN and COL macros (see below)
+// c) the table defintion macro of the FROM table if columns should be
+// automatically added or PERFETTO_TP_VIEW_NO_FROM_COLUMNS to instead
+// explicitly define every column.
// 3. JOIN, a function macro taking 6 arguments:
// a) the class name of the table which will be joined into this view on
// the "right" side of the join.
@@ -91,6 +105,11 @@
PERFETTO_TP_VIEW_NAME(DEF, PERFETTO_TP_VIEW_NAME_EXTRACT), \
PERFETTO_TP_VIEW_NAME(DEF, PERFETTO_TP_VIEW_CLASS_EXTRACT), DEF)
+// Macro used to supress automatically adding columns in the FROM column to
+// the view. Should be passed instead of the table defintion to the FROM
+// function macro when defining views.
+#define PERFETTO_TP_VIEW_NO_FROM_COLUMNS(...)
+
// Macro used to define destructors for C++ views.
// See the top of the file for how this should be used.
//
diff --git a/src/trace_processor/views/macros_internal.h b/src/trace_processor/views/macros_internal.h
index 886191d..7b7e247 100644
--- a/src/trace_processor/views/macros_internal.h
+++ b/src/trace_processor/views/macros_internal.h
@@ -68,6 +68,15 @@
uint32_t index_in_view_ = 0;
};
+// Ignore GCC warning about a missing argument for a variadic macro parameter.
+#if defined(__GNUC__) || defined(__clang__)
+#pragma GCC system_header
+#endif
+
+// Invokes a View column function using data from a table column definition.
+#define PERFETTO_TP_VIEW_INVOKE_VIEW_COL_FN_FROM_TABLE(FN, col_name) \
+ FN(col_name, from_table, col_name)
+
// Invokes FN on the name and class name declaration of the view.
#define PERFETTO_TP_VIEW_NAME(DEF, FN) \
DEF(FN, PERFETTO_TP_NOOP, PERFETTO_TP_NOOP, PERFETTO_TP_NOOP)
@@ -80,8 +89,13 @@
#define PERFETTO_TP_VIEW_JOINS(DEF, FN) \
DEF(PERFETTO_TP_NOOP, PERFETTO_TP_NOOP, FN, PERFETTO_TP_NOOP)
+// Returns the DEF for a FROM macro.
+#define PERFETTO_TP_VIEW_FROM_DEF(_, __, DEF) DEF
+
// Invokes FN on every join which is part of the view definition.
-#define PERFETTO_TP_VIEW_COLS(DEF, FN) \
+#define PERFETTO_TP_VIEW_COLS(DEF, FROM_FN, FN) \
+ PERFETTO_TP_ALL_COLUMNS( \
+ PERFETTO_TP_VIEW_FROM(DEF, PERFETTO_TP_VIEW_FROM_DEF), FROM_FN) \
DEF(PERFETTO_TP_NOOP, PERFETTO_TP_NOOP, PERFETTO_TP_NOOP, FN)
// Gets the class name from a view definition.
@@ -91,14 +105,16 @@
#define PERFETTO_TP_VIEW_NAME_EXTRACT(_, view_name) view_name
// Defines a table pointer for the macro constructor.
-#define PERFETTO_TP_VIEW_CLASS_TABLE_COMMA_FROM(class_name, table_name) \
+#define PERFETTO_TP_VIEW_CLASS_TABLE_COMMA_FROM(class_name, table_name, ...) \
class_name *table_name,
// Defines a table pointer for the macro constructor.
#define PERFETTO_TP_VIEW_CLASS_TABLE_COMMA_JOIN(class_name, table_name, ...) \
class_name *table_name,
-#define PERFETTO_TP_VIEW_FROM_PTR_NAME(_, table_name) table_name, #table_name
+// Defines a View table for the FROM table.
+#define PERFETTO_TP_VIEW_FROM_PTR_NAME(_, table_name, ...) \
+ table_name, #table_name
// Defines a View::Join struct for a join defined in the macro.
#define PERFETTO_TP_VIEW_JOIN_DEFN(_, join_table, join_col, prev_table, \
@@ -108,32 +124,65 @@
// Defines a View::Column struct for a column defined in the macro.
#define PERFETTO_TP_VIEW_COL_DEFN(col_name, source_table, source_col) \
- View::OutputColumn{#col_name, #source_table, #source_col},
+ View::OutputColumn{#col_name, TableName::source_table(), #source_col},
-// Define a TableType alias for each table.
-#define PERFETTO_TP_VIEW_TABLE_TYPE_FROM(class_name, table_name) \
+// Defines a View::Column struct for a column defined in the FROM table.
+#define PERFETTO_TP_VIEW_FROM_COL_DEFN(_, col_name, ...) \
+ PERFETTO_TP_VIEW_INVOKE_VIEW_COL_FN_FROM_TABLE(PERFETTO_TP_VIEW_COL_DEFN, \
+ col_name)
+
+// Define a TableType alias for the FROM table.
+#define PERFETTO_TP_VIEW_TABLE_TYPE(class_name, table_name, ...) \
using table_name = class_name;
-// Define a TableType alias for each table.
-#define PERFETTO_TP_VIEW_TABLE_TYPE_JOIN(class_name, table_name, ...) \
- using table_name = class_name;
+// Define a special "from_table" TableType alias for the "FROM" table.
+#define PERFETTO_TP_VIEW_TABLE_TYPE_FROM_ALIAS(_, table_name, ...) \
+ using from_table = table_name;
+
+// Defines the table name for each table in the view.
+#define PERFETTO_TP_VIEW_TABLE_NAME(_, table_name, ...) \
+ static constexpr const char* table_name() { return #table_name; }
+
+// Define a special "from_table" TableType alias for the "FROM" table.
+#define PERFETTO_TP_VIEW_TABLE_NAME_FROM_ALIAS(_, table_name, ...) \
+ static constexpr const char* from_table() { return #table_name; }
// Define a ColumnType alias for each column.
#define PERFETTO_TP_VIEW_COLUMN_TYPE(col_name, source_table, source_col) \
using col_name = typename TableType::source_table::ColumnType::source_col;
+// Define a ColumnType alias for each column in the FROM table.
+#define PERFETTO_TP_VIEW_FROM_COLUMN_TYPE(_, col_name, ...) \
+ PERFETTO_TP_VIEW_INVOKE_VIEW_COL_FN_FROM_TABLE(PERFETTO_TP_VIEW_COLUMN_TYPE, \
+ col_name)
+
// Define a ColumnDataType alias for each column.
-#define PERFETTO_TP_VIEW_COLUMN_DATA_TYPE(col_name, source_table, source_col) \
+#define PERFETTO_TP_VIEW_COLUMN_DATA_TYPE(col_name, ...) \
using col_name = typename ColumnType::col_name::type;
-// Defines an enum member from the column name.
+// Define a ColumnDataType alias for each column in the FROM table.
+#define PERFETTO_TP_VIEW_FROM_COLUMN_DATA_TYPE(_, col_name, ...) \
+ PERFETTO_TP_VIEW_INVOKE_VIEW_COL_FN_FROM_TABLE( \
+ PERFETTO_TP_VIEW_COLUMN_DATA_TYPE, col_name)
+
+// Defines an enum member for each column name.
#define PERFETTO_TP_VIEW_COLUMN_ENUM_INDEX(col_name, ...) col_name,
+// Defines an enum member for each column name in the FROM table..
+#define PERFETTO_TP_VIEW_FROM_COLUMN_ENUM_INDEX(_, col_name, ...) \
+ PERFETTO_TP_VIEW_INVOKE_VIEW_COL_FN_FROM_TABLE( \
+ PERFETTO_TP_VIEW_COLUMN_ENUM_INDEX, col_name)
+
// Defines a column index alias.
#define PERFETTO_TP_VIEW_COLUMN_INDEX(col_name, ...) \
static constexpr uint32_t col_name = \
static_cast<uint32_t>(ColumnEnumIndex::col_name);
+// Defines a column index alias for columns from the FROM table.
+#define PERFETTO_TP_VIEW_FROM_COLUMN_INDEX(_, col_name, ...) \
+ PERFETTO_TP_VIEW_INVOKE_VIEW_COL_FN_FROM_TABLE( \
+ PERFETTO_TP_VIEW_COLUMN_INDEX, col_name)
+
// Defines a getter for the column in QueryResult.
#define PERFETTO_TP_VIEW_QUERY_RESULT_COL_GETTER(col_name, ...) \
const ColumnType::col_name& col_name() const { \
@@ -141,7 +190,12 @@
&columns()[ColumnIndex::col_name]); \
}
-// Defines a getter for the blueprint in the View.
+// Defines a getter for the FROM column in QueryResult.
+#define PERFETTO_TP_VIEW_FROM_QUERY_RESULT_COL_GETTER(_, col_name, ...) \
+ PERFETTO_TP_VIEW_INVOKE_VIEW_COL_FN_FROM_TABLE( \
+ PERFETTO_TP_VIEW_QUERY_RESULT_COL_GETTER, col_name)
+
+// Defines a getter for the blueprint for each column.
#define PERFETTO_TP_VIEW_COL_BLUEPRINT_GETTER(col_name, ...) \
macros_internal::ViewColumnBlueprint<ColumnDataType::col_name> col_name() \
const { \
@@ -149,11 +203,20 @@
ColumnIndex::col_name); \
}
+// Defines a getter for the blueprint for each column in the FROM table.
+#define PERFETTO_TP_VIEW_FROM_COL_BLUEPRINT_GETTER(_, col_name, ...) \
+ PERFETTO_TP_VIEW_INVOKE_VIEW_COL_FN_FROM_TABLE( \
+ PERFETTO_TP_VIEW_COL_BLUEPRINT_GETTER, col_name)
+
// Defines a getter for a column in the RowReference.
#define PERFETTO_TP_VIEW_ROW_REF_GETTER(col_name, ...) \
ColumnDataType::col_name col_name() const { \
return table_->col_name()[row_number_]; \
}
+// Defines a getter for a FROM column in the RowReference.
+#define PERFETTO_TP_VIEW_FROM_ROW_REF_GETTER(_, col_name, ...) \
+ PERFETTO_TP_VIEW_INVOKE_VIEW_COL_FN_FROM_TABLE( \
+ PERFETTO_TP_VIEW_ROW_REF_GETTER, col_name)
// Defines a getter for a column in the Iterator.
#define PERFETTO_TP_VIEW_IT_GETTER(col_name, ...) \
@@ -161,6 +224,10 @@
const auto& col = table_->col_name(); \
return col.GetAtIdx(its_[col.row_map_index()].index()); \
}
+// Defines a getter for a FROM column in the RowReference.
+#define PERFETTO_TP_VIEW_FROM_IT_GETTER(_, col_name, ...) \
+ PERFETTO_TP_VIEW_INVOKE_VIEW_COL_FN_FROM_TABLE(PERFETTO_TP_VIEW_IT_GETTER, \
+ col_name)
// Defines a static assert for ensuring a given join clause is valid.
#define PERFETTO_TP_VIEW_JOIN_STATIC_ASSERT(_, join_table, join_col, \
@@ -187,17 +254,31 @@
\
private: \
struct TableType { \
- PERFETTO_TP_VIEW_FROM(DEF, PERFETTO_TP_VIEW_TABLE_TYPE_FROM) \
- PERFETTO_TP_VIEW_JOINS(DEF, PERFETTO_TP_VIEW_TABLE_TYPE_JOIN) \
+ PERFETTO_TP_VIEW_FROM(DEF, PERFETTO_TP_VIEW_TABLE_TYPE) \
+ PERFETTO_TP_VIEW_JOINS(DEF, PERFETTO_TP_VIEW_TABLE_TYPE) \
+ PERFETTO_TP_VIEW_FROM(DEF, PERFETTO_TP_VIEW_TABLE_TYPE_FROM_ALIAS) \
}; \
+ \
+ struct TableName { \
+ PERFETTO_TP_VIEW_FROM(DEF, PERFETTO_TP_VIEW_TABLE_NAME) \
+ PERFETTO_TP_VIEW_JOINS(DEF, PERFETTO_TP_VIEW_TABLE_NAME) \
+ PERFETTO_TP_VIEW_FROM(DEF, PERFETTO_TP_VIEW_TABLE_NAME_FROM_ALIAS) \
+ }; \
+ \
enum class ColumnEnumIndex { \
- PERFETTO_TP_VIEW_COLS(DEF, PERFETTO_TP_VIEW_COLUMN_ENUM_INDEX) \
+ PERFETTO_TP_VIEW_COLS(DEF, \
+ PERFETTO_TP_VIEW_FROM_COLUMN_ENUM_INDEX, \
+ PERFETTO_TP_VIEW_COLUMN_ENUM_INDEX) \
}; \
struct ColumnType { \
- PERFETTO_TP_VIEW_COLS(DEF, PERFETTO_TP_VIEW_COLUMN_TYPE) \
+ PERFETTO_TP_VIEW_COLS(DEF, \
+ PERFETTO_TP_VIEW_FROM_COLUMN_TYPE, \
+ PERFETTO_TP_VIEW_COLUMN_TYPE) \
}; \
struct ColumnDataType { \
- PERFETTO_TP_VIEW_COLS(DEF, PERFETTO_TP_VIEW_COLUMN_DATA_TYPE) \
+ PERFETTO_TP_VIEW_COLS(DEF, \
+ PERFETTO_TP_VIEW_FROM_COLUMN_DATA_TYPE, \
+ PERFETTO_TP_VIEW_COLUMN_DATA_TYPE) \
}; \
\
/* Aliases to reduce clutter in class defintions below. */ \
@@ -210,9 +291,10 @@
\
public: \
struct ColumnIndex { \
- PERFETTO_TP_VIEW_COLS(DEF, PERFETTO_TP_VIEW_COLUMN_INDEX) \
+ PERFETTO_TP_VIEW_COLS(DEF, \
+ PERFETTO_TP_VIEW_FROM_COLUMN_INDEX, \
+ PERFETTO_TP_VIEW_COLUMN_INDEX) \
}; \
- \
class RowNumber : public AbstractRowNumber { \
public: \
explicit RowNumber(uint32_t row_number) \
@@ -226,14 +308,18 @@
RowReference(const QueryResult* table, uint32_t row_number) \
: AbstractConstRowReference(table, row_number) {} \
\
- PERFETTO_TP_VIEW_COLS(DEF, PERFETTO_TP_VIEW_ROW_REF_GETTER) \
+ PERFETTO_TP_VIEW_COLS(DEF, \
+ PERFETTO_TP_VIEW_FROM_ROW_REF_GETTER, \
+ PERFETTO_TP_VIEW_ROW_REF_GETTER) \
}; \
static_assert(std::is_trivially_destructible<RowReference>::value, \
"Inheritance used without trivial destruction"); \
\
class Iterator : public AbstractConstIterator { \
public: \
- PERFETTO_TP_VIEW_COLS(DEF, PERFETTO_TP_VIEW_IT_GETTER) \
+ PERFETTO_TP_VIEW_COLS(DEF, \
+ PERFETTO_TP_VIEW_FROM_IT_GETTER, \
+ PERFETTO_TP_VIEW_IT_GETTER) \
\
Iterator& operator++() { \
row_number_++; \
@@ -264,7 +350,9 @@
\
~QueryResult() override; \
\
- PERFETTO_TP_VIEW_COLS(DEF, PERFETTO_TP_VIEW_QUERY_RESULT_COL_GETTER) \
+ PERFETTO_TP_VIEW_COLS(DEF, \
+ PERFETTO_TP_VIEW_FROM_QUERY_RESULT_COL_GETTER, \
+ PERFETTO_TP_VIEW_QUERY_RESULT_COL_GETTER) \
\
class_name::Iterator IterateRows() { \
return class_name::Iterator(this, CopyRowMaps()); \
@@ -284,7 +372,9 @@
std::nullptr_t = nullptr) \
: View(PERFETTO_TP_VIEW_FROM(DEF, PERFETTO_TP_VIEW_FROM_PTR_NAME), \
{PERFETTO_TP_VIEW_JOINS(DEF, PERFETTO_TP_VIEW_JOIN_DEFN)}, \
- {PERFETTO_TP_VIEW_COLS(DEF, PERFETTO_TP_VIEW_COL_DEFN)}) { \
+ {PERFETTO_TP_VIEW_COLS(DEF, \
+ PERFETTO_TP_VIEW_FROM_COL_DEFN, \
+ PERFETTO_TP_VIEW_COL_DEFN)}) { \
PERFETTO_TP_VIEW_JOINS(DEF, PERFETTO_TP_VIEW_JOIN_STATIC_ASSERT) \
} \
~class_name() override; \
@@ -297,7 +387,9 @@
return result; \
} \
\
- PERFETTO_TP_VIEW_COLS(DEF, PERFETTO_TP_VIEW_COL_BLUEPRINT_GETTER) \
+ PERFETTO_TP_VIEW_COLS(DEF, \
+ PERFETTO_TP_VIEW_FROM_COL_BLUEPRINT_GETTER, \
+ PERFETTO_TP_VIEW_COL_BLUEPRINT_GETTER) \
\
static const char* Name() { return view_name; } \
}
diff --git a/src/trace_processor/views/macros_unittest.cc b/src/trace_processor/views/macros_unittest.cc
new file mode 100644
index 0000000..9ef79a0
--- /dev/null
+++ b/src/trace_processor/views/macros_unittest.cc
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "src/trace_processor/views/macros.h"
+
+#include "test/gtest_and_gmock.h"
+
+#include "src/trace_processor/tables/macros.h"
+
+namespace perfetto {
+namespace trace_processor {
+namespace {
+
+#define PERFETTO_TP_TEST_THREAD_TABLE_DEF(NAME, PARENT, C) \
+ NAME(TestThreadTable, "thread") \
+ PARENT(PERFETTO_TP_ROOT_TABLE_PARENT_DEF, C) \
+ C(StringPool::Id, name) \
+ C(int64_t, start_ts, Column::Flag::kSorted)
+PERFETTO_TP_TABLE(PERFETTO_TP_TEST_THREAD_TABLE_DEF);
+
+#define PERFETTO_TP_TEST_EVENT_TABLE_DEF(NAME, PARENT, C) \
+ NAME(TestEventTable, "event") \
+ PARENT(PERFETTO_TP_ROOT_TABLE_PARENT_DEF, C) \
+ C(int64_t, ts, Column::Flag::kSorted) \
+ C(TestThreadTable::Id, thread_id)
+PERFETTO_TP_TABLE(PERFETTO_TP_TEST_EVENT_TABLE_DEF);
+
+TestEventTable::~TestEventTable() = default;
+TestThreadTable::~TestThreadTable() = default;
+
+#define PERFETTO_TP_EVENT_VIEW_DEF(NAME, FROM, JOIN, COL) \
+ NAME(TestEventView, "event_view") \
+ FROM(TestEventTable, event, PERFETTO_TP_TEST_EVENT_TABLE_DEF) \
+ JOIN(TestThreadTable, thread, id, event, thread_id, View::kIdAlwaysPresent) \
+ COL(thread_name, thread, name) \
+ COL(thread_start_ts, thread, start_ts)
+PERFETTO_TP_DECLARE_VIEW(PERFETTO_TP_EVENT_VIEW_DEF);
+PERFETTO_TP_DEFINE_VIEW(TestEventView);
+
+TEST(ViewMacrosUnittest, ColIdx) {
+ // Note: inlining these will cause myserious linker errors which don't have a
+ // good explanation as to their cause.
+ static constexpr uint32_t ts = TestEventView::ColumnIndex::ts;
+ static constexpr uint32_t thread_id = TestEventView::ColumnIndex::thread_id;
+ static constexpr uint32_t thread_name =
+ TestEventView::ColumnIndex::thread_name;
+ static constexpr uint32_t thread_start_ts =
+ TestEventView::ColumnIndex::thread_start_ts;
+
+ ASSERT_EQ(ts, 0u);
+ ASSERT_EQ(thread_id, 1u);
+ ASSERT_EQ(thread_name, 2u);
+ ASSERT_EQ(thread_start_ts, 3u);
+}
+
+TEST(ViewMacrosUnittest, Schema) {
+ TestThreadTable thread{nullptr, nullptr};
+ TestEventTable event{nullptr, nullptr};
+
+ TestEventView view{&event, &thread};
+ auto schema = view.schema();
+
+ ASSERT_EQ(schema.columns.size(), 4u);
+ ASSERT_EQ(schema.columns[0].name, "ts");
+ ASSERT_TRUE(schema.columns[0].is_sorted);
+
+ ASSERT_EQ(schema.columns[1].name, "thread_id");
+
+ ASSERT_EQ(schema.columns[2].name, "thread_name");
+
+ ASSERT_EQ(schema.columns[3].name, "thread_start_ts");
+ ASSERT_FALSE(schema.columns[3].is_sorted);
+}
+
+} // namespace
+} // namespace trace_processor
+} // namespace perfetto
diff --git a/test/data/ui-screenshots/ui-android_trace_30s_expand_camera.png.sha256 b/test/data/ui-screenshots/ui-android_trace_30s_expand_camera.png.sha256
index 4a84344..cbb201f 100644
--- a/test/data/ui-screenshots/ui-android_trace_30s_expand_camera.png.sha256
+++ b/test/data/ui-screenshots/ui-android_trace_30s_expand_camera.png.sha256
@@ -1 +1 @@
-442cab0047fff46d2dc89d6596a4c5f268aee6f62a849b13b4cff720fbe1556e
\ No newline at end of file
+042585a9e56ed1ffe0031ddda7d31a10066808fb068c22e5a3a71e325282d9e1
\ No newline at end of file
diff --git a/test/data/ui-screenshots/ui-routing_navigate_navigate_back_and_forward.png.sha256 b/test/data/ui-screenshots/ui-routing_navigate_navigate_back_and_forward.png.sha256
index 035f335..1c1134b 100644
--- a/test/data/ui-screenshots/ui-routing_navigate_navigate_back_and_forward.png.sha256
+++ b/test/data/ui-screenshots/ui-routing_navigate_navigate_back_and_forward.png.sha256
@@ -1 +1 @@
-e8ffe0046ea98d27b4216c8d1ff64c665392c90ab3d90e2db99069ae54d12707
\ No newline at end of file
+582c5550a14de74aabcd2b0342f8295b040febc4cf6bcb4e9fb6cb155e9c8d4d
\ No newline at end of file
diff --git a/test/data/ui-screenshots/ui-routing_open_invalid_trace_from_blank_page.png.sha256 b/test/data/ui-screenshots/ui-routing_open_invalid_trace_from_blank_page.png.sha256
index 7f695dd..c9480fb 100644
--- a/test/data/ui-screenshots/ui-routing_open_invalid_trace_from_blank_page.png.sha256
+++ b/test/data/ui-screenshots/ui-routing_open_invalid_trace_from_blank_page.png.sha256
@@ -1 +1 @@
-4f568b3a913d3b7786881147fb9a8ba7a6864b2beb7d1c17e615b6a6d4cf7c32
\ No newline at end of file
+b5bedbda51c728c7b058ee17c83be9536bcd85770ed2b0c3a3d305aea42b5078
\ No newline at end of file
diff --git a/test/data/ui-screenshots/ui-routing_start_from_no_trace_open_invalid_trace.png.sha256 b/test/data/ui-screenshots/ui-routing_start_from_no_trace_open_invalid_trace.png.sha256
index 05e1bac..ab770c7 100644
--- a/test/data/ui-screenshots/ui-routing_start_from_no_trace_open_invalid_trace.png.sha256
+++ b/test/data/ui-screenshots/ui-routing_start_from_no_trace_open_invalid_trace.png.sha256
@@ -1 +1 @@
-068f91aed73a76fb96807713766a3a4565ec35408ac1f71402a05eefb630c5eb
\ No newline at end of file
+5ba61b48cd0d3d7a4bb53c828974422702254845637b471826d11c0a43c36a12
\ No newline at end of file
diff --git a/test/trace_processor/PRESUBMIT.py b/test/trace_processor/PRESUBMIT.py
new file mode 100644
index 0000000..a882d75
--- /dev/null
+++ b/test/trace_processor/PRESUBMIT.py
@@ -0,0 +1,59 @@
+# Copyright (C) 2022 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from __future__ import print_function
+import time
+import subprocess
+from os.path import relpath
+
+
+def RunAndReportIfLong(func, *args, **kargs):
+ start = time.time()
+ results = func(*args, **kargs)
+ end = time.time()
+ limit = 0.5 # seconds
+ name = func.__name__
+ runtime = end - start
+ if runtime > limit:
+ print("{} took >{:.2}s ({:.2}s)".format(name, limit, runtime))
+ return results
+
+
+def CheckChange(input, output):
+ results = []
+ results += RunAndReportIfLong(CheckSqlTest, input, output)
+ return results
+
+
+def CheckChangeOnUpload(input_api, output_api):
+ return CheckChange(input_api, output_api)
+
+
+def CheckChangeOnCommit(input_api, output_api):
+ return CheckChange(input_api, output_api)
+
+
+def CheckSqlTest(input_api, output_api):
+
+ def file_filter(x):
+ return input_api.FilterSourceFile(
+ x, files_to_check=('.*\.sql',), files_to_skip=('.*\_test\.sql',))
+
+ non_test_sql = input_api.AffectedSourceFiles(file_filter)
+ if non_test_sql:
+ return [
+ output_api.PresubmitError("SQL tests should be named *_test.sql:",
+ [f.LocalPath() for f in non_test_sql])
+ ]
+ return []
diff --git a/test/trace_processor/atrace/index b/test/trace_processor/atrace/index
index 32a8119..02b6798 100644
--- a/test/trace_processor/atrace/index
+++ b/test/trace_processor/atrace/index
@@ -1,13 +1,13 @@
# Check error handling when parsing print events.
-bad_print.textproto ../common/list_slices.sql bad_print_textproto_list_slices.out
-bad_print.systrace ../common/list_slices.sql bad_print_systrace_list_slices.out
-instant_atrace.py instant_with_thread.sql instant_atrace_instant_with_thread.out
-instant_async_atrace.py instant_async.sql instant_async_atrace_instant_async.out
+bad_print.textproto ../common/list_slices_test.sql bad_print_textproto_list_slices.out
+bad_print.systrace ../common/list_slices_test.sql bad_print_systrace_list_slices.out
+instant_atrace.py instant_with_thread_test.sql instant_atrace_instant_with_thread.out
+instant_async_atrace.py instant_async_test.sql instant_async_atrace_instant_async.out
# Match legacy Catapult behaviour when we see multiple S events b2b with the same cookie
# name and upid.
-android_b2b_async_begin.textproto ../common/list_slices.sql android_b2b_async_begin_list_slices.out
+android_b2b_async_begin.textproto ../common/list_slices_test.sql android_b2b_async_begin_list_slices.out
# Android userspace async slices
-android_async_slice.textproto ../common/process_track_slices.sql process_track_slices_android_async_slice.out
-async_track_atrace.py ../common/process_track_slices.sql async_track_atrace_process_track_slices.out
+android_async_slice.textproto ../common/process_track_slices_test.sql process_track_slices_android_async_slice.out
+async_track_atrace.py ../common/process_track_slices_test.sql async_track_atrace_process_track_slices.out
diff --git a/test/trace_processor/atrace/instant_async.sql b/test/trace_processor/atrace/instant_async_test.sql
similarity index 100%
rename from test/trace_processor/atrace/instant_async.sql
rename to test/trace_processor/atrace/instant_async_test.sql
diff --git a/test/trace_processor/atrace/instant_with_thread.sql b/test/trace_processor/atrace/instant_with_thread_test.sql
similarity index 100%
rename from test/trace_processor/atrace/instant_with_thread.sql
rename to test/trace_processor/atrace/instant_with_thread_test.sql
diff --git a/test/trace_processor/chrome/actual_power_by_combined_rail_mode.sql b/test/trace_processor/chrome/actual_power_by_combined_rail_mode_test.sql
similarity index 100%
rename from test/trace_processor/chrome/actual_power_by_combined_rail_mode.sql
rename to test/trace_processor/chrome/actual_power_by_combined_rail_mode_test.sql
diff --git a/test/trace_processor/chrome/chrome_dropped_frames_metric.sql b/test/trace_processor/chrome/chrome_dropped_frames_metric_test.sql
similarity index 100%
rename from test/trace_processor/chrome/chrome_dropped_frames_metric.sql
rename to test/trace_processor/chrome/chrome_dropped_frames_metric_test.sql
diff --git a/test/trace_processor/chrome/chrome_long_latency_metric.sql b/test/trace_processor/chrome/chrome_long_latency_metric_test.sql
similarity index 100%
rename from test/trace_processor/chrome/chrome_long_latency_metric.sql
rename to test/trace_processor/chrome/chrome_long_latency_metric_test.sql
diff --git a/test/trace_processor/chrome/chrome_processes.sql b/test/trace_processor/chrome/chrome_processes_test.sql
similarity index 100%
rename from test/trace_processor/chrome/chrome_processes.sql
rename to test/trace_processor/chrome/chrome_processes_test.sql
diff --git a/test/trace_processor/chrome/chrome_thread_slice_repeated.sql b/test/trace_processor/chrome/chrome_thread_slice_repeated_test.sql
similarity index 100%
rename from test/trace_processor/chrome/chrome_thread_slice_repeated.sql
rename to test/trace_processor/chrome/chrome_thread_slice_repeated_test.sql
diff --git a/test/trace_processor/chrome/chrome_thread_slice.sql b/test/trace_processor/chrome/chrome_thread_slice_test.sql
similarity index 100%
rename from test/trace_processor/chrome/chrome_thread_slice.sql
rename to test/trace_processor/chrome/chrome_thread_slice_test.sql
diff --git a/test/trace_processor/chrome/chrome_threads.sql b/test/trace_processor/chrome/chrome_threads_test.sql
similarity index 100%
rename from test/trace_processor/chrome/chrome_threads.sql
rename to test/trace_processor/chrome/chrome_threads_test.sql
diff --git a/test/trace_processor/chrome/combined_rail_modes.sql b/test/trace_processor/chrome/combined_rail_modes_test.sql
similarity index 100%
rename from test/trace_processor/chrome/combined_rail_modes.sql
rename to test/trace_processor/chrome/combined_rail_modes_test.sql
diff --git a/test/trace_processor/chrome/cpu_time_by_combined_rail_mode.sql b/test/trace_processor/chrome/cpu_time_by_combined_rail_mode_test.sql
similarity index 100%
rename from test/trace_processor/chrome/cpu_time_by_combined_rail_mode.sql
rename to test/trace_processor/chrome/cpu_time_by_combined_rail_mode_test.sql
diff --git a/test/trace_processor/chrome/estimated_power_by_combined_rail_mode.sql b/test/trace_processor/chrome/estimated_power_by_combined_rail_mode_test.sql
similarity index 100%
rename from test/trace_processor/chrome/estimated_power_by_combined_rail_mode.sql
rename to test/trace_processor/chrome/estimated_power_by_combined_rail_mode_test.sql
diff --git a/test/trace_processor/chrome/frame_times_metric.sql b/test/trace_processor/chrome/frame_times_metric_test.sql
similarity index 100%
rename from test/trace_processor/chrome/frame_times_metric.sql
rename to test/trace_processor/chrome/frame_times_metric_test.sql
diff --git a/test/trace_processor/chrome/index b/test/trace_processor/chrome/index
index a41da02..759d809 100644
--- a/test/trace_processor/chrome/index
+++ b/test/trace_processor/chrome/index
@@ -3,57 +3,57 @@
# Chrome metrics (found in the trace_processor/chrome directory).
# Scroll jank metrics
-../../data/chrome_scroll_without_vsync.pftrace scroll_jank_general_validation.sql scroll_jank_general_validation.out
-../../data/chrome_scroll_without_vsync.pftrace scroll_jank.sql scroll_jank.out
-../../data/chrome_scroll_without_vsync.pftrace scroll_flow_event.sql scroll_flow_event.out
-../../data/chrome_scroll_without_vsync.pftrace scroll_flow_event_general_validation.sql scroll_flow_event_general_validation.out
-../../data/chrome_scroll_without_vsync.pftrace scroll_jank_cause.sql scroll_jank_cause.out
-../../data/chrome_scroll_without_vsync.pftrace scroll_flow_event_queuing_delay.sql scroll_flow_event_queuing_delay.out
-../../data/chrome_scroll_without_vsync.pftrace scroll_flow_event_queuing_delay_general_validation.sql scroll_flow_event_general_validation.out
-../../data/chrome_scroll_without_vsync.pftrace scroll_jank_cause_queuing_delay.sql scroll_jank_cause_queuing_delay.out
-../../data/chrome_scroll_without_vsync.pftrace scroll_jank_cause_queuing_delay_restricted.sql scroll_jank_cause_queuing_delay_restricted.out
-../../data/chrome_scroll_without_vsync.pftrace scroll_jank_cause_queuing_delay_general_validation.sql scroll_jank_cause_queuing_delay_general_validation.out
-../../data/chrome_scroll_without_vsync.pftrace chrome_thread_slice.sql chrome_thread_slice.out
-../track_event/track_event_counters.textproto chrome_thread_slice_repeated.sql chrome_thread_slice_repeated.out
+../../data/chrome_scroll_without_vsync.pftrace scroll_jank_general_validation_test.sql scroll_jank_general_validation.out
+../../data/chrome_scroll_without_vsync.pftrace scroll_jank_test.sql scroll_jank.out
+../../data/chrome_scroll_without_vsync.pftrace scroll_flow_event_test.sql scroll_flow_event.out
+../../data/chrome_scroll_without_vsync.pftrace scroll_flow_event_general_validation_test.sql scroll_flow_event_general_validation.out
+../../data/chrome_scroll_without_vsync.pftrace scroll_jank_cause_test.sql scroll_jank_cause.out
+../../data/chrome_scroll_without_vsync.pftrace scroll_flow_event_queuing_delay_test.sql scroll_flow_event_queuing_delay.out
+../../data/chrome_scroll_without_vsync.pftrace scroll_flow_event_queuing_delay_general_validation_test.sql scroll_flow_event_general_validation.out
+../../data/chrome_scroll_without_vsync.pftrace scroll_jank_cause_queuing_delay_test.sql scroll_jank_cause_queuing_delay.out
+../../data/chrome_scroll_without_vsync.pftrace scroll_jank_cause_queuing_delay_restricted_test.sql scroll_jank_cause_queuing_delay_restricted.out
+../../data/chrome_scroll_without_vsync.pftrace scroll_jank_cause_queuing_delay_general_validation_test.sql scroll_jank_cause_queuing_delay_general_validation.out
+../../data/chrome_scroll_without_vsync.pftrace chrome_thread_slice_test.sql chrome_thread_slice.out
+../track_event/track_event_counters.textproto chrome_thread_slice_repeated_test.sql chrome_thread_slice_repeated.out
../../data/chrome_rendering_desktop.pftrace frame_times frame_times_metric.out
../../data/chrome_rendering_desktop.pftrace chrome_dropped_frames chrome_dropped_frames_metric.out
-../chrome/long_event_latency.textproto chrome_long_latency_metric.sql chrome_long_latency_metric.out
-scroll_jank_mojo_simple_watcher.py scroll_jank_mojo_simple_watcher.sql scroll_jank_mojo_simple_watcher.out
-scroll_jank_gpu_check.py scroll_jank_gpu_check.sql scroll_jank_gpu_check.out
+../chrome/long_event_latency.textproto chrome_long_latency_metric_test.sql chrome_long_latency_metric.out
+scroll_jank_mojo_simple_watcher.py scroll_jank_mojo_simple_watcher_test.sql scroll_jank_mojo_simple_watcher.out
+scroll_jank_gpu_check.py scroll_jank_gpu_check_test.sql scroll_jank_gpu_check.out
# Touch gesture metrics
-../../data/chrome_touch_gesture_scroll.pftrace touch_jank.sql touch_jank.out
-../../data/chrome_touch_gesture_scroll.pftrace touch_flow_event.sql touch_flow_event.out
-../../data/chrome_touch_gesture_scroll.pftrace touch_flow_event_queuing_delay.sql touch_flow_event_queuing_delay.out
-touch_jank.py touch_jank.sql touch_jank_synth.out
-touch_jank.py touch_flow_event.sql touch_flow_event_synth.out
-touch_jank.py touch_flow_event_queuing_delay_full.sql touch_flow_event_queuing_delay_synth.out
+../../data/chrome_touch_gesture_scroll.pftrace touch_jank_test.sql touch_jank.out
+../../data/chrome_touch_gesture_scroll.pftrace touch_flow_event_test.sql touch_flow_event.out
+../../data/chrome_touch_gesture_scroll.pftrace touch_flow_event_queuing_delay_test.sql touch_flow_event_queuing_delay.out
+touch_jank.py touch_jank_test.sql touch_jank_synth.out
+touch_jank.py touch_flow_event_test.sql touch_flow_event_synth.out
+touch_jank.py touch_flow_event_queuing_delay_full_test.sql touch_flow_event_queuing_delay_synth.out
# Chrome memory snapshots.
-../../data/chrome_memory_snapshot.pftrace memory_snapshot_general_validation.sql memory_snapshot_general_validation.out
-../../data/chrome_memory_snapshot.pftrace memory_snapshot_os_dump_events.sql memory_snapshot_os_dump_events.out
-../../data/chrome_memory_snapshot.pftrace memory_snapshot_chrome_dump_events.sql memory_snapshot_chrome_dump_events.out
-../../data/chrome_memory_snapshot.pftrace memory_snapshot_nodes.sql memory_snapshot_nodes.out
-../../data/chrome_memory_snapshot.pftrace memory_snapshot_edges.sql memory_snapshot_edges.out
-../../data/chrome_memory_snapshot.pftrace memory_snapshot_node_args.sql memory_snapshot_node_args.out
-../../data/chrome_memory_snapshot.pftrace memory_snapshot_smaps.sql memory_snapshot_smaps.out
+../../data/chrome_memory_snapshot.pftrace memory_snapshot_general_validation_test.sql memory_snapshot_general_validation.out
+../../data/chrome_memory_snapshot.pftrace memory_snapshot_os_dump_events_test.sql memory_snapshot_os_dump_events.out
+../../data/chrome_memory_snapshot.pftrace memory_snapshot_chrome_dump_events_test.sql memory_snapshot_chrome_dump_events.out
+../../data/chrome_memory_snapshot.pftrace memory_snapshot_nodes_test.sql memory_snapshot_nodes.out
+../../data/chrome_memory_snapshot.pftrace memory_snapshot_edges_test.sql memory_snapshot_edges.out
+../../data/chrome_memory_snapshot.pftrace memory_snapshot_node_args_test.sql memory_snapshot_node_args.out
+../../data/chrome_memory_snapshot.pftrace memory_snapshot_smaps_test.sql memory_snapshot_smaps.out
# RAIL modes.
-combined_rail_modes.py combined_rail_modes.sql combined_rail_modes.out
-cpu_time_by_combined_rail_mode.py cpu_time_by_combined_rail_mode.sql cpu_time_by_combined_rail_mode.out
-actual_power_by_combined_rail_mode.py actual_power_by_combined_rail_mode.sql actual_power_by_combined_rail_mode.out
-estimated_power_by_combined_rail_mode.py estimated_power_by_combined_rail_mode.sql estimated_power_by_combined_rail_mode.out
-modified_rail_modes.py modified_rail_modes.sql modified_rail_modes.out
-modified_rail_modes_no_vsyncs.py modified_rail_modes.sql modified_rail_modes_no_vsyncs.out
-modified_rail_modes_with_input.py modified_rail_modes_with_input.sql modified_rail_modes_with_input.out
-modified_rail_modes_long.py modified_rail_modes.sql modified_rail_modes_long.out
-modified_rail_modes_extra_long.py modified_rail_modes.sql modified_rail_modes_extra_long.out
+combined_rail_modes.py combined_rail_modes_test.sql combined_rail_modes.out
+cpu_time_by_combined_rail_mode.py cpu_time_by_combined_rail_mode_test.sql cpu_time_by_combined_rail_mode.out
+actual_power_by_combined_rail_mode.py actual_power_by_combined_rail_mode_test.sql actual_power_by_combined_rail_mode.out
+estimated_power_by_combined_rail_mode.py estimated_power_by_combined_rail_mode_test.sql estimated_power_by_combined_rail_mode.out
+modified_rail_modes.py modified_rail_modes_test.sql modified_rail_modes.out
+modified_rail_modes_no_vsyncs.py modified_rail_modes_test.sql modified_rail_modes_no_vsyncs.out
+modified_rail_modes_with_input.py modified_rail_modes_with_input_test.sql modified_rail_modes_with_input.out
+modified_rail_modes_long.py modified_rail_modes_test.sql modified_rail_modes_long.out
+modified_rail_modes_extra_long.py modified_rail_modes_test.sql modified_rail_modes_extra_long.out
# Chrome processes.
-../../data/chrome_scroll_without_vsync.pftrace chrome_processes.sql chrome_processes.out
-../../data/chrome_android_systrace.pftrace chrome_processes.sql chrome_processes_android_systrace.out
-../../data/chrome_scroll_without_vsync.pftrace chrome_threads.sql chrome_threads.out
-../../data/chrome_android_systrace.pftrace chrome_threads.sql chrome_threads_android_systrace.out
+../../data/chrome_scroll_without_vsync.pftrace chrome_processes_test.sql chrome_processes.out
+../../data/chrome_android_systrace.pftrace chrome_processes_test.sql chrome_processes_android_systrace.out
+../../data/chrome_scroll_without_vsync.pftrace chrome_threads_test.sql chrome_threads.out
+../../data/chrome_android_systrace.pftrace chrome_threads_test.sql chrome_threads_android_systrace.out
# Chrome histogram hashes
chrome_histogram_hashes.textproto chrome_histogram_hashes chrome_histogram_hashes.out
diff --git a/test/trace_processor/chrome/memory_snapshot_chrome_dump_events.sql b/test/trace_processor/chrome/memory_snapshot_chrome_dump_events_test.sql
similarity index 100%
rename from test/trace_processor/chrome/memory_snapshot_chrome_dump_events.sql
rename to test/trace_processor/chrome/memory_snapshot_chrome_dump_events_test.sql
diff --git a/test/trace_processor/chrome/memory_snapshot_edges.sql b/test/trace_processor/chrome/memory_snapshot_edges_test.sql
similarity index 100%
rename from test/trace_processor/chrome/memory_snapshot_edges.sql
rename to test/trace_processor/chrome/memory_snapshot_edges_test.sql
diff --git a/test/trace_processor/chrome/memory_snapshot_general_validation.sql b/test/trace_processor/chrome/memory_snapshot_general_validation_test.sql
similarity index 100%
rename from test/trace_processor/chrome/memory_snapshot_general_validation.sql
rename to test/trace_processor/chrome/memory_snapshot_general_validation_test.sql
diff --git a/test/trace_processor/chrome/memory_snapshot_node_args.sql b/test/trace_processor/chrome/memory_snapshot_node_args_test.sql
similarity index 100%
rename from test/trace_processor/chrome/memory_snapshot_node_args.sql
rename to test/trace_processor/chrome/memory_snapshot_node_args_test.sql
diff --git a/test/trace_processor/chrome/memory_snapshot_nodes.sql b/test/trace_processor/chrome/memory_snapshot_nodes_test.sql
similarity index 100%
rename from test/trace_processor/chrome/memory_snapshot_nodes.sql
rename to test/trace_processor/chrome/memory_snapshot_nodes_test.sql
diff --git a/test/trace_processor/chrome/memory_snapshot_os_dump_events.sql b/test/trace_processor/chrome/memory_snapshot_os_dump_events_test.sql
similarity index 100%
rename from test/trace_processor/chrome/memory_snapshot_os_dump_events.sql
rename to test/trace_processor/chrome/memory_snapshot_os_dump_events_test.sql
diff --git a/test/trace_processor/chrome/memory_snapshot_smaps.sql b/test/trace_processor/chrome/memory_snapshot_smaps_test.sql
similarity index 100%
rename from test/trace_processor/chrome/memory_snapshot_smaps.sql
rename to test/trace_processor/chrome/memory_snapshot_smaps_test.sql
diff --git a/test/trace_processor/chrome/modified_rail_modes.sql b/test/trace_processor/chrome/modified_rail_modes_test.sql
similarity index 100%
rename from test/trace_processor/chrome/modified_rail_modes.sql
rename to test/trace_processor/chrome/modified_rail_modes_test.sql
diff --git a/test/trace_processor/chrome/modified_rail_modes_with_input.sql b/test/trace_processor/chrome/modified_rail_modes_with_input_test.sql
similarity index 100%
rename from test/trace_processor/chrome/modified_rail_modes_with_input.sql
rename to test/trace_processor/chrome/modified_rail_modes_with_input_test.sql
diff --git a/test/trace_processor/chrome/scroll_flow_event_general_validation.sql b/test/trace_processor/chrome/scroll_flow_event_general_validation_test.sql
similarity index 100%
rename from test/trace_processor/chrome/scroll_flow_event_general_validation.sql
rename to test/trace_processor/chrome/scroll_flow_event_general_validation_test.sql
diff --git a/test/trace_processor/chrome/scroll_flow_event_queuing_delay_general_validation.sql b/test/trace_processor/chrome/scroll_flow_event_queuing_delay_general_validation_test.sql
similarity index 100%
rename from test/trace_processor/chrome/scroll_flow_event_queuing_delay_general_validation.sql
rename to test/trace_processor/chrome/scroll_flow_event_queuing_delay_general_validation_test.sql
diff --git a/test/trace_processor/chrome/scroll_flow_event_queuing_delay.sql b/test/trace_processor/chrome/scroll_flow_event_queuing_delay_test.sql
similarity index 100%
rename from test/trace_processor/chrome/scroll_flow_event_queuing_delay.sql
rename to test/trace_processor/chrome/scroll_flow_event_queuing_delay_test.sql
diff --git a/test/trace_processor/chrome/scroll_flow_event.sql b/test/trace_processor/chrome/scroll_flow_event_test.sql
similarity index 100%
rename from test/trace_processor/chrome/scroll_flow_event.sql
rename to test/trace_processor/chrome/scroll_flow_event_test.sql
diff --git a/test/trace_processor/chrome/scroll_jank_cause_queuing_delay_general_validation.sql b/test/trace_processor/chrome/scroll_jank_cause_queuing_delay_general_validation_test.sql
similarity index 100%
rename from test/trace_processor/chrome/scroll_jank_cause_queuing_delay_general_validation.sql
rename to test/trace_processor/chrome/scroll_jank_cause_queuing_delay_general_validation_test.sql
diff --git a/test/trace_processor/chrome/scroll_jank_cause_queuing_delay_restricted.sql b/test/trace_processor/chrome/scroll_jank_cause_queuing_delay_restricted_test.sql
similarity index 100%
rename from test/trace_processor/chrome/scroll_jank_cause_queuing_delay_restricted.sql
rename to test/trace_processor/chrome/scroll_jank_cause_queuing_delay_restricted_test.sql
diff --git a/test/trace_processor/chrome/scroll_jank_cause_queuing_delay.sql b/test/trace_processor/chrome/scroll_jank_cause_queuing_delay_test.sql
similarity index 100%
rename from test/trace_processor/chrome/scroll_jank_cause_queuing_delay.sql
rename to test/trace_processor/chrome/scroll_jank_cause_queuing_delay_test.sql
diff --git a/test/trace_processor/chrome/scroll_jank_cause.sql b/test/trace_processor/chrome/scroll_jank_cause_test.sql
similarity index 100%
rename from test/trace_processor/chrome/scroll_jank_cause.sql
rename to test/trace_processor/chrome/scroll_jank_cause_test.sql
diff --git a/test/trace_processor/chrome/scroll_jank_general_validation.sql b/test/trace_processor/chrome/scroll_jank_general_validation_test.sql
similarity index 100%
rename from test/trace_processor/chrome/scroll_jank_general_validation.sql
rename to test/trace_processor/chrome/scroll_jank_general_validation_test.sql
diff --git a/test/trace_processor/chrome/scroll_jank_gpu_check.sql b/test/trace_processor/chrome/scroll_jank_gpu_check_test.sql
similarity index 100%
rename from test/trace_processor/chrome/scroll_jank_gpu_check.sql
rename to test/trace_processor/chrome/scroll_jank_gpu_check_test.sql
diff --git a/test/trace_processor/chrome/scroll_jank_mojo_simple_watcher.sql b/test/trace_processor/chrome/scroll_jank_mojo_simple_watcher_test.sql
similarity index 100%
rename from test/trace_processor/chrome/scroll_jank_mojo_simple_watcher.sql
rename to test/trace_processor/chrome/scroll_jank_mojo_simple_watcher_test.sql
diff --git a/test/trace_processor/chrome/scroll_jank.sql b/test/trace_processor/chrome/scroll_jank_test.sql
similarity index 100%
rename from test/trace_processor/chrome/scroll_jank.sql
rename to test/trace_processor/chrome/scroll_jank_test.sql
diff --git a/test/trace_processor/chrome/touch_flow_event_queuing_delay_full.sql b/test/trace_processor/chrome/touch_flow_event_queuing_delay_full_test.sql
similarity index 100%
rename from test/trace_processor/chrome/touch_flow_event_queuing_delay_full.sql
rename to test/trace_processor/chrome/touch_flow_event_queuing_delay_full_test.sql
diff --git a/test/trace_processor/chrome/touch_flow_event_queuing_delay.sql b/test/trace_processor/chrome/touch_flow_event_queuing_delay_test.sql
similarity index 100%
rename from test/trace_processor/chrome/touch_flow_event_queuing_delay.sql
rename to test/trace_processor/chrome/touch_flow_event_queuing_delay_test.sql
diff --git a/test/trace_processor/chrome/touch_flow_event.sql b/test/trace_processor/chrome/touch_flow_event_test.sql
similarity index 100%
rename from test/trace_processor/chrome/touch_flow_event.sql
rename to test/trace_processor/chrome/touch_flow_event_test.sql
diff --git a/test/trace_processor/chrome/touch_jank.sql b/test/trace_processor/chrome/touch_jank_test.sql
similarity index 100%
rename from test/trace_processor/chrome/touch_jank.sql
rename to test/trace_processor/chrome/touch_jank_test.sql
diff --git a/test/trace_processor/common/list_slices.sql b/test/trace_processor/common/list_slices_test.sql
similarity index 100%
rename from test/trace_processor/common/list_slices.sql
rename to test/trace_processor/common/list_slices_test.sql
diff --git a/test/trace_processor/common/process_track_slices.sql b/test/trace_processor/common/process_track_slices_test.sql
similarity index 100%
rename from test/trace_processor/common/process_track_slices.sql
rename to test/trace_processor/common/process_track_slices_test.sql
diff --git a/test/trace_processor/common/process_tracking.sql b/test/trace_processor/common/process_tracking_test.sql
similarity index 100%
rename from test/trace_processor/common/process_tracking.sql
rename to test/trace_processor/common/process_tracking_test.sql
diff --git a/test/trace_processor/common/smoke_slices.sql b/test/trace_processor/common/smoke_slices_test.sql
similarity index 100%
rename from test/trace_processor/common/smoke_slices.sql
rename to test/trace_processor/common/smoke_slices_test.sql
diff --git a/test/trace_processor/common/smoke.sql b/test/trace_processor/common/smoke_test.sql
similarity index 100%
rename from test/trace_processor/common/smoke.sql
rename to test/trace_processor/common/smoke_test.sql
diff --git a/test/trace_processor/common/to_systrace.sql b/test/trace_processor/common/to_systrace_test.sql
similarity index 100%
rename from test/trace_processor/common/to_systrace.sql
rename to test/trace_processor/common/to_systrace_test.sql
diff --git a/test/trace_processor/cros/cros_ec_sensorhub_data.sql b/test/trace_processor/cros/cros_ec_sensorhub_data_test.sql
similarity index 100%
rename from test/trace_processor/cros/cros_ec_sensorhub_data.sql
rename to test/trace_processor/cros/cros_ec_sensorhub_data_test.sql
diff --git a/test/trace_processor/cros/index b/test/trace_processor/cros/index
index 058e2e6..29e59e2 100644
--- a/test/trace_processor/cros/index
+++ b/test/trace_processor/cros/index
@@ -1,5 +1,5 @@
# Tests related to cros's use of Perfetto.
# cros_ec_sensorhub_data
-cros_ec_sensorhub_data.textproto cros_ec_sensorhub_data.sql cros_ec_sensorhub_data.out
+cros_ec_sensorhub_data.textproto cros_ec_sensorhub_data_test.sql cros_ec_sensorhub_data.out
diff --git a/test/trace_processor/dynamic/abs_time_str.sql b/test/trace_processor/dynamic/abs_time_str_test.sql
similarity index 100%
rename from test/trace_processor/dynamic/abs_time_str.sql
rename to test/trace_processor/dynamic/abs_time_str_test.sql
diff --git a/test/trace_processor/dynamic/ancestor_slice_by_stack.sql b/test/trace_processor/dynamic/ancestor_slice_by_stack_test.sql
similarity index 100%
rename from test/trace_processor/dynamic/ancestor_slice_by_stack.sql
rename to test/trace_processor/dynamic/ancestor_slice_by_stack_test.sql
diff --git a/test/trace_processor/dynamic/ancestor_slice.sql b/test/trace_processor/dynamic/ancestor_slice_test.sql
similarity index 100%
rename from test/trace_processor/dynamic/ancestor_slice.sql
rename to test/trace_processor/dynamic/ancestor_slice_test.sql
diff --git a/test/trace_processor/dynamic/annotated_callstack.sql b/test/trace_processor/dynamic/annotated_callstack_test.sql
similarity index 100%
rename from test/trace_processor/dynamic/annotated_callstack.sql
rename to test/trace_processor/dynamic/annotated_callstack_test.sql
diff --git a/test/trace_processor/dynamic/connected_flow.sql b/test/trace_processor/dynamic/connected_flow_test.sql
similarity index 100%
rename from test/trace_processor/dynamic/connected_flow.sql
rename to test/trace_processor/dynamic/connected_flow_test.sql
diff --git a/test/trace_processor/dynamic/descendant_slice_by_stack.sql b/test/trace_processor/dynamic/descendant_slice_by_stack_test.sql
similarity index 100%
rename from test/trace_processor/dynamic/descendant_slice_by_stack.sql
rename to test/trace_processor/dynamic/descendant_slice_by_stack_test.sql
diff --git a/test/trace_processor/dynamic/descendant_slice.sql b/test/trace_processor/dynamic/descendant_slice_test.sql
similarity index 100%
rename from test/trace_processor/dynamic/descendant_slice.sql
rename to test/trace_processor/dynamic/descendant_slice_test.sql
diff --git a/test/trace_processor/dynamic/index b/test/trace_processor/dynamic/index
index 845b029..f4740ee 100644
--- a/test/trace_processor/dynamic/index
+++ b/test/trace_processor/dynamic/index
@@ -1,23 +1,23 @@
# Tests for custom dynamic tables.
# Ancestor slice table.
-relationship_tables.textproto ancestor_slice.sql ancestor_slice.out
+relationship_tables.textproto ancestor_slice_test.sql ancestor_slice.out
# Descendant slice table.
-relationship_tables.textproto descendant_slice.sql descendant_slice.out
+relationship_tables.textproto descendant_slice_test.sql descendant_slice.out
# Ancestor slice by stack table.
-slice_stacks.textproto ancestor_slice_by_stack.sql ancestor_slice_by_stack.out
+slice_stacks.textproto ancestor_slice_by_stack_test.sql ancestor_slice_by_stack.out
# Descendant slice by stack table.
-slice_stacks.textproto descendant_slice_by_stack.sql descendant_slice_by_stack.out
+slice_stacks.textproto descendant_slice_by_stack_test.sql descendant_slice_by_stack.out
# Connected/Following/Perceeding flow table.
-connected_flow_data.json connected_flow.sql connected_flow.out
+connected_flow_data.json connected_flow_test.sql connected_flow.out
# Annotated callstacks.
-../../data/perf_sample_sc.pb annotated_callstack.sql perf_sample_sc_annotated_callstack.out
+../../data/perf_sample_sc.pb annotated_callstack_test.sql perf_sample_sc_annotated_callstack.out
# ABS_TIME_STR function
-various_clocks.textproto abs_time_str.sql various_clocks_abs_time_str.out
-../common/empty.textproto abs_time_str.sql empty_abs_time_str.out
+various_clocks.textproto abs_time_str_test.sql various_clocks_abs_time_str.out
+../common/empty.textproto abs_time_str_test.sql empty_abs_time_str.out
diff --git a/test/trace_processor/fs/f2fs_iostat_latency.sql b/test/trace_processor/fs/f2fs_iostat_latency.sql
deleted file mode 100644
index fa20398..0000000
--- a/test/trace_processor/fs/f2fs_iostat_latency.sql
+++ /dev/null
@@ -1,10 +0,0 @@
-SELECT
- name,
- ts,
- value
-FROM
- counter AS c
- JOIN
- counter_track AS ct
- ON c.track_id = ct.id
-ORDER BY name,ts
diff --git a/test/trace_processor/fs/f2fs_iostat.sql b/test/trace_processor/fs/f2fs_iostat_latency_test.sql
similarity index 100%
copy from test/trace_processor/fs/f2fs_iostat.sql
copy to test/trace_processor/fs/f2fs_iostat_latency_test.sql
diff --git a/test/trace_processor/fs/f2fs_iostat.sql b/test/trace_processor/fs/f2fs_iostat_test.sql
similarity index 100%
rename from test/trace_processor/fs/f2fs_iostat.sql
rename to test/trace_processor/fs/f2fs_iostat_test.sql
diff --git a/test/trace_processor/fs/index b/test/trace_processor/fs/index
index e95ab09..b416990 100644
--- a/test/trace_processor/fs/index
+++ b/test/trace_processor/fs/index
@@ -1,2 +1,2 @@
-f2fs_iostat.textproto f2fs_iostat.sql f2fs_iostat.out
-f2fs_iostat_latency.textproto f2fs_iostat_latency.sql f2fs_iostat_latency.out
+f2fs_iostat.textproto f2fs_iostat_test.sql f2fs_iostat.out
+f2fs_iostat_latency.textproto f2fs_iostat_latency_test.sql f2fs_iostat_latency.out
diff --git a/test/trace_processor/fuchsia/index b/test/trace_processor/fuchsia/index
index 05e4051..80fb688 100644
--- a/test/trace_processor/fuchsia/index
+++ b/test/trace_processor/fuchsia/index
@@ -1,13 +1,13 @@
# Contains tests for parsing Fuchsia traces.
# Smoke test a bunch of different event types.
-../../data/fuchsia_trace.fxt ../common/smoke.sql fuchsia_smoke.out
-../../data/fuchsia_trace.fxt ../common/smoke_slices.sql fuchsia_smoke_slices.out
-../../data/fuchsia_trace.fxt smoke_instants.sql fuchsia_smoke_instants.out
-../../data/fuchsia_trace.fxt smoke_counters.sql fuchsia_smoke_counters.out
-../../data/fuchsia_trace.fxt smoke_flow.sql fuchsia_smoke_flow.out
-../../data/fuchsia_trace.fxt smoke_type.sql fuchsia_smoke_type.out
+../../data/fuchsia_trace.fxt ../common/smoke_test.sql fuchsia_smoke.out
+../../data/fuchsia_trace.fxt ../common/smoke_slices_test.sql fuchsia_smoke_slices.out
+../../data/fuchsia_trace.fxt smoke_instants_test.sql fuchsia_smoke_instants.out
+../../data/fuchsia_trace.fxt smoke_counters_test.sql fuchsia_smoke_counters.out
+../../data/fuchsia_trace.fxt smoke_flow_test.sql fuchsia_smoke_flow.out
+../../data/fuchsia_trace.fxt smoke_type_test.sql fuchsia_smoke_type.out
# Smoke test a high-CPU trace.
-../../data/fuchsia_workstation.fxt ../common/smoke_slices.sql fuchsia_workstation_smoke_slices.out
-../../data/fuchsia_workstation.fxt smoke_args.sql fuchsia_workstation_smoke_args.out
+../../data/fuchsia_workstation.fxt ../common/smoke_slices_test.sql fuchsia_workstation_smoke_slices.out
+../../data/fuchsia_workstation.fxt smoke_args_test.sql fuchsia_workstation_smoke_args.out
diff --git a/test/trace_processor/fuchsia/smoke_args.sql b/test/trace_processor/fuchsia/smoke_args_test.sql
similarity index 100%
rename from test/trace_processor/fuchsia/smoke_args.sql
rename to test/trace_processor/fuchsia/smoke_args_test.sql
diff --git a/test/trace_processor/fuchsia/smoke_counters.sql b/test/trace_processor/fuchsia/smoke_counters_test.sql
similarity index 100%
rename from test/trace_processor/fuchsia/smoke_counters.sql
rename to test/trace_processor/fuchsia/smoke_counters_test.sql
diff --git a/test/trace_processor/fuchsia/smoke_flow.sql b/test/trace_processor/fuchsia/smoke_flow_test.sql
similarity index 100%
rename from test/trace_processor/fuchsia/smoke_flow.sql
rename to test/trace_processor/fuchsia/smoke_flow_test.sql
diff --git a/test/trace_processor/fuchsia/smoke_instants.sql b/test/trace_processor/fuchsia/smoke_instants_test.sql
similarity index 100%
rename from test/trace_processor/fuchsia/smoke_instants.sql
rename to test/trace_processor/fuchsia/smoke_instants_test.sql
diff --git a/test/trace_processor/fuchsia/smoke_type.sql b/test/trace_processor/fuchsia/smoke_type_test.sql
similarity index 100%
rename from test/trace_processor/fuchsia/smoke_type.sql
rename to test/trace_processor/fuchsia/smoke_type_test.sql
diff --git a/test/trace_processor/graphics/actual_frame_timeline_events.sql b/test/trace_processor/graphics/actual_frame_timeline_events_test.sql
similarity index 100%
rename from test/trace_processor/graphics/actual_frame_timeline_events.sql
rename to test/trace_processor/graphics/actual_frame_timeline_events_test.sql
diff --git a/test/trace_processor/graphics/android_sysui_cuj_event.sql b/test/trace_processor/graphics/android_sysui_cuj_event_test.sql
similarity index 100%
rename from test/trace_processor/graphics/android_sysui_cuj_event.sql
rename to test/trace_processor/graphics/android_sysui_cuj_event_test.sql
diff --git a/test/trace_processor/graphics/clock_sync.sql b/test/trace_processor/graphics/clock_sync_test.sql
similarity index 100%
rename from test/trace_processor/graphics/clock_sync.sql
rename to test/trace_processor/graphics/clock_sync_test.sql
diff --git a/test/trace_processor/graphics/composer_execution.sql b/test/trace_processor/graphics/composer_execution_test.sql
similarity index 100%
rename from test/trace_processor/graphics/composer_execution.sql
rename to test/trace_processor/graphics/composer_execution_test.sql
diff --git a/test/trace_processor/graphics/composition_layer_count.sql b/test/trace_processor/graphics/composition_layer_count_test.sql
similarity index 100%
rename from test/trace_processor/graphics/composition_layer_count.sql
rename to test/trace_processor/graphics/composition_layer_count_test.sql
diff --git a/test/trace_processor/graphics/drm_gpu_track.sql b/test/trace_processor/graphics/drm_gpu_track_test.sql
similarity index 100%
rename from test/trace_processor/graphics/drm_gpu_track.sql
rename to test/trace_processor/graphics/drm_gpu_track_test.sql
diff --git a/test/trace_processor/graphics/drm_thread_track.sql b/test/trace_processor/graphics/drm_thread_track_test.sql
similarity index 100%
rename from test/trace_processor/graphics/drm_thread_track.sql
rename to test/trace_processor/graphics/drm_thread_track_test.sql
diff --git a/test/trace_processor/graphics/expected_frame_timeline_events.sql b/test/trace_processor/graphics/expected_frame_timeline_events_test.sql
similarity index 100%
rename from test/trace_processor/graphics/expected_frame_timeline_events.sql
rename to test/trace_processor/graphics/expected_frame_timeline_events_test.sql
diff --git a/test/trace_processor/graphics/frame_missed_event.sql b/test/trace_processor/graphics/frame_missed_event_test.sql
similarity index 100%
rename from test/trace_processor/graphics/frame_missed_event.sql
rename to test/trace_processor/graphics/frame_missed_event_test.sql
diff --git a/test/trace_processor/graphics/gpu_counter_specs.sql b/test/trace_processor/graphics/gpu_counter_specs_test.sql
similarity index 100%
rename from test/trace_processor/graphics/gpu_counter_specs.sql
rename to test/trace_processor/graphics/gpu_counter_specs_test.sql
diff --git a/test/trace_processor/graphics/gpu_counters.sql b/test/trace_processor/graphics/gpu_counters_test.sql
similarity index 100%
rename from test/trace_processor/graphics/gpu_counters.sql
rename to test/trace_processor/graphics/gpu_counters_test.sql
diff --git a/test/trace_processor/graphics/gpu_log.sql b/test/trace_processor/graphics/gpu_log_test.sql
similarity index 100%
rename from test/trace_processor/graphics/gpu_log.sql
rename to test/trace_processor/graphics/gpu_log_test.sql
diff --git a/test/trace_processor/graphics/gpu_mem_total.sql b/test/trace_processor/graphics/gpu_mem_total_test.sql
similarity index 100%
rename from test/trace_processor/graphics/gpu_mem_total.sql
rename to test/trace_processor/graphics/gpu_mem_total_test.sql
diff --git a/test/trace_processor/graphics/gpu_render_stages.sql b/test/trace_processor/graphics/gpu_render_stages_test.sql
similarity index 100%
rename from test/trace_processor/graphics/gpu_render_stages.sql
rename to test/trace_processor/graphics/gpu_render_stages_test.sql
diff --git a/test/trace_processor/graphics/graphics_frame_events.sql b/test/trace_processor/graphics/graphics_frame_events_test.sql
similarity index 100%
rename from test/trace_processor/graphics/graphics_frame_events.sql
rename to test/trace_processor/graphics/graphics_frame_events_test.sql
diff --git a/test/trace_processor/graphics/index b/test/trace_processor/graphics/index
index 4799b73..4b396e0 100644
--- a/test/trace_processor/graphics/index
+++ b/test/trace_processor/graphics/index
@@ -1,25 +1,25 @@
# Contains tests for graphics related events and tables.
# GPU trace tests.
-gpu_counters.py gpu_counters.sql gpu_counters.out
-gpu_counter_specs.textproto gpu_counter_specs.sql gpu_counter_specs.out
-gpu_render_stages.py gpu_render_stages.sql gpu_render_stages.out
-gpu_render_stages_interned_spec.textproto gpu_render_stages.sql gpu_render_stages_interned_spec.out
-vulkan_api_events.py vulkan_api_events.sql vulkan_api_events.out
-gpu_log.py gpu_log.sql gpu_log.out
+gpu_counters.py gpu_counters_test.sql gpu_counters.out
+gpu_counter_specs.textproto gpu_counter_specs_test.sql gpu_counter_specs.out
+gpu_render_stages.py gpu_render_stages_test.sql gpu_render_stages.out
+gpu_render_stages_interned_spec.textproto gpu_render_stages_test.sql gpu_render_stages_interned_spec.out
+vulkan_api_events.py vulkan_api_events_test.sql vulkan_api_events.out
+gpu_log.py gpu_log_test.sql gpu_log.out
# Graphics frame event trace tests.
-graphics_frame_events.py graphics_frame_events.sql graphics_frame_events.out
+graphics_frame_events.py graphics_frame_events_test.sql graphics_frame_events.out
# GPU Memory ftrace packets
-gpu_mem_total.py gpu_mem_total.sql gpu_mem_total.out
-gpu_mem_total_after_free.py gpu_mem_total.sql gpu_mem_total_after_free_gpu_mem_total.out
+gpu_mem_total.py gpu_mem_total_test.sql gpu_mem_total.out
+gpu_mem_total_after_free.py gpu_mem_total_test.sql gpu_mem_total_after_free_gpu_mem_total.out
# Clock sync
-clock_sync.py clock_sync.sql clock_sync.out
+clock_sync.py clock_sync_test.sql clock_sync.out
# Android SurfaceFlinger metrics
-frame_missed.py frame_missed_event.sql frame_missed_event_frame_missed.out
+frame_missed.py frame_missed_event_test.sql frame_missed_event_frame_missed.out
frame_missed.py android_surfaceflinger frame_missed_metrics.out
surfaceflinger_gpu_invocation.py android_surfaceflinger surfaceflinger_gpu_invocation.out
@@ -29,14 +29,14 @@
# Android SysUI CUJs metrics
android_sysui_cuj.py android_sysui_cuj android_sysui_cuj.out
-android_sysui_cuj.py android_sysui_cuj_event.sql android_sysui_cuj_event.out
+android_sysui_cuj.py android_sysui_cuj_event_test.sql android_sysui_cuj_event.out
# Frame Timeline event trace tests
-frame_timeline_events.py expected_frame_timeline_events.sql expected_frame_timeline_events.out
-frame_timeline_events.py actual_frame_timeline_events.sql actual_frame_timeline_events.out
+frame_timeline_events.py expected_frame_timeline_events_test.sql expected_frame_timeline_events.out
+frame_timeline_events.py actual_frame_timeline_events_test.sql actual_frame_timeline_events.out
# Composition layer
-composition_layer.py composition_layer_count.sql composition_layer_count.out
+composition_layer.py composition_layer_count_test.sql composition_layer_count.out
# Android Jank metrics
android_jank.py android_jank android_jank.out
@@ -48,7 +48,7 @@
g2d_metrics.textproto g2d g2d_metrics.out
# Composer execution
-composer_execution.py composer_execution.sql composer_execution.out
+composer_execution.py composer_execution_test.sql composer_execution.out
# Display metrics
panel_fps.py display_metrics panel_fps.out
@@ -57,8 +57,8 @@
dpu_vote_clock_bw.textproto android_hwcomposer dpu_vote_clock_bw.out
# DRM-related ftrace events
-drm_vblank.textproto drm_gpu_track.sql drm_vblank_gpu_track.out
-drm_sched.textproto drm_gpu_track.sql drm_sched_gpu_track.out
-drm_sched.textproto drm_thread_track.sql drm_sched_thread_track.out
-drm_dma_fence.textproto drm_gpu_track.sql drm_dma_fence_gpu_track.out
-drm_dma_fence.textproto drm_thread_track.sql drm_dma_fence_thread_track.out
+drm_vblank.textproto drm_gpu_track_test.sql drm_vblank_gpu_track.out
+drm_sched.textproto drm_gpu_track_test.sql drm_sched_gpu_track.out
+drm_sched.textproto drm_thread_track_test.sql drm_sched_thread_track.out
+drm_dma_fence.textproto drm_gpu_track_test.sql drm_dma_fence_gpu_track.out
+drm_dma_fence.textproto drm_thread_track_test.sql drm_dma_fence_thread_track.out
diff --git a/test/trace_processor/graphics/vulkan_api_events.sql b/test/trace_processor/graphics/vulkan_api_events_test.sql
similarity index 100%
rename from test/trace_processor/graphics/vulkan_api_events.sql
rename to test/trace_processor/graphics/vulkan_api_events_test.sql
diff --git a/test/trace_processor/io/index b/test/trace_processor/io/index
index 1200ca9..f528288 100644
--- a/test/trace_processor/io/index
+++ b/test/trace_processor/io/index
@@ -1,2 +1,2 @@
# UFS command
-ufshcd_command.textproto ufshcd_command.sql ufshcd_command.out
+ufshcd_command.textproto ufshcd_command_test.sql ufshcd_command.out
diff --git a/test/trace_processor/io/ufshcd_command.sql b/test/trace_processor/io/ufshcd_command_test.sql
similarity index 100%
rename from test/trace_processor/io/ufshcd_command.sql
rename to test/trace_processor/io/ufshcd_command_test.sql
diff --git a/test/trace_processor/memory/dma_buffer_tracks.sql b/test/trace_processor/memory/dma_buffer_tracks_test.sql
similarity index 100%
rename from test/trace_processor/memory/dma_buffer_tracks.sql
rename to test/trace_processor/memory/dma_buffer_tracks_test.sql
diff --git a/test/trace_processor/memory/index b/test/trace_processor/memory/index
index 831a860..87266cd 100644
--- a/test/trace_processor/memory/index
+++ b/test/trace_processor/memory/index
@@ -14,7 +14,7 @@
# DMA-BUF heap Metric
android_dma_heap_stat.textproto android_dma_heap android_dma_heap_stat.out
-android_dma_heap_stat.textproto dma_buffer_tracks.sql android_dma_buffer_tracks.out
+android_dma_heap_stat.textproto dma_buffer_tracks_test.sql android_dma_buffer_tracks.out
# fastrpc metric
android_fastrpc_dma_stat.textproto android_fastrpc android_fastrpc_dma_stat.out
diff --git a/test/trace_processor/network/index b/test/trace_processor/network/index
index 01ad31b..528db80 100644
--- a/test/trace_processor/network/index
+++ b/test/trace_processor/network/index
@@ -1,8 +1,8 @@
# Network performance
-netif_receive_skb.textproto netif_receive_skb.sql netif_receive_skb.out
-net_dev_xmit.textproto net_dev_xmit.sql net_dev_xmit.out
+netif_receive_skb.textproto netif_receive_skb_test.sql netif_receive_skb.out
+net_dev_xmit.textproto net_dev_xmit_test.sql net_dev_xmit.out
netperf_metric.textproto android_netperf netperf_metric.out
-inet_sock_set_state.textproto inet_sock_set_state.sql inet_sock_set_state.out
-tcp_retransmit_skb.textproto tcp_retransmit_skb.sql tcp_retransmit_skb.out
-napi_gro_receive.textproto napi_gro_receive.sql napi_gro_receive.out
-kfree_skb.textproto kfree_skb.sql kfree_skb.out
\ No newline at end of file
+inet_sock_set_state.textproto inet_sock_set_state_test.sql inet_sock_set_state.out
+tcp_retransmit_skb.textproto tcp_retransmit_skb_test.sql tcp_retransmit_skb.out
+napi_gro_receive.textproto napi_gro_receive_test.sql napi_gro_receive.out
+kfree_skb.textproto kfree_skb_test.sql kfree_skb.out
diff --git a/test/trace_processor/network/inet_sock_set_state.sql b/test/trace_processor/network/inet_sock_set_state_test.sql
similarity index 100%
rename from test/trace_processor/network/inet_sock_set_state.sql
rename to test/trace_processor/network/inet_sock_set_state_test.sql
diff --git a/test/trace_processor/network/kfree_skb.sql b/test/trace_processor/network/kfree_skb_test.sql
similarity index 100%
rename from test/trace_processor/network/kfree_skb.sql
rename to test/trace_processor/network/kfree_skb_test.sql
diff --git a/test/trace_processor/network/napi_gro_receive.sql b/test/trace_processor/network/napi_gro_receive_test.sql
similarity index 100%
rename from test/trace_processor/network/napi_gro_receive.sql
rename to test/trace_processor/network/napi_gro_receive_test.sql
diff --git a/test/trace_processor/network/net_dev_xmit.sql b/test/trace_processor/network/net_dev_xmit_test.sql
similarity index 100%
rename from test/trace_processor/network/net_dev_xmit.sql
rename to test/trace_processor/network/net_dev_xmit_test.sql
diff --git a/test/trace_processor/network/netif_receive_skb.sql b/test/trace_processor/network/netif_receive_skb_test.sql
similarity index 100%
rename from test/trace_processor/network/netif_receive_skb.sql
rename to test/trace_processor/network/netif_receive_skb_test.sql
diff --git a/test/trace_processor/network/tcp_retransmit_skb.sql b/test/trace_processor/network/tcp_retransmit_skb_test.sql
similarity index 100%
rename from test/trace_processor/network/tcp_retransmit_skb.sql
rename to test/trace_processor/network/tcp_retransmit_skb_test.sql
diff --git a/test/trace_processor/parsing/android_log_counts.sql b/test/trace_processor/parsing/android_log_counts_test.sql
similarity index 100%
rename from test/trace_processor/parsing/android_log_counts.sql
rename to test/trace_processor/parsing/android_log_counts_test.sql
diff --git a/test/trace_processor/parsing/android_log_msgs.sql b/test/trace_processor/parsing/android_log_msgs_test.sql
similarity index 100%
rename from test/trace_processor/parsing/android_log_msgs.sql
rename to test/trace_processor/parsing/android_log_msgs_test.sql
diff --git a/test/trace_processor/parsing/android_log_ring_buffer_mode.sql b/test/trace_processor/parsing/android_log_ring_buffer_mode_test.sql
similarity index 100%
rename from test/trace_processor/parsing/android_log_ring_buffer_mode.sql
rename to test/trace_processor/parsing/android_log_ring_buffer_mode_test.sql
diff --git a/test/trace_processor/parsing/args_string_filter_null.sql b/test/trace_processor/parsing/args_string_filter_null_test.sql
similarity index 100%
rename from test/trace_processor/parsing/args_string_filter_null.sql
rename to test/trace_processor/parsing/args_string_filter_null_test.sql
diff --git a/test/trace_processor/parsing/args_string_is_not_null.sql b/test/trace_processor/parsing/args_string_is_not_null_test.sql
similarity index 100%
rename from test/trace_processor/parsing/args_string_is_not_null.sql
rename to test/trace_processor/parsing/args_string_is_not_null_test.sql
diff --git a/test/trace_processor/parsing/args_string_is_null.sql b/test/trace_processor/parsing/args_string_is_null_test.sql
similarity index 100%
rename from test/trace_processor/parsing/args_string_is_null.sql
rename to test/trace_processor/parsing/args_string_is_null_test.sql
diff --git a/test/trace_processor/parsing/b120487929.sql b/test/trace_processor/parsing/b120487929_test.sql
similarity index 100%
rename from test/trace_processor/parsing/b120487929.sql
rename to test/trace_processor/parsing/b120487929_test.sql
diff --git a/test/trace_processor/parsing/b120605557.sql b/test/trace_processor/parsing/b120605557_test.sql
similarity index 100%
rename from test/trace_processor/parsing/b120605557.sql
rename to test/trace_processor/parsing/b120605557_test.sql
diff --git a/test/trace_processor/parsing/chrome_metadata.sql b/test/trace_processor/parsing/chrome_metadata_test.sql
similarity index 100%
rename from test/trace_processor/parsing/chrome_metadata.sql
rename to test/trace_processor/parsing/chrome_metadata_test.sql
diff --git a/test/trace_processor/parsing/cpu_freq.sql b/test/trace_processor/parsing/cpu_freq_test.sql
similarity index 100%
rename from test/trace_processor/parsing/cpu_freq.sql
rename to test/trace_processor/parsing/cpu_freq_test.sql
diff --git a/test/trace_processor/parsing/cpu.sql b/test/trace_processor/parsing/cpu_test.sql
similarity index 100%
rename from test/trace_processor/parsing/cpu.sql
rename to test/trace_processor/parsing/cpu_test.sql
diff --git a/test/trace_processor/parsing/end_reason_eq.sql b/test/trace_processor/parsing/end_reason_eq_test.sql
similarity index 100%
rename from test/trace_processor/parsing/end_reason_eq.sql
rename to test/trace_processor/parsing/end_reason_eq_test.sql
diff --git a/test/trace_processor/parsing/end_reason_neq.sql b/test/trace_processor/parsing/end_reason_neq_test.sql
similarity index 100%
rename from test/trace_processor/parsing/end_reason_neq.sql
rename to test/trace_processor/parsing/end_reason_neq_test.sql
diff --git a/test/trace_processor/parsing/flow_events.sql b/test/trace_processor/parsing/flow_events_test.sql
similarity index 100%
rename from test/trace_processor/parsing/flow_events.sql
rename to test/trace_processor/parsing/flow_events_test.sql
diff --git a/test/trace_processor/parsing/global_memory_counter.sql b/test/trace_processor/parsing/global_memory_counter_test.sql
similarity index 100%
rename from test/trace_processor/parsing/global_memory_counter.sql
rename to test/trace_processor/parsing/global_memory_counter_test.sql
diff --git a/test/trace_processor/parsing/index b/test/trace_processor/parsing/index
index 3335c66..ada90d1 100644
--- a/test/trace_processor/parsing/index
+++ b/test/trace_processor/parsing/index
@@ -10,145 +10,145 @@
# they are only here because they predate the modularisation of diff tests.
# Sched
-../../data/android_sched_and_ps.pb ts_desc_filter.sql ts_desc_filter_android_sched_and_ps.out
+../../data/android_sched_and_ps.pb ts_desc_filter_test.sql ts_desc_filter_android_sched_and_ps.out
# Sched reason
-../../data/android_sched_and_ps.pb end_reason_eq.sql android_sched_and_ps_end_reason_eq.out
-../../data/android_sched_and_ps.pb end_reason_neq.sql android_sched_and_ps_end_reason_neq.out
+../../data/android_sched_and_ps.pb end_reason_eq_test.sql android_sched_and_ps_end_reason_eq.out
+../../data/android_sched_and_ps.pb end_reason_neq_test.sql android_sched_and_ps_end_reason_neq.out
# CPU Frequency
-../../data/cpu_counters.pb b120487929.sql cpu_counters_b120487929.out
+../../data/cpu_counters.pb b120487929_test.sql cpu_counters_b120487929.out
# Test the filtering of ftrace events before tracing_start.
-ftrace_with_tracing_start.py list_sched_slice_spans.sql ftrace_with_tracing_start_list_sched_slice_spans.out
+ftrace_with_tracing_start.py list_sched_slice_spans_test.sql ftrace_with_tracing_start_list_sched_slice_spans.out
# Rss stats
-rss_stat_mm_id.py rss_stat.sql rss_stat_mm_id.out
-rss_stat_mm_id_clone.py rss_stat.sql rss_stat_mm_id_clone.out
-rss_stat_mm_id_reuse.py rss_stat.sql rss_stat_mm_id_reuse.out
-rss_stat_legacy.py rss_stat.sql rss_stat_legacy.out
-rss_stat_after_free.py rss_stat_after_free.sql rss_stat_after_free.out
+rss_stat_mm_id.py rss_stat_test.sql rss_stat_mm_id.out
+rss_stat_mm_id_clone.py rss_stat_test.sql rss_stat_mm_id_clone.out
+rss_stat_mm_id_reuse.py rss_stat_test.sql rss_stat_mm_id_reuse.out
+rss_stat_legacy.py rss_stat_test.sql rss_stat_legacy.out
+rss_stat_after_free.py rss_stat_after_free_test.sql rss_stat_after_free.out
# Memory counters
-../../data/memory_counters.pb args_string_filter_null.sql memory_counters_args_string_filter_null.out
-../../data/memory_counters.pb args_string_is_null.sql memory_counters_args_string_is_null.out
-../../data/memory_counters.pb args_string_is_not_null.sql memory_counters_args_string_is_not_null.out
-../../data/memory_counters.pb b120605557.sql memory_counters_b120605557.out
-../../data/memory_counters.pb global_memory_counter.sql global_memory_counter_memory_counters.out
-ion_stat.textproto ion_stat.sql ion_stat.out
+../../data/memory_counters.pb args_string_filter_null_test.sql memory_counters_args_string_filter_null.out
+../../data/memory_counters.pb args_string_is_null_test.sql memory_counters_args_string_is_null.out
+../../data/memory_counters.pb args_string_is_not_null_test.sql memory_counters_args_string_is_not_null.out
+../../data/memory_counters.pb b120605557_test.sql memory_counters_b120605557.out
+../../data/memory_counters.pb global_memory_counter_test.sql global_memory_counter_memory_counters.out
+ion_stat.textproto ion_stat_test.sql ion_stat.out
# Scheduling slices from sched_switch events. There are two tests, one for the
# typical encoding of sched_switch events, and one for the same trace
# re-encoded in the compact format. The output should be identical apart from
# the latter having one slice fewer for each cpu (the first compact
# sched_switch event doesn't start a slice). Six slices in this case.
-../../data/sched_switch_original.pb sched_slices.sql sched_slices_sched_switch_original.out
-../../data/sched_switch_compact.pb sched_slices.sql sched_slices_sched_switch_compact.out
+../../data/sched_switch_original.pb sched_slices_test.sql sched_slices_sched_switch_original.out
+../../data/sched_switch_compact.pb sched_slices_test.sql sched_slices_sched_switch_compact.out
# Decoding of sched_waking events from a trace with compact scheduling events.
# Verifies the contents of raw & instants tables.
-../../data/compact_sched.pb sched_waking_raw.sql sched_waking_raw_compact_sched.out
-../../data/compact_sched.pb sched_waking_instants.sql sched_waking_instants_compact_sched.out
+../../data/compact_sched.pb sched_waking_raw_test.sql sched_waking_raw_compact_sched.out
+../../data/compact_sched.pb sched_waking_instants_test.sql sched_waking_instants_compact_sched.out
# Mm Event
-../../data/mm_event.pb mm_event.sql mm_event.out
+../../data/mm_event.pb mm_event_test.sql mm_event.out
# Check the systrace conversion code in the raw table.
# Print events
-../../data/lmk_userspace.pb print_systrace.sql print_systrace_lmk_userspace.out
-kernel_tmw_counter.textproto process_counter_and_track.sql kernel_tmw_counter_process_counter_and_track.out
-kernel_dpu_tmw_counter.textproto process_counter_and_track.sql kernel_dpu_tmw_counter_process_counter_and_track.out
+../../data/lmk_userspace.pb print_systrace_test.sql print_systrace_lmk_userspace.out
+kernel_tmw_counter.textproto process_counter_and_track_test.sql kernel_tmw_counter_process_counter_and_track.out
+kernel_dpu_tmw_counter.textproto process_counter_and_track_test.sql kernel_dpu_tmw_counter_process_counter_and_track.out
# Unsigned integers
-print_systrace_unsigned.py print_systrace.sql print_systrace_unsigned.out
+print_systrace_unsigned.py print_systrace_test.sql print_systrace_unsigned.out
# cgroup_attach_task systrace conversion.
-cgroup_attach_task_pre_s.textproto print_systrace.sql cgroup_attach_task_pre_s_print_systrace.out
-cgroup_attach_task_post_s.textproto print_systrace.sql cgroup_attach_task_post_s_print_systrace.out
+cgroup_attach_task_pre_s.textproto print_systrace_test.sql cgroup_attach_task_pre_s_print_systrace.out
+cgroup_attach_task_post_s.textproto print_systrace_test.sql cgroup_attach_task_post_s_print_systrace.out
# Parsing systrace files
-../../data/systrace.html systrace_html.sql systrace_html.out
-../../data/trailing_empty.systrace sched_smoke.sql sched_smoke_trailing_empty.out
+../../data/systrace.html systrace_html_test.sql systrace_html.out
+../../data/trailing_empty.systrace sched_smoke_test.sql sched_smoke_trailing_empty.out
# LMK handling
-../../data/lmk_userspace.pb lmk.sql lmk_userspace_lmk.out
-../common/oom_kill.textproto oom_kill.sql oom_kill.out
+../../data/lmk_userspace.pb lmk_test.sql lmk_userspace_lmk.out
+../common/oom_kill.textproto oom_kill_test.sql oom_kill.out
# Logcat
-../../data/android_log.pb android_log_counts.sql android_log_counts.out
-../../data/android_log.pb android_log_msgs.sql android_log_msgs.out
-../../data/android_log_ring_buffer_mode.pb android_log_ring_buffer_mode.sql android_log_ring_buffer_mode.out
+../../data/android_log.pb android_log_counts_test.sql android_log_counts.out
+../../data/android_log.pb android_log_msgs_test.sql android_log_msgs.out
+../../data/android_log_ring_buffer_mode.pb android_log_ring_buffer_mode_test.sql android_log_ring_buffer_mode.out
# Oom Score
-synth_oom.py oom_query.sql synth_oom_oom_query.out
-../../data/process_stats_poll.pb oom_score_poll.sql process_stats_poll_oom_score.out
+synth_oom.py oom_query_test.sql synth_oom_oom_query.out
+../../data/process_stats_poll.pb oom_score_poll_test.sql process_stats_poll_oom_score.out
# Stats
-../../data/android_sched_and_ps.pb stats.sql android_sched_and_ps_stats.out
+../../data/android_sched_and_ps.pb stats_test.sql android_sched_and_ps_stats.out
# Syscalls
-syscall.py sys.sql sys_syscall.out
+syscall.py sys_test.sql sys_syscall.out
# thread_slice tables.
-flow_events_json_v2.json thread_time_in_thread_slice.sql thread_time_in_thread_slice.out
+flow_events_json_v2.json thread_time_in_thread_slice_test.sql thread_time_in_thread_slice.out
# Initial display state
-initial_display_state.textproto initial_display_state.sql initial_display_state.out
+initial_display_state.textproto initial_display_state_test.sql initial_display_state.out
# Config & metadata
-config_metadata.textproto metadata.sql config_metadata.out
-trigger_packet_trace.textproto triggers_packets.sql triggers_packets_trigger_packet_trace.out
-chrome_metadata.textproto chrome_metadata.sql chrome_metadata.out
+config_metadata.textproto metadata_test.sql config_metadata.out
+trigger_packet_trace.textproto triggers_packets_test.sql triggers_packets_trigger_packet_trace.out
+chrome_metadata.textproto chrome_metadata_test.sql chrome_metadata.out
# CPU info
-cpu_info.textproto cpu.sql cpu.out
-cpu_info.textproto cpu_freq.sql cpu_freq.out
+cpu_info.textproto cpu_test.sql cpu.out
+cpu_info.textproto cpu_freq_test.sql cpu_freq.out
# Trace size
-../../data/android_sched_and_ps.pb trace_size.sql android_sched_and_ps_trace_size.out
+../../data/android_sched_and_ps.pb trace_size_test.sql android_sched_and_ps_trace_size.out
# Package list handling
android_package_list.py android_package_list android_package_list.out
# Ensures process -> package matching works as expected.
-process_metadata_matching.textproto process_metadata_matching.sql process_metadata_matching.out
+process_metadata_matching.textproto process_metadata_matching_test.sql process_metadata_matching.out
# Flow events importing from json
-flow_events_json_v1.json flow_events.sql flow_events_json_v1.out
-flow_events_json_v2.json flow_events.sql flow_events_json_v2.out
+flow_events_json_v1.json flow_events_test.sql flow_events_json_v1.out
+flow_events_json_v2.json flow_events_test.sql flow_events_json_v2.out
# Importing displayTimeUnit
-../../data/display_time_unit.json slices.sql display_time_unit_slices.out
+../../data/display_time_unit.json slices_test.sql display_time_unit_slices.out
# Parsing sched_blocked_reason
-sched_blocked_proto.py sched_blocked_reason.sql sched_blocked_proto_sched_blocked_reason.out
-sched_blocked_systrace.systrace sched_blocked_reason.sql sched_blocked_systrace_sched_blocked_reason.out
+sched_blocked_proto.py sched_blocked_reason_test.sql sched_blocked_proto_sched_blocked_reason.out
+sched_blocked_systrace.systrace sched_blocked_reason_test.sql sched_blocked_systrace_sched_blocked_reason.out
# Kernel symbolization
-sched_blocked_reason_symbolized.textproto sched_blocked_reason_function.sql sched_blocked_reason_symbolized_sched_blocked_reason_function.out
-sched_blocked_reason_symbolized.textproto ../common/to_systrace.sql sched_blocked_reason_symbolized_to_systrace.out
+sched_blocked_reason_symbolized.textproto sched_blocked_reason_function_test.sql sched_blocked_reason_symbolized_sched_blocked_reason_function.out
+sched_blocked_reason_symbolized.textproto ../common/to_systrace_test.sql sched_blocked_reason_symbolized_to_systrace.out
# Floating point numbers
-../../data/decimal_timestamp.json slices.sql decimal_timestamp_slices.out
+../../data/decimal_timestamp.json slices_test.sql decimal_timestamp_slices.out
# JSON instants and counters
-../../data/counters.json json_counters.sql counters_json_counters.out
-../../data/instants.json json_instants.sql instants_json_instants.out
+../../data/counters.json json_counters_test.sql counters_json_counters.out
+../../data/instants.json json_instants_test.sql instants_json_instants.out
# Trace quality metric
very_long_sched.py android_trace_quality very_long_sched_android_trace_quality.out
# Regression test for b/193721088 (infra prepending " done\n" to atrace)
-../../data/atrace_b_193721088.atr sched_smoke.sql sched_smoke_trailing_empty.out
+../../data/atrace_b_193721088.atr sched_smoke_test.sql sched_smoke_trailing_empty.out
# Multiuser
android_multiuser_switch.textproto android_multiuser android_multiuser_switch.out
# Output of atrace -z.
-../../data/atrace_compressed.ctrace sched_smoke.sql atrace_compressed_sched_count.out
+../../data/atrace_compressed.ctrace sched_smoke_test.sql atrace_compressed_sched_count.out
# Output of adb shell "atrace -t 1 sched" > out.txt". It has extra garbage
# coming from stderr before the TRACE: marker. See b/208691037.
-../../data/atrace_uncompressed_b_208691037 sched_smoke.sql atrace_uncompressed_sched_count.out
+../../data/atrace_uncompressed_b_208691037 sched_smoke_test.sql atrace_uncompressed_sched_count.out
otheruuids.textproto android_other_traces otheruuids_android_other_traces.out
# Per-process Binder transaction metrics
diff --git a/test/trace_processor/parsing/initial_display_state.sql b/test/trace_processor/parsing/initial_display_state_test.sql
similarity index 100%
rename from test/trace_processor/parsing/initial_display_state.sql
rename to test/trace_processor/parsing/initial_display_state_test.sql
diff --git a/test/trace_processor/parsing/ion_stat.sql b/test/trace_processor/parsing/ion_stat_test.sql
similarity index 100%
rename from test/trace_processor/parsing/ion_stat.sql
rename to test/trace_processor/parsing/ion_stat_test.sql
diff --git a/test/trace_processor/parsing/json_counters.sql b/test/trace_processor/parsing/json_counters_test.sql
similarity index 100%
rename from test/trace_processor/parsing/json_counters.sql
rename to test/trace_processor/parsing/json_counters_test.sql
diff --git a/test/trace_processor/parsing/json_instants.sql b/test/trace_processor/parsing/json_instants_test.sql
similarity index 100%
rename from test/trace_processor/parsing/json_instants.sql
rename to test/trace_processor/parsing/json_instants_test.sql
diff --git a/test/trace_processor/parsing/list_sched_slice_spans.sql b/test/trace_processor/parsing/list_sched_slice_spans_test.sql
similarity index 100%
rename from test/trace_processor/parsing/list_sched_slice_spans.sql
rename to test/trace_processor/parsing/list_sched_slice_spans_test.sql
diff --git a/test/trace_processor/parsing/lmk.sql b/test/trace_processor/parsing/lmk_test.sql
similarity index 100%
rename from test/trace_processor/parsing/lmk.sql
rename to test/trace_processor/parsing/lmk_test.sql
diff --git a/test/trace_processor/parsing/metadata.sql b/test/trace_processor/parsing/metadata_test.sql
similarity index 100%
rename from test/trace_processor/parsing/metadata.sql
rename to test/trace_processor/parsing/metadata_test.sql
diff --git a/test/trace_processor/parsing/mm_event.sql b/test/trace_processor/parsing/mm_event_test.sql
similarity index 100%
rename from test/trace_processor/parsing/mm_event.sql
rename to test/trace_processor/parsing/mm_event_test.sql
diff --git a/test/trace_processor/parsing/oom_kill.sql b/test/trace_processor/parsing/oom_kill_test.sql
similarity index 100%
rename from test/trace_processor/parsing/oom_kill.sql
rename to test/trace_processor/parsing/oom_kill_test.sql
diff --git a/test/trace_processor/parsing/oom_query.sql b/test/trace_processor/parsing/oom_query_test.sql
similarity index 100%
rename from test/trace_processor/parsing/oom_query.sql
rename to test/trace_processor/parsing/oom_query_test.sql
diff --git a/test/trace_processor/parsing/oom_score_poll.sql b/test/trace_processor/parsing/oom_score_poll_test.sql
similarity index 100%
rename from test/trace_processor/parsing/oom_score_poll.sql
rename to test/trace_processor/parsing/oom_score_poll_test.sql
diff --git a/test/trace_processor/parsing/print_systrace.sql b/test/trace_processor/parsing/print_systrace_test.sql
similarity index 100%
rename from test/trace_processor/parsing/print_systrace.sql
rename to test/trace_processor/parsing/print_systrace_test.sql
diff --git a/test/trace_processor/parsing/process_counter_and_track.sql b/test/trace_processor/parsing/process_counter_and_track_test.sql
similarity index 100%
rename from test/trace_processor/parsing/process_counter_and_track.sql
rename to test/trace_processor/parsing/process_counter_and_track_test.sql
diff --git a/test/trace_processor/parsing/process_metadata_matching.sql b/test/trace_processor/parsing/process_metadata_matching_test.sql
similarity index 100%
rename from test/trace_processor/parsing/process_metadata_matching.sql
rename to test/trace_processor/parsing/process_metadata_matching_test.sql
diff --git a/test/trace_processor/parsing/rss_stat_after_free.sql b/test/trace_processor/parsing/rss_stat_after_free_test.sql
similarity index 100%
rename from test/trace_processor/parsing/rss_stat_after_free.sql
rename to test/trace_processor/parsing/rss_stat_after_free_test.sql
diff --git a/test/trace_processor/parsing/rss_stat.sql b/test/trace_processor/parsing/rss_stat_test.sql
similarity index 100%
rename from test/trace_processor/parsing/rss_stat.sql
rename to test/trace_processor/parsing/rss_stat_test.sql
diff --git a/test/trace_processor/parsing/sched_blocked_reason_function.sql b/test/trace_processor/parsing/sched_blocked_reason_function_test.sql
similarity index 100%
rename from test/trace_processor/parsing/sched_blocked_reason_function.sql
rename to test/trace_processor/parsing/sched_blocked_reason_function_test.sql
diff --git a/test/trace_processor/parsing/sched_blocked_reason.sql b/test/trace_processor/parsing/sched_blocked_reason_test.sql
similarity index 100%
rename from test/trace_processor/parsing/sched_blocked_reason.sql
rename to test/trace_processor/parsing/sched_blocked_reason_test.sql
diff --git a/test/trace_processor/parsing/sched_slices.sql b/test/trace_processor/parsing/sched_slices_test.sql
similarity index 100%
rename from test/trace_processor/parsing/sched_slices.sql
rename to test/trace_processor/parsing/sched_slices_test.sql
diff --git a/test/trace_processor/parsing/sched_smoke.sql b/test/trace_processor/parsing/sched_smoke_test.sql
similarity index 100%
rename from test/trace_processor/parsing/sched_smoke.sql
rename to test/trace_processor/parsing/sched_smoke_test.sql
diff --git a/test/trace_processor/parsing/sched_waking_instants.sql b/test/trace_processor/parsing/sched_waking_instants_test.sql
similarity index 100%
rename from test/trace_processor/parsing/sched_waking_instants.sql
rename to test/trace_processor/parsing/sched_waking_instants_test.sql
diff --git a/test/trace_processor/parsing/sched_waking_raw.sql b/test/trace_processor/parsing/sched_waking_raw_test.sql
similarity index 100%
rename from test/trace_processor/parsing/sched_waking_raw.sql
rename to test/trace_processor/parsing/sched_waking_raw_test.sql
diff --git a/test/trace_processor/parsing/slices.sql b/test/trace_processor/parsing/slices_test.sql
similarity index 100%
rename from test/trace_processor/parsing/slices.sql
rename to test/trace_processor/parsing/slices_test.sql
diff --git a/test/trace_processor/parsing/stats.sql b/test/trace_processor/parsing/stats_test.sql
similarity index 100%
rename from test/trace_processor/parsing/stats.sql
rename to test/trace_processor/parsing/stats_test.sql
diff --git a/test/trace_processor/parsing/sys.sql b/test/trace_processor/parsing/sys_test.sql
similarity index 100%
rename from test/trace_processor/parsing/sys.sql
rename to test/trace_processor/parsing/sys_test.sql
diff --git a/test/trace_processor/parsing/systrace_html.sql b/test/trace_processor/parsing/systrace_html_test.sql
similarity index 100%
rename from test/trace_processor/parsing/systrace_html.sql
rename to test/trace_processor/parsing/systrace_html_test.sql
diff --git a/test/trace_processor/parsing/thread_counter_and_track.sql b/test/trace_processor/parsing/thread_counter_and_track_test.sql
similarity index 100%
rename from test/trace_processor/parsing/thread_counter_and_track.sql
rename to test/trace_processor/parsing/thread_counter_and_track_test.sql
diff --git a/test/trace_processor/parsing/thread_time_in_thread_slice.sql b/test/trace_processor/parsing/thread_time_in_thread_slice_test.sql
similarity index 100%
rename from test/trace_processor/parsing/thread_time_in_thread_slice.sql
rename to test/trace_processor/parsing/thread_time_in_thread_slice_test.sql
diff --git a/test/trace_processor/parsing/trace_size.sql b/test/trace_processor/parsing/trace_size_test.sql
similarity index 100%
rename from test/trace_processor/parsing/trace_size.sql
rename to test/trace_processor/parsing/trace_size_test.sql
diff --git a/test/trace_processor/parsing/triggers_packets.sql b/test/trace_processor/parsing/triggers_packets_test.sql
similarity index 100%
rename from test/trace_processor/parsing/triggers_packets.sql
rename to test/trace_processor/parsing/triggers_packets_test.sql
diff --git a/test/trace_processor/parsing/ts_desc_filter.sql b/test/trace_processor/parsing/ts_desc_filter_test.sql
similarity index 100%
rename from test/trace_processor/parsing/ts_desc_filter.sql
rename to test/trace_processor/parsing/ts_desc_filter_test.sql
diff --git a/test/trace_processor/performance/cpu_frequency_limits.sql b/test/trace_processor/performance/cpu_frequency_limits_test.sql
similarity index 100%
rename from test/trace_processor/performance/cpu_frequency_limits.sql
rename to test/trace_processor/performance/cpu_frequency_limits_test.sql
diff --git a/test/trace_processor/performance/index b/test/trace_processor/performance/index
index 6f1a80d..b641c5c 100644
--- a/test/trace_processor/performance/index
+++ b/test/trace_processor/performance/index
@@ -1,6 +1,6 @@
# IRQ max runtime and count over 1ms
irq_runtime_metric.textproto android_irq_runtime irq_runtime_metric.out
# CPU frequency maximum & minimum limits change
-cpu_frequency_limits.textproto cpu_frequency_limits.sql cpu_frequency_limits.out
+cpu_frequency_limits.textproto cpu_frequency_limits_test.sql cpu_frequency_limits.out
# frame_timeline_metric collects App_Deadline_Missed metrics
frame_timeline_metric.py android_frame_timeline_metric frame_timeline_metric.out
diff --git a/test/trace_processor/power/index b/test/trace_processor/power/index
index 6986af3..96687df 100644
--- a/test/trace_processor/power/index
+++ b/test/trace_processor/power/index
@@ -1,12 +1,12 @@
# Power rails
-../../data/power_rails.pb power_rails.sql power_rails_power_rails.out
-power_rails_custom_clock.textproto power_rails_event.sql power_rails_event_power_rails_custom_clock.out
-power_rails.textproto power_rails_timestamp_sort.sql power_rails_timestamp_sort.out
-power_rails_well_known.textproto power_rails.sql power_rails_well_known_power_rails.out
+../../data/power_rails.pb power_rails_test.sql power_rails_power_rails.out
+power_rails_custom_clock.textproto power_rails_event_test.sql power_rails_event_power_rails_custom_clock.out
+power_rails.textproto power_rails_timestamp_sort_test.sql power_rails_timestamp_sort.out
+power_rails_well_known.textproto power_rails_test.sql power_rails_well_known_power_rails.out
# Dynamic Voltage and Frequency Scaling
dvfs_metric.textproto android_dvfs dvfs_metric.out
-wakesource.textproto wakesource.sql wakesource_wakesource.out
-suspend_resume.textproto suspend_resume.sql suspend_resume.out
+wakesource.textproto wakesource_test.sql wakesource_wakesource.out
+suspend_resume.textproto suspend_resume_test.sql suspend_resume.out
suspend_period.textproto android_batt suspend_period.out
diff --git a/test/trace_processor/power/power_rails_event.sql b/test/trace_processor/power/power_rails_event_test.sql
similarity index 100%
rename from test/trace_processor/power/power_rails_event.sql
rename to test/trace_processor/power/power_rails_event_test.sql
diff --git a/test/trace_processor/power/power_rails.sql b/test/trace_processor/power/power_rails_test.sql
similarity index 100%
rename from test/trace_processor/power/power_rails.sql
rename to test/trace_processor/power/power_rails_test.sql
diff --git a/test/trace_processor/power/power_rails_timestamp_sort.sql b/test/trace_processor/power/power_rails_timestamp_sort_test.sql
similarity index 100%
rename from test/trace_processor/power/power_rails_timestamp_sort.sql
rename to test/trace_processor/power/power_rails_timestamp_sort_test.sql
diff --git a/test/trace_processor/power/suspend_resume.sql b/test/trace_processor/power/suspend_resume_test.sql
similarity index 100%
rename from test/trace_processor/power/suspend_resume.sql
rename to test/trace_processor/power/suspend_resume_test.sql
diff --git a/test/trace_processor/power/wakesource.sql b/test/trace_processor/power/wakesource_test.sql
similarity index 100%
rename from test/trace_processor/power/wakesource.sql
rename to test/trace_processor/power/wakesource_test.sql
diff --git a/test/trace_processor/process_tracking/index b/test/trace_processor/process_tracking/index
index 9d08804..60edcfb 100644
--- a/test/trace_processor/process_tracking/index
+++ b/test/trace_processor/process_tracking/index
@@ -1,24 +1,24 @@
# Tests for the core process and thread tracking logic.
# Smoke tests
-synth_process_tracking.py ../common/process_tracking.sql process_tracking.out
+synth_process_tracking.py ../common/process_tracking_test.sql process_tracking.out
# Short lived threads/processes
-process_tracking_short_lived_1.py ../common/process_tracking.sql process_tracking_process_tracking_short_lived_1.out
-process_tracking_short_lived_2.py ../common/process_tracking.sql process_tracking_process_tracking_short_lived_2.out
+process_tracking_short_lived_1.py ../common/process_tracking_test.sql process_tracking_process_tracking_short_lived_1.out
+process_tracking_short_lived_2.py ../common/process_tracking_test.sql process_tracking_process_tracking_short_lived_2.out
# Process uid handling
-synth_process_tracking.py process_tracking_uid.sql process_tracking_uid.out
+synth_process_tracking.py process_tracking_uid_test.sql process_tracking_uid.out
# Tracking across execs
-process_tracking_exec.py ../common/process_tracking.sql process_tracking_process_tracking_exec.out
+process_tracking_exec.py ../common/process_tracking_test.sql process_tracking_process_tracking_exec.out
# Tracking parent threads
-process_parent_pid_tracking_1.py process_parent_pid.sql process_parent_pid_process_parent_pid_tracking_1.out
-process_parent_pid_tracking_2.py process_parent_pid.sql process_parent_pid_process_parent_pid_tracking_2.out
+process_parent_pid_tracking_1.py process_parent_pid_test.sql process_parent_pid_process_parent_pid_tracking_1.out
+process_parent_pid_tracking_2.py process_parent_pid_test.sql process_parent_pid_process_parent_pid_tracking_2.out
# Tracking thread reuse
-reused_thread_print.py ../common/process_tracking.sql process_tracking_reused_thread_print.out
+reused_thread_print.py ../common/process_tracking_test.sql process_tracking_reused_thread_print.out
# TODO(lalitm): move this out of this folder.
-sde_tracing_mark_write.textproto slice_with_pid.sql slice_with_pid_sde_tracing_mark_write.out
+sde_tracing_mark_write.textproto slice_with_pid_test.sql slice_with_pid_sde_tracing_mark_write.out
diff --git a/test/trace_processor/process_tracking/process_parent_pid.sql b/test/trace_processor/process_tracking/process_parent_pid_test.sql
similarity index 100%
rename from test/trace_processor/process_tracking/process_parent_pid.sql
rename to test/trace_processor/process_tracking/process_parent_pid_test.sql
diff --git a/test/trace_processor/process_tracking/process_tracking_uid.sql b/test/trace_processor/process_tracking/process_tracking_uid_test.sql
similarity index 100%
rename from test/trace_processor/process_tracking/process_tracking_uid.sql
rename to test/trace_processor/process_tracking/process_tracking_uid_test.sql
diff --git a/test/trace_processor/process_tracking/slice_with_pid.sql b/test/trace_processor/process_tracking/slice_with_pid_test.sql
similarity index 100%
rename from test/trace_processor/process_tracking/slice_with_pid.sql
rename to test/trace_processor/process_tracking/slice_with_pid_test.sql
diff --git a/test/trace_processor/profiling/callstack_sampling_flamegraph_multi_process.sql b/test/trace_processor/profiling/callstack_sampling_flamegraph_multi_process_test.sql
similarity index 100%
rename from test/trace_processor/profiling/callstack_sampling_flamegraph_multi_process.sql
rename to test/trace_processor/profiling/callstack_sampling_flamegraph_multi_process_test.sql
diff --git a/test/trace_processor/profiling/callstack_sampling_flamegraph.sql b/test/trace_processor/profiling/callstack_sampling_flamegraph_test.sql
similarity index 100%
rename from test/trace_processor/profiling/callstack_sampling_flamegraph.sql
rename to test/trace_processor/profiling/callstack_sampling_flamegraph_test.sql
diff --git a/test/trace_processor/profiling/heap_graph_flamegraph_focused.sql b/test/trace_processor/profiling/heap_graph_flamegraph_focused_test.sql
similarity index 100%
rename from test/trace_processor/profiling/heap_graph_flamegraph_focused.sql
rename to test/trace_processor/profiling/heap_graph_flamegraph_focused_test.sql
diff --git a/test/trace_processor/profiling/heap_graph_flamegraph_matches_objects.sql b/test/trace_processor/profiling/heap_graph_flamegraph_matches_objects_test.sql
similarity index 100%
rename from test/trace_processor/profiling/heap_graph_flamegraph_matches_objects.sql
rename to test/trace_processor/profiling/heap_graph_flamegraph_matches_objects_test.sql
diff --git a/test/trace_processor/profiling/heap_graph_flamegraph.sql b/test/trace_processor/profiling/heap_graph_flamegraph_test.sql
similarity index 100%
rename from test/trace_processor/profiling/heap_graph_flamegraph.sql
rename to test/trace_processor/profiling/heap_graph_flamegraph_test.sql
diff --git a/test/trace_processor/profiling/heap_graph_native_size.sql b/test/trace_processor/profiling/heap_graph_native_size_test.sql
similarity index 100%
rename from test/trace_processor/profiling/heap_graph_native_size.sql
rename to test/trace_processor/profiling/heap_graph_native_size_test.sql
diff --git a/test/trace_processor/profiling/heap_graph_object.sql b/test/trace_processor/profiling/heap_graph_object_test.sql
similarity index 100%
rename from test/trace_processor/profiling/heap_graph_object.sql
rename to test/trace_processor/profiling/heap_graph_object_test.sql
diff --git a/test/trace_processor/profiling/heap_graph_reference.sql b/test/trace_processor/profiling/heap_graph_reference_test.sql
similarity index 100%
rename from test/trace_processor/profiling/heap_graph_reference.sql
rename to test/trace_processor/profiling/heap_graph_reference_test.sql
diff --git a/test/trace_processor/profiling/heap_graph_superclass.sql b/test/trace_processor/profiling/heap_graph_superclass_test.sql
similarity index 100%
rename from test/trace_processor/profiling/heap_graph_superclass.sql
rename to test/trace_processor/profiling/heap_graph_superclass_test.sql
diff --git a/test/trace_processor/profiling/heap_profile_deobfuscate.sql b/test/trace_processor/profiling/heap_profile_deobfuscate_test.sql
similarity index 100%
rename from test/trace_processor/profiling/heap_profile_deobfuscate.sql
rename to test/trace_processor/profiling/heap_profile_deobfuscate_test.sql
diff --git a/test/trace_processor/profiling/heap_profile_flamegraph.sql b/test/trace_processor/profiling/heap_profile_flamegraph_test.sql
similarity index 100%
rename from test/trace_processor/profiling/heap_profile_flamegraph.sql
rename to test/trace_processor/profiling/heap_profile_flamegraph_test.sql
diff --git a/test/trace_processor/profiling/heap_profile_frames.sql b/test/trace_processor/profiling/heap_profile_frames_test.sql
similarity index 100%
rename from test/trace_processor/profiling/heap_profile_frames.sql
rename to test/trace_processor/profiling/heap_profile_frames_test.sql
diff --git a/test/trace_processor/profiling/heap_profile_tracker_new_stack.sql b/test/trace_processor/profiling/heap_profile_tracker_new_stack_test.sql
similarity index 100%
rename from test/trace_processor/profiling/heap_profile_tracker_new_stack.sql
rename to test/trace_processor/profiling/heap_profile_tracker_new_stack_test.sql
diff --git a/test/trace_processor/profiling/heap_profile_tracker_twoheaps.sql b/test/trace_processor/profiling/heap_profile_tracker_twoheaps.sql
deleted file mode 100644
index efed7da..0000000
--- a/test/trace_processor/profiling/heap_profile_tracker_twoheaps.sql
+++ /dev/null
@@ -1 +0,0 @@
-select * from heap_profile_allocation;
diff --git a/test/trace_processor/profiling/heap_profile_tracker_new_stack.sql b/test/trace_processor/profiling/heap_profile_tracker_twoheaps_test.sql
similarity index 100%
copy from test/trace_processor/profiling/heap_profile_tracker_new_stack.sql
copy to test/trace_processor/profiling/heap_profile_tracker_twoheaps_test.sql
diff --git a/test/trace_processor/profiling/index b/test/trace_processor/profiling/index
index 5c88ba1..50f24fe 100644
--- a/test/trace_processor/profiling/index
+++ b/test/trace_processor/profiling/index
@@ -1,47 +1,47 @@
# Contains heap profiling, perf profiling and heap graph tests.
-heap_profile_jit.textproto heap_profile_frames.sql heap_profile_jit.out
-heap_profile_deobfuscate.textproto heap_profile_deobfuscate.sql heap_profile_deobfuscate.out
-heap_profile_deobfuscate_memfd.textproto heap_profile_deobfuscate.sql heap_profile_deobfuscate.out
-heap_profile_dump_max_legacy.textproto heap_profile_tracker_new_stack.sql heap_profile_dump_max_legacy.out
-heap_profile_dump_max.textproto heap_profile_tracker_new_stack.sql heap_profile_dump_max.out
+heap_profile_jit.textproto heap_profile_frames_test.sql heap_profile_jit.out
+heap_profile_deobfuscate.textproto heap_profile_deobfuscate_test.sql heap_profile_deobfuscate.out
+heap_profile_deobfuscate_memfd.textproto heap_profile_deobfuscate_test.sql heap_profile_deobfuscate.out
+heap_profile_dump_max_legacy.textproto heap_profile_tracker_new_stack_test.sql heap_profile_dump_max_legacy.out
+heap_profile_dump_max.textproto heap_profile_tracker_new_stack_test.sql heap_profile_dump_max.out
-profiler_smaps.textproto profiler_smaps.sql profiler_smaps.out
+profiler_smaps.textproto profiler_smaps_test.sql profiler_smaps.out
profiler_smaps.textproto profiler_smaps profiler_smaps_metric.out
-heap_graph_baseapk.textproto heap_graph_flamegraph.sql heap_graph_flamegraph.out
-heap_graph_baseapk.textproto heap_graph_object.sql heap_graph_object.out
-heap_graph_baseapk.textproto heap_graph_reference.sql heap_graph_reference.out
-heap_graph_deobfuscate_pkg.textproto heap_graph_object.sql heap_graph_object.out
+heap_graph_baseapk.textproto heap_graph_flamegraph_test.sql heap_graph_flamegraph.out
+heap_graph_baseapk.textproto heap_graph_object_test.sql heap_graph_object.out
+heap_graph_baseapk.textproto heap_graph_reference_test.sql heap_graph_reference.out
+heap_graph_deobfuscate_pkg.textproto heap_graph_object_test.sql heap_graph_object.out
-heap_graph_duplicate.textproto heap_graph_flamegraph.sql heap_graph_duplicate_flamegraph.out
+heap_graph_duplicate.textproto heap_graph_flamegraph_test.sql heap_graph_duplicate_flamegraph.out
-heap_graph.textproto heap_graph_flamegraph.sql heap_graph_flamegraph.out
-heap_graph.textproto heap_graph_object.sql heap_graph_object.out
-heap_graph.textproto heap_graph_reference.sql heap_graph_reference.out
-heap_graph_two_locations.textproto heap_graph_object.sql heap_graph_two_locations.out
-heap_graph_legacy.textproto heap_graph_object.sql heap_graph_object.out
-heap_graph_legacy.textproto heap_graph_reference.sql heap_graph_reference.out
-heap_graph_interleaved.textproto heap_graph_object.sql heap_graph_interleaved_object.out
-heap_graph_interleaved.textproto heap_graph_reference.sql heap_graph_interleaved_reference.out
-../../data/system-server-heap-graph-new.pftrace heap_graph_flamegraph.sql heap_graph_flamegraph_system-server-heap-graph.out
-../../data/system-server-native-profile heap_profile_flamegraph.sql heap_profile_flamegraph_system-server-native-profile.out
-heap_profile_tracker_new_stack.textproto heap_profile_tracker_new_stack.sql heap_profile_tracker_new_stack.out
-heap_profile_tracker_twoheaps.textproto heap_profile_tracker_twoheaps.sql heap_profile_tracker_twoheaps.out
-heap_graph_branching.textproto heap_graph_flamegraph_focused.sql heap_graph_flamegraph_focused.out
-heap_graph_superclass.textproto heap_graph_superclass.sql heap_graph_superclass.out
-heap_graph_native_size.textproto heap_graph_native_size.sql heap_graph_native_size.out
+heap_graph.textproto heap_graph_flamegraph_test.sql heap_graph_flamegraph.out
+heap_graph.textproto heap_graph_object_test.sql heap_graph_object.out
+heap_graph.textproto heap_graph_reference_test.sql heap_graph_reference.out
+heap_graph_two_locations.textproto heap_graph_object_test.sql heap_graph_two_locations.out
+heap_graph_legacy.textproto heap_graph_object_test.sql heap_graph_object.out
+heap_graph_legacy.textproto heap_graph_reference_test.sql heap_graph_reference.out
+heap_graph_interleaved.textproto heap_graph_object_test.sql heap_graph_interleaved_object.out
+heap_graph_interleaved.textproto heap_graph_reference_test.sql heap_graph_interleaved_reference.out
+../../data/system-server-heap-graph-new.pftrace heap_graph_flamegraph_test.sql heap_graph_flamegraph_system-server-heap-graph.out
+../../data/system-server-native-profile heap_profile_flamegraph_test.sql heap_profile_flamegraph_system-server-native-profile.out
+heap_profile_tracker_new_stack.textproto heap_profile_tracker_new_stack_test.sql heap_profile_tracker_new_stack.out
+heap_profile_tracker_twoheaps.textproto heap_profile_tracker_twoheaps_test.sql heap_profile_tracker_twoheaps.out
+heap_graph_branching.textproto heap_graph_flamegraph_focused_test.sql heap_graph_flamegraph_focused.out
+heap_graph_superclass.textproto heap_graph_superclass_test.sql heap_graph_superclass.out
+heap_graph_native_size.textproto heap_graph_native_size_test.sql heap_graph_native_size.out
# Regression test for b/222297079: when cumulative size in a flamegraph
# overflows a signed 32-bit integer.
-heap_graph_huge_size.textproto heap_graph_flamegraph_matches_objects.sql heap_graph_flamegraph_matches_objects.out
+heap_graph_huge_size.textproto heap_graph_flamegraph_matches_objects_test.sql heap_graph_flamegraph_matches_objects.out
# TODO(b/153552977): Stop supporting legacy heap graphs. These never made
# it into a public release, so we should eventually stop
# supporting workarounds for them.
-heap_graph_legacy.textproto heap_graph_flamegraph.sql heap_graph_flamegraph.out
+heap_graph_legacy.textproto heap_graph_flamegraph_test.sql heap_graph_flamegraph.out
-stack_profile_tracker_empty_callstack.textproto stack_profile_tracker_empty_callstack.sql stack_profile_tracker_empty_callstack.out
+stack_profile_tracker_empty_callstack.textproto stack_profile_tracker_empty_callstack_test.sql stack_profile_tracker_empty_callstack.out
# Metrics
heap_profile_no_symbols.textproto unsymbolized_frames unsymbolized_frames.out
@@ -51,11 +51,11 @@
heap_graph.textproto java_heap_histogram java_heap_histogram.out
# perf_sample table (traced_perf) with android R and S trace inputs.
-../../data/perf_sample.pb perf_sample.sql perf_sample_rvc.out
-../../data/perf_sample_sc.pb perf_sample.sql perf_sample_sc.out
+../../data/perf_sample.pb perf_sample_test.sql perf_sample_rvc.out
+../../data/perf_sample_sc.pb perf_sample_test.sql perf_sample_sc.out
# this uses llvm-symbolizer to test the offline symbolization built into
# trace_processor_shell.
-../../data/heapprofd_standalone_client_example-trace stack_profile_symbols.sql stack_profile_symbols.out
-../../data/callstack_sampling.pftrace callstack_sampling_flamegraph.sql callstack_sampling_flamegraph.out
-../../data/callstack_sampling.pftrace callstack_sampling_flamegraph_multi_process.sql callstack_sampling_flamegraph_multi_process.out
+../../data/heapprofd_standalone_client_example-trace stack_profile_symbols_test.sql stack_profile_symbols.out
+../../data/callstack_sampling.pftrace callstack_sampling_flamegraph_test.sql callstack_sampling_flamegraph.out
+../../data/callstack_sampling.pftrace callstack_sampling_flamegraph_multi_process_test.sql callstack_sampling_flamegraph_multi_process.out
diff --git a/test/trace_processor/profiling/perf_sample.sql b/test/trace_processor/profiling/perf_sample_test.sql
similarity index 100%
rename from test/trace_processor/profiling/perf_sample.sql
rename to test/trace_processor/profiling/perf_sample_test.sql
diff --git a/test/trace_processor/profiling/profiler_smaps.sql b/test/trace_processor/profiling/profiler_smaps_test.sql
similarity index 100%
rename from test/trace_processor/profiling/profiler_smaps.sql
rename to test/trace_processor/profiling/profiler_smaps_test.sql
diff --git a/test/trace_processor/profiling/stack_profile_symbols.sql b/test/trace_processor/profiling/stack_profile_symbols_test.sql
similarity index 100%
rename from test/trace_processor/profiling/stack_profile_symbols.sql
rename to test/trace_processor/profiling/stack_profile_symbols_test.sql
diff --git a/test/trace_processor/profiling/stack_profile_tracker_empty_callstack.sql b/test/trace_processor/profiling/stack_profile_tracker_empty_callstack_test.sql
similarity index 100%
rename from test/trace_processor/profiling/stack_profile_tracker_empty_callstack.sql
rename to test/trace_processor/profiling/stack_profile_tracker_empty_callstack_test.sql
diff --git a/test/trace_processor/smoke/index b/test/trace_processor/smoke/index
index ebc2042..3a99661 100644
--- a/test/trace_processor/smoke/index
+++ b/test/trace_processor/smoke/index
@@ -4,20 +4,20 @@
# Note: new tests here should only be added by the Perfetto team.
# JSON trace parsing
-../../data/sfgate.json ../common/smoke.sql sfgate_smoke.out
-../../data/sfgate.json ../common/smoke_slices.sql sfgate_smoke_slices.out
+../../data/sfgate.json ../common/smoke_test.sql sfgate_smoke.out
+../../data/sfgate.json ../common/smoke_slices_test.sql sfgate_smoke_slices.out
# Sched events
-../../data/android_sched_and_ps.pb ../common/smoke.sql android_sched_and_ps_smoke.out
+../../data/android_sched_and_ps.pb ../common/smoke_test.sql android_sched_and_ps_smoke.out
# Compresesed traces
-../../data/compressed.pb ../common/smoke.sql compressed_smoke.out
+../../data/compressed.pb ../common/smoke_test.sql compressed_smoke.out
# Sched events from sythetic trace
-../common/synth_1.py ../common/smoke.sql synth_1_smoke.out
+../common/synth_1.py ../common/smoke_test.sql synth_1_smoke.out
# Compute CPU time metric testing several core tables.
-../../data/example_android_trace_30s.pb thread_cpu_time.sql thread_cpu_time_example_android_trace_30s.out
+../../data/example_android_trace_30s.pb thread_cpu_time_test.sql thread_cpu_time_example_android_trace_30s.out
# Compute power proxy metric
-../../data/cpu_counters.pb proxy_power.sql proxy_power.out
+../../data/cpu_counters.pb proxy_power_test.sql proxy_power.out
diff --git a/test/trace_processor/smoke/proxy_power.sql b/test/trace_processor/smoke/proxy_power_test.sql
similarity index 100%
rename from test/trace_processor/smoke/proxy_power.sql
rename to test/trace_processor/smoke/proxy_power_test.sql
diff --git a/test/trace_processor/smoke/thread_cpu_time.sql b/test/trace_processor/smoke/thread_cpu_time_test.sql
similarity index 100%
rename from test/trace_processor/smoke/thread_cpu_time.sql
rename to test/trace_processor/smoke/thread_cpu_time_test.sql
diff --git a/test/trace_processor/span_join/index b/test/trace_processor/span_join/index
index 774b414..6c3a714 100644
--- a/test/trace_processor/span_join/index
+++ b/test/trace_processor/span_join/index
@@ -1,34 +1,34 @@
# Contains tests on the behaviour of the SPAN_JOIN operator table.
# Smoke tests
-../common/synth_1.py span_join_unordered_cols.sql span_join_unordered_cols_synth_1.out
-../common/synth_1.py span_join_unordered_cols_reverse.sql span_join_unordered_cols_synth_1.out
-../../data/android_sched_and_ps.pb span_join_zero_negative_dur.sql span_join_zero_negative_dur.out
+../common/synth_1.py span_join_unordered_cols_test.sql span_join_unordered_cols_synth_1.out
+../common/synth_1.py span_join_unordered_cols_reverse_test.sql span_join_unordered_cols_synth_1.out
+../../data/android_sched_and_ps.pb span_join_zero_negative_dur_test.sql span_join_zero_negative_dur.out
# Regression tests
-../../data/android_sched_and_ps.pb slice_span_join_b118665515.sql android_sched_and_ps_slice_span_join_b118665515.out
-../../data/android_sched_and_ps.pb span_join_unpartitioned_empty.sql span_join_unpartitioned_empty.out
+../../data/android_sched_and_ps.pb slice_span_join_b118665515_test.sql android_sched_and_ps_slice_span_join_b118665515.out
+../../data/android_sched_and_ps.pb span_join_unpartitioned_empty_test.sql span_join_unpartitioned_empty.out
# Outer join
-../common/synth_1.py span_outer_join.sql span_outer_join.out
+../common/synth_1.py span_outer_join_test.sql span_outer_join.out
-../common/synth_1.py span_outer_join_empty.sql span_outer_join_empty.out
-../common/synth_1.py span_outer_join_unpartitioned_empty.sql span_outer_join_unpartitioned_empty.out
-../common/synth_1.py span_outer_join_unpartitioned_left_empty.sql span_outer_join_unpartitioned_left_empty.out
-../common/synth_1.py span_outer_join_unpartitioned_right_empty.sql span_outer_join_unpartitioned_right_empty.out
+../common/synth_1.py span_outer_join_empty_test.sql span_outer_join_empty.out
+../common/synth_1.py span_outer_join_unpartitioned_empty_test.sql span_outer_join_unpartitioned_empty.out
+../common/synth_1.py span_outer_join_unpartitioned_left_empty_test.sql span_outer_join_unpartitioned_left_empty.out
+../common/synth_1.py span_outer_join_unpartitioned_right_empty_test.sql span_outer_join_unpartitioned_right_empty.out
-../common/synth_1.py span_outer_join_mixed.sql span_outer_join_mixed.out
-../common/synth_1.py span_outer_join_mixed_empty.sql span_outer_join_mixed_empty.out
-../common/synth_1.py span_outer_join_mixed_left_empty.sql span_outer_join_mixed_left_empty.out
-../common/synth_1.py span_outer_join_mixed_left_empty_rev.sql span_outer_join_mixed_left_empty_rev.out
-../common/synth_1.py span_outer_join_mixed_right_empty.sql span_outer_join_mixed_right_empty.out
-../common/synth_1.py span_outer_join_mixed_right_empty_rev.sql span_outer_join_mixed_right_empty_rev.out
-../common/synth_1.py span_outer_join_mixed.sql span_outer_join_mixed.out
+../common/synth_1.py span_outer_join_mixed_test.sql span_outer_join_mixed.out
+../common/synth_1.py span_outer_join_mixed_empty_test.sql span_outer_join_mixed_empty.out
+../common/synth_1.py span_outer_join_mixed_left_empty_test.sql span_outer_join_mixed_left_empty.out
+../common/synth_1.py span_outer_join_mixed_left_empty_rev_test.sql span_outer_join_mixed_left_empty_rev.out
+../common/synth_1.py span_outer_join_mixed_right_empty_test.sql span_outer_join_mixed_right_empty.out
+../common/synth_1.py span_outer_join_mixed_right_empty_rev_test.sql span_outer_join_mixed_right_empty_rev.out
+../common/synth_1.py span_outer_join_mixed_test.sql span_outer_join_mixed.out
# Left join
-../common/synth_1.py span_left_join.sql span_left_join.out
-../common/synth_1.py span_left_join_unpartitioned.sql span_left_join_unpartitioned.out
-../common/synth_1.py span_left_join_left_unpartitioned.sql span_left_join_left_unpartitioned.out
-../common/synth_1.py span_left_join_left_partitioned.sql span_left_join_left_partitioned.out
-../common/synth_1.py span_left_join_empty_right.sql span_left_join_empty_right.out
-../common/synth_1.py span_left_join_unordered.sql span_left_join_unordered_android_sched_and_ps.out
+../common/synth_1.py span_left_join_test.sql span_left_join.out
+../common/synth_1.py span_left_join_unpartitioned_test.sql span_left_join_unpartitioned.out
+../common/synth_1.py span_left_join_left_unpartitioned_test.sql span_left_join_left_unpartitioned.out
+../common/synth_1.py span_left_join_left_partitioned_test.sql span_left_join_left_partitioned.out
+../common/synth_1.py span_left_join_empty_right_test.sql span_left_join_empty_right.out
+../common/synth_1.py span_left_join_unordered_test.sql span_left_join_unordered_android_sched_and_ps.out
diff --git a/test/trace_processor/span_join/slice_span_join_b118665515.sql b/test/trace_processor/span_join/slice_span_join_b118665515_test.sql
similarity index 100%
rename from test/trace_processor/span_join/slice_span_join_b118665515.sql
rename to test/trace_processor/span_join/slice_span_join_b118665515_test.sql
diff --git a/test/trace_processor/span_join/span_join_unordered_cols_reverse.sql b/test/trace_processor/span_join/span_join_unordered_cols_reverse_test.sql
similarity index 100%
rename from test/trace_processor/span_join/span_join_unordered_cols_reverse.sql
rename to test/trace_processor/span_join/span_join_unordered_cols_reverse_test.sql
diff --git a/test/trace_processor/span_join/span_join_unordered_cols.sql b/test/trace_processor/span_join/span_join_unordered_cols_test.sql
similarity index 100%
rename from test/trace_processor/span_join/span_join_unordered_cols.sql
rename to test/trace_processor/span_join/span_join_unordered_cols_test.sql
diff --git a/test/trace_processor/span_join/span_join_unpartitioned_empty.sql b/test/trace_processor/span_join/span_join_unpartitioned_empty_test.sql
similarity index 100%
rename from test/trace_processor/span_join/span_join_unpartitioned_empty.sql
rename to test/trace_processor/span_join/span_join_unpartitioned_empty_test.sql
diff --git a/test/trace_processor/span_join/span_join_zero_negative_dur.sql b/test/trace_processor/span_join/span_join_zero_negative_dur_test.sql
similarity index 100%
rename from test/trace_processor/span_join/span_join_zero_negative_dur.sql
rename to test/trace_processor/span_join/span_join_zero_negative_dur_test.sql
diff --git a/test/trace_processor/span_join/span_left_join_empty_right.sql b/test/trace_processor/span_join/span_left_join_empty_right_test.sql
similarity index 100%
rename from test/trace_processor/span_join/span_left_join_empty_right.sql
rename to test/trace_processor/span_join/span_left_join_empty_right_test.sql
diff --git a/test/trace_processor/span_join/span_left_join_left_partitioned.sql b/test/trace_processor/span_join/span_left_join_left_partitioned_test.sql
similarity index 100%
rename from test/trace_processor/span_join/span_left_join_left_partitioned.sql
rename to test/trace_processor/span_join/span_left_join_left_partitioned_test.sql
diff --git a/test/trace_processor/span_join/span_left_join_left_unpartitioned.sql b/test/trace_processor/span_join/span_left_join_left_unpartitioned_test.sql
similarity index 100%
rename from test/trace_processor/span_join/span_left_join_left_unpartitioned.sql
rename to test/trace_processor/span_join/span_left_join_left_unpartitioned_test.sql
diff --git a/test/trace_processor/span_join/span_left_join.sql b/test/trace_processor/span_join/span_left_join_test.sql
similarity index 100%
rename from test/trace_processor/span_join/span_left_join.sql
rename to test/trace_processor/span_join/span_left_join_test.sql
diff --git a/test/trace_processor/span_join/span_left_join_unordered.sql b/test/trace_processor/span_join/span_left_join_unordered_test.sql
similarity index 100%
rename from test/trace_processor/span_join/span_left_join_unordered.sql
rename to test/trace_processor/span_join/span_left_join_unordered_test.sql
diff --git a/test/trace_processor/span_join/span_left_join_unpartitioned.sql b/test/trace_processor/span_join/span_left_join_unpartitioned_test.sql
similarity index 100%
rename from test/trace_processor/span_join/span_left_join_unpartitioned.sql
rename to test/trace_processor/span_join/span_left_join_unpartitioned_test.sql
diff --git a/test/trace_processor/span_join/span_outer_join_empty.sql b/test/trace_processor/span_join/span_outer_join_empty_test.sql
similarity index 100%
rename from test/trace_processor/span_join/span_outer_join_empty.sql
rename to test/trace_processor/span_join/span_outer_join_empty_test.sql
diff --git a/test/trace_processor/span_join/span_outer_join_mixed_empty.sql b/test/trace_processor/span_join/span_outer_join_mixed_empty_test.sql
similarity index 100%
rename from test/trace_processor/span_join/span_outer_join_mixed_empty.sql
rename to test/trace_processor/span_join/span_outer_join_mixed_empty_test.sql
diff --git a/test/trace_processor/span_join/span_outer_join_mixed_left_empty_rev.sql b/test/trace_processor/span_join/span_outer_join_mixed_left_empty_rev_test.sql
similarity index 100%
rename from test/trace_processor/span_join/span_outer_join_mixed_left_empty_rev.sql
rename to test/trace_processor/span_join/span_outer_join_mixed_left_empty_rev_test.sql
diff --git a/test/trace_processor/span_join/span_outer_join_mixed_left_empty.sql b/test/trace_processor/span_join/span_outer_join_mixed_left_empty_test.sql
similarity index 100%
rename from test/trace_processor/span_join/span_outer_join_mixed_left_empty.sql
rename to test/trace_processor/span_join/span_outer_join_mixed_left_empty_test.sql
diff --git a/test/trace_processor/span_join/span_outer_join_mixed_right_empty_rev.sql b/test/trace_processor/span_join/span_outer_join_mixed_right_empty_rev_test.sql
similarity index 100%
rename from test/trace_processor/span_join/span_outer_join_mixed_right_empty_rev.sql
rename to test/trace_processor/span_join/span_outer_join_mixed_right_empty_rev_test.sql
diff --git a/test/trace_processor/span_join/span_outer_join_mixed_right_empty.sql b/test/trace_processor/span_join/span_outer_join_mixed_right_empty_test.sql
similarity index 100%
rename from test/trace_processor/span_join/span_outer_join_mixed_right_empty.sql
rename to test/trace_processor/span_join/span_outer_join_mixed_right_empty_test.sql
diff --git a/test/trace_processor/span_join/span_outer_join_mixed.sql b/test/trace_processor/span_join/span_outer_join_mixed_test.sql
similarity index 100%
rename from test/trace_processor/span_join/span_outer_join_mixed.sql
rename to test/trace_processor/span_join/span_outer_join_mixed_test.sql
diff --git a/test/trace_processor/span_join/span_outer_join.sql b/test/trace_processor/span_join/span_outer_join_test.sql
similarity index 100%
rename from test/trace_processor/span_join/span_outer_join.sql
rename to test/trace_processor/span_join/span_outer_join_test.sql
diff --git a/test/trace_processor/span_join/span_outer_join_unpartitioned_empty.sql b/test/trace_processor/span_join/span_outer_join_unpartitioned_empty_test.sql
similarity index 100%
rename from test/trace_processor/span_join/span_outer_join_unpartitioned_empty.sql
rename to test/trace_processor/span_join/span_outer_join_unpartitioned_empty_test.sql
diff --git a/test/trace_processor/span_join/span_outer_join_unpartitioned_left_empty.sql b/test/trace_processor/span_join/span_outer_join_unpartitioned_left_empty_test.sql
similarity index 100%
rename from test/trace_processor/span_join/span_outer_join_unpartitioned_left_empty.sql
rename to test/trace_processor/span_join/span_outer_join_unpartitioned_left_empty_test.sql
diff --git a/test/trace_processor/span_join/span_outer_join_unpartitioned_right_empty.sql b/test/trace_processor/span_join/span_outer_join_unpartitioned_right_empty_test.sql
similarity index 100%
rename from test/trace_processor/span_join/span_outer_join_unpartitioned_right_empty.sql
rename to test/trace_processor/span_join/span_outer_join_unpartitioned_right_empty_test.sql
diff --git a/test/trace_processor/span_join/span_outer_join_unpartitioned.sql b/test/trace_processor/span_join/span_outer_join_unpartitioned_test.sql
similarity index 100%
rename from test/trace_processor/span_join/span_outer_join_unpartitioned.sql
rename to test/trace_processor/span_join/span_outer_join_unpartitioned_test.sql
diff --git a/test/trace_processor/tables/b119301023.sql b/test/trace_processor/tables/b119301023_test.sql
similarity index 100%
rename from test/trace_processor/tables/b119301023.sql
rename to test/trace_processor/tables/b119301023_test.sql
diff --git a/test/trace_processor/tables/b119496959.sql b/test/trace_processor/tables/b119496959_test.sql
similarity index 100%
rename from test/trace_processor/tables/b119496959.sql
rename to test/trace_processor/tables/b119496959_test.sql
diff --git a/test/trace_processor/tables/b120278869_neg_ts_end.sql b/test/trace_processor/tables/b120278869_neg_ts_end_test.sql
similarity index 100%
rename from test/trace_processor/tables/b120278869_neg_ts_end.sql
rename to test/trace_processor/tables/b120278869_neg_ts_end_test.sql
diff --git a/test/trace_processor/tables/counter_dur.sql b/test/trace_processor/tables/counter_dur_test.sql
similarity index 100%
rename from test/trace_processor/tables/counter_dur.sql
rename to test/trace_processor/tables/counter_dur_test.sql
diff --git a/test/trace_processor/tables/counters_group_by_freq.sql b/test/trace_processor/tables/counters_group_by_freq_test.sql
similarity index 100%
rename from test/trace_processor/tables/counters_group_by_freq.sql
rename to test/trace_processor/tables/counters_group_by_freq_test.sql
diff --git a/test/trace_processor/tables/counters_where_cpu.sql b/test/trace_processor/tables/counters_where_cpu_test.sql
similarity index 100%
rename from test/trace_processor/tables/counters_where_cpu.sql
rename to test/trace_processor/tables/counters_where_cpu_test.sql
diff --git a/test/trace_processor/tables/filter_counter.sql b/test/trace_processor/tables/filter_counter_test.sql
similarity index 100%
rename from test/trace_processor/tables/filter_counter.sql
rename to test/trace_processor/tables/filter_counter_test.sql
diff --git a/test/trace_processor/tables/filter_row_vector.sql b/test/trace_processor/tables/filter_row_vector_test.sql
similarity index 100%
rename from test/trace_processor/tables/filter_row_vector.sql
rename to test/trace_processor/tables/filter_row_vector_test.sql
diff --git a/test/trace_processor/tables/filter_sched.sql b/test/trace_processor/tables/filter_sched_test.sql
similarity index 100%
rename from test/trace_processor/tables/filter_sched.sql
rename to test/trace_processor/tables/filter_sched_test.sql
diff --git a/test/trace_processor/tables/ftrace_setup_errors.sql b/test/trace_processor/tables/ftrace_setup_errors_test.sql
similarity index 100%
rename from test/trace_processor/tables/ftrace_setup_errors.sql
rename to test/trace_processor/tables/ftrace_setup_errors_test.sql
diff --git a/test/trace_processor/tables/index b/test/trace_processor/tables/index
index 10b6d94..fbeb166 100644
--- a/test/trace_processor/tables/index
+++ b/test/trace_processor/tables/index
@@ -7,26 +7,26 @@
# to add a new test to.
# Window table
-../../data/android_sched_and_ps.pb smoke_window.sql android_sched_and_ps_smoke_window.out
+../../data/android_sched_and_ps.pb smoke_window_test.sql android_sched_and_ps_smoke_window.out
# Sched table
-../common/synth_1.py filter_sched.sql synth_1_filter_sched.out
-../../data/android_sched_and_ps.pb b119496959.sql android_sched_and_ps_b119496959.out
-../../data/android_sched_and_ps.pb b119301023.sql android_sched_and_ps_b119301023.out
+../common/synth_1.py filter_sched_test.sql synth_1_filter_sched.out
+../../data/android_sched_and_ps.pb b119496959_test.sql android_sched_and_ps_b119496959.out
+../../data/android_sched_and_ps.pb b119301023_test.sql android_sched_and_ps_b119301023.out
# Counters table
-../common/synth_1.py filter_counter.sql synth_1_filter_counter.out
-../../data/memory_counters.pb b120278869_neg_ts_end.sql memory_counters_b120278869_neg_ts_end.out
-counters_where_cpu.py counters_where_cpu.sql counters_where_cpu_counters_where_cpu.out
-counters_group_by_freq.py counters_group_by_freq.sql counters_group_by_freq_counters_group_by_freq.out
-../../data/example_android_trace_30s.pb filter_row_vector.sql filter_row_vector_example_android_trace_30s.out
-../../data/example_android_trace_30s.pb counter_dur.sql counter_dur_example_android_trace_30s.out
+../common/synth_1.py filter_counter_test.sql synth_1_filter_counter.out
+../../data/memory_counters.pb b120278869_neg_ts_end_test.sql memory_counters_b120278869_neg_ts_end.out
+counters_where_cpu.py counters_where_cpu_test.sql counters_where_cpu_counters_where_cpu.out
+counters_group_by_freq.py counters_group_by_freq_test.sql counters_group_by_freq_counters_group_by_freq.out
+../../data/example_android_trace_30s.pb filter_row_vector_test.sql filter_row_vector_example_android_trace_30s.out
+../../data/example_android_trace_30s.pb counter_dur_test.sql counter_dur_example_android_trace_30s.out
# Null printing
-../common/synth_1.py nulls.sql nulls.out
+../common/synth_1.py nulls_test.sql nulls.out
# Thread table
-thread_main_thread.textproto thread_main_thread.sql thread_main_thread.out
+thread_main_thread.textproto thread_main_thread_test.sql thread_main_thread.out
# Json output
../../data/memory_counters.pb trace_metadata trace_metadata.json.out
@@ -35,4 +35,4 @@
process_uids.textproto android_task_names android_task_names.out
# Ftrace stats imports in metadata and stats tables
-../../data/ftrace_error_stats.pftrace ftrace_setup_errors.sql ftrace_setup_errors.out
+../../data/ftrace_error_stats.pftrace ftrace_setup_errors_test.sql ftrace_setup_errors.out
diff --git a/test/trace_processor/tables/nulls.sql b/test/trace_processor/tables/nulls_test.sql
similarity index 100%
rename from test/trace_processor/tables/nulls.sql
rename to test/trace_processor/tables/nulls_test.sql
diff --git a/test/trace_processor/tables/smoke_window.sql b/test/trace_processor/tables/smoke_window_test.sql
similarity index 100%
rename from test/trace_processor/tables/smoke_window.sql
rename to test/trace_processor/tables/smoke_window_test.sql
diff --git a/test/trace_processor/tables/thread_main_thread.sql b/test/trace_processor/tables/thread_main_thread_test.sql
similarity index 100%
rename from test/trace_processor/tables/thread_main_thread.sql
rename to test/trace_processor/tables/thread_main_thread_test.sql
diff --git a/test/trace_processor/track_event/experimental_slice_layout_depth.sql b/test/trace_processor/track_event/experimental_slice_layout_depth_test.sql
similarity index 100%
rename from test/trace_processor/track_event/experimental_slice_layout_depth.sql
rename to test/trace_processor/track_event/experimental_slice_layout_depth_test.sql
diff --git a/test/trace_processor/track_event/flow_events.sql b/test/trace_processor/track_event/flow_events_test.sql
similarity index 100%
rename from test/trace_processor/track_event/flow_events.sql
rename to test/trace_processor/track_event/flow_events_test.sql
diff --git a/test/trace_processor/track_event/index b/test/trace_processor/track_event/index
index d45510c..617143a 100644
--- a/test/trace_processor/track_event/index
+++ b/test/trace_processor/track_event/index
@@ -1,46 +1,46 @@
# Contains tests on the parsing and ingestion of TrackEvent packets.
# Same tid handling
-track_event_same_tids.textproto ../common/process_tracking.sql track_event_same_tids_threads.out
-track_event_same_tids.textproto track_event_slices.sql track_event_same_tids_slices.out
+track_event_same_tids.textproto ../common/process_tracking_test.sql track_event_same_tids_threads.out
+track_event_same_tids.textproto track_event_slices_test.sql track_event_same_tids_slices.out
# Typed args
-track_event_typed_args.textproto track_event_slices.sql track_event_typed_args_slices.out
-track_event_typed_args.textproto track_event_args.sql track_event_typed_args_args.out
+track_event_typed_args.textproto track_event_slices_test.sql track_event_typed_args_slices.out
+track_event_typed_args.textproto track_event_args_test.sql track_event_typed_args_args.out
# Track handling
-track_event_tracks.textproto track_event_slices.sql track_event_tracks_slices.out
-track_event_tracks.textproto track_event_processes.sql track_event_tracks_processes.out
+track_event_tracks.textproto track_event_slices_test.sql track_event_tracks_slices.out
+track_event_tracks.textproto track_event_processes_test.sql track_event_tracks_processes.out
# Instant events
-track_event_instant.textproto track_event_slices.sql track_event_instant_slices.out
+track_event_instant.textproto track_event_slices_test.sql track_event_instant_slices.out
# Legacy async events
-legacy_async_event.textproto track_event_slice_with_args.sql legacy_async_event.out
+legacy_async_event.textproto track_event_slice_with_args_test.sql legacy_async_event.out
# Legacy atrace
-track_event_with_atrace.textproto track_event_slices.sql track_event_with_atrace.out
+track_event_with_atrace.textproto track_event_slices_test.sql track_event_with_atrace.out
# Debug annotations
-track_event_merged_debug_annotations.textproto track_event_args.sql track_event_merged_debug_annotations_args.out
+track_event_merged_debug_annotations.textproto track_event_args_test.sql track_event_merged_debug_annotations_args.out
# Counters
-track_event_counters.textproto track_event_slices.sql track_event_counters_slices.out
-track_event_counters.textproto track_event_counters.sql track_event_counters_counters.out
+track_event_counters.textproto track_event_slices_test.sql track_event_counters_slices.out
+track_event_counters.textproto track_event_counters_test.sql track_event_counters_counters.out
# Clock handling
-track_event_monotonic_trace_clock.textproto track_event_slices.sql track_event_monotonic_trace_clock_slices.out
+track_event_monotonic_trace_clock.textproto track_event_slices_test.sql track_event_monotonic_trace_clock_slices.out
# HistogramName interning
-track_event_chrome_histogram_sample.textproto track_event_args.sql track_event_chrome_histogram_sample_args.out
+track_event_chrome_histogram_sample.textproto track_event_args_test.sql track_event_chrome_histogram_sample_args.out
# Flow events importing from proto
-flow_events_track_event.textproto flow_events.sql flow_events_track_event.out
-flow_events_proto_v2.textproto flow_events.sql flow_events_proto_v2.out
-flow_events_proto_v1.textproto flow_events.sql flow_events_proto_v1.out
+flow_events_track_event.textproto flow_events_test.sql flow_events_track_event.out
+flow_events_proto_v2.textproto flow_events_test.sql flow_events_proto_v2.out
+flow_events_proto_v1.textproto flow_events_test.sql flow_events_proto_v1.out
# Async slices starting and ending at the same time
-experimental_slice_layout_depth.py experimental_slice_layout_depth.sql experimental_slice_layout_depth.out
+experimental_slice_layout_depth.py experimental_slice_layout_depth_test.sql experimental_slice_layout_depth.out
# Descriptor merging regression test (bug: b/197203390)
-../../data/trace_with_descriptor.pftrace merging_regression.sql merging_regression.out
+../../data/trace_with_descriptor.pftrace merging_regression_test.sql merging_regression.out
diff --git a/test/trace_processor/track_event/merging_regression.sql b/test/trace_processor/track_event/merging_regression_test.sql
similarity index 100%
rename from test/trace_processor/track_event/merging_regression.sql
rename to test/trace_processor/track_event/merging_regression_test.sql
diff --git a/test/trace_processor/track_event/track_event_args.sql b/test/trace_processor/track_event/track_event_args_test.sql
similarity index 100%
rename from test/trace_processor/track_event/track_event_args.sql
rename to test/trace_processor/track_event/track_event_args_test.sql
diff --git a/test/trace_processor/track_event/track_event_counters.sql b/test/trace_processor/track_event/track_event_counters_test.sql
similarity index 100%
rename from test/trace_processor/track_event/track_event_counters.sql
rename to test/trace_processor/track_event/track_event_counters_test.sql
diff --git a/test/trace_processor/track_event/track_event_processes.sql b/test/trace_processor/track_event/track_event_processes_test.sql
similarity index 100%
rename from test/trace_processor/track_event/track_event_processes.sql
rename to test/trace_processor/track_event/track_event_processes_test.sql
diff --git a/test/trace_processor/track_event/track_event_slice_with_args.sql b/test/trace_processor/track_event/track_event_slice_with_args_test.sql
similarity index 100%
rename from test/trace_processor/track_event/track_event_slice_with_args.sql
rename to test/trace_processor/track_event/track_event_slice_with_args_test.sql
diff --git a/test/trace_processor/track_event/track_event_slices.sql b/test/trace_processor/track_event/track_event_slices_test.sql
similarity index 100%
rename from test/trace_processor/track_event/track_event_slices.sql
rename to test/trace_processor/track_event/track_event_slices_test.sql
diff --git a/test/trace_processor/translation/chrome_args.sql b/test/trace_processor/translation/chrome_args_test.sql
similarity index 100%
rename from test/trace_processor/translation/chrome_args.sql
rename to test/trace_processor/translation/chrome_args_test.sql
diff --git a/test/trace_processor/translation/index b/test/trace_processor/translation/index
index c582dec..920499f 100644
--- a/test/trace_processor/translation/index
+++ b/test/trace_processor/translation/index
@@ -1,5 +1,5 @@
-chrome_histogram.textproto chrome_args.sql chrome_histogram.out
-chrome_user_event.textproto chrome_args.sql chrome_user_event.out
-chrome_performance_mark.textproto chrome_args.sql chrome_performance_mark.out
-slice_name.textproto slice_name.sql slice_name.out
-slice_name_negative_timestamp.textproto slice_name.sql slice_name.out
+chrome_histogram.textproto chrome_args_test.sql chrome_histogram.out
+chrome_user_event.textproto chrome_args_test.sql chrome_user_event.out
+chrome_performance_mark.textproto chrome_args_test.sql chrome_performance_mark.out
+slice_name.textproto slice_name_test.sql slice_name.out
+slice_name_negative_timestamp.textproto slice_name_test.sql slice_name.out
diff --git a/test/trace_processor/translation/slice_name.sql b/test/trace_processor/translation/slice_name_test.sql
similarity index 100%
rename from test/trace_processor/translation/slice_name.sql
rename to test/trace_processor/translation/slice_name_test.sql
diff --git a/tools/measure_tp_performance.py b/tools/measure_tp_performance.py
index e5e09ce..88a372e 100755
--- a/tools/measure_tp_performance.py
+++ b/tools/measure_tp_performance.py
@@ -146,9 +146,25 @@
action='store_true',
help='Whether to ingest ftrace into raw table',
default=False)
+ parser.add_argument(
+ '--kill-existing',
+ action='store_true',
+ help='Kill traced, perfetto_cmd '
+ 'and trace processor shell if running')
parser.add_argument('trace_file', type=str, help='Path to trace')
args = parser.parse_args()
+ if args.kill_existing:
+ subprocess.run(['killall', 'traced'],
+ stdout=subprocess.DEVNULL,
+ stderr=subprocess.DEVNULL)
+ subprocess.run(['killall', 'perfetto'],
+ stdout=subprocess.DEVNULL,
+ stderr=subprocess.DEVNULL)
+ subprocess.run(['killall', 'trace_processor_shell'],
+ stdout=subprocess.DEVNULL,
+ stderr=subprocess.DEVNULL)
+
traced = subprocess.Popen([os.path.join(args.out, 'traced')],
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL)
diff --git a/tools/roll-prebuilts b/tools/roll-prebuilts
index 74b01f1..6df208c 100755
--- a/tools/roll-prebuilts
+++ b/tools/roll-prebuilts
@@ -38,46 +38,47 @@
ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
TOOLS_DIR = os.path.join(ROOT_DIR, 'tools')
+UNIX_ARCHS = [
+ 'mac-amd64', 'mac-arm64', 'linux-amd64', 'linux-arm', 'linux-arm64',
+ 'android-arm', 'android-arm64', 'android-x86', 'android-x64',
+]
+ALL_ARCHS = UNIX_ARCHS + ['windows-amd64']
+
SCRIPTS_TO_UPDATE = [
+ # Scripts using trace_processor_shell.
{
- 'script':
- 'trace_processor',
- 'tool':
- 'trace_processor_shell',
- 'archs': [
- 'mac-amd64', 'mac-arm64', 'windows-amd64', 'linux-amd64',
- 'linux-arm', 'linux-arm64'
- ]
+ 'script': 'trace_processor',
+ 'tool': 'trace_processor_shell',
+ 'archs': ALL_ARCHS
},
+
+ # Scripts using traceconv.
{
'script': 'traceconv',
'tool': 'traceconv',
- 'archs': ['mac-amd64', 'mac-arm64', 'linux-amd64', 'windows-amd64']
- },
- {
- 'script':
- 'tracebox',
- 'tool':
- 'tracebox',
- 'archs': [
- 'mac-amd64', 'mac-arm64', 'linux-amd64', 'linux-amd64', 'linux-arm',
- 'linux-arm64'
- ]
+ 'archs': ALL_ARCHS
},
{
'script': 'heap_profile',
'tool': 'traceconv',
- 'archs': ['mac-amd64', 'mac-arm64', 'windows-amd64', 'linux-amd64']
+ 'archs': ALL_ARCHS
},
{
'script': 'cpu_profile',
'tool': 'traceconv',
- 'archs': ['mac-amd64', 'windows-amd64', 'linux-amd64']
+ 'archs': ALL_ARCHS
+ },
+
+ # Scripts using tracebox.
+ {
+ 'script': 'tracebox',
+ 'tool': 'tracebox',
+ 'archs': UNIX_ARCHS
},
{
'script': 'record_android_trace',
'tool': 'tracebox',
- 'archs': ['android-arm', 'android-arm64', 'android-x86', 'android-x64']
+ 'archs': UNIX_ARCHS
},
]
diff --git a/ui/package.json b/ui/package.json
index 398a431..7488bba 100644
--- a/ui/package.json
+++ b/ui/package.json
@@ -7,7 +7,6 @@
"author": "Perfetto Team",
"license": "Apache-2.0",
"dependencies": {
- "@tsundoku/micromodal_types": "^0.0.1",
"@types/chrome": "0.0.186",
"@types/color-convert": "^1.9.0",
"@types/filesystem": "^0.0.32",
@@ -24,7 +23,6 @@
"hsluv": "^0.1.0",
"immer": "^9.0.2",
"jsbn-rsa": "^1.0.4",
- "micromodal": "^0.4.6",
"mithril": "^2.2.0",
"noice-json-rpc": "^1.2.0",
"pako": "^1.0.11",
diff --git a/ui/src/assets/modal.scss b/ui/src/assets/modal.scss
index 20a80a8..fc2eead 100644
--- a/ui/src/assets/modal.scss
+++ b/ui/src/assets/modal.scss
@@ -12,159 +12,127 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-/**************************\
- Basic Modal Styles
-\**************************/
-.modal {
- font-family: 'Raleway', sans-serif;
+
+// The opacity changes are only transitional. Once the `modalFadeOut` animation
+// reaches the end, the Mithril component that renders .modal-backdrop
+// (and .modal-dialog) is fully destroyed and removed from the DOM.
+// We use keyframes+animation, rather than transition, because the former allow
+// hooking the onanimationend events to synchronize the Mithril removal with
+// the end of the CSS animation.
+@keyframes modalFadeOut {
+ from { opacity: 1; }
+ to { opacity: 0; }
}
-.modal-overlay {
- position: fixed;
+@keyframes modalFadeIn {
+ from { opacity: 0; }
+ to { opacity: 1; }
+}
+
+.modal-backdrop {
+ position: absolute;
+ z-index: 99;
+ background-color: rgba(0, 0, 0, 0.6);
top: 0;
left: 0;
right: 0;
bottom: 0;
- background: rgba(0,0,0,0.6);
- display: flex;
- justify-content: center;
- align-items: center;
- z-index: 999;
+ backdrop-filter: blur(2px);
+ animation: modalFadeIn 0.25s var(--anim-easing);
+ animation-fill-mode: both;
+
+ &.modal-fadeout {
+ animation: modalFadeOut 0.25s var(--anim-easing);
+ animation-fill-mode: both;
+ }
}
-.modal-container {
+.modal-dialog {
+ position: absolute;
+ z-index: 100;
+ border: 1px solid #333;
background-color: #fff;
+ margin: auto;
+ min-width: 25vw;
+ min-height: 10vh;
padding: 30px;
max-width: 90vw;
max-height: 90vh;
border-radius: 4px;
overflow-y: auto;
- box-sizing: border-box;
-}
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ font-family: Roboto, sans-serif;
+ font-weight: 300;
-.modal-header {
- display: flex;
- justify-content: space-between;
- align-items: center;
-}
+ &.modal-dialog-valign-top {
+ top: 1rem;
+ transform: translate(-50%, 0);
+ }
-.modal-title {
- margin-top: 0;
- margin-bottom: 0;
- font-family: 'Raleway', sans-serif;
- font-weight: 600;
- font-size: 1.25rem;
- line-height: 1.25;
- color: #262f3c;
- box-sizing: border-box;
-}
+ >header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
-.modal-close {
- background: transparent;
- border: 0;
-}
+ h2 {
+ margin-top: 0;
+ margin-bottom: 0;
+ font-family: 'Raleway', sans-serif;
+ font-weight: 600;
+ font-size: 1.25rem;
+ line-height: 1.25;
+ color: #262f3c;
+ box-sizing: border-box;
+ }
-.modal-header .modal-close:before { content: "\2715"; }
+ button {
+ background: transparent;
+ border: 0;
+ }
+ } // header
-.modal-content {
- margin-top: 2rem;
- margin-bottom: 2rem;
- line-height: 1.5;
- color: rgba(0,0,0,.8);
-}
+ main {
+ font-size: 1rem;
+ margin-top: 2rem;
+ margin-bottom: 2rem;
+ line-height: 1.5;
+ color: rgba(0,0,0,.8);
+ }
-.modal-btn {
- font-size: .875rem;
- padding-left: 1rem;
- padding-right: 1rem;
- padding-top: .5rem;
- padding-bottom: .5rem;
- background-color: #e6e6e6;
- color: rgba(0,0,0,.8);
- border-radius: .25rem;
- border-style: none;
- border-width: 0;
- cursor: pointer;
- -webkit-appearance: button;
- text-transform: none;
- overflow: visible;
- line-height: 1.15;
- margin: 5px;
- will-change: transform;
- -moz-osx-font-smoothing: grayscale;
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden;
- transform: translateZ(0);
- transition: transform .25s ease-out;
-}
+ footer {
+ display: flex;
+ justify-content: space-around;
+ } // footer
-.modal-btn:focus, .modal-btn:hover {
- transform: scale(1.05);
-}
+ .modal-btn {
+ font-size: .875rem;
+ padding-left: 1rem;
+ padding-right: 1rem;
+ padding-top: .5rem;
+ padding-bottom: .5rem;
+ background-color: #e6e6e6;
+ color: rgba(0,0,0,.8);
+ border: 2px solid transparent;
+ border-radius: 4px;
+ cursor: pointer;
+ text-transform: none;
+ overflow: visible;
+ margin: 5px;
+ transform: translateZ(0);
+ transition: border-color .25s var(--anim-easing),
+ background-color .25s var(--anim-easing);
-.modal-btn-primary {
- background-color: #262f3c;
- color: #fff;
-}
+ &:focus { border-color: #03A9F4;}
+ &:hover { background-color: #ececec; }
+ }
-.modal-footer {
- display: flex;
- justify-content: space-around;
-}
-
-/**************************\
- Demo Animation Style
-\**************************/
-@keyframes mmfadeIn {
- from { opacity: 0; }
- to { opacity: 1; }
-}
-
-@keyframes mmfadeOut {
- from { opacity: 1; }
- to { opacity: 0; }
-}
-
-@keyframes mmslideIn {
- from { transform: translateY(15%); }
- to { transform: translateY(0); }
-}
-
-@keyframes mmslideOut {
- from { transform: translateY(0); }
- to { transform: translateY(-10%); }
-}
-
-.micromodal-slide {
- display: none;
-}
-
-.micromodal-slide.is-open {
- display: block;
-}
-
-.micromodal-slide[aria-hidden="false"] .modal-overlay {
- animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1);
-}
-
-.micromodal-slide[aria-hidden="false"] .modal-container,
-.micromodal-slide[aria-hidden="false"] .partial-modal-container {
- animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1);
-}
-
-.micromodal-slide[aria-hidden="true"] .modal-overlay {
- animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1);
-}
-
-.micromodal-slide[aria-hidden="true"] .modal-container,
-.micromodal-slide[aria-hidden="true"] .partial-modal-container {
- animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1);
-}
-
-.micromodal-slide .modal-container,
-.micromodal-slide .partial-modal-container,
-.micromodal-slide .modal-overlay {
- will-change: transform;
+ .modal-btn-primary {
+ background-color: hsl(215deg, 22%, 19%);
+ color: #fff;
+ &:hover { background-color: hsl(215deg, 22%, 35%) }
+ }
}
.help {
@@ -198,7 +166,7 @@
margin-bottom: 10px;
min-height: 50px;
max-height: 40vh;
- overflow: scroll;
+ overflow: auto;
}
.modal-bash {
@@ -216,34 +184,5 @@
}
.modal-small {
- font-size: 11px;
-}
-
-.partial-modal-overlay {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- background: rgba(0,0,0,0.6);
- display: flex;
- justify-content: center;
- z-index: 999;
-}
-
-.partial-modal-container {
- background-color: #fff;
- margin-top: 1vh;
- padding: 30px 30px 20px 30px;
- max-width: 90vw;
- height: fit-content;
- border-radius: 4px;
- overflow-y: auto;
- box-sizing: border-box;
-}
-
-.partial-modal-header {
- display: flex;
- justify-content: center;
- align-items: center;
+ font-size: 0.75rem;
}
diff --git a/ui/src/frontend/flamegraph_panel.ts b/ui/src/frontend/flamegraph_panel.ts
index 866ed87..774211c 100644
--- a/ui/src/frontend/flamegraph_panel.ts
+++ b/ui/src/frontend/flamegraph_panel.ts
@@ -29,7 +29,7 @@
import {PerfettoMouseEvent} from './events';
import {Flamegraph, NodeRendering} from './flamegraph';
import {globals} from './globals';
-import {showPartialModal} from './modal';
+import {Modal, ModalDefinition} from './modal';
import {Panel, PanelSize} from './panel';
import {debounce} from './rate_limiters';
import {Router} from './router';
@@ -169,36 +169,30 @@
}
- private maybeShowModal(graphIncomplete?: boolean): m.Vnode|undefined {
+ private maybeShowModal(graphIncomplete?: boolean) {
if (!graphIncomplete || globals.state.flamegraphModalDismissed) {
return undefined;
}
- return showPartialModal({
+ return m(Modal, {
title: 'The flamegraph is incomplete',
- content:
- m('div',
- m('div',
- 'The current trace does not have a fully formed flamegraph.')),
+ vAlign: 'TOP',
+ content: m('div',
+ 'The current trace does not have a fully formed flamegraph'),
buttons: [
{
text: 'Show the errors',
primary: true,
- id: 'incomplete_graph_show',
- action: () => {
- Router.navigate('#!/info');
- }
+ action: () => Router.navigate('#!/info'),
},
{
text: 'Skip',
- primary: false,
- id: 'incomplete_graph_skip',
action: () => {
globals.dispatch(Actions.dismissFlamegraphModal({}));
globals.rafScheduler.scheduleFullRedraw();
- }
- }
+ },
+ },
],
- });
+ } as ModalDefinition);
}
private getTitle(): string {
diff --git a/ui/src/frontend/help_modal.ts b/ui/src/frontend/help_modal.ts
index eac16aa..5bc95f0 100644
--- a/ui/src/frontend/help_modal.ts
+++ b/ui/src/frontend/help_modal.ts
@@ -16,17 +16,11 @@
import * as m from 'mithril';
import {globals} from './globals';
-import {hideModel, showModal} from './modal';
-
-let helpModelOpen = false;
+import {showModal} from './modal';
export function toggleHelp() {
- if (helpModelOpen) {
- hideHelp();
- } else {
- globals.logging.logEvent('User Actions', 'Show help');
- showHelp();
- }
+ globals.logging.logEvent('User Actions', 'Show help');
+ showHelp();
}
function keycap(key: string) {
@@ -34,7 +28,6 @@
}
function showHelp() {
- helpModelOpen = true;
showModal({
title: 'Perfetto Help',
content: m(
@@ -97,13 +90,5 @@
m('tr', m('td', keycap('?')), m('td', 'Show help')),
)),
buttons: [],
- }).finally(() => {
- helpModelOpen = false;
});
}
-
-function hideHelp() {
- if (helpModelOpen) {
- hideModel();
- }
-}
diff --git a/ui/src/frontend/legacy_trace_viewer.ts b/ui/src/frontend/legacy_trace_viewer.ts
index 122a618..abb7a85 100644
--- a/ui/src/frontend/legacy_trace_viewer.ts
+++ b/ui/src/frontend/legacy_trace_viewer.ts
@@ -149,7 +149,6 @@
buttons: [{
text: 'Open legacy UI',
primary: true,
- id: 'open_legacy',
action: () => openBufferWithLegacyTraceViewer(name, data, size),
}],
});
diff --git a/ui/src/frontend/modal.ts b/ui/src/frontend/modal.ts
index 40badd9..f1341ff 100644
--- a/ui/src/frontend/modal.ts
+++ b/ui/src/frontend/modal.ts
@@ -12,85 +12,274 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-import * as MicroModal from 'micromodal';
+
+// This module deals with modal dialogs. Unlike most components, here we want to
+// render the DOM elements outside of the corresponding vdom tree. For instance
+// we might want to instantiate a modal dialog all the way down from a nested
+// Mithril sub-component, but we want the result dom element to be nested under
+// the root <body>.
+//
+// This is achieved by splitting:
+// 1. ModalContainer: it's the placeholder (e.g., the thing that should be added
+// under <body>) where the DOM elements will be rendered into. This is NOT
+// a mithril component itself.
+// 2. Modal: is the Mithril component with the actual VDOM->DOM handling.
+// This can be used directly in the cases where the modal DOM should be
+// placed presicely where the corresponding Mithril VDOM is.
+// In turn this is split into Modal and ModalImpl, to deal with fade-out, see
+// comments around onbeforeremove.
+
+// Usage (in the case of DOM not matching VDOM):
+// - Create a ModalContainer instance somewhere (e.g. a singleton for the case
+// of the full-screen modal dialog).
+// - In the view() method of the component that should host the DOM elements
+// (e.g. in the root pages.ts) do the following:
+// view() {
+// return m('main',
+// m('h2', ...)
+// modalContainerInstance.render();
+// }
+//
+// - In the view() method of the nested component that wants to show the modal
+// dialog do the following:
+// view() {
+// if (shouldShowModalDialog) {
+// modalContainerInstance.update({title: 'Foo', content, buttons: ...});
+// }
+// return m('.nested-widget',
+// m('div', ...));
+// }
+//
+// For one-show use-cases it's still possible to just use:
+// showModal({title: 'Foo', content, buttons: ...});
+
import * as m from 'mithril';
+import {defer} from '../base/deferred';
+import {assertExists, assertTrue} from '../base/logging';
+import {globals} from './globals';
-// We need any here so we can accept vnodes with arbitrary attrs.
-// tslint:disable-next-line:no-any
-export type AnyAttrsVnode = m.Vnode<any, {}>;
+type AnyAttrsVnode = m.Vnode<unknown, {}>;
-interface ModalDefinition {
+export interface ModalDefinition {
title: string;
content: AnyAttrsVnode;
- buttons: Button[];
+ vAlign?: 'MIDDLE' /* default */ | 'TOP';
+ buttons?: Button[];
+ close?: boolean;
+ onClose?: () => void;
}
export interface Button {
text: string;
- primary: boolean;
- id: string;
- action: () => void;
+ primary?: boolean;
+ id?: string;
+ action?: () => void;
}
-// We need to create a div outside of the mithril's render root (<main>), that's
-// why the manual DOM manipulation.
-function getOrCreateDOM() {
- let div = document.getElementById('main-modal') as HTMLElement;
- if (div) return div;
- div = document.createElement('div');
- div.id = 'main-modal';
- div.classList.add('modal');
- div.classList.add('micromodal-slide');
- (div as {} as {ariaHidden: boolean}).ariaHidden = true;
- document.body.appendChild(div);
- MicroModal.init();
- return div;
+// The component that handles the actual modal dialog. Note that this uses
+// position: absolute, so the modal dialog will be relative to the surrounding
+// DOM.
+// We need to split this into two components (Modal and ModalImpl) so that we
+// can handle the fade-out animation via onbeforeremove. The problem here is
+// that onbeforeremove is emitted only when the *parent* component removes the
+// children from the vdom hierarchy. So we need a parent/child in our control to
+// trigger this.
+export class Modal implements m.ClassComponent<ModalDefinition> {
+ private requestClose = false;
+
+ close() {
+ // The next view pass will kick-off the modalFadeOut CSS animation by
+ // appending the .modal-hidden CSS class.
+ this.requestClose = true;
+ globals.rafScheduler.scheduleFullRedraw();
+ }
+
+ view(vnode: m.Vnode<ModalDefinition>) {
+ if (this.requestClose || vnode.attrs.close) {
+ return null;
+ }
+
+ return m(ModalImpl, {...vnode.attrs, parent: this} as ModalImplAttrs);
+ }
}
+interface ModalImplAttrs extends ModalDefinition {
+ parent: Modal;
+}
+
+// The component that handles the actual modal dialog. Note that this uses
+// position: absolute, so the modal dialog will be relative to the surrounding
+// DOM.
+class ModalImpl implements m.ClassComponent<ModalImplAttrs> {
+ private parent ?: Modal;
+ private onClose?: () => void;
+
+ view({attrs}: m.Vnode<ModalImplAttrs>) {
+ this.onClose = attrs.onClose;
+ this.parent = attrs.parent;
+
+ const buttons: Array<m.Vnode<Button>> = [];
+ for (const button of attrs.buttons || []) {
+ buttons.push(m('button.modal-btn', {
+ class: button.primary ? 'modal-btn-primary' : '',
+ id: button.id,
+ onclick: () => {
+ attrs.parent.close();
+ if (button.action !== undefined) button.action();
+ },
+ },
+ button.text));
+ }
+
+ const aria = '[aria-labelledby=mm-title][aria-model][role=dialog]';
+ const align = attrs.vAlign === 'TOP' ? '.modal-dialog-valign-top' : '';
+ return m(
+ '.modal-backdrop',
+ {
+ onclick: this.onclick.bind(this),
+ onkeyup: this.onkeyupdown.bind(this),
+ onkeydown: this.onkeyupdown.bind(this),
+ // onanimationend: this.onanimationend.bind(this),
+ tabIndex: 0,
+ },
+ m(
+ `.modal-dialog${align}${aria}`,
+ m(
+ 'header',
+ m('h2', {id: 'mm-title'}, attrs.title),
+ m(
+ 'button[aria-label=Close Modal]',
+ {onclick: () => attrs.parent.close()},
+ m.trust('✕'),
+ ),
+ ),
+ m('main', attrs.content),
+ m('footer', buttons),
+ ));
+ }
+
+ oncreate(vnode: m.VnodeDOM<ModalImplAttrs>) {
+ if (vnode.dom instanceof HTMLElement) {
+ // Focus the newly created dialog, so that we react to Escape keydown
+ // even if the user has not clicked yet on any element.
+ // If there is a primary button, focus that, so Enter does the default
+ // action. If not just focus the whole dialog.
+ const primaryBtn = vnode.dom.querySelector('.modal-btn-primary');
+ if (primaryBtn) {
+ (primaryBtn as HTMLElement).focus();
+ } else {
+ vnode.dom.focus();
+ }
+ // If the modal dialog is instantiated in a tall scrollable container,
+ // make sure to scroll it into the view.
+ vnode.dom.scrollIntoView({'block': 'center'});
+ }
+ }
+
+
+ onbeforeremove(vnode: m.VnodeDOM<ModalImplAttrs>) {
+ const removePromise = defer<void>();
+ vnode.dom.addEventListener('animationend', () => removePromise.resolve());
+ vnode.dom.classList.add('modal-fadeout');
+
+ // Retuning `removePromise` will cause Mithril to defer the actual component
+ // removal until the fade-out animation is done.
+ return removePromise;
+ }
+
+ onremove() {
+ if (this.onClose !== undefined) {
+ this.onClose();
+ globals.rafScheduler.scheduleFullRedraw();
+ }
+ }
+
+ onclick(e: MouseEvent) {
+ e.stopPropagation();
+ // Only react when clicking on the backdrop. Don't close if the user clicks
+ // on the dialog itself.
+ const t = e.target;
+ if (t instanceof Element && t.classList.contains('modal-backdrop')) {
+ assertExists(this.parent).close();
+ }
+ }
+
+ onkeyupdown(e: KeyboardEvent) {
+ e.stopPropagation();
+ if (e.key === 'Escape' && e.type !== 'keyup') {
+ assertExists(this.parent).close();
+ }
+ }
+}
+
+// This is deliberately NOT a Mithril component. We want to manage the lifetime
+// independently (outside of Mithril), so we can render from outside the current
+// vdom sub-tree. ModalContainer instances should be singletons / globals.
+export class ModalContainer {
+ private attrs?: ModalDefinition;
+ private generation = 1; // Start with a generation > `closeGeneration`.
+ private closeGeneration = 0;
+
+
+ // This should be called to show a new modal dialog. The modal dialog will
+ // be shown the next time something calls render() in a Mithril draw pass.
+ // This enforces the creation of a new dialog.
+ createNew(attrs: ModalDefinition) {
+ this.generation++;
+ this.updateVdom(attrs);
+ }
+
+ // Updates the current dialog or creates a new one if not existing. If a
+ // dialog exists already, this will update the DOM of the existing dialog.
+ // This should be called in at view() time by a nested Mithril component which
+ // wants to display a modal dialog (but wants it to render outside).
+ updateVdom(attrs: ModalDefinition) {
+ this.attrs = attrs;
+ }
+
+ close() {
+ this.closeGeneration = this.generation;
+ globals.rafScheduler.scheduleFullRedraw();
+ }
+
+ // This method should be called in the view() method of the Mithril component
+ // that will host the DOM elements. For instance, in the case of the
+ // full-screen dialog, that is `fullscreenModal` used by pages.ts.
+ // e.g.: view() {
+ // return m('main',
+ // ...,
+ // modalContainerInstance.render(),
+ // );
+ // }
+ render() {
+ if (this.attrs === undefined) return null;
+
+ // Here we return an array so that Mithril's diff engine destroys and
+ // recreates the component when the generation changes, rather than updating
+ // the same component. `key` works only when returning arrays.
+ return [m(Modal, {
+ ...this.attrs,
+ close: this.closeGeneration === this.generation ? true : this.attrs.close,
+ key: this.generation,
+ })];
+ }
+}
+
+// This is the default instance used for full-screen modal dialogs.
+// page.ts calls `fullscreenModalContainer.render()` in its view() pass.
+export const fullscreenModalContainer = new ModalContainer();
+
+
export async function showModal(attrs: ModalDefinition): Promise<void> {
- const modal = getOrCreateDOM();
- m.render(
- modal,
- m('.modal-overlay[data-micromodal-close]',
- {tabindex: -1},
- m('.modal-container[aria-labelledby=mm-title][aria-model][role=dialog]',
- m('header.modal-header',
- m('h2.modal-title', {id: 'mm-title'}, attrs.title),
- m('button.modal-close[aria-label=Close Modal]' +
- '[data-micromodal-close]')),
- m('main.modal-content', attrs.content),
- m('footer.modal-footer', ...makeButtons(attrs.buttons)))));
- return new Promise(resolve => {
- MicroModal.show(
- 'main-modal', {onClose: () => resolve(), awaitCloseAnimation: true});
+ // When using showModal, the caller cannot pass an onClose promise. It should
+ // use the returned promised instead. onClose is only for clients using the
+ // Mithril component directly.
+ assertTrue(attrs.onClose === undefined);
+ const promise = defer<void>();
+ fullscreenModalContainer.createNew({
+ ...attrs,
+ onClose: () => promise.resolve(),
});
-}
-
-export function hideModel() {
- MicroModal.close();
-}
-
-function makeButtons(buttonDefinition: Button[]): Array<m.Vnode<Button>> {
- const buttons: Array<m.Vnode<Button>> = [];
- buttonDefinition.forEach(button => {
- buttons.push(
- m('button[data-micromodal-close].modal-btn',
- {
- class: button.primary ? 'modal-btn-primary' : '',
- id: button.id,
- onclick: button.action
- },
- button.text));
- });
- return buttons;
-}
-
-export function showPartialModal(attrs: ModalDefinition): m.Vnode {
- return m(
- '.partial-modal-overlay',
- {tabindex: -1},
- m('.partial-modal-container',
- m('header.partial-modal-header', m('h2.modal-title', attrs.title)),
- m('main.modal-content', attrs.content),
- m('footer.modal-footer', ...makeButtons(attrs.buttons))));
+ globals.rafScheduler.scheduleFullRedraw();
+ return promise;
}
diff --git a/ui/src/frontend/pages.ts b/ui/src/frontend/pages.ts
index 6d5448b..355eb5f 100644
--- a/ui/src/frontend/pages.ts
+++ b/ui/src/frontend/pages.ts
@@ -19,6 +19,7 @@
import {onClickCopy} from './clipboard';
import {CookieConsent} from './cookie_consent';
import {globals} from './globals';
+import {fullscreenModalContainer} from './modal';
import {Sidebar} from './sidebar';
import {Topbar} from './topbar';
@@ -57,6 +58,7 @@
m(Alerts),
m(component, attrs),
m(CookieConsent),
+ fullscreenModalContainer.render(),
];
if (globals.state.perfDebug) {
children.push(m('.perf-stats'));
diff --git a/ui/src/frontend/post_message_handler.ts b/ui/src/frontend/post_message_handler.ts
index 8b7ab34..f821aed 100644
--- a/ui/src/frontend/post_message_handler.ts
+++ b/ui/src/frontend/post_message_handler.ts
@@ -124,8 +124,8 @@
m('div', `${messageEvent.origin} is trying to open a trace file.`),
m('div', 'Do you trust the origin and want to proceed?')),
buttons: [
- {text: 'NO', primary: true, id: 'pm_reject_trace', action: () => {}},
- {text: 'YES', primary: false, id: 'pm_open_trace', action: openTrace},
+ {text: 'NO', primary: true},
+ {text: 'YES', primary: false, action: openTrace},
],
});
}
diff --git a/ui/src/frontend/rpc_http_dialog.ts b/ui/src/frontend/rpc_http_dialog.ts
index 30a25b3..37bca61 100644
--- a/ui/src/frontend/rpc_http_dialog.ts
+++ b/ui/src/frontend/rpc_http_dialog.ts
@@ -108,7 +108,6 @@
{
text: 'Use builtin Wasm',
primary: true,
- id: 'tp_old_wasm',
action: () => {
globals.dispatch(
Actions.setNewEngineMode({mode: 'FORCE_BUILTIN_WASM'}));
@@ -117,7 +116,6 @@
{
text: 'Use old version regardless (might crash)',
primary: false,
- id: 'tp_old_cont',
action: () => {
forceUseOldVersion = true;
}
@@ -136,21 +134,15 @@
{
text: 'YES, use loaded trace',
primary: true,
- id: 'rpc_load',
action: () => {
globals.dispatch(Actions.openTraceFromHttpRpc({}));
}
},
{
text: 'YES, but reset state',
- primary: false,
- id: 'rpc_reset',
- action: () => {}
},
{
text: 'NO, Use builtin Wasm',
- primary: false,
- id: 'rpc_force_wasm',
action: () => {
globals.dispatch(
Actions.setNewEngineMode({mode: 'FORCE_BUILTIN_WASM'}));
diff --git a/ui/src/frontend/sidebar.ts b/ui/src/frontend/sidebar.ts
index ccd4758..50cea8d 100644
--- a/ui/src/frontend/sidebar.ts
+++ b/ui/src/frontend/sidebar.ts
@@ -489,29 +489,17 @@
buttons: [
{
text: 'Open full trace (not recommended)',
- primary: false,
- id: 'open',
- action: () => {
- convertToJson(trace);
- }
+ action: () => convertToJson(trace),
},
{
text: 'Open beginning of trace',
- primary: true,
- id: 'truncate-start',
- action: () => {
- convertToJson(trace, /*truncate*/ 'start');
- }
+ action: () => convertToJson(trace, /*truncate*/ 'start'),
},
{
text: 'Open end of trace',
primary: true,
- id: 'truncate-end',
- action: () => {
- convertToJson(trace, /*truncate*/ 'end');
- }
- }
-
+ action: () => convertToJson(trace, /*truncate*/ 'end'),
+ },
]
});
return;
@@ -568,7 +556,6 @@
showModal({
title: 'Cannot create permalink from external trace',
content: m('div', msg),
- buttons: []
});
return;
}
@@ -721,18 +708,12 @@
{
text: 'Disable and reload',
primary: true,
- id: 'sw-bypass-enable',
action: () => {
globals.serviceWorkerController.setBypass(true).then(
() => location.reload());
}
},
- {
- text: 'Cancel',
- primary: false,
- id: 'sw-bypass-cancel',
- action: () => {}
- }
+ {text: 'Cancel'},
]
});
};
diff --git a/ui/src/frontend/trace_url_handler.ts b/ui/src/frontend/trace_url_handler.ts
index 690d743..9315104 100644
--- a/ui/src/frontend/trace_url_handler.ts
+++ b/ui/src/frontend/trace_url_handler.ts
@@ -140,7 +140,6 @@
'for too long, or if you just mis-pasted the URL.'),
m('pre', `Trace UUID: ${traceUuid}`),
),
- buttons: [],
});
navigateToOldTraceUuid();
return;
@@ -178,14 +177,14 @@
buttons: [
{
text: 'Continue',
+ id: 'trace_id_open', // Used by tests.
primary: true,
- id: 'trace_id_open',
action: () => {
hasOpenedNewTrace = true;
globals.dispatch(Actions.openTraceFromBuffer(maybeTrace));
}
},
- {text: 'Cancel', primary: false, id: 'trace_id_cancel', action: () => {}},
+ {text: 'Cancel'},
],
});