diff --git a/tools/winscope/.babelrc b/tools/winscope/.babelrc deleted file mode 100644 index cedf24f1a..000000000 --- a/tools/winscope/.babelrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "presets": [ - "@babel/preset-env" - ] -} \ No newline at end of file diff --git a/tools/winscope/.eslintrc.json b/tools/winscope/.eslintrc.json deleted file mode 100644 index b5271d119..000000000 --- a/tools/winscope/.eslintrc.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "env": { - "browser": true, - "es6": true - }, - "extends": [ - "plugin:vue/essential", - "google" - ], - "globals": { - "Atomics": "readonly", - "SharedArrayBuffer": "readonly" - }, - "parserOptions": { - "ecmaVersion": 11, - "sourceType": "module" - }, - "plugins": [ - "vue" - ], - "rules": { - "require-jsdoc": [ - "error", - { - "require": { - "FunctionDeclaration": false, - "MethodDefinition": false, - "ClassDeclaration": false, - "ArrowFunctionExpression": false, - "FunctionExpression": false - } - } - ] - } -} \ No newline at end of file diff --git a/tools/winscope/.gitignore b/tools/winscope/.gitignore deleted file mode 100644 index 75eede8a0..000000000 --- a/tools/winscope/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -node_modules/ -adb_proxy/venv/ -.vscode/ -dist/ -kotlin_build/ -yarn-error.log -kotlin_build/ -.eslintcache diff --git a/tools/winscope/OWNERS b/tools/winscope/OWNERS deleted file mode 100644 index 9cb826f69..000000000 --- a/tools/winscope/OWNERS +++ /dev/null @@ -1,5 +0,0 @@ -natanieljr@google.com -pablogamito@google.com -keanmariotti@google.com -jjaggi@google.com -roosa@google.com diff --git a/tools/winscope/README.md b/tools/winscope/README.md deleted file mode 100644 index f34c0224d..000000000 --- a/tools/winscope/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# Tool for visualizing window manager traces - -## Developing WinScope -When the trace is enabled, Window Manager and Surface Flinger capture and -save current state to a file at each point of interest. -`frameworks/base/core/proto/android/server/windowmanagertrace.proto` -and `frameworks/native/services/surfaceflinger/layerproto/layerstrace.proto` -contain the proto definitions for their internal states. - -### Checking out code and setting up environment -* Install [Yarn](https://yarnpkg.com), a JS package manager -* [Download Android source](https://source.android.com/setup/build/downloading) -* Navigate to `development/tools/winscope` -* Run `yarn install` - -### Building & testing changes -* Navigate to `development/tools/winscope` -* Run `yarn run dev` - -### Update IntDefMapping -* Build `framework-minus-apex-intdefs` module and a preprocessor will -generate the latest IntDefMapping. From the `ANDROID_ROOT` run: -``` -. build/envsetup.sh -m framework-minus-apex-intdefs -``` - -* Copy the generated `intDefMapping.json` files to the `prebuilts` repo. -``` -python3 -c 'import sys,json,collections; print(json.dumps(collections.OrderedDict(sorted(collections.ChainMap(*map(lambda x:json.load(open(x)), sys.argv[1:])).items())), indent=2))' $(find out/soong/.intermediates/frameworks/base -iname intDefMapping.json) > ./prebuilts/misc/common/winscope/intDefMapping.json -``` - -* Upload the changes. -``` -cd ./prebuilts/misc/common/winscope -repo start intdef-update -git commit -am "Update intdef mapping" "Test: N/A" -repo upload --cbr . -``` - -### Building with internal extensions -Internal paths in vendor/ which are not available in AOSP must be replaced by -stub files. See getWaylandSafePath for an example diff --git a/tools/winscope/adb_proxy/winscope_proxy.py b/tools/winscope/adb_proxy/winscope_proxy.py deleted file mode 100755 index 13b3c3c52..000000000 --- a/tools/winscope/adb_proxy/winscope_proxy.py +++ /dev/null @@ -1,867 +0,0 @@ -#!/usr/bin/python3 - -# Copyright (C) 2019 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# -# This is an ADB proxy for Winscope. -# -# Requirements: python3.5 and ADB installed and in system PATH. -# -# Usage: -# run: python3 winscope_proxy.py -# - -import json -import logging -import os -import re -import secrets -import signal -import subprocess -import sys -import threading -import time -from abc import abstractmethod -from enum import Enum -from http import HTTPStatus -from http.server import HTTPServer, BaseHTTPRequestHandler -from tempfile import NamedTemporaryFile -import base64 - -# CONFIG # - -LOG_LEVEL = logging.DEBUG - -PORT = 5544 - -# Keep in sync with WINSCOPE_PROXY_VERSION in Winscope DataAdb.vue -VERSION = '0.8' - -WINSCOPE_VERSION_HEADER = "Winscope-Proxy-Version" -WINSCOPE_TOKEN_HEADER = "Winscope-Token" - -# Location to save the proxy security token -WINSCOPE_TOKEN_LOCATION = os.path.expanduser('~/.config/winscope/.token') - -# Winscope traces extensions -WINSCOPE_EXT = ".winscope" -WINSCOPE_EXT_LEGACY = ".pb" -WINSCOPE_EXTS = [WINSCOPE_EXT, WINSCOPE_EXT_LEGACY] - -# Winscope traces directory -WINSCOPE_DIR = "/data/misc/wmtrace/" - -# Max interval between the client keep-alive requests in seconds -KEEP_ALIVE_INTERVAL_S = 5 - -logging.basicConfig(stream=sys.stderr, level=LOG_LEVEL, - format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') -log = logging.getLogger("ADBProxy") - - -class File: - def __init__(self, file, filetype) -> None: - self.file = file - self.type = filetype - - def get_filepaths(self, device_id): - return [self.file] - - def get_filetype(self): - return self.type - - -class FileMatcher: - def __init__(self, path, matcher, filetype) -> None: - self.path = path - self.matcher = matcher - self.type = filetype - - def get_filepaths(self, device_id): - matchingFiles = call_adb( - f"shell su root find {self.path} -name {self.matcher}", device_id) - - log.debug("Found file %s", matchingFiles.split('\n')[:-1]) - return matchingFiles.split('\n')[:-1] - - def get_filetype(self): - return self.type - - -class WinscopeFileMatcher(FileMatcher): - def __init__(self, path, matcher, filetype) -> None: - self.path = path - self.internal_matchers = list(map(lambda ext: FileMatcher(path, f'{matcher}{ext}', filetype), - WINSCOPE_EXTS)) - self.type = filetype - - def get_filepaths(self, device_id): - for matcher in self.internal_matchers: - files = matcher.get_filepaths(device_id) - if len(files) > 0: - return files - log.debug("No files found") - return [] - - -class TraceTarget: - """Defines a single parameter to trace. - - Attributes: - file_matchers: the matchers used to identify the paths on the device the trace results are saved to. - trace_start: command to start the trace from adb shell, must not block. - trace_stop: command to stop the trace, should block until the trace is stopped. - """ - - def __init__(self, files, trace_start: str, trace_stop: str) -> None: - if type(files) is not list: - files = [files] - self.files = files - self.trace_start = trace_start - self.trace_stop = trace_stop - -# Order of files matters as they will be expected in that order and decoded in that order -TRACE_TARGETS = { - "window_trace": TraceTarget( - WinscopeFileMatcher(WINSCOPE_DIR, "wm_trace", "window_trace"), - 'su root cmd window tracing start\necho "WM trace started."', - 'su root cmd window tracing stop >/dev/null 2>&1' - ), - "accessibility_trace": TraceTarget( - WinscopeFileMatcher("/data/misc/a11ytrace", "a11y_trace", "accessibility_trace"), - 'su root cmd accessibility start-trace\necho "Accessibility trace started."', - 'su root cmd accessibility stop-trace >/dev/null 2>&1' - ), - "layers_trace": TraceTarget( - WinscopeFileMatcher(WINSCOPE_DIR, "layers_trace", "layers_trace"), - 'su root service call SurfaceFlinger 1025 i32 1\necho "SF trace started."', - 'su root service call SurfaceFlinger 1025 i32 0 >/dev/null 2>&1' - ), - "screen_recording": TraceTarget( - File(f'/data/local/tmp/screen.mp4', "screen_recording"), - f'screenrecord --bit-rate 8M /data/local/tmp/screen.mp4 >/dev/null 2>&1 &\necho "ScreenRecorder started."', - 'pkill -l SIGINT screenrecord >/dev/null 2>&1' - ), - "transactions": TraceTarget( - WinscopeFileMatcher(WINSCOPE_DIR, "transactions_trace", "transactions"), - 'su root service call SurfaceFlinger 1041 i32 1\necho "SF transactions recording started."', - 'su root service call SurfaceFlinger 1041 i32 0 >/dev/null 2>&1' - ), - "transactions_legacy": TraceTarget( - [ - WinscopeFileMatcher(WINSCOPE_DIR, "transaction_trace", "transactions_legacy"), - FileMatcher(WINSCOPE_DIR, f'transaction_merges_*', "transaction_merges"), - ], - 'su root service call SurfaceFlinger 1020 i32 1\necho "SF transactions recording started."', - 'su root service call SurfaceFlinger 1020 i32 0 >/dev/null 2>&1' - ), - "proto_log": TraceTarget( - WinscopeFileMatcher(WINSCOPE_DIR, "wm_log", "proto_log"), - 'su root cmd window logging start\necho "WM logging started."', - 'su root cmd window logging stop >/dev/null 2>&1' - ), - "ime_trace_clients": TraceTarget( - WinscopeFileMatcher(WINSCOPE_DIR, "ime_trace_clients", "ime_trace_clients"), - 'su root ime tracing start\necho "Clients IME trace started."', - 'su root ime tracing stop >/dev/null 2>&1' - ), - "ime_trace_service": TraceTarget( - WinscopeFileMatcher(WINSCOPE_DIR, "ime_trace_service", "ime_trace_service"), - 'su root ime tracing start\necho "Service IME trace started."', - 'su root ime tracing stop >/dev/null 2>&1' - ), - "ime_trace_managerservice": TraceTarget( - WinscopeFileMatcher(WINSCOPE_DIR, "ime_trace_managerservice", "ime_trace_managerservice"), - 'su root ime tracing start\necho "ManagerService IME trace started."', - 'su root ime tracing stop >/dev/null 2>&1' - ), - "wayland_trace": TraceTarget( - WinscopeFileMatcher("/data/misc/wltrace", "wl_trace", "wl_trace"), - 'su root service call Wayland 26 i32 1 >/dev/null\necho "Wayland trace started."', - 'su root service call Wayland 26 i32 0 >/dev/null' - ), -} - - -class SurfaceFlingerTraceConfig: - """Handles optional configuration for surfaceflinger traces. - """ - - def __init__(self) -> None: - # default config flags CRITICAL | INPUT | SYNC - self.flags = 1 << 0 | 1 << 1 | 1 << 6 - - def add(self, config: str) -> None: - self.flags |= CONFIG_FLAG[config] - - def is_valid(self, config: str) -> bool: - return config in CONFIG_FLAG - - def command(self) -> str: - return f'su root service call SurfaceFlinger 1033 i32 {self.flags}' - -class SurfaceFlingerTraceSelectedConfig: - """Handles optional selected configuration for surfaceflinger traces. - """ - - def __init__(self) -> None: - # defaults set for all configs - self.selectedConfigs = { - "sfbuffersize": "16000" - } - - def add(self, configType, configValue) -> None: - self.selectedConfigs[configType] = configValue - - def is_valid(self, configType) -> bool: - return configType in CONFIG_SF_SELECTION - - def setBufferSize(self) -> str: - return f'su root service call SurfaceFlinger 1029 i32 {self.selectedConfigs["sfbuffersize"]}' - -class WindowManagerTraceSelectedConfig: - """Handles optional selected configuration for windowmanager traces. - """ - - def __init__(self) -> None: - # defaults set for all configs - self.selectedConfigs = { - "wmbuffersize": "16000", - "tracinglevel": "debug", - "tracingtype": "frame", - } - - def add(self, configType, configValue) -> None: - self.selectedConfigs[configType] = configValue - - def is_valid(self, configType) -> bool: - return configType in CONFIG_WM_SELECTION - - def setBufferSize(self) -> str: - return f'su root cmd window tracing size {self.selectedConfigs["wmbuffersize"]}' - - def setTracingLevel(self) -> str: - return f'su root cmd window tracing level {self.selectedConfigs["tracinglevel"]}' - - def setTracingType(self) -> str: - return f'su root cmd window tracing {self.selectedConfigs["tracingtype"]}' - - -CONFIG_FLAG = { - "composition": 1 << 2, - "metadata": 1 << 3, - "hwc": 1 << 4, - "tracebuffers": 1 << 5 -} - -#Keep up to date with options in DataAdb.vue -CONFIG_SF_SELECTION = [ - "sfbuffersize", -] - -#Keep up to date with options in DataAdb.vue -CONFIG_WM_SELECTION = [ - "wmbuffersize", - "tracingtype", - "tracinglevel", -] - -class DumpTarget: - """Defines a single parameter to trace. - - Attributes: - file: the path on the device the dump results are saved to. - dump_command: command to dump state to file. - """ - - def __init__(self, files, dump_command: str) -> None: - if type(files) is not list: - files = [files] - self.files = files - self.dump_command = dump_command - - -DUMP_TARGETS = { - "window_dump": DumpTarget( - File(f'/data/local/tmp/wm_dump{WINSCOPE_EXT}', "window_dump"), - f'su root dumpsys window --proto > /data/local/tmp/wm_dump{WINSCOPE_EXT}' - ), - "layers_dump": DumpTarget( - File(f'/data/local/tmp/sf_dump{WINSCOPE_EXT}', "layers_dump"), - f'su root dumpsys SurfaceFlinger --proto > /data/local/tmp/sf_dump{WINSCOPE_EXT}' - ) -} - - -# END OF CONFIG # - - -def get_token() -> str: - """Returns saved proxy security token or creates new one""" - try: - with open(WINSCOPE_TOKEN_LOCATION, 'r') as token_file: - token = token_file.readline() - log.debug("Loaded token {} from {}".format( - token, WINSCOPE_TOKEN_LOCATION)) - return token - except IOError: - token = secrets.token_hex(32) - os.makedirs(os.path.dirname(WINSCOPE_TOKEN_LOCATION), exist_ok=True) - try: - with open(WINSCOPE_TOKEN_LOCATION, 'w') as token_file: - log.debug("Created and saved token {} to {}".format( - token, WINSCOPE_TOKEN_LOCATION)) - token_file.write(token) - os.chmod(WINSCOPE_TOKEN_LOCATION, 0o600) - except IOError: - log.error("Unable to save persistent token {} to {}".format( - token, WINSCOPE_TOKEN_LOCATION)) - return token - - -secret_token = get_token() - - -class RequestType(Enum): - GET = 1 - POST = 2 - HEAD = 3 - - -def add_standard_headers(server): - server.send_header('Cache-Control', 'no-cache, no-store, must-revalidate') - server.send_header('Access-Control-Allow-Origin', '*') - server.send_header('Access-Control-Allow-Methods', 'POST, GET, OPTIONS') - server.send_header('Access-Control-Allow-Headers', - WINSCOPE_TOKEN_HEADER + ', Content-Type, Content-Length') - server.send_header('Access-Control-Expose-Headers', - 'Winscope-Proxy-Version') - server.send_header(WINSCOPE_VERSION_HEADER, VERSION) - server.end_headers() - - -class RequestEndpoint: - """Request endpoint to use with the RequestRouter.""" - - @abstractmethod - def process(self, server, path): - pass - - -class AdbError(Exception): - """Unsuccessful ADB operation""" - pass - - -class BadRequest(Exception): - """Invalid client request""" - pass - - -class RequestRouter: - """Handles HTTP request authentication and routing""" - - def __init__(self, handler): - self.request = handler - self.endpoints = {} - - def register_endpoint(self, method: RequestType, name: str, endpoint: RequestEndpoint): - self.endpoints[(method, name)] = endpoint - - def __bad_request(self, error: str): - log.warning("Bad request: " + error) - self.request.respond(HTTPStatus.BAD_REQUEST, b"Bad request!\nThis is Winscope ADB proxy.\n\n" - + error.encode("utf-8"), 'text/txt') - - def __internal_error(self, error: str): - log.error("Internal error: " + error) - self.request.respond(HTTPStatus.INTERNAL_SERVER_ERROR, - error.encode("utf-8"), 'text/txt') - - def __bad_token(self): - log.info("Bad token") - self.request.respond(HTTPStatus.FORBIDDEN, b"Bad Winscope authorisation token!\nThis is Winscope ADB proxy.\n", - 'text/txt') - - def process(self, method: RequestType): - token = self.request.headers[WINSCOPE_TOKEN_HEADER] - if not token or token != secret_token: - return self.__bad_token() - path = self.request.path.strip('/').split('/') - if path and len(path) > 0: - endpoint_name = path[0] - try: - return self.endpoints[(method, endpoint_name)].process(self.request, path[1:]) - except KeyError: - return self.__bad_request("Unknown endpoint /{}/".format(endpoint_name)) - except AdbError as ex: - return self.__internal_error(str(ex)) - except BadRequest as ex: - return self.__bad_request(str(ex)) - except Exception as ex: - return self.__internal_error(repr(ex)) - self.__bad_request("No endpoint specified") - - -def call_adb(params: str, device: str = None, stdin: bytes = None): - command = ['adb'] + (['-s', device] if device else []) + params.split(' ') - try: - log.debug("Call: " + ' '.join(command)) - return subprocess.check_output(command, stderr=subprocess.STDOUT, input=stdin).decode('utf-8') - except OSError as ex: - log.debug('Error executing adb command: {}\n{}'.format( - ' '.join(command), repr(ex))) - raise AdbError('Error executing adb command: {}\n{}'.format( - ' '.join(command), repr(ex))) - except subprocess.CalledProcessError as ex: - log.debug('Error executing adb command: {}\n{}'.format( - ' '.join(command), ex.output.decode("utf-8"))) - raise AdbError('Error executing adb command: adb {}\n{}'.format( - params, ex.output.decode("utf-8"))) - - -def call_adb_outfile(params: str, outfile, device: str = None, stdin: bytes = None): - try: - process = subprocess.Popen(['adb'] + (['-s', device] if device else []) + params.split(' '), stdout=outfile, - stderr=subprocess.PIPE) - _, err = process.communicate(stdin) - outfile.seek(0) - if process.returncode != 0: - log.debug('Error executing adb command: adb {}\n'.format(params) + err.decode( - 'utf-8') + '\n' + outfile.read().decode('utf-8')) - raise AdbError('Error executing adb command: adb {}\n'.format(params) + err.decode( - 'utf-8') + '\n' + outfile.read().decode('utf-8')) - except OSError as ex: - log.debug('Error executing adb command: adb {}\n{}'.format( - params, repr(ex))) - raise AdbError( - 'Error executing adb command: adb {}\n{}'.format(params, repr(ex))) - - -class CheckWaylandServiceEndpoint(RequestEndpoint): - _listDevicesEndpoint = None - - def __init__(self, listDevicesEndpoint): - self._listDevicesEndpoint = listDevicesEndpoint - - def process(self, server, path): - self._listDevicesEndpoint.process(server, path) - foundDevices = self._listDevicesEndpoint._foundDevices - - if len(foundDevices) > 1: - res = 'false' - else: - raw_res = call_adb('shell service check Wayland') - res = 'false' if 'not found' in raw_res else 'true' - server.respond(HTTPStatus.OK, res.encode("utf-8"), "text/json") - - -class ListDevicesEndpoint(RequestEndpoint): - ADB_INFO_RE = re.compile("^([A-Za-z0-9.:\\-]+)\\s+(\\w+)(.*model:(\\w+))?") - _foundDevices = None - - def process(self, server, path): - lines = list(filter(None, call_adb('devices -l').split('\n'))) - devices = {m.group(1): { - 'authorised': str(m.group(2)) != 'unauthorized', - 'model': m.group(4).replace('_', ' ') if m.group(4) else '' - } for m in [ListDevicesEndpoint.ADB_INFO_RE.match(d) for d in lines[1:]] if m} - self._foundDevices = devices - j = json.dumps(devices) - log.debug("Detected devices: " + j) - server.respond(HTTPStatus.OK, j.encode("utf-8"), "text/json") - - -class DeviceRequestEndpoint(RequestEndpoint): - def process(self, server, path): - if len(path) > 0 and re.fullmatch("[A-Za-z0-9.:\\-]+", path[0]): - self.process_with_device(server, path[1:], path[0]) - else: - raise BadRequest("Device id not specified") - - @abstractmethod - def process_with_device(self, server, path, device_id): - pass - - def get_request(self, server) -> str: - try: - length = int(server.headers["Content-Length"]) - except KeyError as err: - raise BadRequest("Missing Content-Length header\n" + str(err)) - except ValueError as err: - raise BadRequest("Content length unreadable\n" + str(err)) - return json.loads(server.rfile.read(length).decode("utf-8")) - - -class FetchFilesEndpoint(DeviceRequestEndpoint): - def process_with_device(self, server, path, device_id): - if len(path) != 1: - raise BadRequest("File not specified") - if path[0] in TRACE_TARGETS: - files = TRACE_TARGETS[path[0]].files - elif path[0] in DUMP_TARGETS: - files = DUMP_TARGETS[path[0]].files - else: - raise BadRequest("Unknown file specified") - - file_buffers = dict() - - for f in files: - file_type = f.get_filetype() - file_paths = f.get_filepaths(device_id) - - for file_path in file_paths: - with NamedTemporaryFile() as tmp: - log.debug( - f"Fetching file {file_path} from device to {tmp.name}") - call_adb_outfile('exec-out su root cat ' + - file_path, tmp, device_id) - log.debug(f"Deleting file {file_path} from device") - call_adb('shell su root rm ' + file_path, device_id) - log.debug(f"Uploading file {tmp.name}") - if file_type not in file_buffers: - file_buffers[file_type] = [] - buf = base64.encodebytes(tmp.read()).decode("utf-8") - file_buffers[file_type].append(buf) - - if (len(file_buffers) == 0): - log.error("Proxy didn't find any file to fetch") - - # server.send_header('X-Content-Type-Options', 'nosniff') - # add_standard_headers(server) - j = json.dumps(file_buffers) - server.respond(HTTPStatus.OK, j.encode("utf-8"), "text/json") - - -def check_root(device_id): - log.debug("Checking root access on {}".format(device_id)) - return int(call_adb('shell su root id -u', device_id)) == 0 - - -TRACE_THREADS = {} - - -class TraceThread(threading.Thread): - def __init__(self, device_id, command): - self._keep_alive_timer = None - self.trace_command = command - self._device_id = device_id - self.out = None, - self.err = None, - self._success = False - try: - shell = ['adb', '-s', self._device_id, 'shell'] - log.debug("Starting trace shell {}".format(' '.join(shell))) - self.process = subprocess.Popen(shell, stdout=subprocess.PIPE, - stderr=subprocess.PIPE, stdin=subprocess.PIPE, start_new_session=True) - except OSError as ex: - raise AdbError( - 'Error executing adb command: adb shell\n{}'.format(repr(ex))) - - super().__init__() - - def timeout(self): - if self.is_alive(): - log.warning( - "Keep-alive timeout for trace on {}".format(self._device_id)) - self.end_trace() - if self._device_id in TRACE_THREADS: - TRACE_THREADS.pop(self._device_id) - - def reset_timer(self): - log.debug( - "Resetting keep-alive clock for trace on {}".format(self._device_id)) - if self._keep_alive_timer: - self._keep_alive_timer.cancel() - self._keep_alive_timer = threading.Timer( - KEEP_ALIVE_INTERVAL_S, self.timeout) - self._keep_alive_timer.start() - - def end_trace(self): - if self._keep_alive_timer: - self._keep_alive_timer.cancel() - log.debug("Sending SIGINT to the trace process on {}".format( - self._device_id)) - self.process.send_signal(signal.SIGINT) - try: - log.debug("Waiting for trace shell to exit for {}".format( - self._device_id)) - self.process.wait(timeout=5) - except TimeoutError: - log.debug( - "TIMEOUT - sending SIGKILL to the trace process on {}".format(self._device_id)) - self.process.kill() - self.join() - - def run(self): - log.debug("Trace started on {}".format(self._device_id)) - self.reset_timer() - self.out, self.err = self.process.communicate(self.trace_command) - log.debug("Trace ended on {}, waiting for cleanup".format(self._device_id)) - time.sleep(0.2) - for i in range(50): - if call_adb("shell su root cat /data/local/tmp/winscope_status", device=self._device_id) == 'TRACE_OK\n': - call_adb( - "shell su root rm /data/local/tmp/winscope_status", device=self._device_id) - log.debug("Trace finished successfully on {}".format( - self._device_id)) - self._success = True - break - log.debug("Still waiting for cleanup on {}".format(self._device_id)) - time.sleep(0.1) - - def success(self): - return self._success - - -class StartTrace(DeviceRequestEndpoint): - TRACE_COMMAND = """ -set -e - -echo "Starting trace..." -echo "TRACE_START" > /data/local/tmp/winscope_status - -# Do not print anything to stdout/stderr in the handler -function stop_trace() {{ - trap - EXIT HUP INT - -{} - - echo "TRACE_OK" > /data/local/tmp/winscope_status -}} - -trap stop_trace EXIT HUP INT -echo "Signal handler registered." - -{} - -# ADB shell does not handle hung up well and does not call HUP handler when a child is active in foreground, -# as a workaround we sleep for short intervals in a loop so the handler is called after a sleep interval. -while true; do sleep 0.1; done -""" - - def process_with_device(self, server, path, device_id): - try: - requested_types = self.get_request(server) - requested_traces = [TRACE_TARGETS[t] for t in requested_types] - except KeyError as err: - raise BadRequest("Unsupported trace target\n" + str(err)) - if device_id in TRACE_THREADS: - log.warning("Trace already in progress for {}", device_id) - server.respond(HTTPStatus.OK, b'', "text/plain") - if not check_root(device_id): - raise AdbError( - "Unable to acquire root privileges on the device - check the output of 'adb -s {} shell su root id'".format( - device_id)) - command = StartTrace.TRACE_COMMAND.format( - '\n'.join([t.trace_stop for t in requested_traces]), - '\n'.join([t.trace_start for t in requested_traces])) - log.debug("Trace requested for {} with targets {}".format( - device_id, ','.join(requested_types))) - TRACE_THREADS[device_id] = TraceThread( - device_id, command.encode('utf-8')) - TRACE_THREADS[device_id].start() - server.respond(HTTPStatus.OK, b'', "text/plain") - - -class EndTrace(DeviceRequestEndpoint): - def process_with_device(self, server, path, device_id): - if device_id not in TRACE_THREADS: - raise BadRequest("No trace in progress for {}".format(device_id)) - if TRACE_THREADS[device_id].is_alive(): - TRACE_THREADS[device_id].end_trace() - - success = TRACE_THREADS[device_id].success() - out = TRACE_THREADS[device_id].out + \ - b"\n" + TRACE_THREADS[device_id].err - command = TRACE_THREADS[device_id].trace_command - TRACE_THREADS.pop(device_id) - if success: - server.respond(HTTPStatus.OK, out, "text/plain") - else: - raise AdbError( - "Error tracing the device\n### Output ###\n" + out.decode( - "utf-8") + "\n### Command: adb -s {} shell ###\n### Input ###\n".format(device_id) + command.decode( - "utf-8")) - - -def execute_command(server, device_id, shell, configType, configValue): - process = subprocess.Popen(shell, stdout=subprocess.PIPE, stderr=subprocess.PIPE, - stdin=subprocess.PIPE, start_new_session=True) - log.debug(f"Changing trace config on device {device_id} {configType}:{configValue}") - out, err = process.communicate(configValue.encode('utf-8')) - if process.returncode != 0: - raise AdbError( - f"Error executing command:\n {configValue}\n\n### OUTPUT ###{out.decode('utf-8')}\n{err.decode('utf-8')}") - log.debug(f"Changing trace config finished on device {device_id}") - server.respond(HTTPStatus.OK, b'', "text/plain") - - -class ConfigTrace(DeviceRequestEndpoint): - def process_with_device(self, server, path, device_id): - try: - requested_configs = self.get_request(server) - config = SurfaceFlingerTraceConfig() - for requested_config in requested_configs: - if not config.is_valid(requested_config): - raise BadRequest( - f"Unsupported config {requested_config}\n") - config.add(requested_config) - except KeyError as err: - raise BadRequest("Unsupported trace target\n" + str(err)) - if device_id in TRACE_THREADS: - BadRequest(f"Trace in progress for {device_id}") - if not check_root(device_id): - raise AdbError( - f"Unable to acquire root privileges on the device - check the output of 'adb -s {device_id} shell su root id'") - command = config.command() - shell = ['adb', '-s', device_id, 'shell'] - log.debug(f"Starting shell {' '.join(shell)}") - execute_command(server, device_id, shell, "sf buffer size", command) - - -def add_selected_request_to_config(self, server, device_id, config): - try: - requested_configs = self.get_request(server) - for requested_config in requested_configs: - if config.is_valid(requested_config): - config.add(requested_config, requested_configs[requested_config]) - else: - raise BadRequest( - f"Unsupported config {requested_config}\n") - except KeyError as err: - raise BadRequest("Unsupported trace target\n" + str(err)) - if device_id in TRACE_THREADS: - BadRequest(f"Trace in progress for {device_id}") - if not check_root(device_id): - raise AdbError( - f"Unable to acquire root privileges on the device - check the output of 'adb -s {device_id} shell su root id'") - return config - - -class SurfaceFlingerSelectedConfigTrace(DeviceRequestEndpoint): - def process_with_device(self, server, path, device_id): - config = SurfaceFlingerTraceSelectedConfig() - config = add_selected_request_to_config(self, server, device_id, config) - setBufferSize = config.setBufferSize() - shell = ['adb', '-s', device_id, 'shell'] - log.debug(f"Starting shell {' '.join(shell)}") - execute_command(server, device_id, shell, "sf buffer size", setBufferSize) - - -class WindowManagerSelectedConfigTrace(DeviceRequestEndpoint): - def process_with_device(self, server, path, device_id): - config = WindowManagerTraceSelectedConfig() - config = add_selected_request_to_config(self, server, device_id, config) - setBufferSize = config.setBufferSize() - setTracingType = config.setTracingType() - setTracingLevel = config.setTracingLevel() - shell = ['adb', '-s', device_id, 'shell'] - log.debug(f"Starting shell {' '.join(shell)}") - execute_command(server, device_id, shell, "wm buffer size", setBufferSize) - execute_command(server, device_id, shell, "tracing type", setTracingType) - execute_command(server, device_id, shell, "tracing level", setTracingLevel) - - -class StatusEndpoint(DeviceRequestEndpoint): - def process_with_device(self, server, path, device_id): - if device_id not in TRACE_THREADS: - raise BadRequest("No trace in progress for {}".format(device_id)) - TRACE_THREADS[device_id].reset_timer() - server.respond(HTTPStatus.OK, str( - TRACE_THREADS[device_id].is_alive()).encode("utf-8"), "text/plain") - - -class DumpEndpoint(DeviceRequestEndpoint): - def process_with_device(self, server, path, device_id): - try: - requested_types = self.get_request(server) - requested_traces = [DUMP_TARGETS[t] for t in requested_types] - except KeyError as err: - raise BadRequest("Unsupported trace target\n" + str(err)) - if device_id in TRACE_THREADS: - BadRequest("Trace in progress for {}".format(device_id)) - if not check_root(device_id): - raise AdbError( - "Unable to acquire root privileges on the device - check the output of 'adb -s {} shell su root id'" - .format(device_id)) - command = '\n'.join(t.dump_command for t in requested_traces) - shell = ['adb', '-s', device_id, 'shell'] - log.debug("Starting dump shell {}".format(' '.join(shell))) - process = subprocess.Popen(shell, stdout=subprocess.PIPE, stderr=subprocess.PIPE, - stdin=subprocess.PIPE, start_new_session=True) - log.debug("Starting dump on device {}".format(device_id)) - out, err = process.communicate(command.encode('utf-8')) - if process.returncode != 0: - raise AdbError("Error executing command:\n" + command + "\n\n### OUTPUT ###" + out.decode('utf-8') + "\n" - + err.decode('utf-8')) - log.debug("Dump finished on device {}".format(device_id)) - server.respond(HTTPStatus.OK, b'', "text/plain") - - -class ADBWinscopeProxy(BaseHTTPRequestHandler): - def __init__(self, request, client_address, server): - self.router = RequestRouter(self) - listDevicesEndpoint = ListDevicesEndpoint() - self.router.register_endpoint( - RequestType.GET, "devices", listDevicesEndpoint) - self.router.register_endpoint( - RequestType.GET, "status", StatusEndpoint()) - self.router.register_endpoint( - RequestType.GET, "fetch", FetchFilesEndpoint()) - self.router.register_endpoint(RequestType.POST, "start", StartTrace()) - self.router.register_endpoint(RequestType.POST, "end", EndTrace()) - self.router.register_endpoint(RequestType.POST, "dump", DumpEndpoint()) - self.router.register_endpoint( - RequestType.POST, "configtrace", ConfigTrace()) - self.router.register_endpoint( - RequestType.POST, "selectedsfconfigtrace", SurfaceFlingerSelectedConfigTrace()) - self.router.register_endpoint( - RequestType.POST, "selectedwmconfigtrace", WindowManagerSelectedConfigTrace()) - self.router.register_endpoint( - RequestType.GET, "checkwayland", CheckWaylandServiceEndpoint(listDevicesEndpoint)) - super().__init__(request, client_address, server) - - def respond(self, code: int, data: bytes, mime: str) -> None: - self.send_response(code) - self.send_header('Content-type', mime) - add_standard_headers(self) - self.wfile.write(data) - - def do_GET(self): - self.router.process(RequestType.GET) - - def do_POST(self): - self.router.process(RequestType.POST) - - def do_OPTIONS(self): - self.send_response(HTTPStatus.OK) - self.send_header('Allow', 'GET,POST') - add_standard_headers(self) - self.end_headers() - self.wfile.write(b'GET,POST') - - def log_request(self, code='-', size='-'): - log.info('{} {} {}'.format(self.requestline, str(code), str(size))) - - -if __name__ == '__main__': - print("Winscope ADB Connect proxy version: " + VERSION) - print('Winscope token: ' + secret_token) - httpd = HTTPServer(('localhost', PORT), ADBWinscopeProxy) - try: - httpd.serve_forever() - except KeyboardInterrupt: - log.info("Shutting down") diff --git a/tools/winscope/env/dev.env.js b/tools/winscope/env/dev.env.js deleted file mode 100644 index 0b533b240..000000000 --- a/tools/winscope/env/dev.env.js +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -module.exports = { - NODE_ENV: 'development' -}; \ No newline at end of file diff --git a/tools/winscope/env/prod.env.js b/tools/winscope/env/prod.env.js deleted file mode 100644 index f1bbba029..000000000 --- a/tools/winscope/env/prod.env.js +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -module.exports = { - NODE_ENV: 'production' -}; \ No newline at end of file diff --git a/tools/winscope/libs/virtualList/Item.js b/tools/winscope/libs/virtualList/Item.js deleted file mode 100644 index 2f1a0e5ef..000000000 --- a/tools/winscope/libs/virtualList/Item.js +++ /dev/null @@ -1,81 +0,0 @@ -import Vue from 'vue' -import { ItemProps, SlotProps } from './props' - -const Wrapper = { - created() { - this.shapeKey = this.horizontal ? 'offsetWidth' : 'offsetHeight' - }, - - mounted() { - if (typeof ResizeObserver !== 'undefined') { - this.resizeObserver = new ResizeObserver(() => { - this.dispatchSizeChange() - }) - this.resizeObserver.observe(this.$el) - } - }, - - // since component will be reused, so dispatch when updated - updated() { - this.dispatchSizeChange() - }, - - beforeDestroy() { - if (this.resizeObserver) { - this.resizeObserver.disconnect() - this.resizeObserver = null - } - }, - - methods: { - getCurrentSize() { - return this.$el ? this.$el[this.shapeKey] : 0 - }, - - // tell parent current size identify by unique key - dispatchSizeChange() { - this.$parent.$emit(this.event, this.uniqueKey, this.getCurrentSize(), this.hasInitial) - } - } -} - -// wrapping for item -export const Item = Vue.component('virtual-list-item', { - mixins: [Wrapper], - - props: ItemProps, - - render(h) { - const { tag, component, extraProps = {}, index, scopedSlots = {}, uniqueKey } = this - extraProps.source = this.source - extraProps.index = index - - return h(tag, { - key: uniqueKey, - attrs: { - role: 'item' - } - }, [h(component, { - props: extraProps, - scopedSlots: scopedSlots - })]) - } -}) - -// wrapping for slot -export const Slot = Vue.component('virtual-list-slot', { - mixins: [Wrapper], - - props: SlotProps, - - render(h) { - const { tag, uniqueKey } = this - - return h(tag, { - key: uniqueKey, - attrs: { - role: uniqueKey - } - }, this.$slots.default) - } -}) \ No newline at end of file diff --git a/tools/winscope/libs/virtualList/README.md b/tools/winscope/libs/virtualList/README.md deleted file mode 100644 index 0b99a70b0..000000000 --- a/tools/winscope/libs/virtualList/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# vue-virtual-scroll-list - -The original library can be found on GitHub at [https://github.com/tangbc/vue-virtual-scroll-list](https://github.com/tangbc/vue-virtual-scroll-list). \ No newline at end of file diff --git a/tools/winscope/libs/virtualList/VirtualList.js b/tools/winscope/libs/virtualList/VirtualList.js deleted file mode 100644 index 1a6b632eb..000000000 --- a/tools/winscope/libs/virtualList/VirtualList.js +++ /dev/null @@ -1,354 +0,0 @@ -import Vue from 'vue' -import Virtual from './virtual' -import { Item, Slot } from './Item' -import { VirtualProps } from './props' - -const EVENT_TYPE = { - ITEM: 'item_resize', - SLOT: 'slot_resize' -} -const SLOT_TYPE = { - HEADER: 'header', // string value also use for aria role attribute - FOOTER: 'footer' -} - -const VirtualList = Vue.component('virtual-list', { - props: VirtualProps, - - data() { - return { - range: null - } - }, - - watch: { - 'dataSources.length'() { - this.virtual.updateParam('uniqueIds', this.getUniqueIdFromDataSources()) - this.virtual.handleDataSourcesChange() - }, - - start(newValue) { - this.scrollToIndex(newValue) - }, - - offset(newValue) { - this.scrollToOffset(newValue) - } - }, - - created() { - this.isHorizontal = this.direction === 'horizontal' - this.directionKey = this.isHorizontal ? 'scrollLeft' : 'scrollTop' - - this.installVirtual() - - // listen item size change - this.$on(EVENT_TYPE.ITEM, this.onItemResized) - - // listen slot size change - if (this.$slots.header || this.$slots.footer) { - this.$on(EVENT_TYPE.SLOT, this.onSlotResized) - } - }, - - // set back offset when awake from keep-alive - activated() { - this.scrollToOffset(this.virtual.offset) - }, - - mounted() { - // set position - if (this.start) { - this.scrollToIndex(this.start) - } else if (this.offset) { - this.scrollToOffset(this.offset) - } - - // in page mode we bind scroll event to document - if (this.pageMode) { - this.updatePageModeFront() - - document.addEventListener('scroll', this.onScroll, { - passive: false - }) - } - }, - - beforeDestroy() { - this.virtual.destroy() - if (this.pageMode) { - document.removeEventListener('scroll', this.onScroll) - } - }, - - methods: { - // get item size by id - getSize(id) { - return this.virtual.sizes.get(id) - }, - - // get the total number of stored (rendered) items - getSizes() { - return this.virtual.sizes.size - }, - - // return current scroll offset - getOffset() { - if (this.pageMode) { - return document.documentElement[this.directionKey] || document.body[this.directionKey] - } else { - const { root } = this.$refs - return root ? Math.ceil(root[this.directionKey]) : 0 - } - }, - - // return client viewport size - getClientSize() { - const key = this.isHorizontal ? 'clientWidth' : 'clientHeight' - if (this.pageMode) { - return document.documentElement[key] || document.body[key] - } else { - const { root } = this.$refs - return root ? Math.ceil(root[key]) : 0 - } - }, - - // return all scroll size - getScrollSize() { - const key = this.isHorizontal ? 'scrollWidth' : 'scrollHeight' - if (this.pageMode) { - return document.documentElement[key] || document.body[key] - } else { - const { root } = this.$refs - return root ? Math.ceil(root[key]) : 0 - } - }, - - // set current scroll position to a expectant offset - scrollToOffset(offset) { - if (this.pageMode) { - document.body[this.directionKey] = offset - document.documentElement[this.directionKey] = offset - } else { - const { root } = this.$refs - if (root) { - root[this.directionKey] = offset - } - } - }, - - // set current scroll position to a expectant index - scrollToIndex(index) { - // scroll to bottom - if (index >= this.dataSources.length - 1) { - this.scrollToBottom() - } else { - const offset = this.virtual.getOffset(index) - this.scrollToOffset(offset) - } - }, - - // set current scroll position to bottom - scrollToBottom() { - const { shepherd } = this.$refs - if (shepherd) { - const offset = shepherd[this.isHorizontal ? 'offsetLeft' : 'offsetTop'] - this.scrollToOffset(offset) - - // check if it's really scrolled to the bottom - // maybe list doesn't render and calculate to last range - // so we need retry in next event loop until it really at bottom - setTimeout(() => { - if (this.getOffset() + this.getClientSize() < this.getScrollSize()) { - this.scrollToBottom() - } - }, 3) - } - }, - - // when using page mode we need update slot header size manually - // taking root offset relative to the browser as slot header size - updatePageModeFront() { - const { root } = this.$refs - if (root) { - const rect = root.getBoundingClientRect() - const { defaultView } = root.ownerDocument - const offsetFront = this.isHorizontal ? (rect.left + defaultView.pageXOffset) : (rect.top + defaultView.pageYOffset) - this.virtual.updateParam('slotHeaderSize', offsetFront) - } - }, - - // reset all state back to initial - reset() { - this.virtual.destroy() - this.scrollToOffset(0) - this.installVirtual() - }, - - // ----------- public method end ----------- - - installVirtual() { - this.virtual = new Virtual({ - slotHeaderSize: 0, - slotFooterSize: 0, - keeps: this.keeps, - estimateSize: this.estimateSize, - buffer: Math.round(this.keeps / 3), // recommend for a third of keeps - uniqueIds: this.getUniqueIdFromDataSources() - }, this.onRangeChanged) - - // sync initial range - this.range = this.virtual.getRange() - }, - - getUniqueIdFromDataSources() { - const { dataKey } = this - return this.dataSources.map((dataSource) => typeof dataKey === 'function' ? dataKey(dataSource) : dataSource[dataKey]) - }, - - // event called when each item mounted or size changed - onItemResized(id, size) { - this.virtual.saveSize(id, size) - this.$emit('resized', id, size) - }, - - // event called when slot mounted or size changed - onSlotResized(type, size, hasInit) { - if (type === SLOT_TYPE.HEADER) { - this.virtual.updateParam('slotHeaderSize', size) - } else if (type === SLOT_TYPE.FOOTER) { - this.virtual.updateParam('slotFooterSize', size) - } - - if (hasInit) { - this.virtual.handleSlotSizeChange() - } - }, - - // here is the re-rendering entry - onRangeChanged(range) { - this.range = range - }, - - onScroll(evt) { - const offset = this.getOffset() - const clientSize = this.getClientSize() - const scrollSize = this.getScrollSize() - - // iOS scroll-spring-back behavior will make direction mistake - if (offset < 0 || (offset + clientSize > scrollSize + 1) || !scrollSize) { - return - } - - this.virtual.handleScroll(offset) - this.emitEvent(offset, clientSize, scrollSize, evt) - }, - - // emit event in special position - emitEvent(offset, clientSize, scrollSize, evt) { - this.$emit('scroll', evt, this.virtual.getRange()) - - if (this.virtual.isFront() && !!this.dataSources.length && (offset - this.topThreshold <= 0)) { - this.$emit('totop') - } else if (this.virtual.isBehind() && (offset + clientSize + this.bottomThreshold >= scrollSize)) { - this.$emit('tobottom') - } - }, - - // get the real render slots based on range data - // in-place patch strategy will try to reuse components as possible - // so those components that are reused will not trigger lifecycle mounted - getRenderSlots(h) { - const slots = [] - const { start, end } = this.range - const { dataSources, dataKey, itemClass, itemTag, itemStyle, isHorizontal, extraProps, dataComponent, itemScopedSlots } = this - for (let index = start; index <= end; index++) { - const dataSource = dataSources[index] - if (dataSource) { - const uniqueKey = typeof dataKey === 'function' ? dataKey(dataSource) : dataSource[dataKey] - if (typeof uniqueKey === 'string' || typeof uniqueKey === 'number') { - slots.push(h(Item, { - props: { - index, - tag: itemTag, - event: EVENT_TYPE.ITEM, - horizontal: isHorizontal, - uniqueKey: uniqueKey, - source: dataSource, - extraProps: extraProps, - component: dataComponent, - scopedSlots: itemScopedSlots - }, - style: itemStyle, - class: `${itemClass}${this.itemClassAdd ? ' ' + this.itemClassAdd(index) : ''}` - })) - } else { - console.warn(`Cannot get the data-key '${dataKey}' from data-sources.`) - } - } else { - console.warn(`Cannot get the index '${index}' from data-sources.`) - } - } - return slots - } - }, - - // render function, a closer-to-the-compiler alternative to templates - // https://vuejs.org/v2/guide/render-function.html#The-Data-Object-In-Depth - render(h) { - const { header, footer } = this.$slots - const { padFront, padBehind } = this.range - const { isHorizontal, pageMode, rootTag, wrapTag, wrapClass, wrapStyle, headerTag, headerClass, headerStyle, footerTag, footerClass, footerStyle } = this - const paddingStyle = { padding: isHorizontal ? `0px ${padBehind}px 0px ${padFront}px` : `${padFront}px 0px ${padBehind}px` } - const wrapperStyle = wrapStyle ? Object.assign({}, wrapStyle, paddingStyle) : paddingStyle - - return h(rootTag, { - ref: 'root', - on: { - '&scroll': !pageMode && this.onScroll - } - }, [ - // header slot - header ? h(Slot, { - class: headerClass, - style: headerStyle, - props: { - tag: headerTag, - event: EVENT_TYPE.SLOT, - uniqueKey: SLOT_TYPE.HEADER - } - }, header) : null, - - // main list - h(wrapTag, { - class: wrapClass, - attrs: { - role: 'group' - }, - style: wrapperStyle - }, this.getRenderSlots(h)), - - // footer slot - footer ? h(Slot, { - class: footerClass, - style: footerStyle, - props: { - tag: footerTag, - event: EVENT_TYPE.SLOT, - uniqueKey: SLOT_TYPE.FOOTER - } - }, footer) : null, - - // an empty element use to scroll to bottom - h('div', { - ref: 'shepherd', - style: { - width: isHorizontal ? '0px' : '100%', - height: isHorizontal ? '100%' : '0px' - } - }) - ]) - } -}) - -export default VirtualList \ No newline at end of file diff --git a/tools/winscope/libs/virtualList/props.js b/tools/winscope/libs/virtualList/props.js deleted file mode 100644 index 410b581d8..000000000 --- a/tools/winscope/libs/virtualList/props.js +++ /dev/null @@ -1,150 +0,0 @@ -export const VirtualProps = { - dataKey: { - type: [String, Function], - required: true - }, - dataSources: { - type: Array, - required: true - }, - dataComponent: { - type: [Object, Function], - required: true - }, - - keeps: { - type: Number, - default: 30 - }, - extraProps: { - type: Object - }, - estimateSize: { - type: Number, - default: 50 - }, - - direction: { - type: String, - default: 'vertical' // the other value is horizontal - }, - start: { - type: Number, - default: 0 - }, - offset: { - type: Number, - default: 0 - }, - topThreshold: { - type: Number, - default: 0 - }, - bottomThreshold: { - type: Number, - default: 0 - }, - pageMode: { - type: Boolean, - default: false - }, - rootTag: { - type: String, - default: 'div' - }, - wrapTag: { - type: String, - default: 'div' - }, - wrapClass: { - type: String, - default: '' - }, - wrapStyle: { - type: Object - }, - itemTag: { - type: String, - default: 'div' - }, - itemClass: { - type: String, - default: '' - }, - itemClassAdd: { - type: Function - }, - itemStyle: { - type: Object - }, - headerTag: { - type: String, - default: 'div' - }, - headerClass: { - type: String, - default: '' - }, - headerStyle: { - type: Object - }, - footerTag: { - type: String, - default: 'div' - }, - footerClass: { - type: String, - default: '' - }, - footerStyle: { - type: Object - }, - itemScopedSlots: { - type: Object - } -} - -export const ItemProps = { - index: { - type: Number - }, - event: { - type: String - }, - tag: { - type: String - }, - horizontal: { - type: Boolean - }, - source: { - type: Object - }, - component: { - type: [Object, Function] - }, - uniqueKey: { - type: [String, Number] - }, - extraProps: { - type: Object - }, - scopedSlots: { - type: Object - } -} - -export const SlotProps = { - event: { - type: String - }, - uniqueKey: { - type: String - }, - tag: { - type: String - }, - horizontal: { - type: Boolean - } -} \ No newline at end of file diff --git a/tools/winscope/libs/virtualList/virtual.js b/tools/winscope/libs/virtualList/virtual.js deleted file mode 100644 index 94688f51c..000000000 --- a/tools/winscope/libs/virtualList/virtual.js +++ /dev/null @@ -1,305 +0,0 @@ -const DIRECTION_TYPE = { - FRONT: 'FRONT', // scroll up or left - BEHIND: 'BEHIND' // scroll down or right -} -const CALC_TYPE = { - INIT: 'INIT', - FIXED: 'FIXED', - DYNAMIC: 'DYNAMIC' -} -const LEADING_BUFFER = 2 - -export default class Virtual { - constructor(param, callUpdate) { - this.init(param, callUpdate) - } - - init(param, callUpdate) { - // param data - this.param = param - this.callUpdate = callUpdate - - // size data - this.sizes = new Map() - this.firstRangeTotalSize = 0 - this.firstRangeAverageSize = 0 - this.lastCalcIndex = 0 - this.fixedSizeValue = 0 - this.calcType = CALC_TYPE.INIT - - // scroll data - this.offset = 0 - this.direction = '' - - // range data - this.range = Object.create(null) - if (param) { - this.checkRange(0, param.keeps - 1) - } - - // benchmark test data - // this.__bsearchCalls = 0 - // this.__getIndexOffsetCalls = 0 - } - - destroy() { - this.init(null, null) - } - - // return current render range - getRange() { - const range = Object.create(null) - range.start = this.range.start - range.end = this.range.end - range.padFront = this.range.padFront - range.padBehind = this.range.padBehind - return range - } - - isBehind() { - return this.direction === DIRECTION_TYPE.BEHIND - } - - isFront() { - return this.direction === DIRECTION_TYPE.FRONT - } - - // return start index offset - getOffset(start) { - return (start < 1 ? 0 : this.getIndexOffset(start)) + this.param.slotHeaderSize - } - - updateParam(key, value) { - if (this.param && (key in this.param)) { - // if uniqueIds change, find out deleted id and remove from size map - if (key === 'uniqueIds') { - this.sizes.forEach((v, key) => { - if (!value.includes(key)) { - this.sizes.delete(key) - } - }) - } - this.param[key] = value - } - } - - // save each size map by id - saveSize(id, size) { - this.sizes.set(id, size) - - // we assume size type is fixed at the beginning and remember first size value - // if there is no size value different from this at next coming saving - // we think it's a fixed size list, otherwise is dynamic size list - if (this.calcType === CALC_TYPE.INIT) { - this.fixedSizeValue = size - this.calcType = CALC_TYPE.FIXED - } else if (this.calcType === CALC_TYPE.FIXED && this.fixedSizeValue !== size) { - this.calcType = CALC_TYPE.DYNAMIC - // it's no use at all - delete this.fixedSizeValue - } - - // calculate the average size only in the first range - if (this.calcType !== CALC_TYPE.FIXED && typeof this.firstRangeTotalSize !== 'undefined') { - if (this.sizes.size < Math.min(this.param.keeps, this.param.uniqueIds.length)) { - this.firstRangeTotalSize = this.firstRangeTotalSize + size - this.firstRangeAverageSize = Math.round(this.firstRangeTotalSize / this.sizes.size) - } else { - // it's done using - delete this.firstRangeTotalSize - } - } - } - - // in some special situation (e.g. length change) we need to update in a row - // try going to render next range by a leading buffer according to current direction - handleDataSourcesChange() { - let start = this.range.start - - if (this.isFront()) { - start = start - LEADING_BUFFER - } else if (this.isBehind()) { - start = start + LEADING_BUFFER - } - - start = Math.max(start, 0) - - this.updateRange(this.range.start, this.getEndByStart(start)) - } - - // when slot size change, we also need force update - handleSlotSizeChange() { - this.handleDataSourcesChange() - } - - // calculating range on scroll - handleScroll(offset) { - this.direction = offset < this.offset ? DIRECTION_TYPE.FRONT : DIRECTION_TYPE.BEHIND - this.offset = offset - - if (this.direction === DIRECTION_TYPE.FRONT) { - this.handleFront() - } else if (this.direction === DIRECTION_TYPE.BEHIND) { - this.handleBehind() - } - } - - // ----------- public method end ----------- - - handleFront() { - const overs = this.getScrollOvers() - // should not change range if start doesn't exceed overs - if (overs > this.range.start) { - return - } - - // move up start by a buffer length, and make sure its safety - const start = Math.max(overs - this.param.buffer, 0) - this.checkRange(start, this.getEndByStart(start)) - } - - handleBehind() { - const overs = this.getScrollOvers() - // range should not change if scroll overs within buffer - if (overs < this.range.start + this.param.buffer) { - return - } - - this.checkRange(overs, this.getEndByStart(overs)) - } - - // return the pass overs according to current scroll offset - getScrollOvers() { - // if slot header exist, we need subtract its size - const offset = this.offset - this.param.slotHeaderSize - if (offset <= 0) { - return 0 - } - - // if is fixed type, that can be easily - if (this.isFixedType()) { - return Math.floor(offset / this.fixedSizeValue) - } - - let low = 0 - let middle = 0 - let middleOffset = 0 - let high = this.param.uniqueIds.length - - while (low <= high) { - // this.__bsearchCalls++ - middle = low + Math.floor((high - low) / 2) - middleOffset = this.getIndexOffset(middle) - - if (middleOffset === offset) { - return middle - } else if (middleOffset < offset) { - low = middle + 1 - } else if (middleOffset > offset) { - high = middle - 1 - } - } - - return low > 0 ? --low : 0 - } - - // return a scroll offset from given index, can efficiency be improved more here? - // although the call frequency is very high, its only a superposition of numbers - getIndexOffset(givenIndex) { - if (!givenIndex) { - return 0 - } - - let offset = 0 - let indexSize = 0 - for (let index = 0; index < givenIndex; index++) { - // this.__getIndexOffsetCalls++ - indexSize = this.sizes.get(this.param.uniqueIds[index]) - offset = offset + (typeof indexSize === 'number' ? indexSize : this.getEstimateSize()) - } - - // remember last calculate index - this.lastCalcIndex = Math.max(this.lastCalcIndex, givenIndex - 1) - this.lastCalcIndex = Math.min(this.lastCalcIndex, this.getLastIndex()) - - return offset - } - - // is fixed size type - isFixedType() { - return this.calcType === CALC_TYPE.FIXED - } - - // return the real last index - getLastIndex() { - return this.param.uniqueIds.length - 1 - } - - // in some conditions range is broke, we need correct it - // and then decide whether need update to next range - checkRange(start, end) { - const keeps = this.param.keeps - const total = this.param.uniqueIds.length - - // datas less than keeps, render all - if (total <= keeps) { - start = 0 - end = this.getLastIndex() - } else if (end - start < keeps - 1) { - // if range length is less than keeps, current it base on end - start = end - keeps + 1 - } - - if (this.range.start !== start) { - this.updateRange(start, end) - } - } - - // setting to a new range and re-render - updateRange(start, end) { - this.range.start = start - this.range.end = end - this.range.padFront = this.getPadFront() - this.range.padBehind = this.getPadBehind() - this.callUpdate(this.getRange()) - } - - // return end base on start - getEndByStart(start) { - const theoryEnd = start + this.param.keeps - 1 - const trulyEnd = Math.min(theoryEnd, this.getLastIndex()) - return trulyEnd - } - - // return total front offset - getPadFront() { - if (this.isFixedType()) { - return this.fixedSizeValue * this.range.start - } else { - return this.getIndexOffset(this.range.start) - } - } - - // return total behind offset - getPadBehind() { - const end = this.range.end - const lastIndex = this.getLastIndex() - - if (this.isFixedType()) { - return (lastIndex - end) * this.fixedSizeValue - } - - // if it's all calculated, return the exactly offset - if (this.lastCalcIndex === lastIndex) { - return this.getIndexOffset(lastIndex) - this.getIndexOffset(end) - } else { - // if not, use a estimated value - return (lastIndex - end) * this.getEstimateSize() - } - } - - // get the item estimate size - getEstimateSize() { - return this.isFixedType() ? this.fixedSizeValue : (this.firstRangeAverageSize || this.param.estimateSize) - } -} \ No newline at end of file diff --git a/tools/winscope/loaders/proto-loader.js b/tools/winscope/loaders/proto-loader.js deleted file mode 100644 index a8e50585a..000000000 --- a/tools/winscope/loaders/proto-loader.js +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2017, 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. - */ - -var path = require("path"); -var fs = require('fs'); -var protobuf = require('protobufjs'); -var loaderUtils = require('loader-utils'); -var jsonTarget = require('protobufjs/cli/targets/json'); - - -module.exports = function(source) { - var self = this; - - var root = new protobuf.Root(); - - var paths = loaderUtils.getOptions(this)['paths'] || []; - - // Search include paths when resolving imports - root.resolvePath = function pbjsResolvePath(origin, target) { - var normOrigin = protobuf.util.path.normalize(origin); - var normTarget = protobuf.util.path.normalize(target); - - var resolved = protobuf.util.path.resolve(normOrigin, normTarget, true); - if (fs.existsSync(resolved)) { - self.addDependency(resolved); - return resolved; - } - - for (var i = 0; i < paths.length; ++i) { - var iresolved = protobuf.util.path.resolve(paths[i] + "/", target); - if (fs.existsSync(iresolved)) { - self.addDependency(iresolved); - return iresolved; - } - } - - self.addDependency(resolved); - return resolved; - }; - - root.loadSync(self.resourcePath).resolveAll(); - - var result = JSON.stringify(root, null, 2); - - return `module.exports = ${result}`; -}; diff --git a/tools/winscope/package.json b/tools/winscope/package.json deleted file mode 100644 index 081a8f00c..000000000 --- a/tools/winscope/package.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "name": "winscope", - "description": "A window manager analysis tool", - "version": "0.0.1", - "author": "Adrian Roos ", - "private": true, - "scripts": { - "dev": "cross-env NODE_ENV=development NODE_OPTIONS=--openssl-legacy-provider webpack serve --open --hot", - "build": "cross-env NODE_ENV=production NODE_OPTIONS=--openssl-legacy-provider webpack --progress", - "test": "cross-env NODE_OPTIONS=--openssl-legacy-provider webpack --config webpack.spec.config.js && jasmine dist/bundleSpec.js" - }, - "dependencies": { - "cross-env": "^7.0.3", - "html2canvas": "^1.4.1", - "jszip": "^3.6.0", - "kotlin": "^1.5.21", - "lodash.clonedeep": "^4.5.0", - "ts-loader": "^8.3.0", - "typescript": "^4.3.5", - "vue": "^2.6.14", - "vue-context": "^6.0.0", - "vue-gtag": "^1.16.1", - "vue-material": "^1.0.0-beta-14", - "//": [ - "upgrade vue-material version to latest once the following bug in v15", - "is fixed: https://github.com/vuematerial/vue-material/issues/2285" - ], - "vuex": "^3.6.2" - }, - "devDependencies": { - "@babel/core": "^7.14.6", - "@babel/polyfill": "^7.12.1", - "@babel/preset-env": "^7.14.7", - "@babel/register": "^7.14.5", - "@jetbrains/kotlin-webpack-plugin": "^3.0.2", - "@testing-library/vue": "^5.8.1", - "@types/lodash": "^4.14.171", - "babel-loader": "^8.2.2", - "compression-webpack-plugin": "^6.1.1", - "cross-env": "^7.0.3", - "css-loader": "^5.2.7", - "eslint": "^7.30.0", - "eslint-config-google": "^0.14.0", - "eslint-plugin-vue": "^7.13.0", - "file-loader": "^6.2.0", - "friendly-errors-webpack-plugin": "^1.7.0", - "html-webpack-inline-source-plugin": "^1.0.0-beta.2", - "html-webpack-plugin": "4.5.2", - "husky": "^7.0.0", - "jasmine": "^3.8.0", - "lint-staged": "^11.0.1", - "loader-utils": "^2.0.0", - "mini-css-extract-plugin": "^1.6.2", - "optimize-css-assets-webpack-plugin": "^5.0.3", - "protobufjs": "^6.11.3", - "source-map-loader": "^1.1.3", - "style-loader": "^2.0.0", - "ts-loader": "^8.3.0", - "typescript": "^4.3.5", - "uglifyjs-webpack-plugin": "^2.2.0", - "vue-loader": "^15.9.2", - "vue-style-loader": "^4.1.3", - "vue-template-compiler": "^2.6.14", - "webpack": "^4.46.0", - "webpack-cli": "^4.7.2", - "webpack-dev-server": "^3.11.2", - "webpack-merge": "^5.8.0" - }, - "husky": { - "hooks": { - "pre-commit": "lint-staged" - } - }, - "lint-staged": { - "*.{js,vue}": "eslint --cache --fix" - } -} diff --git a/tools/winscope/spec/DiffSpec.js b/tools/winscope/spec/DiffSpec.js deleted file mode 100644 index 572f253f1..000000000 --- a/tools/winscope/spec/DiffSpec.js +++ /dev/null @@ -1,270 +0,0 @@ -import { DiffGenerator, DiffType } from "../src/utils/diff.js"; -import { NodeBuilder, toPlainObject } from "./utils/tree.js"; - -const treeOne = new NodeBuilder().setId(1).setChildren([ - new NodeBuilder().setId(2).build(), - new NodeBuilder().setId(3).build(), - new NodeBuilder().setId(4).build(), -]).build(); - -const treeTwo = new NodeBuilder().setId(1).setChildren([ - new NodeBuilder().setId(2).build(), - new NodeBuilder().setId(3).setChildren([ - new NodeBuilder().setId(5).build(), - ]).build(), - new NodeBuilder().setId(4).build(), -]).build(); - -function checkDiffTreeWithNoModifiedCheck(oldTree, newTree, expectedDiffTree) { - const diffTree = new DiffGenerator(newTree) - .compareWith(oldTree) - .withUniqueNodeId(node => node.id) - .withModifiedCheck(() => false) - .generateDiffTree(); - - expect(diffTree).toEqual(expectedDiffTree); -} - -describe("DiffGenerator", () => { - it("can generate a simple add diff", () => { - const oldTree = treeOne; - const newTree = treeTwo; - - const expectedDiffTree = toPlainObject( - new NodeBuilder().setId(1).setDiffType(DiffType.NONE).setChildren([ - new NodeBuilder().setId(2).setDiffType(DiffType.NONE).build(), - new NodeBuilder().setId(3).setDiffType(DiffType.NONE).setChildren([ - new NodeBuilder().setId(5).setDiffType(DiffType.ADDED).build(), - ]).build(), - new NodeBuilder().setId(4).setDiffType(DiffType.NONE).build(), - ]).build() - ); - - checkDiffTreeWithNoModifiedCheck(oldTree, newTree, expectedDiffTree); - }); - - it("can generate a simple delete diff", () => { - const oldTree = treeTwo; - const newTree = treeOne; - - const expectedDiffTree = toPlainObject( - new NodeBuilder().setId(1).setDiffType(DiffType.NONE).setChildren([ - new NodeBuilder().setId(2).setDiffType(DiffType.NONE).build(), - new NodeBuilder().setId(3).setDiffType(DiffType.NONE).setChildren([ - new NodeBuilder().setId(5).setDiffType(DiffType.DELETED).build(), - ]).build(), - new NodeBuilder().setId(4).setDiffType(DiffType.NONE).build(), - ]).build() - ); - - checkDiffTreeWithNoModifiedCheck(oldTree, newTree, expectedDiffTree); - }); - - it("can generate a simple move diff", () => { - const oldTree = treeTwo; - - const newTree = new NodeBuilder().setId(1).setChildren([ - new NodeBuilder().setId(2).build(), - new NodeBuilder().setId(3).build(), - new NodeBuilder().setId(4).setChildren([ - new NodeBuilder().setId(5).build(), - ]).build(), - ]).build(); - - const expectedDiffTree = toPlainObject( - new NodeBuilder().setId(1).setDiffType(DiffType.NONE).setChildren([ - new NodeBuilder().setId(2).setDiffType(DiffType.NONE).build(), - new NodeBuilder().setId(3).setDiffType(DiffType.NONE).setChildren([ - new NodeBuilder().setId(5).setDiffType(DiffType.DELETED_MOVE).build(), - ]).build(), - new NodeBuilder().setId(4).setDiffType(DiffType.NONE).setChildren([ - new NodeBuilder().setId(5).setDiffType(DiffType.ADDED_MOVE).build(), - ]).build(), - ]).build() - ); - - checkDiffTreeWithNoModifiedCheck(oldTree, newTree, expectedDiffTree); - }); - - it("can generate a simple modified diff", () => { - const oldTree = new NodeBuilder().setId(1).setData("xyz").setChildren([ - new NodeBuilder().setId(2).setData("abc").build(), - new NodeBuilder().setId(3).setData("123").build(), - ]).build(); - - const newTree = new NodeBuilder().setId(1).setData("xyz").setChildren([ - new NodeBuilder().setId(2).setData("def").build(), - new NodeBuilder().setId(3).setData("123").build(), - ]).build(); - - const expectedDiffTree = toPlainObject( - new NodeBuilder().setId(1).setData("xyz").setDiffType(DiffType.NONE).setChildren([ - new NodeBuilder().setId(2).setData("def").setDiffType(DiffType.MODIFIED).build(), - new NodeBuilder().setId(3).setData("123").setDiffType(DiffType.NONE).build(), - ]).build() - ); - - const diffTree = new DiffGenerator(newTree) - .compareWith(oldTree) - .withUniqueNodeId(node => node.id) - .withModifiedCheck( - (newNode, oldNode) => newNode.data != oldNode.data) - .generateDiffTree(); - - expect(diffTree).toEqual(expectedDiffTree); - }); - - it("can handle move and inner addition diff", () => { - const oldTree = new NodeBuilder().setId(1).setChildren([ - new NodeBuilder().setId(2).build(), - new NodeBuilder().setId(3).setChildren([ - new NodeBuilder().setId(4).build(), - ]).build(), - ]).build(); - - const newTree = new NodeBuilder().setId(1).setChildren([ - new NodeBuilder().setId(2).setChildren([ - new NodeBuilder().setId(4).setChildren([ - new NodeBuilder().setId(5).build(), - ]).build(), - ]).build(), - new NodeBuilder().setId(3).build(), - ]).build(); - - const expectedDiffTree = toPlainObject( - new NodeBuilder().setId(1).setDiffType(DiffType.NONE).setChildren([ - new NodeBuilder().setId(2).setDiffType(DiffType.NONE).setChildren([ - new NodeBuilder().setId(4).setDiffType(DiffType.ADDED_MOVE).setChildren([ - new NodeBuilder().setId(5).setDiffType(DiffType.ADDED).build(), - ]).build(), - ]).build(), - new NodeBuilder().setId(3).setDiffType(DiffType.NONE).setChildren([ - new NodeBuilder().setId(4).setDiffType(DiffType.DELETED_MOVE).build(), - ]).build(), - ]).build() - ); - - checkDiffTreeWithNoModifiedCheck(oldTree, newTree, expectedDiffTree); - }); - - it("can handle move within same level", () => { - const oldTree = new NodeBuilder().setId(1).setChildren([ - new NodeBuilder().setId(2).build(), - new NodeBuilder().setId(3).build(), - ]).build(); - - const newTree = new NodeBuilder().setId(1).setChildren([ - new NodeBuilder().setId(3).build(), - new NodeBuilder().setId(2).build(), - ]).build(); - - const expectedDiffTree = toPlainObject( - new NodeBuilder().setId(1).setDiffType(DiffType.NONE).setChildren([ - new NodeBuilder().setId(3).setDiffType(DiffType.NONE).build(), - new NodeBuilder().setId(2).setDiffType(DiffType.NONE).build(), - ]).build() - ); - - checkDiffTreeWithNoModifiedCheck(oldTree, newTree, expectedDiffTree); - }); - - it("can handle addition within middle of level", () => { - const oldTree = new NodeBuilder().setId(1).setChildren([ - new NodeBuilder().setId(2).build(), - new NodeBuilder().setId(3).build(), - ]).build(); - - const newTree = new NodeBuilder().setId(1).setChildren([ - new NodeBuilder().setId(2).build(), - new NodeBuilder().setId(4).build(), - new NodeBuilder().setId(3).build(), - ]).build(); - - const expectedDiffTree = toPlainObject( - new NodeBuilder().setId(1).setDiffType(DiffType.NONE).setChildren([ - new NodeBuilder().setId(2).setDiffType(DiffType.NONE).build(), - new NodeBuilder().setId(4).setDiffType(DiffType.ADDED).build(), - new NodeBuilder().setId(3).setDiffType(DiffType.NONE).build(), - ]).build() - ); - - checkDiffTreeWithNoModifiedCheck(oldTree, newTree, expectedDiffTree); - }); - - it("can handle deletion within middle of level", () => { - const oldTree = new NodeBuilder().setId(1).setChildren([ - new NodeBuilder().setId(2).build(), - new NodeBuilder().setId(3).build(), - new NodeBuilder().setId(4).build(), - ]).build(); - - const newTree = new NodeBuilder().setId(1).setChildren([ - new NodeBuilder().setId(2).build(), - new NodeBuilder().setId(4).build(), - ]).build(); - - const expectedDiffTree = toPlainObject( - new NodeBuilder().setId(1).setDiffType(DiffType.NONE).setChildren([ - new NodeBuilder().setId(2).setDiffType(DiffType.NONE).build(), - new NodeBuilder().setId(3).setDiffType(DiffType.DELETED).build(), - new NodeBuilder().setId(4).setDiffType(DiffType.NONE).build(), - ]).build() - ); - - checkDiffTreeWithNoModifiedCheck(oldTree, newTree, expectedDiffTree); - }); - - it("fully visits deletes nodes", () => { - const oldTree = new NodeBuilder().setId(1).setChildren([ - new NodeBuilder().setId(2).setChildren([ - new NodeBuilder().setId(3).setChildren([ - new NodeBuilder().setId(4).build(), - ]).build(), - ]).build(), - ]).build(); - - const newTree = new NodeBuilder().setId(1).setChildren([ - new NodeBuilder().setId(2).build(), - new NodeBuilder().setId(3).setChildren([ - new NodeBuilder().setId(4).build(), - ]).build(), - ]).build(); - - const expectedDiffTree = toPlainObject( - new NodeBuilder().setId(1).setDiffType(DiffType.NONE).setChildren([ - new NodeBuilder().setId(2).setDiffType(DiffType.NONE).setChildren([ - new NodeBuilder().setId(3).setDiffType(DiffType.DELETED_MOVE).setChildren([ - new NodeBuilder().setId(4).setDiffType(DiffType.DELETED_MOVE).build(), - ]).build(), - ]).build(), - new NodeBuilder().setId(3).setDiffType(DiffType.ADDED_MOVE).setChildren([ - new NodeBuilder().setId(4).setDiffType(DiffType.NONE).build(), - ]).build(), - ]).build() - ); - - checkDiffTreeWithNoModifiedCheck(oldTree, newTree, expectedDiffTree); - }); - - it("preserves node chips", () => { - const oldTree = new NodeBuilder().setId(1).setChildren([ - new NodeBuilder().setId(2).setChips(["CHIP2"]).build(), - new NodeBuilder().setId(3).build(), - ]).build(); - - const newTree = new NodeBuilder().setId(1).setChildren([ - new NodeBuilder().setId(2).setChips(["CHIP2"]).build(), - new NodeBuilder().setId(4).setChips(["CHIP4"]).build(), - ]).build(); - - const expectedDiffTree = toPlainObject( - new NodeBuilder().setId(1).setDiffType(DiffType.NONE).setChildren([ - new NodeBuilder().setId(2).setChips(["CHIP2"]).setDiffType(DiffType.NONE).build(), - new NodeBuilder().setId(3).setDiffType(DiffType.DELETED).build(), - new NodeBuilder().setId(4).setChips(["CHIP4"]).setDiffType(DiffType.ADDED).build(), - ]).build() - ); - - checkDiffTreeWithNoModifiedCheck(oldTree, newTree, expectedDiffTree); - }); -}); \ No newline at end of file diff --git a/tools/winscope/spec/ImeProcessingSpec.js b/tools/winscope/spec/ImeProcessingSpec.js deleted file mode 100644 index 886941bd3..000000000 --- a/tools/winscope/spec/ImeProcessingSpec.js +++ /dev/null @@ -1,400 +0,0 @@ -import fs from 'fs'; -import path from 'path'; - -import {dataFile, decodeAndTransformProto, FILE_DECODERS, FILE_TYPES} from '../src/decode'; -import {combineWmSfWithImeDataIfExisting} from '../src/ime_processing'; - -const inputMethodClientFile = - '../spec/traces/ime_processing_traces/input_method_clients_trace.winscope'; -const inputMethodServiceFile = - '../spec/traces/ime_processing_traces/input_method_service_trace.winscope'; -const inputMethodManagerServiceFile = - '../spec/traces/ime_processing_traces/input_method_manager_service_trace.winscope'; -const sfFile = '../spec/traces/ime_processing_traces/sf_trace_for_ime.winscope'; -const wmFile = '../spec/traces/ime_processing_traces/wm_trace_for_ime.winscope'; - -/** - * Copied from decode.js but with the blobUrl mocked (due to some issues faced - * with importing Blob, which is used in the decode.js version of this function) - */ -function protoDecoder(buffer, params, fileName, store) { - const transformed = - decodeAndTransformProto(buffer, params, store.displayDefaults); - - // add tagGenerationTrace to dataFile for WM/SF traces so tags can be - // generated - var tagGenerationTrace = null; - if (params.type === FILE_TYPES.WINDOW_MANAGER_TRACE || - params.type === FILE_TYPES.SURFACE_FLINGER_TRACE) { - tagGenerationTrace = transformed; - } - - let data; - if (params.timeline) { - data = transformed.entries || transformed.children; - } else { - data = [transformed]; - } - const blobUrl = ''; - - return dataFile( - fileName, data.map((x) => x.timestamp), data, blobUrl, params.type, - tagGenerationTrace); -} - -describe('Ime Processing', () => { - it('can combine wm & sf properties into ime traces', () => { - const inputMethodClientBuffer = new Uint8Array( - fs.readFileSync(path.resolve(__dirname, inputMethodClientFile))); - const inputMethodServiceBuffer = new Uint8Array( - fs.readFileSync(path.resolve(__dirname, inputMethodServiceFile))); - const inputMethodManagerServiceBuffer = new Uint8Array(fs.readFileSync( - path.resolve(__dirname, inputMethodManagerServiceFile))); - const sfBuffer = - new Uint8Array(fs.readFileSync(path.resolve(__dirname, sfFile))); - const wmBuffer = - new Uint8Array(fs.readFileSync(path.resolve(__dirname, wmFile))); - - // (buffer, params, fileName, store) - const store = {displayDefaults: true}; - const inputMethodClientTrace = protoDecoder( - inputMethodClientBuffer, - FILE_DECODERS[FILE_TYPES.IME_TRACE_CLIENTS].decoderParams, - 'input_method_clients_trace.winscope', store); - const inputMethodServiceTrace = protoDecoder( - inputMethodServiceBuffer, - FILE_DECODERS[FILE_TYPES.IME_TRACE_SERVICE].decoderParams, - 'input_method_service_trace.winscope', store); - const inputMethodManagerServiceTrace = protoDecoder( - inputMethodManagerServiceBuffer, - FILE_DECODERS[FILE_TYPES.IME_TRACE_MANAGERSERVICE].decoderParams, - 'input_method_manager_service_trace.winscope', store); - const wmTrace = protoDecoder( - wmBuffer, FILE_DECODERS[FILE_TYPES.WINDOW_MANAGER_TRACE].decoderParams, - 'sf_trace.winscope', store); - const sfTrace = protoDecoder( - sfBuffer, FILE_DECODERS[FILE_TYPES.SURFACE_FLINGER_TRACE].decoderParams, - 'wm_trace.winscope', store); - - const dataFiles = { - 'ImeTrace Clients': inputMethodClientTrace, - 'ImeTrace InputMethodService': inputMethodServiceTrace, - 'ImeTrace InputMethodManagerService': inputMethodManagerServiceTrace, - 'WindowManagerTrace': wmTrace, - 'SurfaceFlingerTrace': sfTrace, - }; - combineWmSfWithImeDataIfExisting(dataFiles); - - expect(dataFiles.length == 5); - - const processedImeClientTrace = dataFiles['ImeTrace Clients']; - expect(processedImeClientTrace.type).toEqual('ImeTraceClients'); - expect(processedImeClientTrace.data).toBeDefined(); - expect(processedImeClientTrace.data[0].hasWmSfProperties).toBeTrue(); - - expect(processedImeClientTrace.data[1].wmProperties).toBeDefined(); - expect(processedImeClientTrace.data[1].wmProperties.name) - .toEqual('0d0h8m22s938ms'); - expect(processedImeClientTrace.data[1].wmProperties.focusedApp) - .toEqual( - 'com.google.android.apps.messaging/.ui.search.ZeroStateSearchActivity'); - expect(processedImeClientTrace.data[1].wmProperties.focusedActivity.token) - .toEqual("9d8c2ef"); - expect(processedImeClientTrace.data[1].wmProperties.focusedActivity.layerId) - .toEqual(260); - expect(processedImeClientTrace.data[1].wmProperties.focusedWindow.token) - .toEqual("928b3d"); - expect(processedImeClientTrace.data[1].wmProperties.focusedWindow.title) - .toEqual("com.google.android.apps.messaging/com.google.android.apps.messaging.ui.search.ZeroStateSearchActivity"); - expect(processedImeClientTrace.data[1].wmProperties.imeControlTarget.windowContainer.identifier.title) - .toEqual("com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity"); - expect(processedImeClientTrace.data[1].wmProperties.imeControlTarget.windowContainer.identifier.hashCode) - .toEqual(247026562); - expect(processedImeClientTrace.data[1].wmProperties.imeInputTarget.windowContainer.identifier.title) - .toEqual("com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity"); - expect(processedImeClientTrace.data[1].wmProperties.imeInputTarget.windowContainer.identifier.hashCode) - .toEqual(247026562); - expect(processedImeClientTrace.data[1].wmProperties.imeInsetsSourceProvider - .insetsSourceProvider).toBeDefined(); - expect(processedImeClientTrace.data[1].wmProperties.imeLayeringTarget.windowContainer.identifier.title) - .toEqual("SnapshotStartingWindow for taskId=1393"); - expect(processedImeClientTrace.data[1].wmProperties.imeLayeringTarget.windowContainer.identifier.hashCode) - .toEqual(222907471); - expect( - processedImeClientTrace.data[1].wmProperties.isInputMethodWindowVisible) - .toBeFalse(); - expect(processedImeClientTrace.data[1].wmProperties.proto).toBeDefined(); - expect(processedImeClientTrace.data[1].sfProperties.name) - .toEqual('0d0h8m22s942ms'); - expect(processedImeClientTrace.data[1] - .sfProperties.isInputMethodSurfaceVisible) - .toEqual(false); - expect(processedImeClientTrace.data[1].sfProperties.imeContainer.id) - .toEqual(12); - expect(processedImeClientTrace.data[1].sfProperties.inputMethodSurface.id) - .toEqual(280); - expect(processedImeClientTrace.data[1].sfProperties.rect.label).toEqual( - "Surface(name=77f1069 InputMethod)/@0xb4afb8f - animation-leash of insets_animation#280"); - expect(processedImeClientTrace.data[1].sfProperties.screenBounds) - .toBeDefined(); - expect(processedImeClientTrace.data[1].sfProperties.z).toEqual(1); - expect(processedImeClientTrace.data[1].sfProperties.zOrderRelativeOfId) - .toEqual(115); - expect(processedImeClientTrace.data[1].sfProperties.focusedWindowRgba) - .toBeDefined(); - expect(processedImeClientTrace.data[1].sfProperties.proto).toBeDefined(); - - expect(processedImeClientTrace.data[10].wmProperties).toBeDefined(); - expect(processedImeClientTrace.data[10].wmProperties.name) - .toEqual('0d0h8m23s69ms'); - expect(processedImeClientTrace.data[10].wmProperties.focusedApp) - .toEqual( - 'com.google.android.apps.messaging/.ui.search.ZeroStateSearchActivity'); - expect(processedImeClientTrace.data[10].wmProperties.focusedActivity.token) - .toEqual("9d8c2ef"); - expect(processedImeClientTrace.data[10].wmProperties.focusedActivity.layerId) - .toEqual(260); - expect(processedImeClientTrace.data[10].wmProperties.focusedWindow.token) - .toEqual("928b3d"); - expect(processedImeClientTrace.data[10].wmProperties.focusedWindow.title) - .toEqual("com.google.android.apps.messaging/com.google.android.apps.messaging.ui.search.ZeroStateSearchActivity"); - expect(processedImeClientTrace.data[10].wmProperties.imeControlTarget.windowContainer.identifier.title) - .toEqual("com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity"); - expect(processedImeClientTrace.data[10].wmProperties.imeControlTarget.windowContainer.identifier.hashCode) - .toEqual(247026562); - expect(processedImeClientTrace.data[10].wmProperties.imeInputTarget.windowContainer.identifier.title) - .toEqual("com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity"); - expect(processedImeClientTrace.data[10].wmProperties.imeInputTarget.windowContainer.identifier.hashCode) - .toEqual(247026562); - expect(processedImeClientTrace.data[10].wmProperties.imeInsetsSourceProvider - .insetsSourceProvider).toBeDefined(); - expect(processedImeClientTrace.data[10].wmProperties.imeLayeringTarget.windowContainer.identifier.title) - .toEqual("SnapshotStartingWindow for taskId=1393"); - expect(processedImeClientTrace.data[10].wmProperties.imeLayeringTarget.windowContainer.identifier.hashCode) - .toEqual(222907471); - expect( - processedImeClientTrace.data[10].wmProperties.isInputMethodWindowVisible) - .toBeFalse(); - expect(processedImeClientTrace.data[10].wmProperties.proto).toBeDefined(); - expect(processedImeClientTrace.data[10].sfProperties.name) - .toEqual('0d0h8m23s73ms'); - expect(processedImeClientTrace.data[10] - .sfProperties.isInputMethodSurfaceVisible) - .toEqual(false); - expect(processedImeClientTrace.data[10].sfProperties.imeContainer.id) - .toEqual(12); - expect(processedImeClientTrace.data[10].sfProperties.inputMethodSurface.id) - .toEqual(280); - expect(processedImeClientTrace.data[10].sfProperties.rect.label).toEqual( - "Surface(name=77f1069 InputMethod)/@0xb4afb8f - animation-leash of insets_animation#280"); - expect(processedImeClientTrace.data[10].sfProperties.screenBounds) - .toBeDefined(); - expect(processedImeClientTrace.data[10].sfProperties.z).toEqual(1); - expect(processedImeClientTrace.data[10].sfProperties.zOrderRelativeOfId) - .toEqual(115); - expect(processedImeClientTrace.data[10].sfProperties.focusedWindowRgba) - .toBeDefined(); - expect(processedImeClientTrace.data[10].sfProperties.proto).toBeDefined(); - - - const processedInputMethodServiceTrace = - dataFiles['ImeTrace InputMethodService']; - expect(processedInputMethodServiceTrace.type) - .toEqual('ImeTrace InputMethodService'); - expect(processedInputMethodServiceTrace.data[0].hasWmSfProperties) - .toBeTrue(); - - expect(processedInputMethodServiceTrace.data[1].wmProperties).toBeDefined(); - expect(processedInputMethodServiceTrace.data[1].wmProperties.name) - .toEqual('0d0h8m23s6ms'); - expect(processedInputMethodServiceTrace.data[1].wmProperties.focusedApp) - .toEqual( - 'com.google.android.apps.messaging/.ui.search.ZeroStateSearchActivity'); - expect(processedInputMethodServiceTrace.data[1].wmProperties.focusedActivity.token) - .toEqual("9d8c2ef"); - expect(processedInputMethodServiceTrace.data[1].wmProperties.focusedActivity.layerId) - .toEqual(260); - expect(processedInputMethodServiceTrace.data[1].wmProperties.focusedWindow.token) - .toEqual("928b3d"); - expect(processedInputMethodServiceTrace.data[1].wmProperties.focusedWindow.title) - .toEqual("com.google.android.apps.messaging/com.google.android.apps.messaging.ui.search.ZeroStateSearchActivity"); - expect(processedInputMethodServiceTrace.data[1].wmProperties.imeControlTarget.windowContainer.identifier.title) - .toEqual("com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity"); - expect(processedInputMethodServiceTrace.data[1].wmProperties.imeControlTarget.windowContainer.identifier.hashCode) - .toEqual(247026562); - expect(processedInputMethodServiceTrace.data[1].wmProperties.imeInputTarget.windowContainer.identifier.title) - .toEqual("com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity"); - expect(processedInputMethodServiceTrace.data[1].wmProperties.imeInputTarget.windowContainer.identifier.hashCode) - .toEqual(247026562); - expect(processedInputMethodServiceTrace.data[1].wmProperties.imeInsetsSourceProvider - .insetsSourceProvider).toBeDefined(); - expect(processedInputMethodServiceTrace.data[1].wmProperties.imeLayeringTarget.windowContainer.identifier.title) - .toEqual("SnapshotStartingWindow for taskId=1393"); - expect(processedInputMethodServiceTrace.data[1].wmProperties.imeLayeringTarget.windowContainer.identifier.hashCode) - .toEqual(222907471); - expect( - processedInputMethodServiceTrace.data[1].wmProperties.isInputMethodWindowVisible) - .toBeFalse(); - expect(processedInputMethodServiceTrace.data[1].wmProperties.proto).toBeDefined(); - expect(processedInputMethodServiceTrace.data[1].sfProperties.name) - .toEqual('0d0h8m23s26ms'); - expect(processedInputMethodServiceTrace.data[1] - .sfProperties.isInputMethodSurfaceVisible) - .toEqual(false); - expect(processedInputMethodServiceTrace.data[1].sfProperties.imeContainer.id) - .toEqual(12); - expect(processedInputMethodServiceTrace.data[1].sfProperties.inputMethodSurface.id) - .toEqual(280); - expect(processedInputMethodServiceTrace.data[1].sfProperties.rect.label).toEqual( - "Surface(name=77f1069 InputMethod)/@0xb4afb8f - animation-leash of insets_animation#280"); - expect(processedInputMethodServiceTrace.data[1].sfProperties.screenBounds) - .toBeDefined(); - expect(processedInputMethodServiceTrace.data[1].sfProperties.z).toEqual(1); - expect(processedInputMethodServiceTrace.data[1] - .sfProperties.zOrderRelativeOfId) - .toEqual(115); - expect( - processedInputMethodServiceTrace.data[1].sfProperties.focusedWindowRgba) - .toBeDefined(); - expect(processedInputMethodServiceTrace.data[1].sfProperties.proto) - .toBeDefined(); - - expect(processedInputMethodServiceTrace.data[10].wmProperties) - .toBeDefined(); - expect(processedInputMethodServiceTrace.data[10].wmProperties.name) - .toEqual('0d0h8m23s186ms'); - expect(processedInputMethodServiceTrace.data[10].wmProperties.focusedApp) - .toEqual( - 'com.google.android.apps.messaging/.ui.search.ZeroStateSearchActivity'); - expect(processedInputMethodServiceTrace.data[10].wmProperties.focusedActivity.token) - .toEqual("9d8c2ef"); - expect(processedInputMethodServiceTrace.data[10].wmProperties.focusedActivity.layerId) - .toEqual(260); - expect(processedInputMethodServiceTrace.data[10].wmProperties.focusedWindow.token) - .toEqual("928b3d"); - expect(processedInputMethodServiceTrace.data[10].wmProperties.focusedWindow.title) - .toEqual("com.google.android.apps.messaging/com.google.android.apps.messaging.ui.search.ZeroStateSearchActivity"); - expect(processedInputMethodServiceTrace.data[10].wmProperties.imeControlTarget.windowContainer.identifier.title) - .toEqual("com.google.android.apps.messaging/com.google.android.apps.messaging.ui.search.ZeroStateSearchActivity"); - expect(processedInputMethodServiceTrace.data[10].wmProperties.imeControlTarget.windowContainer.identifier.hashCode) - .toEqual(9603901); - expect(processedInputMethodServiceTrace.data[10].wmProperties.imeInputTarget.windowContainer.identifier.title) - .toEqual("com.google.android.apps.messaging/com.google.android.apps.messaging.ui.search.ZeroStateSearchActivity"); - expect(processedInputMethodServiceTrace.data[10].wmProperties.imeInputTarget.windowContainer.identifier.hashCode) - .toEqual(9603901); - expect(processedInputMethodServiceTrace.data[10].wmProperties.imeInsetsSourceProvider - .insetsSourceProvider).toBeDefined(); - expect(processedInputMethodServiceTrace.data[10].wmProperties.imeLayeringTarget.windowContainer.identifier.title) - .toEqual("SnapshotStartingWindow for taskId=1393"); - expect(processedInputMethodServiceTrace.data[10].wmProperties.imeLayeringTarget.windowContainer.identifier.hashCode) - .toEqual(222907471); - expect( - processedInputMethodServiceTrace.data[10].wmProperties.isInputMethodWindowVisible) - .toBeTrue(); - expect(processedInputMethodServiceTrace.data[10].wmProperties.proto) - .toBeDefined(); - expect(processedInputMethodServiceTrace.data[10].sfProperties.name) - .toEqual('0d0h8m23s173ms'); - expect(processedInputMethodServiceTrace.data[10] - .sfProperties.isInputMethodSurfaceVisible) - .toEqual(false); - expect(processedInputMethodServiceTrace.data[10].sfProperties.imeContainer.id) - .toEqual(12); - expect(processedInputMethodServiceTrace.data[10].sfProperties.inputMethodSurface.id) - .toEqual(291); - expect(processedInputMethodServiceTrace.data[10].sfProperties.rect.label).toEqual( - "Surface(name=77f1069 InputMethod)/@0xb4afb8f - animation-leash of" + - " insets_animation#291"); - expect(processedInputMethodServiceTrace.data[10].sfProperties.screenBounds) - .toBeDefined(); - expect(processedInputMethodServiceTrace.data[10].sfProperties.z).toEqual(1); - expect(processedInputMethodServiceTrace.data[10] - .sfProperties.zOrderRelativeOfId) - .toEqual(260); - expect(processedInputMethodServiceTrace.data[10] - .sfProperties.focusedWindowRgba) - .toBeDefined(); - expect(processedInputMethodServiceTrace.data[10].sfProperties.proto) - .toBeDefined(); - - const processedInputMethodManagerServiceTrace = dataFiles['ImeTrace' + - ' InputMethodManagerService']; - expect(processedInputMethodManagerServiceTrace.type) - .toEqual( - 'ImeTrace' + - ' InputMethodManagerService'); - expect(processedInputMethodManagerServiceTrace.data[0].hasWmSfProperties) - .toBeTrue(); - - expect(processedInputMethodManagerServiceTrace.data[1].wmProperties) - .toBeDefined(); - expect(processedInputMethodManagerServiceTrace.data[1].wmProperties.name) - .toEqual('0d0h8m23s52ms'); - expect( - processedInputMethodManagerServiceTrace.data[1].wmProperties.focusedApp) - .toEqual( - 'com.google.android.apps.messaging/.ui.search.ZeroStateSearchActivity'); - expect(processedInputMethodManagerServiceTrace.data[1].wmProperties.focusedActivity.token) - .toEqual("9d8c2ef"); - expect(processedInputMethodManagerServiceTrace.data[1].wmProperties.focusedActivity.layerId) - .toEqual(260); - expect(processedInputMethodManagerServiceTrace.data[1].wmProperties.focusedWindow.token) - .toEqual("928b3d"); - expect(processedInputMethodManagerServiceTrace.data[1].wmProperties.focusedWindow.title) - .toEqual("com.google.android.apps.messaging/com.google.android.apps.messaging.ui.search.ZeroStateSearchActivity"); - expect(processedInputMethodManagerServiceTrace.data[1].wmProperties.imeControlTarget.windowContainer.identifier.title) - .toEqual("com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity"); - expect(processedInputMethodManagerServiceTrace.data[1].wmProperties.imeControlTarget.windowContainer.identifier.hashCode) - .toEqual(247026562); - expect(processedInputMethodManagerServiceTrace.data[1].wmProperties.imeInputTarget.windowContainer.identifier.title) - .toEqual("com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity"); - expect(processedInputMethodManagerServiceTrace.data[1].wmProperties.imeInputTarget.windowContainer.identifier.hashCode) - .toEqual(247026562); - expect(processedInputMethodManagerServiceTrace.data[1].wmProperties.imeInsetsSourceProvider - .insetsSourceProvider).toBeDefined(); - expect(processedInputMethodManagerServiceTrace.data[1].wmProperties.imeLayeringTarget.windowContainer.identifier.title) - .toEqual("SnapshotStartingWindow for taskId=1393"); - expect(processedInputMethodManagerServiceTrace.data[1].wmProperties.imeLayeringTarget.windowContainer.identifier.hashCode) - .toEqual(222907471); - expect( - processedInputMethodManagerServiceTrace.data[1].wmProperties.isInputMethodWindowVisible) - .toBeFalse(); - expect(processedInputMethodManagerServiceTrace.data[1].wmProperties.proto).toBeDefined(); - - expect(processedInputMethodManagerServiceTrace.data[10].wmProperties) - .toBeDefined(); - expect(processedInputMethodManagerServiceTrace.data[10].wmProperties.name) - .toEqual('0d0h8m27s309ms'); - expect(processedInputMethodManagerServiceTrace.data[10] - .wmProperties.focusedApp) - .toEqual( - 'com.google.android.apps.messaging/.ui.search.ZeroStateSearchActivity'); - expect(processedInputMethodManagerServiceTrace.data[10].wmProperties.focusedActivity.token) - .toEqual("b1ce2cd"); - expect(processedInputMethodManagerServiceTrace.data[10].wmProperties.focusedActivity.layerId) - .toEqual(305); - expect(processedInputMethodManagerServiceTrace.data[10].wmProperties.focusedWindow.token) - .toEqual("31d0b"); - expect(processedInputMethodManagerServiceTrace.data[10].wmProperties.focusedWindow.title) - .toEqual("com.google.android.apps.messaging/com.google.android.apps.messaging.ui.search.ZeroStateSearchActivity"); - expect(processedInputMethodManagerServiceTrace.data[10].wmProperties.imeControlTarget.windowContainer.identifier.title) - .toEqual("com.google.android.apps.messaging/com.google.android.apps.messaging.ui.search.ZeroStateSearchActivity"); - expect(processedInputMethodManagerServiceTrace.data[10].wmProperties.imeControlTarget.windowContainer.identifier.hashCode) - .toEqual(204043); - expect(processedInputMethodManagerServiceTrace.data[10].wmProperties.imeInputTarget.windowContainer.identifier.title) - .toEqual("com.google.android.apps.messaging/com.google.android.apps.messaging.ui.search.ZeroStateSearchActivity"); - expect(processedInputMethodManagerServiceTrace.data[10].wmProperties.imeInputTarget.windowContainer.identifier.hashCode) - .toEqual(204043); - expect(processedInputMethodManagerServiceTrace.data[10].wmProperties.imeInsetsSourceProvider - .insetsSourceProvider).toBeDefined(); - expect(processedInputMethodManagerServiceTrace.data[10].wmProperties.imeLayeringTarget.windowContainer.identifier.title) - .toEqual("com.google.android.apps.messaging/com.google.android.apps.messaging.ui.search.ZeroStateSearchActivity"); - expect(processedInputMethodManagerServiceTrace.data[10].wmProperties.imeLayeringTarget.windowContainer.identifier.hashCode) - .toEqual(204043); - expect( - processedInputMethodManagerServiceTrace.data[10].wmProperties.isInputMethodWindowVisible) - .toBeTrue(); - expect(processedInputMethodManagerServiceTrace.data[10].wmProperties.proto).toBeDefined(); - - }); -}); diff --git a/tools/winscope/spec/ObjectTransformerSpec.js b/tools/winscope/spec/ObjectTransformerSpec.js deleted file mode 100644 index d095d70de..000000000 --- a/tools/winscope/spec/ObjectTransformerSpec.js +++ /dev/null @@ -1,183 +0,0 @@ -import { DiffType } from "../src/utils/diff.js"; -import { ObjectTransformer } from "../src/transform.js"; -import { NodeBuilder, toPlainObject } from "./utils/tree.js"; - -describe("ObjectTransformer", () => { - it("can transform a simple object", () => { - const obj = { - obj: { - string: 'string', - number: 3, - }, - array: [ - { - nested: "item", - }, - "two", - ], - }; - - const expectedTransformedObj = toPlainObject( - new NodeBuilder().setTransformed().setName('root') - .setStableId('root').setChildren([ - new NodeBuilder().setTransformed().setName('obj') - .setStableId('root.obj').setChildren([ - new NodeBuilder().setTransformed().setName('string: string') - .setStableId('root.obj.string').setCombined().build(), - new NodeBuilder().setTransformed().setName('number: 3') - .setStableId('root.obj.number').setCombined().build(), - ]).build(), - new NodeBuilder().setTransformed().setName('array') - .setStableId('root.array').setChildren([ - new NodeBuilder().setTransformed().setName('0') - .setStableId('root.array.0').setChildren([ - new NodeBuilder().setTransformed().setName('nested: item') - .setStableId('root.array.0.nested').setCombined().build(), - ]).build(), - new NodeBuilder().setTransformed().setName("1: two") - .setStableId('root.array.1').setCombined().build(), - ]).build() - ]).build() - ); - - const transformedObj = new ObjectTransformer(obj, 'root', 'root') - .setOptions({ formatter: () => { } }) - .transform(); - - expect(transformedObj).toEqual(expectedTransformedObj); - }); - - it("handles null as expected", () => { - const obj = { - obj: { - null: null, - }, - } - - const expectedTransformedObj = toPlainObject( - new NodeBuilder().setTransformed().setName('root') - .setStableId('root').setChildren([ - new NodeBuilder().setTransformed().setName('obj') - .setStableId('root.obj').setChildren([ - new NodeBuilder().setTransformed().setName('null: null') - .setStableId('root.obj.null').setCombined().build(), - ]).build(), - ]).build() - ); - - const transformedObj = new ObjectTransformer(obj, 'root', 'root') - .setOptions({ formatter: () => { } }) - .transform(); - - expect(transformedObj).toEqual(expectedTransformedObj); - }); - - it("can generate a simple add diff", () => { - const oldObj = { - a: { - b: 1, - }, - c: 2, - }; - - const newObj = { - a: { - b: 1, - d: 3, - }, - c: 2, - }; - - const expectedTransformedObj = toPlainObject( - new NodeBuilder().setTransformed().setName('root') - .setStableId('root').setDiffType(DiffType.NONE).setChildren([ - new NodeBuilder().setTransformed().setName('a') - .setStableId('root.a').setDiffType(DiffType.NONE).setChildren([ - new NodeBuilder().setTransformed().setName('b: 1') - .setStableId('root.a.b').setDiffType(DiffType.NONE).setCombined().build(), - new NodeBuilder().setTransformed().setName('d: 3') - .setStableId('root.a.d').setDiffType(DiffType.ADDED).setCombined().build(), - ]).build(), - new NodeBuilder().setTransformed().setName('c: 2').setStableId('root.c').setDiffType(DiffType.NONE).setCombined().build(), - ]).build() - ); - - const transformedObj = new ObjectTransformer(newObj, 'root', 'root') - .setOptions({ formatter: () => { } }) - .withDiff(oldObj) - .transform(); - - expect(transformedObj).toEqual(expectedTransformedObj); - }); - - it("can handle null", () => { - const oldObj = { - a: null, - }; - - const newObj = { - a: 1, - }; - - const expectedTransformedObj = toPlainObject( - new NodeBuilder().setTransformed().setName('root') - .setStableId('root').setDiffType(DiffType.NONE).setChildren([ - new NodeBuilder().setTransformed().setName('a') - .setStableId('root.a').setDiffType(DiffType.NONE).setChildren([ - new NodeBuilder().setTransformed().setName('1') - .setStableId('root.a.1').setDiffType(DiffType.ADDED).build(), - new NodeBuilder().setTransformed().setName('null') - .setStableId('root.a.null').setDiffType(DiffType.DELETED).build(), - ]).build(), - ]).build() - ); - - const transformedObj = new ObjectTransformer(newObj, 'root', 'root') - .setOptions({ formatter: () => { } }) - .withDiff(oldObj) - .transform(); - - expect(transformedObj).toEqual(expectedTransformedObj); - }); - - it("can handle nested null", () => { - const oldObj = { - a: { - b: null, - }, - c: 2, - }; - - const newObj = { - a: { - b: 1, - }, - c: 2, - }; - - const expectedTransformedObj = toPlainObject( - new NodeBuilder().setTransformed().setName('root') - .setStableId('root').setDiffType(DiffType.NONE).setChildren([ - new NodeBuilder().setTransformed().setName('a') - .setStableId('root.a').setDiffType(DiffType.NONE).setChildren([ - new NodeBuilder().setTransformed().setName('b') - .setStableId('root.a.b').setDiffType(DiffType.NONE).setChildren([ - new NodeBuilder().setTransformed().setName('1') - .setStableId('root.a.b.1').setDiffType(DiffType.ADDED).build(), - new NodeBuilder().setTransformed().setName('null') - .setStableId('root.a.b.null').setDiffType(DiffType.DELETED).build(), - ]).build(), - ]).build(), - new NodeBuilder().setTransformed().setName('c: 2') - .setStableId('root.c').setDiffType(DiffType.NONE).setCombined().build(), - ]).build() - ); - - const transformedObj = new ObjectTransformer(newObj, 'root', 'root') - .setOptions({ formatter: () => { } }) - .withDiff(oldObj) - .transform(); - - expect(transformedObj).toEqual(expectedTransformedObj); - }); -}); \ No newline at end of file diff --git a/tools/winscope/spec/ProtoTransformSpec.js b/tools/winscope/spec/ProtoTransformSpec.js deleted file mode 100644 index 0188d2485..000000000 --- a/tools/winscope/spec/ProtoTransformSpec.js +++ /dev/null @@ -1,28 +0,0 @@ -import { decodeAndTransformProto, FILE_TYPES, FILE_DECODERS } from '../src/decode'; -import fs from 'fs'; -import path from 'path'; -import { expectedEntries, expectedLayers, layers_traces } from './traces/ExpectedTraces'; - -describe("Proto Transformations", () => { - it("can transform surface flinger traces", () => { - for (var i = 0; i < layers_traces.length; i++) { - const trace = layers_traces[i]; - const buffer = new Uint8Array(fs.readFileSync(path.resolve(__dirname, trace))); - const data = decodeAndTransformProto(buffer, FILE_DECODERS[FILE_TYPES.SURFACE_FLINGER_TRACE].decoderParams, true); - - // use final entry as this determines if there was any error in previous entry parsing - const transformedEntry = data.entries[data.entries.length-1]; - const expectedEntry = expectedEntries[i]; - for (const property in expectedEntry) { - expect(transformedEntry[property]).toEqual(expectedEntry[property]); - } - - // check final flattened layer - const transformedLayer = transformedEntry.flattenedLayers[transformedEntry.flattenedLayers.length-1]; - const expectedLayer = expectedLayers[i]; - for (const property in expectedLayer) { - expect(transformedLayer[property]).toEqual(expectedLayer[property]); - } - } - }); -}); \ No newline at end of file diff --git a/tools/winscope/spec/SimplifiedLayerNamesSpec.js b/tools/winscope/spec/SimplifiedLayerNamesSpec.js deleted file mode 100644 index ce2f83f21..000000000 --- a/tools/winscope/spec/SimplifiedLayerNamesSpec.js +++ /dev/null @@ -1,24 +0,0 @@ -import { getSimplifiedLayerName } from "../src/utils/names"; - -const simplifications = { - "WindowToken{38eae45 android.os.BinderProxy@398bebc}#0": "WindowToken", - "7d8c460 NavigationBar0#0": "NavigationBar0#0", - "Surface(name=d2965b1 NavigationBar0)/@0xe4380b2 - animation-leash#2": "Surface - animation-leash#2", - "com.breel.wallpapers19.doodle.wallpaper.variations.DoodleWallpaperV1#0": "DoodleWallpaperV1#0", - "ActivityRecord{825ebe6 u0 com.google.android.apps.nexuslauncher/.NexusLauncherActivity#0": "ActivityRecord", - "com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity#0": "NexusLauncherActivity#0", - "com.android.settings/com.android.settings.Settings$UsbDetailsActivity#0": "Settings$UsbDetailsActivity#0", - "7d8c460 com.google.android.calendar/com.google.android.calendar.AllInOneCalendarActivity#0": "AllInOneCalendarActivity#0", - "WallpaperWindowToken{ad25afe token=android.os.Binder@8ab6b9}#0": "WallpaperWindowToken", -}; - -describe("getSimplifiedLayerName", () => { - it("simplifies traces as expected", () => { - for (const longName in simplifications) { - const expectedSimplifiedName = simplifications[longName]; - const actualSimplifiedName = getSimplifiedLayerName(longName); - - expect(actualSimplifiedName).toBe(expectedSimplifiedName); - } - }); -}); \ No newline at end of file diff --git a/tools/winscope/spec/TagErrorSpec.js b/tools/winscope/spec/TagErrorSpec.js deleted file mode 100644 index aa1ea47e0..000000000 --- a/tools/winscope/spec/TagErrorSpec.js +++ /dev/null @@ -1,71 +0,0 @@ -import { decodeAndTransformProto, FILE_TYPES, FILE_DECODERS } from '../src/decode'; -import Tag from '../src/flickerlib/tags/Tag'; -import Error from '../src/flickerlib/errors/Error'; -import { TaggingEngine } from '../src/flickerlib/common.js'; -import fs from 'fs'; -import path from 'path'; - -const tagTrace = '../spec/traces/tag_trace.winscope'; -const errorTrace = '../spec/traces/error_trace.winscope'; - -describe("Tag Transformation", () => { - it("can transform tag traces", () => { - const buffer = new Uint8Array(fs.readFileSync(path.resolve(__dirname, tagTrace))); - - const data = decodeAndTransformProto(buffer, FILE_DECODERS[FILE_TYPES.TAG_TRACE].decoderParams, true); - - expect(data.entries[0].timestamp.toString()).toEqual('159979677861'); - expect(data.entries[1].timestamp.toString()).toEqual('161268519083'); - expect(data.entries[2].timestamp.toString()).toEqual('161126718496'); - expect(data.entries[3].timestamp.toString()).toEqual('161613497398'); - expect(data.entries[4].timestamp.toString()).toEqual('161227062777'); - expect(data.entries[5].timestamp.toString()).toEqual('161268519083'); - expect(data.entries[6].timestamp.toString()).toEqual('161825945076'); - expect(data.entries[7].timestamp.toString()).toEqual('162261072567'); - - expect(data.entries[0].tags).toEqual([new Tag(12345,"PIP_ENTER",true,1,"",0)]); - expect(data.entries[1].tags).toEqual([new Tag(12345,"PIP_ENTER",false,2,"",2)]); - expect(data.entries[2].tags).toEqual([new Tag(67890,"ROTATION",true,3,"",3)]); - expect(data.entries[3].tags).toEqual([new Tag(67890,"ROTATION",false,4,"",4)]); - expect(data.entries[4].tags).toEqual([new Tag(9876,"PIP_EXIT",true,5,"",5)]); - expect(data.entries[5].tags).toEqual([new Tag(9876,"PIP_EXIT",false,6,"",6)]); - expect(data.entries[6].tags).toEqual([new Tag(54321,"IME_APPEAR",true,7,"",7)]); - expect(data.entries[7].tags).toEqual([new Tag(54321,"IME_APPEAR",false,8,"",8)]); - }) -}); - -describe("Detect Tag", () => { - it("can detect tags", () => { - const wmFile = '../spec/traces/regular_rotation_in_last_state_wm_trace.winscope' - const layersFile = '../spec/traces/regular_rotation_in_last_state_layers_trace.winscope' - const wmBuffer = new Uint8Array(fs.readFileSync(path.resolve(__dirname, wmFile))); - const layersBuffer = new Uint8Array(fs.readFileSync(path.resolve(__dirname, layersFile))); - - const wmTrace = decodeAndTransformProto(wmBuffer, FILE_DECODERS[FILE_TYPES.WINDOW_MANAGER_TRACE].decoderParams, true); - const layersTrace = decodeAndTransformProto(layersBuffer, FILE_DECODERS[FILE_TYPES.SURFACE_FLINGER_TRACE].decoderParams, true); - - const engine = new TaggingEngine(wmTrace, layersTrace, (text) => { console.log(text) }); - const tagTrace = engine.run(); - expect(tagTrace.size).toEqual(4); - expect(tagTrace.entries[0].timestamp.toString()).toEqual('280186737540384'); - expect(tagTrace.entries[1].timestamp.toString()).toEqual('280187243649340'); - expect(tagTrace.entries[2].timestamp.toString()).toEqual('280188522078113'); - expect(tagTrace.entries[3].timestamp.toString()).toEqual('280189020672174'); - }) -}); - -describe("Error Transformation", () => { - it("can transform error traces", () => { - const buffer = new Uint8Array(fs.readFileSync(path.resolve(__dirname, errorTrace))); - - const data = decodeAndTransformProto(buffer, FILE_DECODERS[FILE_TYPES.ERROR_TRACE].decoderParams, true); - - expect(data.entries[0].timestamp.toString()).toEqual('161401263106'); - expect(data.entries[1].timestamp.toString()).toEqual('161126718496'); - expect(data.entries[2].timestamp.toString()).toEqual('162261072567'); - - expect(data.entries[0].errors).toEqual([new Error("","",33,"",33)]); - expect(data.entries[1].errors).toEqual([new Error("","",66,"",66)]); - expect(data.entries[2].errors).toEqual([new Error("","",99,"",99)]); - }) -}); \ No newline at end of file diff --git a/tools/winscope/spec/support/jasmine.json b/tools/winscope/spec/support/jasmine.json deleted file mode 100644 index 32579a5e2..000000000 --- a/tools/winscope/spec/support/jasmine.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "spec_dir": "spec", - "spec_files": [ - "**/*[sS]pec.js" - ], - "helpers": [ - "../node_modules/@babel/register/lib/node.js" - ], - "stopSpecOnExpectationFailure": false, - "random": false -} \ No newline at end of file diff --git a/tools/winscope/spec/traces/ExpectedTraces.js b/tools/winscope/spec/traces/ExpectedTraces.js deleted file mode 100644 index 04a815434..000000000 --- a/tools/winscope/spec/traces/ExpectedTraces.js +++ /dev/null @@ -1,492 +0,0 @@ -import { ActiveBuffer, RectF, Transform, Matrix33, Color, Rect, Region } from '../../src/flickerlib/common.js'; -import { VISIBLE_CHIP } from '../../src/flickerlib/treeview/Chips'; - -const standardTransform = new Transform(0, new Matrix33(1, 0, 0, 0, 1, 0)); -const standardRect = new Rect(0, 0, 0, 0); -const standardColor = new Color(0, 0, 0, 1); -const standardCrop = new Rect(0, 0, -1, -1); - -const expectedEmptyRegionLayer = { - backgroundBlurRadius: 0, - chips: [], - cornerRadius: 0, - effectiveScalingMode: 0, - hwcCompositionType: "INVALID", - id: 580, - isOpaque: false, - isRelativeOf: false, - kind: "580", - name: "SurfaceView - com.android.chrome/com.google.android.apps.chrome.Main#0", - shadowRadius: 0, - shortName: "SurfaceView - com.android.(...).Main#0", - type: "BufferLayer", - z: -1, - zOrderRelativeOf: null, - parentId: 579, - activeBuffer: new ActiveBuffer(1440, 2614, 1472, 1), - bufferTransform: standardTransform, - color: new Color(0, 0, 0, 0.0069580078125), - crop: standardCrop, - hwcFrame: standardRect, - screenBounds: new RectF(37, 43, 146, 152), - transform: new Transform(0, new Matrix33(1, 0, 37.37078094482422, 0, 1, -3.5995326042175293)), - visibleRegion: new Region([new Rect(37, 43, 146, 152)]), -}; -const emptyRegionProto = { - 2: "\nparent=0\ntype=BufferLayer\nname=Display Root#0", - 3: "\nparent=0\ntype=BufferLayer\nname=Display Overlays#0", - 4: "\nparent=2\ntype=BufferLayer\nname=mBelowAppWindowsContainers#0", - 5: "\nparent=2\ntype=BufferLayer\nname=com.android.server.wm.DisplayContent$TaskStackContainers@193aa46#0", - 6: "\nparent=5\ntype=BufferLayer\nname=animationLayer#0", - 7: "\nparent=5\ntype=BufferLayer\nname=splitScreenDividerAnchor#0", - 8: "\nparent=2\ntype=BufferLayer\nname=mAboveAppWindowsContainers#0", - 9: "\nparent=2\ntype=BufferLayer\nname=mImeWindowsContainers#0", - 10: "\nparent=5\ntype=BufferLayer\nname=Stack=0#0", - 11: "\nparent=10\ntype=ColorLayer\nname=animation background stackId=0#0", - 12: "\nparent=9\ntype=BufferLayer\nname=WindowToken{f81e7fc android.os.Binder@7c880ef}#0", - 13: "\nparent=4\ntype=BufferLayer\nname=WallpaperWindowToken{3756850 token=android.os.Binder@25b3e13}#0", - 18: "\nparent=13\ntype=BufferLayer\nname=fd46a8e com.breel.wallpapers.dioramas.lagos.LagosWallpaperService#0", - 19: "\nparent=18\ntype=BufferLayer\nname=com.breel.wallpapers.dioramas.lagos.LagosWallpaperService#0", - 20: "\nparent=8\ntype=BufferLayer\nname=WindowToken{fc1aa98 android.os.BinderProxy@3517c7b}#0", - 21: "\nparent=20\ntype=BufferLayer\nname=10022f1 DockedStackDivider#0", - 22: "\nparent=8\ntype=BufferLayer\nname=WindowToken{49a6772 android.os.BinderProxy@7ba1c7d}#0", - 23: "\nparent=22\ntype=BufferLayer\nname=56ef7c3 AssistPreviewPanel#0", - 24: "\nparent=8\ntype=BufferLayer\nname=WindowToken{35f7d5c android.os.BinderProxy@8b38fcf}#0", - 25: "\nparent=24\ntype=BufferLayer\nname=9029865 NavigationBar#0", - 26: "\nparent=8\ntype=BufferLayer\nname=WindowToken{a9a69ab android.os.BinderProxy@f64ffa}#0", - 27: "\nparent=26\ntype=BufferLayer\nname=5334808 StatusBar#0", - 28: "\nparent=8\ntype=BufferLayer\nname=WindowToken{a63ca37 android.os.BinderProxy@435eb36}#0", - 29: "\nparent=28\ntype=BufferLayer\nname=1a40ba4 ScreenDecorOverlay#0", - 30: "\nparent=8\ntype=BufferLayer\nname=WindowToken{4ed84c2 android.os.BinderProxy@33d1d0d}#0", - 31: "\nparent=30\ntype=BufferLayer\nname=7a0d2d3 ScreenDecorOverlayBottom#0", - 32: "\nparent=25\ntype=BufferLayer\nname=NavigationBar#0", - 33: "\nparent=27\ntype=BufferLayer\nname=StatusBar#0", - 34: "\nparent=29\ntype=BufferLayer\nname=ScreenDecorOverlay#0", - 35: "\nparent=31\ntype=BufferLayer\nname=ScreenDecorOverlayBottom#0", - 36: "\nparent=10\ntype=BufferLayer\nname=Task=239#0", - 37: "\nparent=632\ntype=BufferLayer\nname=AppWindowToken{188ce21 token=Token{824488 ActivityRecord{b0d882b u0 com.google.android.apps.nexuslauncher/.NexusLauncherActivity t239}}}#0", - 38: "\nparent=37\ntype=BufferLayer\nname=9f6e33d com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity#0", - 44: "\nparent=37\ntype=BufferLayer\nname=81a00fc com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity#0", - 88: "\nparent=5\ntype=BufferLayer\nname=Stack=2#0", - 89: "\nparent=88\ntype=ColorLayer\nname=animation background stackId=2#0", - 90: "\nparent=88\ntype=BufferLayer\nname=Task=241#0", - 91: "\nparent=633\ntype=BufferLayer\nname=AppWindowToken{a9f5144 token=Token{f102257 ActivityRecord{3a0fd6 u0 com.android.chrome/com.google.android.apps.chrome.Main t241}}}#0", - 96: "\nparent=91\ntype=BufferLayer\nname=87e310e com.android.chrome/com.google.android.apps.chrome.Main#0", - 574: "\nparent=8\ntype=BufferLayer\nname=WindowToken{37eed7d android.os.Binder@6e217d4}#0", - 579: "\nparent=96\ntype=BufferLayer\nname=com.android.chrome/com.google.android.apps.chrome.Main#0", - 580: "\nparent=579\ntype=BufferLayer\nname=SurfaceView - com.android.chrome/com.google.android.apps.chrome.Main#0", - 581: "\nparent=579\ntype=ColorLayer\nname=Background for -SurfaceView - com.android.chrome/com.google.android.apps.chrome.Main#0", - 583: "\nparent=44\ntype=BufferLayer\nname=com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity#0", - 629: "\nparent=38\ntype=BufferLayer\nname=com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity#2", - 632: "\nparent=6\ntype=BufferLayer\nname=Surface(name=AppWindowToken{188ce21 token=Token{824488 ActivityRecord{b0d882b u0 com.google.android.apps.nexuslauncher/.NexusLauncherActivity t239}}})/@0x90c9c46 - animation-leash#1", - 633: "\nparent=6\ntype=BufferLayer\nname=Surface(name=AppWindowToken{a9f5144 token=Token{f102257 ActivityRecord{3a0fd6 u0 com.android.chrome/com.google.android.apps.chrome.Main t241}}})/@0xd9b9374 - animation-leash#1" -}; -const expectedEmptyRegion = { - chips: [], - proto: emptyRegionProto, - hwcBlob: "", - isVisible: true, - kind: "entry", - rects: [], - shortName: "0d0h38m28s521ms", - timestampMs: "2308521813510", - where: "", - name: "0d0h38m28s521ms", - stableId: "LayerTraceEntry", - visibleLayers: [], -}; - -const expectedInvalidLayerVisibilityLayer = { - backgroundBlurRadius: 0, - chips: [], - cornerRadius: 0, - effectiveScalingMode: 0, - hwcCompositionType: "INVALID", - id: 1536, - isOpaque: false, - isRelativeOf: false, - kind: "1536", - name: "com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity#2", - shadowRadius: 0, - shortName: "com.google.(...).NexusLauncherActivity#2", - type: "BufferLayer", - z: 0, - zOrderRelativeOf: null, - parentId: 1535, - stableId: "BufferLayer 1536 com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity#2", - activeBuffer: new ActiveBuffer(1440, 2880, 1472, 1), - bufferTransform: standardTransform, - color: new Color(-1, -1, -1, 0), - hwcFrame: standardRect, - transform: standardTransform, - visibleRegion: new Region([standardRect]), -}; -const invalidLayerVisibilityProto = { - 2: "\nparent=0\ntype=BufferLayer\nname=Display Root#0", - 3: "\nparent=0\ntype=BufferLayer\nname=Display Overlays#0", - 4: "\nparent=2\ntype=BufferLayer\nname=mBelowAppWindowsContainers#0", - 5: "\nparent=2\ntype=BufferLayer\nname=com.android.server.wm.DisplayContent$TaskStackContainers@4270eb4#0", - 6: "\nparent=5\ntype=BufferLayer\nname=animationLayer#0", - 7: "\nparent=5\ntype=BufferLayer\nname=boostedAnimationLayer#0", - 8: "\nparent=5\ntype=BufferLayer\nname=homeAnimationLayer#0", - 9: "\nparent=5\ntype=BufferLayer\nname=splitScreenDividerAnchor#0", - 10: "\nparent=2\ntype=BufferLayer\nname=mAboveAppWindowsContainers#0", - 11: "\nparent=2\ntype=BufferLayer\nname=mImeWindowsContainers#0", - 12: "\nparent=5\ntype=BufferLayer\nname=Stack=0#0", - 13: "\nparent=12\ntype=ColorLayer\nname=animation background stackId=0#0", - 14: "\nparent=11\ntype=BufferLayer\nname=WindowToken{268fcff android.os.Binder@6688c1e}#0", - 15: "\nparent=4\ntype=BufferLayer\nname=WallpaperWindowToken{6572e20 token=android.os.Binder@9543923}#0", - 20: "\nparent=15\ntype=BufferLayer\nname=5e2e96f com.breel.wallpapers.dioramas.lagos.LagosWallpaperService#0", - 21: "\nparent=20\ntype=BufferLayer\nname=com.breel.wallpapers.dioramas.lagos.LagosWallpaperService#0", - 26: "\nparent=10\ntype=BufferLayer\nname=WindowToken{68e3f31 android.os.BinderProxy@f018fd8}#0", - 27: "\nparent=26\ntype=BufferLayer\nname=2b80616 NavigationBar#0", - 28: "\nparent=10\ntype=BufferLayer\nname=WindowToken{4e20cae android.os.BinderProxy@9086129}#0", - 29: "\nparent=28\ntype=BufferLayer\nname=b09a4f StatusBar#0", - 30: "\nparent=3\ntype=BufferLayer\nname=WindowToken{501e3b8 android.os.BinderProxy@238661b}#0", - 31: "\nparent=30\ntype=BufferLayer\nname=d803591 ScreenDecorOverlay#0", - 32: "\nparent=3\ntype=BufferLayer\nname=WindowToken{56d48f7 android.os.BinderProxy@f0f2cf6}#0", - 33: "\nparent=32\ntype=BufferLayer\nname=1cd8364 ScreenDecorOverlayBottom#0", - 35: "\nparent=29\ntype=BufferLayer\nname=StatusBar#0", - 36: "\nparent=31\ntype=BufferLayer\nname=ScreenDecorOverlay#0", - 37: "\nparent=33\ntype=BufferLayer\nname=ScreenDecorOverlayBottom#0", - 38: "\nparent=12\ntype=BufferLayer\nname=Task=2#0", - 39: "\nparent=38\ntype=BufferLayer\nname=AppWindowToken{215b919 token=Token{104a060 ActivityRecord{7e30c63 u0 com.google.android.apps.nexuslauncher/.NexusLauncherActivity t2}}}#0", - 821: "\nparent=14\ntype=BufferLayer\nname=5c937c8 InputMethod#0", - 1078: "\nparent=10\ntype=BufferLayer\nname=WindowToken{7dc6283 android.os.BinderProxy@f83c532}#0", - 1079: "\nparent=1078\ntype=BufferLayer\nname=32c0c00 AssistPreviewPanel#0", - 1080: "\nparent=10\ntype=BufferLayer\nname=WindowToken{9f8a3df android.os.BinderProxy@825027e}#0", - 1081: "\nparent=1080\ntype=BufferLayer\nname=26d9efb DockedStackDivider#0", - 1403: "\nparent=10\ntype=BufferLayer\nname=WindowToken{dedcfff android.os.Binder@a80cb1e}#0", - 1447: "\nparent=39\ntype=BufferLayer\nname=39ca531 com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity#0", - 1454: "\nparent=27\ntype=BufferLayer\nname=NavigationBar#0", - 1502: "\nparent=10\ntype=BufferLayer\nname=WindowToken{3ea357b android.os.Binder@6d9a90a}#0", - 1505: "\nparent=1518\ntype=BufferLayer\nname=Task=623#0", - 1506: "\nparent=1505\ntype=BufferLayer\nname=AppWindowToken{6deed44 token=Token{45cae57 ActivityRecord{7f14bd6 u0 com.android.server.wm.flicker.testapp/.SimpleActivity t623}}}#0", - 1518: "\nparent=5\ntype=BufferLayer\nname=Stack=51#0", - 1519: "\nparent=1518\ntype=ColorLayer\nname=animation background stackId=51#0", - 1521: "\nparent=1506\ntype=BufferLayer\nname=496d52e com.android.server.wm.flicker.testapp/com.android.server.wm.flicker.testapp.SimpleActivity#0", - 1534: "\nparent=1447\ntype=BufferLayer\nname=com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity#0", - 1535: "\nparent=39\ntype=BufferLayer\nname=e280197 com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity#0", - 1536: "\nparent=1535\ntype=BufferLayer\nname=com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity#2", -}; -const expectedInvalidLayerVisibility = { - chips: [], - proto: invalidLayerVisibilityProto, - hwcBlob: "", - isVisible: true, - kind: "entry", - rects: [], - shortName: "2d22h13m17s233ms", - timestampMs: "252797233543024", - where: "", - name: "2d22h13m17s233ms", - stableId: "LayerTraceEntry", - visibleLayers: [], -}; - -const expectedOrphanLayersLayer = { - backgroundBlurRadius: 0, - chips: [], - cornerRadius: 0, - effectiveScalingMode: 0, - hwcCompositionType: "INVALID", - id: 1012, - isOpaque: true, - isRelativeOf: false, - kind: "1012", - name: "SurfaceView - com.android.chrome/com.google.android.apps.chrome.Main#0", - shadowRadius: 0, - shortName: "SurfaceView - com.android.(...).Main#0", - type: "BufferLayer", - z: -1, - zOrderRelativeOf: null, - parentId: 1011, - stableId: "BufferLayer 1012 SurfaceView - com.android.chrome/com.google.android.apps.chrome.Main#0", - activeBuffer: new ActiveBuffer(1440, 2614, 1472, 1), - bufferTransform: standardTransform, - color: standardColor, - crop: standardCrop, - hwcFrame: standardRect, - screenBounds: new RectF(0, 98, 1440, 2712), - transform: new Transform(0, new Matrix33(1, 0, 0, 0, 1, 98)), - visibleRegion: new Region([new Rect(0, 98, 1440, 2712)]), -}; -const expectedOrphanLayersProto = { - 2: "\nparent=0\ntype=BufferLayer\nname=Display Root#0", - 3: "\nparent=0\ntype=BufferLayer\nname=Display Overlays#0", - 4: "\nparent=2\ntype=BufferLayer\nname=mBelowAppWindowsContainers#0", - 5: "\nparent=2\ntype=BufferLayer\nname=com.android.server.wm.DisplayContent$TaskStackContainers@e7dd520#0", - 6: "\nparent=5\ntype=BufferLayer\nname=animationLayer#0", - 7: "\nparent=5\ntype=BufferLayer\nname=splitScreenDividerAnchor#0", - 8: "\nparent=2\ntype=BufferLayer\nname=mAboveAppWindowsContainers#0", - 9: "\nparent=2\ntype=BufferLayer\nname=mImeWindowsContainers#0", - 10: "\nparent=5\ntype=BufferLayer\nname=Stack=0#0", - 11: "\nparent=10\ntype=ColorLayer\nname=animation background stackId=0#0", - 12: "\nparent=9\ntype=BufferLayer\nname=WindowToken{1350b6f android.os.Binder@d1b0e4e}#0", - 13: "\nparent=4\ntype=BufferLayer\nname=WallpaperWindowToken{4537182 token=android.os.Binder@d87c4cd}#0", - 18: "\nparent=13\ntype=BufferLayer\nname=8d26107 com.breel.wallpapers.dioramas.lagos.LagosWallpaperService#0", - 19: "\nparent=18\ntype=BufferLayer\nname=com.breel.wallpapers.dioramas.lagos.LagosWallpaperService#0", - 20: "\nparent=8\ntype=BufferLayer\nname=WindowToken{fba948d android.os.BinderProxy@756b124}#0", - 21: "\nparent=20\ntype=BufferLayer\nname=dc26642 DockedStackDivider#0", - 22: "\nparent=8\ntype=BufferLayer\nname=WindowToken{45663b4 android.os.BinderProxy@5273887}#0", - 23: "\nparent=22\ntype=BufferLayer\nname=c617bdd AssistPreviewPanel#0", - 24: "\nparent=8\ntype=BufferLayer\nname=WindowToken{ef90888 android.os.BinderProxy@9d4dc2b}#0", - 25: "\nparent=24\ntype=BufferLayer\nname=1d24221 NavigationBar#0", - 26: "\nparent=8\ntype=BufferLayer\nname=WindowToken{6b1dca9 android.os.BinderProxy@a53d830}#0", - 27: "\nparent=26\ntype=BufferLayer\nname=eaca22e StatusBar#0", - 28: "\nparent=8\ntype=BufferLayer\nname=WindowToken{72e584c android.os.BinderProxy@3ba407f}#0", - 29: "\nparent=28\ntype=BufferLayer\nname=46af095 ScreenDecorOverlay#0", - 30: "\nparent=8\ntype=BufferLayer\nname=WindowToken{bc659b android.os.BinderProxy@f1405aa}#0", - 31: "\nparent=30\ntype=BufferLayer\nname=80ead38 ScreenDecorOverlayBottom#0", - 33: "\nparent=27\ntype=BufferLayer\nname=StatusBar#0", - 34: "\nparent=29\ntype=BufferLayer\nname=ScreenDecorOverlay#0", - 35: "\nparent=31\ntype=BufferLayer\nname=ScreenDecorOverlayBottom#0", - 36: "\nparent=10\ntype=BufferLayer\nname=Task=2#0", - 37: "\nparent=36\ntype=BufferLayer\nname=AppWindowToken{5162f77 token=Token{ac99d76 ActivityRecord{7749795 u0 com.google.android.apps.nexuslauncher/.NexusLauncherActivity t2}}}#0", - 38: "\nparent=37\ntype=BufferLayer\nname=2c19e73 com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity#0", - 41: "\nparent=25\ntype=BufferLayer\nname=NavigationBar#1", - 43: "\nparent=37\ntype=BufferLayer\nname=2f0c80b com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity#0", - 46: "\nparent=5\ntype=BufferLayer\nname=Stack=1#0", - 47: "\nparent=46\ntype=ColorLayer\nname=animation background stackId=1#0", - 48: "\nparent=46\ntype=BufferLayer\nname=Task=89#0", - 49: "\nparent=48\ntype=BufferLayer\nname=AppWindowToken{1d514da token=Token{d36fe85 ActivityRecord{e0ec0ef u0 com.android.chrome/com.google.android.apps.chrome.Main t89}}}#0", - 54: "\nparent=49\ntype=BufferLayer\nname=8ae6e06 com.android.chrome/com.google.android.apps.chrome.Main#0", - 607: "\nparent=5\ntype=BufferLayer\nname=Stack=9#0", - 608: "\nparent=607\ntype=ColorLayer\nname=animation background stackId=9#0", - 609: "\nparent=607\ntype=BufferLayer\nname=Task=97#0", - 615: "\nparent=609\ntype=BufferLayer\nname=AppWindowToken{28730c9 token=Token{4d768d0 ActivityRecord{faf093 u0 com.google.android.gm/.welcome.WelcomeTourActivity t97}}}#0", - 616: "\nparent=615\ntype=BufferLayer\nname=44e6e5c com.google.android.gm/com.google.android.gm.welcome.WelcomeTourActivity#0", - 679: "\nparent=12\ntype=BufferLayer\nname=2d0b1e4 InputMethod#0", - 993: "\nparent=8\ntype=BufferLayer\nname=WindowToken{e425e58 android.os.Binder@6d9a73b}#0", - 1011: "\nparent=54\ntype=BufferLayer\nname=com.android.chrome/com.google.android.apps.chrome.Main#0", - 1012: "\nparent=1011\ntype=BufferLayer\nname=SurfaceView - com.android.chrome/com.google.android.apps.chrome.Main#0", - 1013: "\nparent=1011\ntype=ColorLayer\nname=Background for -SurfaceView - com.android.chrome/com.google.android.apps.chrome.Main#0", -}; -const expectedOrphanLayers = { - chips: [], - proto: expectedOrphanLayersProto, - hwcBlob: "", - isVisible: true, - kind: "entry", - rects: [], - shortName: "3d23h30m9s820ms", - timestampMs: "343809820196384", - where: "", - name: "3d23h30m9s820ms", - stableId: "LayerTraceEntry", - visibleLayers: [], -}; - -const expectedRootLayer = { - backgroundBlurRadius: 0, - cornerRadius: 0, - effectiveScalingMode: 0, - hwcCompositionType: "INVALID", - id: 12545, - isOpaque: true, - isRelativeOf: false, - kind: "12545", - name: "com.android.server.wm.flicker.testapp/com.android.server.wm.flicker.testapp.SimpleActivity#0", - shadowRadius: 0, - shortName: "com.android.(...).SimpleActivity#0", - type: "BufferQueueLayer", - z: 0, - zOrderRelativeOf: null, - parentId: 12541, - stableId: "BufferQueueLayer 12545 com.android.server.wm.flicker.testapp/com.android.server.wm.flicker.testapp.SimpleActivity#0", - activeBuffer: new ActiveBuffer(1440, 2960, 1472, 1), - chips: [VISIBLE_CHIP], - bufferTransform: standardTransform, - color: standardColor, - crop: new Rect(0, 0, 1440, 2960), - hwcFrame: standardRect, - screenBounds: new RectF(0, 0, 1440, 2960), - sourceBounds: new RectF(0, 0, 1440, 2960), - transform: standardTransform, - visibleRegion: new Region([new Rect(0, 0, 1440, 2960)]), -}; -const expectedRootProto = { - 2: "\nparent=-1\ntype=ContainerLayer\nname=Root#0", - 3: "\nparent=2\ntype=ContainerLayer\nname=mWindowContainers#0", - 4: "\nparent=2\ntype=ContainerLayer\nname=mOverlayContainers#0", - 5: "\nparent=3\ntype=ContainerLayer\nname=mBelowAppWindowsContainers#0", - 6: "\nparent=3\ntype=ContainerLayer\nname=com.android.server.wm.DisplayContent$TaskContainers@708b672#0", - 7: "\nparent=6\ntype=ContainerLayer\nname=animationLayer#0", - 8: "\nparent=6\ntype=ContainerLayer\nname=boostedAnimationLayer#0", - 9: "\nparent=6\ntype=ContainerLayer\nname=homeAnimationLayer#0", - 10: "\nparent=6\ntype=ContainerLayer\nname=splitScreenDividerAnchor#0", - 11: "\nparent=3\ntype=ContainerLayer\nname=mAboveAppWindowsContainers#0", - 12: "\nparent=3\ntype=ContainerLayer\nname=ImeContainer#0", - 13: "\nparent=6\ntype=ContainerLayer\nname=Task=1#0", - 18: "\nparent=5\ntype=ContainerLayer\nname=WallpaperWindowToken{4c3f8ef token=android.os.Binder@a0341ce}#0", - 19: "\nparent=18\ntype=ContainerLayer\nname=aa9ba7e com.breel.wallpapers18.soundviz.wallpaper.variations.SoundVizWallpaperV2#0", - 20: "\nparent=19\ntype=BufferQueueLayer\nname=com.breel.wallpapers18.soundviz.wallpaper.variations.SoundVizWallpaperV2#0", - 23: "\nparent=11\ntype=ContainerLayer\nname=WindowToken{2e98b86 android.os.BinderProxy@6e5dbc8}#0", - 24: "\nparent=23\ntype=ContainerLayer\nname=5976c47 NavigationBar0#0", - 25: "\nparent=11\ntype=ContainerLayer\nname=WindowToken{525aa4 android.os.BinderProxy@df1e236}#0", - 26: "\nparent=25\ntype=ContainerLayer\nname=986c00d NotificationShade#0", - 27: "\nparent=11\ntype=ContainerLayer\nname=WindowToken{7ec5009 android.os.BinderProxy@de2add3}#0", - 28: "\nparent=27\ntype=ContainerLayer\nname=3a0542f StatusBar#0", - 31: "\nparent=-1\ntype=ContainerLayer\nname=WindowToken{eef604c android.os.BinderProxy@d3a687f}#0", - 32: "\nparent=31\ntype=ContainerLayer\nname=20b5895 ScreenDecorOverlay#0", - 33: "\nparent=-1\ntype=ContainerLayer\nname=WindowToken{4846f6f android.os.BinderProxy@39824e}#0", - 34: "\nparent=33\ntype=ContainerLayer\nname=1d714 ScreenDecorOverlayBottom#0", - 36: "\nparent=32\ntype=BufferQueueLayer\nname=ScreenDecorOverlay#0", - 38: "\nparent=34\ntype=BufferQueueLayer\nname=ScreenDecorOverlayBottom#0", - 40: "\nparent=28\ntype=BufferQueueLayer\nname=StatusBar#0", - 43: "\nparent=12\ntype=ContainerLayer\nname=WindowToken{fa12db9 android.os.Binder@4b88380}#0", - 46: "\nparent=13\ntype=ContainerLayer\nname=Task=4#0", - 47: "\nparent=46\ntype=ContainerLayer\nname=ActivityRecord{99bbfb0 u0 com.google.android.apps.nexuslauncher/.NexusLauncherActivity#0", - 54: "\nparent=24\ntype=BufferQueueLayer\nname=NavigationBar0#0", - 71: "\nparent=43\ntype=ContainerLayer\nname=e8f94d2 InputMethod#0", - 11499: "\nparent=47\ntype=ContainerLayer\nname=6737b79 com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity#0", - 11501: "\nparent=-1\ntype=ContainerLayer\nname=Input Consumer recents_animation_input_consumer#2", - 11759: "\nparent=6\ntype=ContainerLayer\nname=Task=873#0", - 11760: "\nparent=11759\ntype=ContainerLayer\nname=Task=874#0", - 11761: "\nparent=11760\ntype=ContainerLayer\nname=ActivityRecord{7398002 u0 com.android.server.wm.flicker.testapp/.ImeActivityAutoFocus#0", - 11785: "\nparent=11761\ntype=ColorLayer\nname=Letterbox - right#0", - 12131: "\nparent=11\ntype=ContainerLayer\nname=WindowToken{bbffcfd android.os.Binder@547b554}#0", - 12379: "\nparent=47\ntype=ContainerLayer\nname=3f8f098 com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity#0", - 12412: "\nparent=11761\ntype=ContainerLayer\nname=edca7c6 com.android.server.wm.flicker.testapp/com.android.server.wm.flicker.testapp.ImeActivityAutoFocus#0", - 12448: "\nparent=2147483645\ntype=ContainerLayer\nname=Surface(name=ActivityRecord{99bbfb0 u0 com.google.android.apps.nexuslauncher/.NexusLauncherActivity)/@0x2c3972c - animation-leash#0", - 12449: "\nparent=2147483645\ntype=ContainerLayer\nname=Surface(name=ActivityRecord{fc16c94 u0 com.android.server.wm.flicker.testapp/.ImeActivity)/@0x7049863 - animation-leash#0", - 12485: "\nparent=6\ntype=ContainerLayer\nname=Task=908#0", - 12486: "\nparent=12485\ntype=ContainerLayer\nname=Task=909#0", - 12487: "\nparent=12486\ntype=ContainerLayer\nname=ActivityRecord{4b3c5cb u0 com.android.server.wm.flicker.testapp/.ImeActivity#0", - 12500: "\nparent=2147483645\ntype=ContainerLayer\nname=Surface(name=ActivityRecord{99bbfb0 u0 com.google.android.apps.nexuslauncher/.NexusLauncherActivity)/@0x2c3972c - animation-leash#0", - 12501: "\nparent=2147483645\ntype=ContainerLayer\nname=Surface(name=ActivityRecord{4b3c5cb u0 com.android.server.wm.flicker.testapp/.ImeActivity)/@0x4ad47a1 - animation-leash#0", - 12502: "\nparent=2147483645\ntype=ContainerLayer\nname=Surface(name=WallpaperWindowToken{4c3f8ef token=android.os.Binder@a0341ce})/@0xcde5e65 - animation-leash#0", - 12511: "\nparent=12487\ntype=ColorLayer\nname=Letterbox - right#1", - 12514: "\nparent=12487\ntype=ContainerLayer\nname=debe1ed com.android.server.wm.flicker.testapp/com.android.server.wm.flicker.testapp.ImeActivity#0", - 12526: "\nparent=11\ntype=ContainerLayer\nname=WindowToken{6b7d663 android.os.BinderProxy@391f21d}#0", - 12527: "\nparent=12526\ntype=ContainerLayer\nname=32aa260 AssistPreviewPanel#0", - 12529: "\nparent=11\ntype=ContainerLayer\nname=WindowToken{31f7489 android.os.BinderProxy@67b1e53}#0", - 12530: "\nparent=12529\ntype=ContainerLayer\nname=cbb28bc DockedStackDivider#0", - 12536: "\nparent=6\ntype=ContainerLayer\nname=Task=910#0", - 12537: "\nparent=12536\ntype=ContainerLayer\nname=Task=911#0", - 12538: "\nparent=12537\ntype=ContainerLayer\nname=ActivityRecord{d3b8a44 u0 com.android.server.wm.flicker.testapp/.SimpleActivity#0", - 12541: "\nparent=12538\ntype=ContainerLayer\nname=a3583c5 com.android.server.wm.flicker.testapp/com.android.server.wm.flicker.testapp.SimpleActivity#0", - 12545: "\nparent=12541\ntype=BufferQueueLayer\nname=com.android.server.wm.flicker.testapp/com.android.server.wm.flicker.testapp.SimpleActivity#0", - 2147483645: "\nparent=-1\ntype=\nname=Offscreen Root", -}; -const expectedRoot = { - chips: [], - proto: expectedRootProto, - hwcBlob: "", - isVisible: true, - kind: "entry", - shortName: "0d1h46m19s146ms", - timestampMs: "6379146308030", - where: "", - name: "0d1h46m19s146ms", - stableId: "LayerTraceEntry", -}; - -const expectedRootAospLayer = { - backgroundBlurRadius: 0, - cornerRadius: 0, - effectiveScalingMode: 0, - hwcCompositionType: "INVALID", - id: 876, - isOpaque: false, - isRelativeOf: false, - kind: "876", - name: "com.android.launcher3/com.android.launcher3.Launcher#0", - shadowRadius: 0, - shortName: "com.android.(...).Launcher#0", - type: "BufferLayer", - z: 0, - zOrderRelativeOf: null, - parentId: 41, - activeBuffer: new ActiveBuffer(1440, 2880, 1472, 1), - bufferTransform: standardTransform, - chips: [VISIBLE_CHIP], - color: standardColor, - crop: new Rect(0, 0, 1440, 2880), - hwcFrame: standardRect, - screenBounds: new RectF(0, 0, 1440, 2880), - sourceBounds: new RectF(0, 0, 1440, 2880), - transform: standardTransform, - visibleRegion: new Region([new Rect(0, 0, 1440, 2880)]), -}; -const expectedRootAospProto = { - 2: "\nparent=-1\ntype=ContainerLayer\nname=Display Root#0", - 3: "\nparent=-1\ntype=ContainerLayer\nname=Display Overlays#0", - 4: "\nparent=2\ntype=ContainerLayer\nname=mBelowAppWindowsContainers#0", - 5: "\nparent=2\ntype=ContainerLayer\nname=com.android.server.wm.DisplayContent$TaskStackContainers@d8077b3#0", - 6: "\nparent=5\ntype=ContainerLayer\nname=animationLayer#0", - 7: "\nparent=5\ntype=ContainerLayer\nname=boostedAnimationLayer#0", - 8: "\nparent=5\ntype=ContainerLayer\nname=homeAnimationLayer#0", - 9: "\nparent=5\ntype=ContainerLayer\nname=splitScreenDividerAnchor#0", - 10: "\nparent=2\ntype=ContainerLayer\nname=mAboveAppWindowsContainers#0", - 11: "\nparent=2\ntype=ContainerLayer\nname=mImeWindowsContainers#0", - 12: "\nparent=5\ntype=ContainerLayer\nname=Stack=0#0", - 13: "\nparent=12\ntype=ColorLayer\nname=animation background stackId=0#0", - 18: "\nparent=4\ntype=ContainerLayer\nname=WallpaperWindowToken{5a7eaca token=android.os.Binder@438b635}#0", - 23: "\nparent=10\ntype=ContainerLayer\nname=WindowToken{d19e48 android.os.BinderProxy@560ac3a}#0", - 24: "\nparent=23\ntype=ContainerLayer\nname=b2a84e1 NavigationBar0#0", - 25: "\nparent=10\ntype=ContainerLayer\nname=WindowToken{74d6851 android.os.BinderProxy@8b22adb}#0", - 26: "\nparent=25\ntype=ContainerLayer\nname=16448b6 StatusBar#0", - 27: "\nparent=-1\ntype=ContainerLayer\nname=WindowToken{624863c android.os.BinderProxy@975b02f}#0", - 28: "\nparent=27\ntype=ContainerLayer\nname=cdb9fc5 ScreenDecorOverlay#0", - 29: "\nparent=-1\ntype=ContainerLayer\nname=WindowToken{cb7204b android.os.BinderProxy@b8f3d1a}#0", - 30: "\nparent=29\ntype=ContainerLayer\nname=ad1ca28 ScreenDecorOverlayBottom#0", - 31: "\nparent=28\ntype=BufferLayer\nname=ScreenDecorOverlay#0", - 32: "\nparent=30\ntype=BufferLayer\nname=ScreenDecorOverlayBottom#0", - 33: "\nparent=18\ntype=ContainerLayer\nname=4f4b23b com.android.systemui.ImageWallpaper#0", - 34: "\nparent=33\ntype=BufferLayer\nname=com.android.systemui.ImageWallpaper#0", - 36: "\nparent=26\ntype=BufferLayer\nname=StatusBar#0", - 37: "\nparent=12\ntype=ContainerLayer\nname=Task=144#0", - 38: "\nparent=37\ntype=ContainerLayer\nname=AppWindowToken{54e2de0 token=Token{f4c5fe3 ActivityRecord{6a9dc12 u0 com.android.launcher3/.Launcher t144}}}#0", - 40: "\nparent=-1\ntype=ContainerLayer\nname=Input Consumer recents_animation_input_consumer#1", - 41: "\nparent=38\ntype=ContainerLayer\nname=418b5c0 com.android.launcher3/com.android.launcher3.Launcher#0", - 45: "\nparent=11\ntype=ContainerLayer\nname=WindowToken{9158878 android.os.Binder@4f4a5db}#0", - 46: "\nparent=24\ntype=BufferLayer\nname=NavigationBar0#0", - 731: "\nparent=10\ntype=ContainerLayer\nname=WindowToken{c0ebbde android.os.BinderProxy@1af0e60}#0", - 732: "\nparent=731\ntype=ContainerLayer\nname=b37d1bf AssistPreviewPanel#0", - 733: "\nparent=10\ntype=ContainerLayer\nname=WindowToken{dc6b7ea android.os.BinderProxy@166b08c}#0", - 734: "\nparent=733\ntype=ContainerLayer\nname=2a1cadb DockedStackDivider#0", - 862: "\nparent=10\ntype=ContainerLayer\nname=WindowToken{f63efe6 android.os.Binder@d536e41}#0", - 865: "\nparent=887\ntype=ContainerLayer\nname=Task=170#0", - 866: "\nparent=865\ntype=ContainerLayer\nname=AppWindowToken{c829d40 token=Token{59970c3 ActivityRecord{36f2472 u0 com.android.server.wm.flicker.testapp/.PipActivity t170}}}#0", - 871: "\nparent=866\ntype=ContainerLayer\nname=8153ff7 com.android.server.wm.flicker.testapp/com.android.server.wm.flicker.testapp.PipActivity#0", - 876: "\nparent=41\ntype=BufferLayer\nname=com.android.launcher3/com.android.launcher3.Launcher#0", - 887: "\nparent=5\ntype=ContainerLayer\nname=Stack=78#0", - 888: "\nparent=887\ntype=ColorLayer\nname=animation background stackId=78#0", -}; -const expectedRootAosp = { - chips: [], - proto: expectedRootAospProto, - hwcBlob: "", - isVisible: true, - kind: "entry", - shortName: "0d1h3m1s911ms", - timestampMs: "3781911657318", - where: "", - name: "0d1h3m1s911ms", - stableId: "LayerTraceEntry", -}; - -const expectedEntries = [ - expectedEmptyRegion, - expectedInvalidLayerVisibility, - expectedOrphanLayers, - expectedRoot, - expectedRootAosp -]; -const expectedLayers = [ - expectedEmptyRegionLayer, - expectedInvalidLayerVisibilityLayer, - expectedOrphanLayersLayer, - expectedRootLayer, - expectedRootAospLayer -]; -const layers_traces = [ - '../spec/traces/layers_trace/layers_trace_emptyregion.pb', - '../spec/traces/layers_trace/layers_trace_invalid_layer_visibility.pb', - '../spec/traces/layers_trace/layers_trace_orphanlayers.pb', - '../spec/traces/layers_trace/layers_trace_root.pb', - '../spec/traces/layers_trace/layers_trace_root_aosp.pb', -]; - -export { expectedEntries, expectedLayers, layers_traces }; diff --git a/tools/winscope/spec/traces/error_trace.winscope b/tools/winscope/spec/traces/error_trace.winscope deleted file mode 100644 index fd970722d..000000000 Binary files a/tools/winscope/spec/traces/error_trace.winscope and /dev/null differ diff --git a/tools/winscope/spec/traces/ime_processing_traces/input_method_clients_trace.winscope b/tools/winscope/spec/traces/ime_processing_traces/input_method_clients_trace.winscope deleted file mode 100644 index faa19a543..000000000 Binary files a/tools/winscope/spec/traces/ime_processing_traces/input_method_clients_trace.winscope and /dev/null differ diff --git a/tools/winscope/spec/traces/ime_processing_traces/input_method_manager_service_trace.winscope b/tools/winscope/spec/traces/ime_processing_traces/input_method_manager_service_trace.winscope deleted file mode 100644 index 59d8ae3f7..000000000 Binary files a/tools/winscope/spec/traces/ime_processing_traces/input_method_manager_service_trace.winscope and /dev/null differ diff --git a/tools/winscope/spec/traces/ime_processing_traces/input_method_service_trace.winscope b/tools/winscope/spec/traces/ime_processing_traces/input_method_service_trace.winscope deleted file mode 100644 index 8ad231f63..000000000 Binary files a/tools/winscope/spec/traces/ime_processing_traces/input_method_service_trace.winscope and /dev/null differ diff --git a/tools/winscope/spec/traces/ime_processing_traces/sf_trace_for_ime.winscope b/tools/winscope/spec/traces/ime_processing_traces/sf_trace_for_ime.winscope deleted file mode 100644 index b6a11bb5c..000000000 Binary files a/tools/winscope/spec/traces/ime_processing_traces/sf_trace_for_ime.winscope and /dev/null differ diff --git a/tools/winscope/spec/traces/ime_processing_traces/wm_trace_for_ime.winscope b/tools/winscope/spec/traces/ime_processing_traces/wm_trace_for_ime.winscope deleted file mode 100644 index a3514913f..000000000 Binary files a/tools/winscope/spec/traces/ime_processing_traces/wm_trace_for_ime.winscope and /dev/null differ diff --git a/tools/winscope/spec/traces/layers_trace/layers_trace_emptyregion.pb b/tools/winscope/spec/traces/layers_trace/layers_trace_emptyregion.pb deleted file mode 100644 index 98ee6f3ed..000000000 Binary files a/tools/winscope/spec/traces/layers_trace/layers_trace_emptyregion.pb and /dev/null differ diff --git a/tools/winscope/spec/traces/layers_trace/layers_trace_invalid_layer_visibility.pb b/tools/winscope/spec/traces/layers_trace/layers_trace_invalid_layer_visibility.pb deleted file mode 100644 index 20572d79d..000000000 Binary files a/tools/winscope/spec/traces/layers_trace/layers_trace_invalid_layer_visibility.pb and /dev/null differ diff --git a/tools/winscope/spec/traces/layers_trace/layers_trace_orphanlayers.pb b/tools/winscope/spec/traces/layers_trace/layers_trace_orphanlayers.pb deleted file mode 100644 index af4079707..000000000 Binary files a/tools/winscope/spec/traces/layers_trace/layers_trace_orphanlayers.pb and /dev/null differ diff --git a/tools/winscope/spec/traces/layers_trace/layers_trace_root.pb b/tools/winscope/spec/traces/layers_trace/layers_trace_root.pb deleted file mode 100644 index d9617144e..000000000 Binary files a/tools/winscope/spec/traces/layers_trace/layers_trace_root.pb and /dev/null differ diff --git a/tools/winscope/spec/traces/layers_trace/layers_trace_root_aosp.pb b/tools/winscope/spec/traces/layers_trace/layers_trace_root_aosp.pb deleted file mode 100644 index 666b3282a..000000000 Binary files a/tools/winscope/spec/traces/layers_trace/layers_trace_root_aosp.pb and /dev/null differ diff --git a/tools/winscope/spec/traces/regular_rotation_in_last_state_layers_trace.winscope b/tools/winscope/spec/traces/regular_rotation_in_last_state_layers_trace.winscope deleted file mode 100644 index 36fc6633f..000000000 Binary files a/tools/winscope/spec/traces/regular_rotation_in_last_state_layers_trace.winscope and /dev/null differ diff --git a/tools/winscope/spec/traces/regular_rotation_in_last_state_wm_trace.winscope b/tools/winscope/spec/traces/regular_rotation_in_last_state_wm_trace.winscope deleted file mode 100644 index b5537ac8c..000000000 Binary files a/tools/winscope/spec/traces/regular_rotation_in_last_state_wm_trace.winscope and /dev/null differ diff --git a/tools/winscope/spec/traces/tag_trace.winscope b/tools/winscope/spec/traces/tag_trace.winscope deleted file mode 100644 index 83459ba81..000000000 Binary files a/tools/winscope/spec/traces/tag_trace.winscope and /dev/null differ diff --git a/tools/winscope/spec/traces/wl_trace.pb b/tools/winscope/spec/traces/wl_trace.pb deleted file mode 100644 index 7e1f0075e..000000000 Binary files a/tools/winscope/spec/traces/wl_trace.pb and /dev/null differ diff --git a/tools/winscope/spec/utils/tree.js b/tools/winscope/spec/utils/tree.js deleted file mode 100644 index 2aa1728c4..000000000 --- a/tools/winscope/spec/utils/tree.js +++ /dev/null @@ -1,119 +0,0 @@ -class NodeBuilder { - constructor() { - this.isTransformed = false; - } - - setTransformed() { - this.isTransformed = true; - return this; - } - - setId(id) { - this.id = id; - this.chips = []; - this.combined = false; - return this; - } - - setStableId(stableId) { - this.stableId = stableId; - return this; - } - - setName(name) { - this.name = name; - return this; - } - - setData(data) { - this.data = data; - return this; - } - - setChips(chips) { - this.chips = chips; - return this; - } - - setCombined() { - this.combined = true; - return this; - } - - setDiffType(diffType) { - this.diffType = diffType; - return this; - } - - setChildren(children) { - this.children = children; - return this; - } - - build() { - var node = { - name: undefined, - shortName: undefined, - stableId: undefined, - kind: undefined, - }; - - if (this.isTransformed) - { - delete node.shortName; - node.kind = '' - } - - if ('id' in this) { - node.id = this.id; - } - - if ('stableId' in this) { - node.stableId = this.stableId; - } - - if ('name' in this) { - node.name = this.name; - } - - if ('data' in this) { - node.data = this.data; - } - - if ('chips' in this) { - node.chips = this.chips; - } - - if (this.combined) { - node.combined = true; - } - - if ('diffType' in this) { - node.diff = { type: this.diffType }; - } - - node.children = 'children' in this ? this.children : []; - - return node; - } -} - -function isPrimitive(test) { - return test !== Object(test); -}; - -function toPlainObject(theClass) { - if (isPrimitive(theClass)) { - return theClass; - } else if (Array.isArray(theClass)) { - return theClass.map(item => toPlainObject(item)); - } else { - const keys = Object.getOwnPropertyNames(Object.assign({}, theClass)); - return keys.reduce((classAsObj, key) => { - classAsObj[key] = toPlainObject(theClass[key]); - return classAsObj; - }, {}); - } -} - -export { NodeBuilder, toPlainObject }; \ No newline at end of file diff --git a/tools/winscope/src/AccessibilityTraceView.vue b/tools/winscope/src/AccessibilityTraceView.vue deleted file mode 100644 index a68ef4aa6..000000000 --- a/tools/winscope/src/AccessibilityTraceView.vue +++ /dev/null @@ -1,42 +0,0 @@ - - - - - \ No newline at end of file diff --git a/tools/winscope/src/App.vue b/tools/winscope/src/App.vue deleted file mode 100644 index 4bd76f16f..000000000 --- a/tools/winscope/src/App.vue +++ /dev/null @@ -1,552 +0,0 @@ - - - - diff --git a/tools/winscope/src/BetaFeaturesToolbar.vue b/tools/winscope/src/BetaFeaturesToolbar.vue deleted file mode 100644 index 01d67b981..000000000 --- a/tools/winscope/src/BetaFeaturesToolbar.vue +++ /dev/null @@ -1,60 +0,0 @@ - - - - - diff --git a/tools/winscope/src/CoordinatesTable.vue b/tools/winscope/src/CoordinatesTable.vue deleted file mode 100644 index 9cea27743..000000000 --- a/tools/winscope/src/CoordinatesTable.vue +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - diff --git a/tools/winscope/src/DataAdb.vue b/tools/winscope/src/DataAdb.vue deleted file mode 100644 index bb653d94f..000000000 --- a/tools/winscope/src/DataAdb.vue +++ /dev/null @@ -1,449 +0,0 @@ - - - - diff --git a/tools/winscope/src/DataInput.vue b/tools/winscope/src/DataInput.vue deleted file mode 100644 index d059b6acf..000000000 --- a/tools/winscope/src/DataInput.vue +++ /dev/null @@ -1,700 +0,0 @@ - - - - diff --git a/tools/winscope/src/DataView.vue b/tools/winscope/src/DataView.vue deleted file mode 100644 index 0bc7a5a09..000000000 --- a/tools/winscope/src/DataView.vue +++ /dev/null @@ -1,245 +0,0 @@ - - - - diff --git a/tools/winscope/src/DefaultTreeElement.vue b/tools/winscope/src/DefaultTreeElement.vue deleted file mode 100644 index ac03f9b8f..000000000 --- a/tools/winscope/src/DefaultTreeElement.vue +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - diff --git a/tools/winscope/src/DraggableDiv.vue b/tools/winscope/src/DraggableDiv.vue deleted file mode 100644 index adccaf4f6..000000000 --- a/tools/winscope/src/DraggableDiv.vue +++ /dev/null @@ -1,229 +0,0 @@ - - - - \ No newline at end of file diff --git a/tools/winscope/src/ImeAdditionalProperties.vue b/tools/winscope/src/ImeAdditionalProperties.vue deleted file mode 100644 index 24e092802..000000000 --- a/tools/winscope/src/ImeAdditionalProperties.vue +++ /dev/null @@ -1,455 +0,0 @@ - - - - - - diff --git a/tools/winscope/src/ImeTraceView.vue b/tools/winscope/src/ImeTraceView.vue deleted file mode 100644 index daf454ad0..000000000 --- a/tools/winscope/src/ImeTraceView.vue +++ /dev/null @@ -1,52 +0,0 @@ - - - - - diff --git a/tools/winscope/src/LogEntry.vue b/tools/winscope/src/LogEntry.vue deleted file mode 100644 index 90f41d76f..000000000 --- a/tools/winscope/src/LogEntry.vue +++ /dev/null @@ -1,188 +0,0 @@ - - - - diff --git a/tools/winscope/src/LogView.vue b/tools/winscope/src/LogView.vue deleted file mode 100644 index dfec23382..000000000 --- a/tools/winscope/src/LogView.vue +++ /dev/null @@ -1,300 +0,0 @@ - - - - diff --git a/tools/winscope/src/NodeContextMenu.vue b/tools/winscope/src/NodeContextMenu.vue deleted file mode 100644 index 4faa129ca..000000000 --- a/tools/winscope/src/NodeContextMenu.vue +++ /dev/null @@ -1,91 +0,0 @@ - - - - diff --git a/tools/winscope/src/Overlay.vue b/tools/winscope/src/Overlay.vue deleted file mode 100644 index 46008055b..000000000 --- a/tools/winscope/src/Overlay.vue +++ /dev/null @@ -1,960 +0,0 @@ - - - - diff --git a/tools/winscope/src/PropertiesTableView.vue b/tools/winscope/src/PropertiesTableView.vue deleted file mode 100644 index 0d5f0efbc..000000000 --- a/tools/winscope/src/PropertiesTableView.vue +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - diff --git a/tools/winscope/src/PropertiesTreeElement.vue b/tools/winscope/src/PropertiesTreeElement.vue deleted file mode 100644 index 07293f937..000000000 --- a/tools/winscope/src/PropertiesTreeElement.vue +++ /dev/null @@ -1,84 +0,0 @@ - - - - diff --git a/tools/winscope/src/Rects.vue b/tools/winscope/src/Rects.vue deleted file mode 100644 index be32087fe..000000000 --- a/tools/winscope/src/Rects.vue +++ /dev/null @@ -1,160 +0,0 @@ - - - - - - diff --git a/tools/winscope/src/Searchbar.vue b/tools/winscope/src/Searchbar.vue deleted file mode 100644 index c1de4e3f0..000000000 --- a/tools/winscope/src/Searchbar.vue +++ /dev/null @@ -1,356 +0,0 @@ - - - - diff --git a/tools/winscope/src/SurfaceFlingerPropertyGroups.vue b/tools/winscope/src/SurfaceFlingerPropertyGroups.vue deleted file mode 100644 index 1d94719b9..000000000 --- a/tools/winscope/src/SurfaceFlingerPropertyGroups.vue +++ /dev/null @@ -1,307 +0,0 @@ - - - - - - diff --git a/tools/winscope/src/SurfaceFlingerTraceView.vue b/tools/winscope/src/SurfaceFlingerTraceView.vue deleted file mode 100644 index 602a93b99..000000000 --- a/tools/winscope/src/SurfaceFlingerTraceView.vue +++ /dev/null @@ -1,70 +0,0 @@ - - - - - diff --git a/tools/winscope/src/Timeline.vue b/tools/winscope/src/Timeline.vue deleted file mode 100644 index 5b373d20a..000000000 --- a/tools/winscope/src/Timeline.vue +++ /dev/null @@ -1,146 +0,0 @@ - - - - \ No newline at end of file diff --git a/tools/winscope/src/TimelineSelection.vue b/tools/winscope/src/TimelineSelection.vue deleted file mode 100644 index 882900911..000000000 --- a/tools/winscope/src/TimelineSelection.vue +++ /dev/null @@ -1,463 +0,0 @@ - - - - diff --git a/tools/winscope/src/Timelines.vue b/tools/winscope/src/Timelines.vue deleted file mode 100644 index 8b9c225d5..000000000 --- a/tools/winscope/src/Timelines.vue +++ /dev/null @@ -1,385 +0,0 @@ - - - - - diff --git a/tools/winscope/src/Title.vue b/tools/winscope/src/Title.vue deleted file mode 100644 index d52295071..000000000 --- a/tools/winscope/src/Title.vue +++ /dev/null @@ -1,31 +0,0 @@ - diff --git a/tools/winscope/src/TraceView.vue b/tools/winscope/src/TraceView.vue deleted file mode 100644 index 08af86da1..000000000 --- a/tools/winscope/src/TraceView.vue +++ /dev/null @@ -1,639 +0,0 @@ - - - - diff --git a/tools/winscope/src/TransactionEntryLegacy.vue b/tools/winscope/src/TransactionEntryLegacy.vue deleted file mode 100644 index 08c6af9cd..000000000 --- a/tools/winscope/src/TransactionEntryLegacy.vue +++ /dev/null @@ -1,292 +0,0 @@ - - - - diff --git a/tools/winscope/src/TransactionsViewLegacy.vue b/tools/winscope/src/TransactionsViewLegacy.vue deleted file mode 100644 index 782a58f03..000000000 --- a/tools/winscope/src/TransactionsViewLegacy.vue +++ /dev/null @@ -1,545 +0,0 @@ - - - - diff --git a/tools/winscope/src/TransformMatrix.vue b/tools/winscope/src/TransformMatrix.vue deleted file mode 100644 index d8b7a8363..000000000 --- a/tools/winscope/src/TransformMatrix.vue +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - diff --git a/tools/winscope/src/TreeView.vue b/tools/winscope/src/TreeView.vue deleted file mode 100644 index b8b3c54c3..000000000 --- a/tools/winscope/src/TreeView.vue +++ /dev/null @@ -1,739 +0,0 @@ - - - - - diff --git a/tools/winscope/src/VideoView.vue b/tools/winscope/src/VideoView.vue deleted file mode 100644 index 1d01ac026..000000000 --- a/tools/winscope/src/VideoView.vue +++ /dev/null @@ -1,87 +0,0 @@ - - - - diff --git a/tools/winscope/src/WindowManagerTraceView.vue b/tools/winscope/src/WindowManagerTraceView.vue deleted file mode 100644 index 53b23dada..000000000 --- a/tools/winscope/src/WindowManagerTraceView.vue +++ /dev/null @@ -1,48 +0,0 @@ - - - - - \ No newline at end of file diff --git a/tools/winscope/src/components/FlatCard.vue b/tools/winscope/src/components/FlatCard.vue deleted file mode 100644 index 38c33561c..000000000 --- a/tools/winscope/src/components/FlatCard.vue +++ /dev/null @@ -1,38 +0,0 @@ - - - \ No newline at end of file diff --git a/tools/winscope/src/components/IconSelection/IconSelectOption.vue b/tools/winscope/src/components/IconSelection/IconSelectOption.vue deleted file mode 100644 index 8c428b81d..000000000 --- a/tools/winscope/src/components/IconSelection/IconSelectOption.vue +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - diff --git a/tools/winscope/src/components/TagDisplay/Arrow.vue b/tools/winscope/src/components/TagDisplay/Arrow.vue deleted file mode 100644 index 0a197058a..000000000 --- a/tools/winscope/src/components/TagDisplay/Arrow.vue +++ /dev/null @@ -1,33 +0,0 @@ - - - - - \ No newline at end of file diff --git a/tools/winscope/src/components/TagDisplay/TransitionContainer.vue b/tools/winscope/src/components/TagDisplay/TransitionContainer.vue deleted file mode 100644 index 13a1cde21..000000000 --- a/tools/winscope/src/components/TagDisplay/TransitionContainer.vue +++ /dev/null @@ -1,113 +0,0 @@ - - - - \ No newline at end of file diff --git a/tools/winscope/src/config/Configuration.json b/tools/winscope/src/config/Configuration.json deleted file mode 100644 index b0f7ae9d4..000000000 --- a/tools/winscope/src/config/Configuration.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "invalidProperties": [ - "length", - "prototype", - "ref", - "diff", - "rects", - "chips", - "parent", - "timestamp", - "shortName", - "kind", - "resolvedChildren", - "visibilityReason", - "absoluteZ", - "children", - "stableId" - ], - "intDefColumn": { - "WindowLayoutParams.type": "android.view.WindowManager.LayoutParams.WindowType", - "WindowLayoutParams.flags": "android.view.WindowManager.LayoutParams.Flags", - "WindowLayoutParams.privateFlags": "android.view.WindowManager.LayoutParams.PrivateFlags", - "WindowLayoutParams.gravity": "android.view.Gravity.GravityFlags", - "WindowLayoutParams.softInputMode": "android.view.WindowManager.LayoutParams.WindowType", - "WindowLayoutParams.systemUiVisibilityFlags": "android.view.WindowManager.LayoutParams.SystemUiVisibilityFlags", - "WindowLayoutParams.subtreeSystemUiVisibilityFlags": "android.view.WindowManager.LayoutParams.SystemUiVisibilityFlags", - "WindowLayoutParams.behavior": "android.view.WindowInsetsController.Behavior", - "WindowLayoutParams.fitInsetsSides": "android.view.WindowInsets.Side.InsetsSide", - "Configuration.windowingMode": "android.app.WindowConfiguration.WindowingMode", - "WindowConfiguration.windowingMode": "android.app.WindowConfiguration.WindowingMode", - "Configuration.orientation": "android.content.pm.ActivityInfo.ScreenOrientation", - "WindowConfiguration.orientation": "android.content.pm.ActivityInfo.ScreenOrientation", - "WindowState.orientation": "android.content.pm.ActivityInfo.ScreenOrientation" - } -} diff --git a/tools/winscope/src/decode.js b/tools/winscope/src/decode.js deleted file mode 100644 index fc652cde4..000000000 --- a/tools/winscope/src/decode.js +++ /dev/null @@ -1,734 +0,0 @@ -/* - * Copyright 2017, 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. - */ - -/* eslint-disable camelcase */ -/* eslint-disable max-len */ - -import jsonProtoDefsAccessibility from 'frameworks/base/core/proto/android/server/accessibilitytrace.proto'; -import jsonProtoDefsWm from 'frameworks/base/core/proto/android/server/windowmanagertrace.proto'; -import jsonProtoDefsProtoLog from 'frameworks/base/core/proto/android/internal/protolog.proto'; -import jsonProtoDefsSf from 'frameworks/native/services/surfaceflinger/layerproto/layerstrace.proto'; -import jsonProtoDefsTransaction from 'frameworks/native/services/surfaceflinger/layerproto/transactions.proto'; -import jsonProtoDefsWl from 'WaylandSafePath/waylandtrace.proto'; -import jsonProtoDefsSysUi from 'frameworks/base/packages/SystemUI/src/com/android/systemui/tracing/sysui_trace.proto'; -import jsonProtoDefsLauncher from 'packages/apps/Launcher3/protos/launcher_trace_file.proto'; -import jsonProtoDefsIme from 'frameworks/base/core/proto/android/view/inputmethod/inputmethodeditortrace.proto'; -import jsonProtoDefsTags from 'platform_testing/libraries/flicker/src/com/android/server/wm/proto/tags.proto'; -import jsonProtoDefsErrors from 'platform_testing/libraries/flicker/src/com/android/server/wm/proto/errors.proto'; -import protobuf from 'protobufjs'; -import {transform_accessibility_trace} from './transform_accessibility.js'; -import {transform_transaction_trace} from './transform_transaction.js'; -import {transform_wl_outputstate, transform_wayland_trace} from './transform_wl.js'; -import {transformProtolog} from './transform_protolog.js'; -import {transform_sysui_trace} from './transform_sys_ui.js'; -import {transform_launcher_trace} from './transform_launcher.js'; -import {transform_ime_trace_clients, transform_ime_trace_service, transform_ime_trace_managerservice} from './transform_ime.js'; -import {mp4Decoder} from './decodeVideo.js'; - -import AccessibilityTrace from '@/traces/Accessibility.ts'; -import SurfaceFlingerTrace from '@/traces/SurfaceFlinger.ts'; -import WindowManagerTrace from '@/traces/WindowManager.ts'; -import TransactionsTrace from '@/traces/Transactions.ts'; -import TransactionsTraceLegacy from '@/traces/TransactionsLegacy.ts'; -import ScreenRecordingTrace from '@/traces/ScreenRecording.ts'; -import WaylandTrace from '@/traces/Wayland.ts'; -import ProtoLogTrace from '@/traces/ProtoLog.ts'; -import SystemUITrace from '@/traces/SystemUI.ts'; -import LauncherTrace from '@/traces/Launcher.ts'; -import ImeTraceClients from '@/traces/InputMethodClients.ts'; -import ImeTraceService from '@/traces/InputMethodService.ts'; -import ImeTraceManagerService from '@/traces/InputMethodManagerService.ts'; - -import SurfaceFlingerDump from '@/dumps/SurfaceFlinger.ts'; -import WindowManagerDump from '@/dumps/WindowManager.ts'; -import WaylandDump from '@/dumps/Wayland.ts'; - -import TagTrace from '@/traces/TraceTag.ts'; -import ErrorTrace from '@/traces/TraceError.ts'; - -const AccessibilityTraceMessage = lookup_type(jsonProtoDefsAccessibility, 'com.android.server.accessibility.AccessibilityTraceFileProto'); -const WmTraceMessage = lookup_type(jsonProtoDefsWm, 'com.android.server.wm.WindowManagerTraceFileProto'); -const WmDumpMessage = lookup_type(jsonProtoDefsWm, 'com.android.server.wm.WindowManagerServiceDumpProto'); -const SfTraceMessage = lookup_type(jsonProtoDefsSf, 'android.surfaceflinger.LayersTraceFileProto'); -const SfDumpMessage = lookup_type(jsonProtoDefsSf, 'android.surfaceflinger.LayersProto'); -const SfTransactionTraceMessage = lookup_type(jsonProtoDefsTransaction, 'TransactionTraceFile'); -const WaylandTraceMessage = lookup_type(jsonProtoDefsWl, 'org.chromium.arc.wayland_composer.TraceFileProto'); -const WaylandDumpMessage = lookup_type(jsonProtoDefsWl, 'org.chromium.arc.wayland_composer.OutputStateProto'); -const ProtoLogMessage = lookup_type(jsonProtoDefsProtoLog, 'com.android.internal.protolog.ProtoLogFileProto'); -const SystemUiTraceMessage = lookup_type(jsonProtoDefsSysUi, 'com.android.systemui.tracing.SystemUiTraceFileProto'); -const LauncherTraceMessage = lookup_type(jsonProtoDefsLauncher, 'com.android.launcher3.tracing.LauncherTraceFileProto'); -const InputMethodClientsTraceMessage = lookup_type(jsonProtoDefsIme, 'android.view.inputmethod.InputMethodClientsTraceFileProto'); -const InputMethodServiceTraceMessage = lookup_type(jsonProtoDefsIme, 'android.view.inputmethod.InputMethodServiceTraceFileProto'); -const InputMethodManagerServiceTraceMessage = lookup_type(jsonProtoDefsIme, 'android.view.inputmethod.InputMethodManagerServiceTraceFileProto'); -const TagTraceMessage = lookup_type(jsonProtoDefsTags, 'com.android.server.wm.flicker.FlickerTagTraceProto'); -const ErrorTraceMessage = lookup_type(jsonProtoDefsErrors, 'com.android.server.wm.flicker.FlickerErrorTraceProto'); - -const ACCESSIBILITY_MAGIC_NUMBER = [0x09, 0x41, 0x31, 0x31, 0x59, 0x54, 0x52, 0x41, 0x43]; // .A11YTRAC -const LAYER_TRACE_MAGIC_NUMBER = [0x09, 0x4c, 0x59, 0x52, 0x54, 0x52, 0x41, 0x43, 0x45]; // .LYRTRACE -const TRANSACTIONS_TRACE_MAGIC_NUMBER = [0x09, 0x54, 0x4e, 0x58, 0x54, 0x52, 0x41, 0x43, 0x45]; // .TNXTRACE -const WINDOW_TRACE_MAGIC_NUMBER = [0x09, 0x57, 0x49, 0x4e, 0x54, 0x52, 0x41, 0x43, 0x45]; // .WINTRACE -const MPEG4_MAGIC_NMBER = [0x00, 0x00, 0x00, 0x18, 0x66, 0x74, 0x79, 0x70, 0x6d, 0x70, 0x34, 0x32]; // ....ftypmp42 -const WAYLAND_TRACE_MAGIC_NUMBER = [0x09, 0x57, 0x59, 0x4c, 0x54, 0x52, 0x41, 0x43, 0x45]; // .WYLTRACE -const PROTO_LOG_MAGIC_NUMBER = [0x09, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x4c, 0x4f, 0x47]; // .PROTOLOG -const SYSTEM_UI_MAGIC_NUMBER = [0x09, 0x53, 0x59, 0x53, 0x55, 0x49, 0x54, 0x52, 0x43]; // .SYSUITRC -const LAUNCHER_MAGIC_NUMBER = [0x09, 0x4C, 0x4E, 0x43, 0x48, 0x52, 0x54, 0x52, 0x43]; // .LNCHRTRC -const IMC_TRACE_MAGIC_NUMBER = [0x09, 0x49, 0x4d, 0x43, 0x54, 0x52, 0x41, 0x43, 0x45]; // .IMCTRACE -const IMS_TRACE_MAGIC_NUMBER = [0x09, 0x49, 0x4d, 0x53, 0x54, 0x52, 0x41, 0x43, 0x45]; // .IMSTRACE -const IMM_TRACE_MAGIC_NUMBER = [0x09, 0x49, 0x4d, 0x4d, 0x54, 0x52, 0x41, 0x43, 0x45]; // .IMMTRACE -const TAG_TRACE_MAGIC_NUMBER = [0x09, 0x54, 0x41, 0x47, 0x54, 0x52, 0x41, 0x43, 0x45]; //.TAGTRACE -const ERROR_TRACE_MAGIC_NUMBER = [0x09, 0x45, 0x52, 0x52, 0x54, 0x52, 0x41, 0x43, 0x45]; //.ERRORTRACE - -const FILE_TYPES = Object.freeze({ - ACCESSIBILITY_TRACE: 'AccessibilityTrace', - WINDOW_MANAGER_TRACE: 'WindowManagerTrace', - SURFACE_FLINGER_TRACE: 'SurfaceFlingerTrace', - WINDOW_MANAGER_DUMP: 'WindowManagerDump', - SURFACE_FLINGER_DUMP: 'SurfaceFlingerDump', - SCREEN_RECORDING: 'ScreenRecording', - TRANSACTIONS_TRACE: 'TransactionsTrace', - TRANSACTIONS_TRACE_LEGACY: 'TransactionsTraceLegacy', - WAYLAND_TRACE: 'WaylandTrace', - WAYLAND_DUMP: 'WaylandDump', - PROTO_LOG: 'ProtoLog', - SYSTEM_UI: 'SystemUI', - LAUNCHER: 'Launcher', - IME_TRACE_CLIENTS: 'ImeTraceClients', - IME_TRACE_SERVICE: 'ImeTrace InputMethodService', - IME_TRACE_MANAGERSERVICE: 'ImeTrace InputMethodManagerService', - TAG_TRACE: 'TagTrace', - ERROR_TRACE: 'ErrorTrace', -}); - -const WINDOW_MANAGER_ICON = 'view_compact'; -const SURFACE_FLINGER_ICON = 'filter_none'; -const SCREEN_RECORDING_ICON = 'videocam'; -const TRANSACTION_ICON = 'timeline'; -const WAYLAND_ICON = 'filter_none'; -const PROTO_LOG_ICON = 'notes'; -const SYSTEM_UI_ICON = 'filter_none'; -const LAUNCHER_ICON = 'filter_none'; -const IME_ICON = 'keyboard'; -const ACCESSIBILITY_ICON = 'filter_none'; -const TAG_ICON = 'details'; -const TRACE_ERROR_ICON = 'warning'; - -const FILE_ICONS = { - [FILE_TYPES.ACCESSIBILITY_TRACE]: ACCESSIBILITY_ICON, - [FILE_TYPES.WINDOW_MANAGER_TRACE]: WINDOW_MANAGER_ICON, - [FILE_TYPES.SURFACE_FLINGER_TRACE]: SURFACE_FLINGER_ICON, - [FILE_TYPES.WINDOW_MANAGER_DUMP]: WINDOW_MANAGER_ICON, - [FILE_TYPES.SURFACE_FLINGER_DUMP]: SURFACE_FLINGER_ICON, - [FILE_TYPES.SCREEN_RECORDING]: SCREEN_RECORDING_ICON, - [FILE_TYPES.TRANSACTIONS_TRACE]: TRANSACTION_ICON, - [FILE_TYPES.TRANSACTIONS_TRACE_LEGACY]: TRANSACTION_ICON, - [FILE_TYPES.WAYLAND_TRACE]: WAYLAND_ICON, - [FILE_TYPES.WAYLAND_DUMP]: WAYLAND_ICON, - [FILE_TYPES.PROTO_LOG]: PROTO_LOG_ICON, - [FILE_TYPES.SYSTEM_UI]: SYSTEM_UI_ICON, - [FILE_TYPES.LAUNCHER]: LAUNCHER_ICON, - [FILE_TYPES.IME_TRACE_CLIENTS]: IME_ICON, - [FILE_TYPES.IME_TRACE_SERVICE]: IME_ICON, - [FILE_TYPES.IME_TRACE_MANAGERSERVICE]: IME_ICON, - [FILE_TYPES.TAG_TRACE]: TAG_ICON, - [FILE_TYPES.ERROR_TRACE]: TRACE_ERROR_ICON, -}; - -function oneOf(dataType) { - return {oneOf: true, type: dataType}; -} - -const TRACE_TYPES = Object.freeze({ - ACCESSIBILITY: 'AccessibilityTrace', - WINDOW_MANAGER: 'WindowManagerTrace', - SURFACE_FLINGER: 'SurfaceFlingerTrace', - SCREEN_RECORDING: 'ScreenRecording', - TRANSACTION: 'Transaction', - TRANSACTION_LEGACY: 'Transaction (Legacy)', - WAYLAND: 'Wayland', - PROTO_LOG: 'ProtoLog', - SYSTEM_UI: 'SystemUI', - LAUNCHER: 'Launcher', - IME_CLIENTS: 'ImeTrace Clients', - IME_SERVICE: 'ImeTrace InputMethodService', - IME_MANAGERSERVICE: 'ImeTrace InputMethodManagerService', - TAG: 'TagTrace', - ERROR: 'ErrorTrace', -}); - -const TRACE_INFO = { - [TRACE_TYPES.ACCESSIBILITY]: { - name: 'Accessibility', - icon: ACCESSIBILITY_ICON, - files: [oneOf(FILE_TYPES.ACCESSIBILITY_TRACE)], - constructor: AccessibilityTrace, - }, - [TRACE_TYPES.WINDOW_MANAGER]: { - name: 'WindowManager', - icon: WINDOW_MANAGER_ICON, - files: [oneOf(FILE_TYPES.WINDOW_MANAGER_TRACE)], - constructor: WindowManagerTrace, - }, - [TRACE_TYPES.SURFACE_FLINGER]: { - name: 'SurfaceFlinger', - icon: SURFACE_FLINGER_ICON, - files: [oneOf(FILE_TYPES.SURFACE_FLINGER_TRACE)], - constructor: SurfaceFlingerTrace, - }, - [TRACE_TYPES.SCREEN_RECORDING]: { - name: 'Screen recording', - icon: SCREEN_RECORDING_ICON, - files: [oneOf(FILE_TYPES.SCREEN_RECORDING)], - constructor: ScreenRecordingTrace, - }, - [TRACE_TYPES.TRANSACTION]: { - name: 'Transaction', - icon: TRANSACTION_ICON, - files: [ - oneOf(FILE_TYPES.TRANSACTIONS_TRACE), - ], - constructor: TransactionsTrace, - }, - [TRACE_TYPES.TRANSACTION_LEGACY]: { - name: 'Transactions (Legacy)', - icon: TRANSACTION_ICON, - files: [ - oneOf(FILE_TYPES.TRANSACTIONS_TRACE_LEGACY), - ], - constructor: TransactionsTraceLegacy, - }, - [TRACE_TYPES.WAYLAND]: { - name: 'Wayland', - icon: WAYLAND_ICON, - files: [oneOf(FILE_TYPES.WAYLAND_TRACE)], - constructor: WaylandTrace, - }, - [TRACE_TYPES.PROTO_LOG]: { - name: 'ProtoLog', - icon: PROTO_LOG_ICON, - files: [oneOf(FILE_TYPES.PROTO_LOG)], - constructor: ProtoLogTrace, - }, - [TRACE_TYPES.SYSTEM_UI]: { - name: 'SystemUI', - icon: SYSTEM_UI_ICON, - files: [oneOf(FILE_TYPES.SYSTEM_UI)], - constructor: SystemUITrace, - }, - [TRACE_TYPES.LAUNCHER]: { - name: 'Launcher', - icon: LAUNCHER_ICON, - files: [oneOf(FILE_TYPES.LAUNCHER)], - constructor: LauncherTrace, - }, - [TRACE_TYPES.IME_CLIENTS]: { - name: 'InputMethodClients', - icon: IME_ICON, - files: [oneOf(FILE_TYPES.IME_TRACE_CLIENTS)], - constructor: ImeTraceClients, - }, - [TRACE_TYPES.IME_SERVICE]: { - name: 'InputMethodService', - icon: IME_ICON, - files: [oneOf(FILE_TYPES.IME_TRACE_SERVICE)], - constructor: ImeTraceService, - }, - [TRACE_TYPES.IME_MANAGERSERVICE]: { - name: 'InputMethodManagerService', - icon: IME_ICON, - files: [oneOf(FILE_TYPES.IME_TRACE_MANAGERSERVICE)], - constructor: ImeTraceManagerService, - }, - [TRACE_TYPES.TAG]: { - name: 'Tag', - icon: TAG_ICON, - files: [oneOf(FILE_TYPES.TAG_TRACE)], - constructor: TagTrace, - }, - [TRACE_TYPES.ERROR]: { - name: 'Error', - icon: TRACE_ERROR_ICON, - files: [oneOf(FILE_TYPES.ERROR_TRACE)], - constructor: ErrorTrace, - }, -}; - -const DUMP_TYPES = Object.freeze({ - WINDOW_MANAGER: 'WindowManagerDump', - SURFACE_FLINGER: 'SurfaceFlingerDump', - WAYLAND: 'WaylandDump', -}); - -const DUMP_INFO = { - [DUMP_TYPES.WINDOW_MANAGER]: { - name: 'WindowManager', - icon: WINDOW_MANAGER_ICON, - files: [oneOf(FILE_TYPES.WINDOW_MANAGER_DUMP)], - constructor: WindowManagerDump, - }, - [DUMP_TYPES.SURFACE_FLINGER]: { - name: 'SurfaceFlinger', - icon: SURFACE_FLINGER_ICON, - files: [oneOf(FILE_TYPES.SURFACE_FLINGER_DUMP)], - constructor: SurfaceFlingerDump, - }, - [DUMP_TYPES.WAYLAND]: { - name: 'Wayland', - icon: WAYLAND_ICON, - files: [oneOf(FILE_TYPES.WAYLAND_DUMP)], - constructor: WaylandDump, - }, -}; - -export const TRACE_ICONS = { - [TRACE_TYPES.WINDOW_MANAGER]: WINDOW_MANAGER_ICON, - [TRACE_TYPES.SURFACE_FLINGER]: SURFACE_FLINGER_ICON, - [TRACE_TYPES.SCREEN_RECORDING]: SCREEN_RECORDING_ICON, - [TRACE_TYPES.TRANSACTION]: TRANSACTION_ICON, - [TRACE_TYPES.TRANSACTION_LEGACY]: TRANSACTION_ICON, - [TRACE_TYPES.WAYLAND]: WAYLAND_ICON, - [TRACE_TYPES.PROTO_LOG]: PROTO_LOG_ICON, - [TRACE_TYPES.SYSTEM_UI]: SYSTEM_UI_ICON, - [TRACE_TYPES.LAUNCHER]: LAUNCHER_ICON, - [TRACE_TYPES.IME_CLIENTS]: IME_ICON, - [TRACE_TYPES.IME_SERVICE]: IME_ICON, - [TRACE_TYPES.IME_MANAGERSERVICE]: IME_ICON, - [TRACE_TYPES.TAG_TRACE]: TAG_ICON, - [TRACE_TYPES.ERROR_TRACE]: TRACE_ERROR_ICON, - - [DUMP_TYPES.WINDOW_MANAGER]: WINDOW_MANAGER_ICON, - [DUMP_TYPES.SURFACE_FLINGER]: SURFACE_FLINGER_ICON, - [DUMP_TYPES.WAYLAND]: WAYLAND_ICON, -}; - -// TODO: Rename name to defaultName -const FILE_DECODERS = { - [FILE_TYPES.ACCESSIBILITY_TRACE]: { - name: 'Accessibility trace', - decoder: protoDecoder, - decoderParams: { - type: FILE_TYPES.ACCESSIBILITY_TRACE, - objTypeProto: AccessibilityTraceMessage, - transform: transform_accessibility_trace, - timeline: true, - }, - }, - [FILE_TYPES.WINDOW_MANAGER_TRACE]: { - name: 'WindowManager trace', - decoder: protoDecoder, - decoderParams: { - type: FILE_TYPES.WINDOW_MANAGER_TRACE, - objTypeProto: WmTraceMessage, - transform: WindowManagerTrace.fromProto, - timeline: true, - }, - }, - [FILE_TYPES.SURFACE_FLINGER_TRACE]: { - name: 'SurfaceFlinger trace', - decoder: protoDecoder, - decoderParams: { - type: FILE_TYPES.SURFACE_FLINGER_TRACE, - mime: 'application/octet-stream', - objTypeProto: SfTraceMessage, - transform: SurfaceFlingerTrace.fromProto, - timeline: true, - }, - }, - [FILE_TYPES.WAYLAND_TRACE]: { - name: 'Wayland trace', - decoder: protoDecoder, - decoderParams: { - type: FILE_TYPES.WAYLAND_TRACE, - mime: 'application/octet-stream', - objTypeProto: WaylandTraceMessage, - transform: transform_wayland_trace, - timeline: true, - }, - }, - [FILE_TYPES.SURFACE_FLINGER_DUMP]: { - name: 'SurfaceFlinger dump', - decoder: protoDecoder, - decoderParams: { - type: FILE_TYPES.SURFACE_FLINGER_DUMP, - mime: 'application/octet-stream', - objTypeProto: [SfDumpMessage, SfTraceMessage], - transform: [SurfaceFlingerDump.fromProto, SurfaceFlingerTrace.fromProto], - timeline: true, - }, - }, - [FILE_TYPES.WINDOW_MANAGER_DUMP]: { - name: 'WindowManager dump', - decoder: protoDecoder, - decoderParams: { - type: FILE_TYPES.WINDOW_MANAGER_DUMP, - mime: 'application/octet-stream', - objTypeProto: WmDumpMessage, - transform: WindowManagerDump.fromProto, - timeline: true, - }, - }, - [FILE_TYPES.WAYLAND_DUMP]: { - name: 'Wayland dump', - decoder: protoDecoder, - decoderParams: { - type: FILE_TYPES.WAYLAND_DUMP, - mime: 'application/octet-stream', - objTypeProto: WaylandDumpMessage, - transform: transform_wl_outputstate, - timeline: true, - }, - }, - [FILE_TYPES.SCREEN_RECORDING]: { - name: 'Screen recording', - decoder: videoDecoder, - decoderParams: { - type: FILE_TYPES.SCREEN_RECORDING, - mime: 'video/mp4', - videoDecoder: mp4Decoder, - }, - }, - [FILE_TYPES.TRANSACTIONS_TRACE]: { - name: 'Transaction', - decoder: protoDecoder, - decoderParams: { - type: FILE_TYPES.TRANSACTIONS_TRACE, - mime: 'application/octet-stream', - objTypeProto: SfTransactionTraceMessage, - transform: transform_transaction_trace, - timeline: true, - }, - }, - [FILE_TYPES.PROTO_LOG]: { - name: 'ProtoLog', - decoder: protoDecoder, - decoderParams: { - type: FILE_TYPES.PROTO_LOG, - mime: 'application/octet-stream', - objTypeProto: ProtoLogMessage, - transform: transformProtolog, - timeline: true, - }, - }, - [FILE_TYPES.SYSTEM_UI]: { - name: 'SystemUI trace', - decoder: protoDecoder, - decoderParams: { - type: FILE_TYPES.SYSTEM_UI, - mime: 'application/octet-stream', - objTypeProto: SystemUiTraceMessage, - transform: transform_sysui_trace, - timeline: true, - }, - }, - [FILE_TYPES.LAUNCHER]: { - name: 'Launcher trace', - decoder: protoDecoder, - decoderParams: { - type: FILE_TYPES.LAUNCHER, - mime: 'application/octet-stream', - objTypeProto: LauncherTraceMessage, - transform: transform_launcher_trace, - timeline: true, - }, - }, - [FILE_TYPES.IME_TRACE_CLIENTS]: { - name: 'InputMethodClients trace', - decoder: protoDecoder, - decoderParams: { - type: FILE_TYPES.IME_TRACE_CLIENTS, - mime: 'application/octet-stream', - objTypeProto: InputMethodClientsTraceMessage, - transform: transform_ime_trace_clients, - timeline: true, - }, - }, - [FILE_TYPES.IME_TRACE_SERVICE]: { - name: 'InputMethodService trace', - decoder: protoDecoder, - decoderParams: { - type: FILE_TYPES.IME_TRACE_SERVICE, - mime: 'application/octet-stream', - objTypeProto: InputMethodServiceTraceMessage, - transform: transform_ime_trace_service, - timeline: true, - }, - }, - [FILE_TYPES.IME_TRACE_MANAGERSERVICE]: { - name: 'InputMethodManagerService trace', - decoder: protoDecoder, - decoderParams: { - type: FILE_TYPES.IME_TRACE_MANAGERSERVICE, - mime: 'application/octet-stream', - objTypeProto: InputMethodManagerServiceTraceMessage, - transform: transform_ime_trace_managerservice, - timeline: true, - }, - }, - [FILE_TYPES.TAG_TRACE]: { - name: 'Tag trace', - decoder: protoDecoder, - decoderParams: { - type: FILE_TYPES.TAG_TRACE, - objTypeProto: TagTraceMessage, - transform: TagTrace.fromProto, - timeline: true, - }, - }, - [FILE_TYPES.ERROR_TRACE]: { - name: 'Error trace', - decoder: protoDecoder, - decoderParams: { - type: FILE_TYPES.ERROR_TRACE, - objTypeProto: ErrorTraceMessage, - transform: ErrorTrace.fromProto, - timeline: true, - }, - }, -}; - -function lookup_type(protoPath, type) { - return protobuf.Root.fromJSON(protoPath).lookupType(type); -} - -// Replace enum values with string representation and -// add default values to the proto objects. This function also handles -// a special case with TransformProtos where the matrix may be derived -// from the transform type. -function modifyProtoFields(protoObj, displayDefaults) { - if (!protoObj || protoObj !== Object(protoObj) || !protoObj.$type) { - return; - } - - for (const fieldName in protoObj.$type.fields) { - if (protoObj.$type.fields.hasOwnProperty(fieldName)) { - const fieldProperties = protoObj.$type.fields[fieldName]; - const field = protoObj[fieldName]; - - if (Array.isArray(field)) { - field.forEach((item, _) => { - modifyProtoFields(item, displayDefaults); - }); - continue; - } - - if (displayDefaults && !(field)) { - protoObj[fieldName] = fieldProperties.defaultValue; - } - - if (fieldProperties.resolvedType && fieldProperties.resolvedType.valuesById) { - protoObj[fieldName] = fieldProperties.resolvedType.valuesById[protoObj[fieldProperties.name]]; - continue; - } - modifyProtoFields(protoObj[fieldName], displayDefaults); - } - } -} - -function decodeAndTransformProto(buffer, params, displayDefaults) { - var objTypesProto = []; - var transforms = []; - if (!Array.isArray(params.objTypeProto)) { - objTypesProto = [params.objTypeProto]; - transforms = [params.transform]; - } else { - objTypesProto = params.objTypeProto; - transforms = params.transform; - } - // each trace or dump may have different processors, for example, until S, SF dumps - // returne a list of layers and winscope built a [LayerTraceEntry] from them. - // From S onwards, returns a LayerTrace object, iterating over multiple items allows - // winscope to handle both the new and legacy formats - // TODO Refactor the decode.js code into a set of decoders to clean up the code - let lastError = null; - for (var x = 0; x < objTypesProto.length; x++) { - const objType = objTypesProto[x]; - const transform = transforms[x]; - try { - const decoded = objType.decode(buffer); - modifyProtoFields(decoded, displayDefaults); - const transformed = transform(decoded); - return transformed; - } catch (e) { - lastError = e; - // check next parser - } - } - - if (lastError) { - throw lastError; - } - throw new UndetectableFileType('Unable to parse file'); -} - -function protoDecoder(buffer, params, fileName, store) { - const transformed = decodeAndTransformProto(buffer, params, store.displayDefaults); - - // add tagGenerationTrace to dataFile for WM/SF traces so tags can be generated - var tagGenerationTrace = null; - if (params.type === FILE_TYPES.WINDOW_MANAGER_TRACE || - params.type === FILE_TYPES.SURFACE_FLINGER_TRACE) { - tagGenerationTrace = transformed; - } - - let data; - if (params.timeline) { - data = transformed.entries ?? transformed.children; - } else { - data = [transformed]; - } - const blobUrl = URL.createObjectURL(new Blob([buffer], {type: params.mime})); - - return dataFile( - fileName, - data.map((x) => x.timestamp), - data, - blobUrl, - params.type, - tagGenerationTrace - ); -} - -function videoDecoder(buffer, params, fileName, store) { - const [data, timeline] = params.videoDecoder(buffer); - const blobUrl = URL.createObjectURL(new Blob([data], {type: params.mime})); - return dataFile(fileName, timeline, blobUrl, blobUrl, params.type); -} - -function dataFile(filename, timeline, data, blobUrl, type, tagGenerationTrace = null) { - return { - filename: filename, - // Object is frozen for performance reasons - // It will prevent Vue from making it a reactive object which will be very slow as the timeline gets larger. - timeline: Object.freeze(timeline), - data: data, - blobUrl: blobUrl, - tagGenerationTrace: tagGenerationTrace, - type: type, - selectedIndex: 0, - destroy() { - URL.revokeObjectURL(this.blobUrl); - }, - }; -} - -function arrayEquals(a, b) { - if (a.length !== b.length) { - return false; - } - for (let i = 0; i < a.length; i++) { - if (a[i] != b[i]) { - return false; - } - } - return true; -} - -function arrayStartsWith(array, prefix) { - return arrayEquals(array.slice(0, prefix.length), prefix); -} - -function decodedFile(fileType, buffer, fileName, store) { - const fileDecoder = FILE_DECODERS[fileType]; - return [fileType, fileDecoder.decoder(buffer, fileDecoder.decoderParams, fileName, store)]; -} - -function detectAndDecode(buffer, fileName, store) { - if (arrayStartsWith(buffer, LAYER_TRACE_MAGIC_NUMBER)) { - return decodedFile(FILE_TYPES.SURFACE_FLINGER_TRACE, buffer, fileName, store); - } - if (arrayStartsWith(buffer, ACCESSIBILITY_MAGIC_NUMBER)) { - return decodedFile(FILE_TYPES.ACCESSIBILITY_TRACE, buffer, fileName, store); - } - if (arrayStartsWith(buffer, WINDOW_TRACE_MAGIC_NUMBER)) { - return decodedFile(FILE_TYPES.WINDOW_MANAGER_TRACE, buffer, fileName, store); - } - if (arrayStartsWith(buffer, MPEG4_MAGIC_NMBER)) { - return decodedFile(FILE_TYPES.SCREEN_RECORDING, buffer, fileName, store); - } - if (arrayStartsWith(buffer, TRANSACTIONS_TRACE_MAGIC_NUMBER)) { - return decodedFile(FILE_TYPES.TRANSACTIONS_TRACE, buffer, fileName, store); - } - if (arrayStartsWith(buffer, WAYLAND_TRACE_MAGIC_NUMBER)) { - return decodedFile(FILE_TYPES.WAYLAND_TRACE, buffer, fileName, store); - } - if (arrayStartsWith(buffer, PROTO_LOG_MAGIC_NUMBER)) { - return decodedFile(FILE_TYPES.PROTO_LOG, buffer, fileName, store); - } - if (arrayStartsWith(buffer, SYSTEM_UI_MAGIC_NUMBER)) { - return decodedFile(FILE_TYPES.SYSTEM_UI, buffer, fileName, store); - } - if (arrayStartsWith(buffer, LAUNCHER_MAGIC_NUMBER)) { - return decodedFile(FILE_TYPES.LAUNCHER, buffer, fileName, store); - } - if (arrayStartsWith(buffer, IMC_TRACE_MAGIC_NUMBER)) { - return decodedFile(FILE_TYPES.IME_TRACE_CLIENTS, buffer, fileName, store); - } - if (arrayStartsWith(buffer, IMS_TRACE_MAGIC_NUMBER)) { - return decodedFile(FILE_TYPES.IME_TRACE_SERVICE, buffer, fileName, store); - } - if (arrayStartsWith(buffer, IMM_TRACE_MAGIC_NUMBER)) { - return decodedFile(FILE_TYPES.IME_TRACE_MANAGERSERVICE, buffer, fileName, store); - } - if (arrayStartsWith(buffer, TAG_TRACE_MAGIC_NUMBER)) { - return decodedFile(FILE_TYPES.TAG_TRACE, buffer, fileName, store); - } - if (arrayStartsWith(buffer, ERROR_TRACE_MAGIC_NUMBER)) { - return decodedFile(FILE_TYPES.ERROR_TRACE, buffer, fileName, store); - } - - // TODO(b/169305853): Add magic number at beginning of file for better auto detection - for (const [filetype, condition] of [ - [FILE_TYPES.TRANSACTIONS_TRACE_LEGACY, (file) => file.data.length > 0], - [FILE_TYPES.WAYLAND_DUMP, (file) => (file.data.length > 0 && file.data.children[0] > 0) || file.data.length > 1], - [FILE_TYPES.WINDOW_MANAGER_DUMP], - [FILE_TYPES.SURFACE_FLINGER_DUMP] - ]) { - try { - const [, fileData] = decodedFile(filetype, buffer, fileName, store); - - // A generic file will often wrongly be decoded as an empty wayland dump file - if (condition && !condition(fileData)) { - // Fall through to next filetype - continue; - } - - return [filetype, fileData]; - } catch (ex) { - // ignore exception and fall through to next filetype - } - } - throw new UndetectableFileType('Unable to detect file'); -} - -/** - * Error is raised when detectAndDecode is called but the file can't be - * automatically detected as being of a compatible file type. - */ -class UndetectableFileType extends Error { } - -export { - dataFile, - detectAndDecode, - decodeAndTransformProto, - TagTraceMessage, - FILE_TYPES, - TRACE_INFO, - TRACE_TYPES, - DUMP_TYPES, - DUMP_INFO, - FILE_DECODERS, - FILE_ICONS, - UndetectableFileType -}; diff --git a/tools/winscope/src/decodeVideo.js b/tools/winscope/src/decodeVideo.js deleted file mode 100644 index 63bef9070..000000000 --- a/tools/winscope/src/decodeVideo.js +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright 2017, 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. - */ - -const WINSCOPE_META_MAGIC_STRING = [0x23, 0x56, 0x56, 0x31, 0x4e, 0x53, 0x43, 0x30, 0x50, 0x45, 0x54, 0x31, 0x4d, 0x45, 0x21, 0x23]; // #VV1NSC0PET1ME!# - -// Suitable only for short patterns -function findFirstInArray(array, pattern) { - for (var i = 0; i < array.length; i++) { - var match = true; - for (var j = 0; j < pattern.length; j++) { - if (array[i + j] != pattern[j]) { - match = false; - break; - } - } - if (match) { - return i; - } - } - return -1; -} - -function parseUintNLE(buffer, position, bytes) { - var num = 0; - for (var i = bytes - 1; i >= 0; i--) { - num = num * 256 - num += buffer[position + i]; - } - return num; -} - -function parseUint32LE(buffer, position) { - return parseUintNLE(buffer, position, 4) -} - -function parseUint64LE(buffer, position) { - return parseUintNLE(buffer, position, 8) -} - -function mp4Decoder(buffer) { - var dataStart = findFirstInArray(buffer, WINSCOPE_META_MAGIC_STRING); - if (dataStart < 0) { - throw new Error('Unable to find sync metadata in the file. Are you using the latest Android ScreenRecorder version?'); - } - dataStart += WINSCOPE_META_MAGIC_STRING.length; - var frameNum = parseUint32LE(buffer, dataStart); - dataStart += 4; - var timeline = []; - for (var i = 0; i < frameNum; i++) { - timeline.push(parseUint64LE(buffer, dataStart) * 1000); - dataStart += 8; - } - return [buffer, timeline] -} - -export { mp4Decoder }; diff --git a/tools/winscope/src/dumps/DumpBase.ts b/tools/winscope/src/dumps/DumpBase.ts deleted file mode 100644 index 38c86c4d7..000000000 --- a/tools/winscope/src/dumps/DumpBase.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export default abstract class DumpBase implements IDump { - data: any; - _files: any[]; - - constructor(data, files) { - this.data = data; - this._files = files; - } - - get files(): readonly any[] { - return Object.values(this._files).flat(); - } - - abstract get type(): String; -} - -interface IDump { - files: readonly Object[]; - type: String, -} \ No newline at end of file diff --git a/tools/winscope/src/dumps/SurfaceFlinger.ts b/tools/winscope/src/dumps/SurfaceFlinger.ts deleted file mode 100644 index c3b6a885d..000000000 --- a/tools/winscope/src/dumps/SurfaceFlinger.ts +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { FILE_TYPES, DUMP_TYPES } from "@/decode.js"; -import DumpBase from "./DumpBase"; -import LayersTraceEntry from '../flickerlib/layers/LayerTraceEntry'; -import LayersTrace from '../flickerlib/LayersTrace'; - -export default class SurfaceFlinger extends DumpBase { - sfDumpFile: any; - data: any; - - constructor(files) { - const sfDumpFile = files[FILE_TYPES.SURFACE_FLINGER_DUMP]; - super(sfDumpFile.data, files); - this.sfDumpFile = sfDumpFile; - } - - get type() { - return DUMP_TYPES.SURFACE_FLINGER; - } - - static fromProto(proto: any): LayersTrace { - const source = null; - const entry = LayersTraceEntry.fromProto( - /* protos */ proto.layers, - /* displays */ proto.displays, - /* timestamp */ 0, - /* hwcBlob */ "" - ); - return new LayersTrace([entry], source); - } -} \ No newline at end of file diff --git a/tools/winscope/src/dumps/Wayland.ts b/tools/winscope/src/dumps/Wayland.ts deleted file mode 100644 index b038d9759..000000000 --- a/tools/winscope/src/dumps/Wayland.ts +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { FILE_TYPES, DUMP_TYPES } from "@/decode.js"; -import DumpBase from "./DumpBase"; - -export default class WayLand extends DumpBase { - waylandFile: any; - - constructor(files) { - const waylandFile = files[FILE_TYPES.WAYLAND_DUMP]; - super(waylandFile.data, files); - this.waylandFile = waylandFile; - } - - get type() { - return DUMP_TYPES.WAYLAND; - } -} \ No newline at end of file diff --git a/tools/winscope/src/dumps/WindowManager.ts b/tools/winscope/src/dumps/WindowManager.ts deleted file mode 100644 index 21b78ac1d..000000000 --- a/tools/winscope/src/dumps/WindowManager.ts +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { FILE_TYPES, DUMP_TYPES } from "@/decode.js"; -import DumpBase from "./DumpBase"; - -import { WindowManagerTrace } from '@/flickerlib'; - -export default class WindowManager extends DumpBase { - wmDumpFile: any; - - constructor(files) { - const wmDumpFile = files[FILE_TYPES.WINDOW_MANAGER_DUMP]; - super(wmDumpFile.data, files); - this.wmDumpFile = wmDumpFile - } - - get type() { - return DUMP_TYPES.WINDOW_MANAGER; - } - - static fromProto(proto: any): WindowManagerTrace { - const source = null; - const state = WindowManagerTrace.fromDump(proto); - return new WindowManagerTrace([state], source); - } -} \ No newline at end of file diff --git a/tools/winscope/src/flickerlib/ErrorTrace.ts b/tools/winscope/src/flickerlib/ErrorTrace.ts deleted file mode 100644 index 36b830794..000000000 --- a/tools/winscope/src/flickerlib/ErrorTrace.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { ErrorTrace } from "./common" -import ErrorState from "./errors/ErrorState" - -ErrorTrace.fromProto = function (proto: any) { - const states = []; - for (const stateProto of proto.states) { - const transformedState = ErrorState.fromProto( - stateProto.errors, - stateProto.timestamp); - - states.push(transformedState); - } - const source = null; - return new ErrorTrace(states, source); -} - -export default ErrorTrace; diff --git a/tools/winscope/src/flickerlib/LayersTrace.ts b/tools/winscope/src/flickerlib/LayersTrace.ts deleted file mode 100644 index 01720114a..000000000 --- a/tools/winscope/src/flickerlib/LayersTrace.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { LayersTrace } from "./common" -import LayerTraceEntryLazy from './layers/LayerTraceEntryLazy' - -LayersTrace.fromProto = function (proto: any): LayersTrace { - const entries = [] - for (const entryProto of proto.entry) { - const transformedEntry = new LayerTraceEntryLazy( - /* protos */ entryProto.layers.layers, - /* displays */ entryProto.displays, - /* timestamp */ entryProto.elapsedRealtimeNanos, - /* hwcBlob */ entryProto.hwcBlob); - - entries.push(transformedEntry); - } - const source = null; - const trace = new LayersTrace(entries, source); - return trace; -} - -export default LayersTrace; diff --git a/tools/winscope/src/flickerlib/ObjectFormatter.ts b/tools/winscope/src/flickerlib/ObjectFormatter.ts deleted file mode 100644 index c9eac1c4e..000000000 --- a/tools/winscope/src/flickerlib/ObjectFormatter.ts +++ /dev/null @@ -1,278 +0,0 @@ -/* - * Copyright 2021, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {toSize, toActiveBuffer, toColor, toColor3, toPoint, toRect, - toRectF, toRegion, toMatrix22, toTransform} from './common'; -import intDefMapping from - '../../../../../prebuilts/misc/common/winscope/intDefMapping.json'; -import config from '../config/Configuration.json' - -function readIntdefMap(): Map { - const map = new Map(); - const keys = Object.keys(config.intDefColumn); - - keys.forEach(key => { - const value = config.intDefColumn[key]; - map.set(key, value); - }); - - return map; -} -export default class ObjectFormatter { - static displayDefaults: boolean = false - private static INVALID_ELEMENT_PROPERTIES = config.invalidProperties; - - private static FLICKER_INTDEF_MAP = readIntdefMap(); - - static cloneObject(entry: any): any { - let obj: any = {} - const properties = ObjectFormatter.getProperties(entry); - properties.forEach(prop => obj[prop] = entry[prop]); - return obj; - } - - /** - * Get the true properties of an entry excluding functions, kotlin gernerated - * variables, explicitly excluded properties, and flicker objects already in - * the hierarchy that shouldn't be traversed when formatting the entry - * @param entry The entry for which we want to get the properties for - * @return The "true" properties of the entry as described above - */ - static getProperties(entry: any): string[] { - var props = []; - let obj = entry; - - do { - const properties = Object.getOwnPropertyNames(obj).filter(it => { - // filter out functions - if (typeof(entry[it]) === 'function') return false; - // internal propertires from kotlinJs - if (it.includes(`$`)) return false; - // private kotlin variables from kotlin - if (it.startsWith(`_`)) return false; - // some predefined properties used only internally (e.g., children, ref, diff) - if (this.INVALID_ELEMENT_PROPERTIES.includes(it)) return false; - - const value = entry[it]; - // only non-empty arrays of non-flicker objects (otherwise they are in hierarchy) - if (Array.isArray(value) && value.length > 0) return !value[0].stableId; - // non-flicker object - return !(value?.stableId); - }); - properties.forEach(function (prop) { - if (typeof(entry[prop]) !== 'function' && props.indexOf(prop) === -1) { - props.push(prop); - } - }); - } while (obj = Object.getPrototypeOf(obj)); - - return props; - } - - /** - * Format a Winscope entry to be displayed in the UI - * Accounts for different user display settings (e.g. hiding empty/default values) - * @param obj The raw object to format - * @return The formatted object - */ - static format(obj: any): {} { - const properties = this.getProperties(obj); - const sortedProperties = properties.sort() - - const result: any = {} - sortedProperties.forEach(entry => { - const key = entry; - const value: any = obj[key]; - - if (value === null || value === undefined) { - if (this.displayDefaults) { - result[key] = value; - } - return - } - - if (value || this.displayDefaults) { - // raw values (e.g., false or 0) - if (!value) { - result[key] = value - // flicker obj - } else if (value.prettyPrint) { - const isEmpty = value.isEmpty === true; - if (!isEmpty || this.displayDefaults) { - result[key] = value.prettyPrint(); - } - } else { - // converted proto to flicker - const translatedObject = this.translateObject(value); - if (translatedObject) { - if (translatedObject.prettyPrint) { - result[key] = translatedObject.prettyPrint(); - } - else { - result[key] = translatedObject; - } - // objects - recursive call - } else if (value && typeof(value) == `object`) { - const childObj = this.format(value) as any; - const isEmpty = Object.entries(childObj).length == 0 || childObj.isEmpty; - if (!isEmpty || this.displayDefaults) { - result[key] = childObj; - } - } else { - // values - result[key] = this.translateIntDef(obj, key, value); - } - } - - } - }) - - return result; - } - - /** - * Translate some predetermined proto objects into their flicker equivalent - * - * Returns null if the object cannot be translated - * - * @param obj Object to translate - */ - private static translateObject(obj) { - const type = obj?.$type?.name; - switch(type) { - case `SizeProto`: return toSize(obj); - case `ActiveBufferProto`: return toActiveBuffer(obj); - case `Color3`: return toColor3(obj); - case `ColorProto`: return toColor(obj); - case `PointProto`: return toPoint(obj); - case `RectProto`: return toRect(obj); - case `Matrix22`: return toMatrix22(obj); - case `FloatRectProto`: return toRectF(obj); - case `RegionProto`: return toRegion(obj); - case `TransformProto`: return toTransform(obj); - case 'ColorTransformProto': { - const formatted = this.formatColorTransform(obj.val); - return `${formatted}`; - } - } - - return null; - } - - private static formatColorTransform(vals) { - const fixedVals = vals.map((v) => v.toFixed(1)); - let formatted = ``; - for (let i = 0; i < fixedVals.length; i += 4) { - formatted += `[`; - formatted += fixedVals.slice(i, i + 4).join(', '); - formatted += `] `; - } - return formatted; - } - - /** - * Obtains from the proto field, the metadata related to the typedef type (if any) - * - * @param obj Proto object - * @param propertyName Property to search - */ - private static getTypeDefSpec(obj: any, propertyName: string): string { - const fields = obj?.$type?.fields; - if (!fields) { - return null; - } - - const options = fields[propertyName]?.options; - if (!options) { - return null; - } - - return options["(.android.typedef)"]; - } - - /** - * Translate intdef properties into their string representation - * - * For proto objects check the - * - * @param parentObj Object containing the value to parse - * @param propertyName Property to search - * @param value Property value - */ - private static translateIntDef(parentObj: any, propertyName: string, value: any): string { - const parentClassName = parentObj.constructor.name; - const propertyPath = `${parentClassName}.${propertyName}`; - - let translatedValue = value; - // Parse Flicker objects (no intdef annotation supported) - if (this.FLICKER_INTDEF_MAP.has(propertyPath)) { - translatedValue = this.getIntFlagsAsStrings(value, - this.FLICKER_INTDEF_MAP.get(propertyPath)); - } else { - // If it's a proto, search on the proto definition for the intdef type - const typeDefSpec = this.getTypeDefSpec(parentObj, propertyName); - if (typeDefSpec) { - translatedValue = this.getIntFlagsAsStrings(value, typeDefSpec); - } - } - - return translatedValue; - } - - /** - * Translate a property from its numerical value into its string representation - * - * @param intFlags Property value - * @param annotationType IntDef type to use - */ - private static getIntFlagsAsStrings(intFlags: any, annotationType: string) { - const flags = []; - - const mapping = intDefMapping[annotationType].values; - const knownFlagValues = Object.keys(mapping).reverse().map(x => parseInt(x)); - - if (mapping.length == 0) { - console.warn("No mapping for type", annotationType) - return intFlags + "" - } - - // Will only contain bits that have not been associated with a flag. - const parsedIntFlags = parseInt(intFlags); - let leftOver = parsedIntFlags; - - for (const flagValue of knownFlagValues) { - if (((leftOver & flagValue) && ((intFlags & flagValue) === flagValue)) - || (parsedIntFlags === 0 && flagValue === 0)) { - flags.push(mapping[flagValue]); - - leftOver = leftOver & ~flagValue; - } - } - - if (flags.length === 0) { - console.error('No valid flag mappings found for ', - intFlags, 'of type', annotationType); - } - - if (leftOver) { - // If 0 is a valid flag value that isn't in the intDefMapping - // it will be ignored - flags.push(leftOver); - } - - return flags.join(' | '); - } -} diff --git a/tools/winscope/src/flickerlib/README.md b/tools/winscope/src/flickerlib/README.md deleted file mode 100644 index 79cbbe6c4..000000000 --- a/tools/winscope/src/flickerlib/README.md +++ /dev/null @@ -1,12 +0,0 @@ -This directory contains all the code extending the common Flicker library -to make it fully compatible with Winscope. The common Flicker library is -written is Kotlin and compiled to JavaScript and then extended by the code in -this directory. - -To use flickerlib in the rest of the Winscope source code use -`import { ... } from '@/flickerlib'` rather than importing the compiled -common Flicker library directly. - -The flickerlib classes are extended through mixins (functions, getter, and -setters) that are injected into the original compiled common Flicker library -classes. \ No newline at end of file diff --git a/tools/winscope/src/flickerlib/TagTrace.ts b/tools/winscope/src/flickerlib/TagTrace.ts deleted file mode 100644 index 862e51fb9..000000000 --- a/tools/winscope/src/flickerlib/TagTrace.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { TagTrace } from "./common" -import TagState from "./tags/TagState" - -TagTrace.fromProto = function (proto: any): TagTrace { - const states = []; - for (const stateProto of proto.states) { - const transformedState = TagState.fromProto( - stateProto.timestamp, - stateProto.tags); - - states.push(transformedState); - } - const source = null; - return new TagTrace(states, source); -} - -export default TagTrace; diff --git a/tools/winscope/src/flickerlib/WindowManagerState.ts b/tools/winscope/src/flickerlib/WindowManagerState.ts deleted file mode 100644 index ef388febb..000000000 --- a/tools/winscope/src/flickerlib/WindowManagerState.ts +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { - KeyguardControllerState, - RootWindowContainer, - WindowManagerPolicy, - WindowManagerState, - WINDOW_MANAGER_KIND, -} from "./common" - -import WindowContainer from "./windows/WindowContainer" - -WindowManagerState.fromProto = function (proto: any, timestamp: number = 0, where: string = ""): WindowManagerState { - var inputMethodWIndowAppToken = ""; - if (proto.inputMethodWindow != null) { - proto.inputMethodWindow.hashCode.toString(16) - }; - - const rootWindowContainer = createRootWindowContainer(proto.rootWindowContainer); - const keyguardControllerState = createKeyguardControllerState( - proto.rootWindowContainer.keyguardController); - const policy = createWindowManagerPolicy(proto.policy); - - const entry = new WindowManagerState( - where, - policy, - proto.focusedApp, - proto.focusedDisplayId, - proto.focusedWindow?.title ?? "", - inputMethodWIndowAppToken, - proto.rootWindowContainer.isHomeRecentsComponent, - proto.displayFrozen, - proto.rootWindowContainer.pendingActivities.map(it => it.title), - rootWindowContainer, - keyguardControllerState, - /*timestamp */ `${timestamp}` - ); - - addAttributes(entry, proto); - return entry -} - -function addAttributes(entry: WindowManagerState, proto: any) { - entry.kind = WINDOW_MANAGER_KIND; - // There no JVM/JS translation for Longs yet - entry.timestampMs = entry.timestamp.toString(); - entry.rects = entry.windowStates.reverse().map(it => it.rect); - if (!entry.isComplete()) { - entry.isIncompleteReason = entry.getIsIncompleteReason(); - } - entry.proto = proto; - entry.shortName = entry.name; - entry.chips = []; - entry.isVisible = true; -} - -function createWindowManagerPolicy(proto: any): WindowManagerPolicy { - return new WindowManagerPolicy( - proto.focusedAppToken ?? "", - proto.forceStatusBar, - proto.forceStatusBarFromKeyguard, - proto.keyguardDrawComplete, - proto.keyguardOccluded, - proto.keyguardOccludedChanged, - proto.keyguardOccludedPending, - proto.lastSystemUiFlags, - proto.orientation, - proto.rotation, - proto.rotationMode, - proto.screenOnFully, - proto.windowManagerDrawComplete - ); -} - -function createRootWindowContainer(proto: any): RootWindowContainer { - const windowContainer = WindowContainer.fromProto( - /* proto */ proto.windowContainer, - /* childrenProto */ proto.windowContainer?.children?.reverse() ?? [], - /* isActivityInTree */ false - ); - - if (windowContainer == null) { - throw new Error(`Window container should not be null.\n${JSON.stringify(proto)}`); - } - const entry = new RootWindowContainer(windowContainer); - return entry; -} - -function createKeyguardControllerState(proto: any): KeyguardControllerState { - const keyguardOccludedStates = {}; - - if (proto) { - proto.keyguardOccludedStates.forEach(it => - keyguardOccludedStates[it.displayId] = it.keyguardOccluded); - } - - return new KeyguardControllerState( - proto?.isAodShowing ?? false, - proto?.isKeyguardShowing ?? false, - keyguardOccludedStates - ); -} - -export default WindowManagerState; diff --git a/tools/winscope/src/flickerlib/WindowManagerTrace.ts b/tools/winscope/src/flickerlib/WindowManagerTrace.ts deleted file mode 100644 index c30c62097..000000000 --- a/tools/winscope/src/flickerlib/WindowManagerTrace.ts +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { WindowManagerTrace } from "./common" -import WindowManagerState from "./WindowManagerState" - -WindowManagerTrace.fromProto = function (proto: any) { - const entries = []; - for (const entryProto of proto.entry) { - const transformedEntry = WindowManagerState.fromProto( - entryProto.windowManagerService, - entryProto.elapsedRealtimeNanos, - entryProto.where); - - entries.push(transformedEntry); - } - const source = null; - return new WindowManagerTrace(entries, source); -} - -WindowManagerTrace.fromDump = function(proto: any): WindowManagerTrace { - return WindowManagerState.fromProto(proto); -} - -export default WindowManagerTrace; diff --git a/tools/winscope/src/flickerlib/common.js b/tools/winscope/src/flickerlib/common.js deleted file mode 100644 index 1aa255c86..000000000 --- a/tools/winscope/src/flickerlib/common.js +++ /dev/null @@ -1,320 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// Imports all the compiled common Flicker library classes and exports them -// as clean es6 modules rather than having them be commonjs modules - -// WM -const WindowManagerTrace = require('flicker').com.android.server.wm.traces. - common.windowmanager.WindowManagerTrace; -const WindowManagerState = require('flicker').com.android.server.wm.traces. - common.windowmanager.WindowManagerState; -const Activity = require('flicker').com.android.server.wm.traces.common. - windowmanager.windows.Activity; -const Configuration = require('flicker').com.android.server.wm.traces.common. - windowmanager.windows.Configuration; -const ConfigurationContainer = require('flicker').com.android.server.wm.traces. - common.windowmanager.windows.ConfigurationContainer; -const DisplayArea = require('flicker').com.android.server.wm.traces.common. - windowmanager.windows.DisplayArea; -const DisplayContent = require('flicker').com.android.server.wm.traces.common. - windowmanager.windows.DisplayContent; -const KeyguardControllerState = require('flicker').com.android.server.wm. - traces.common.windowmanager.windows.KeyguardControllerState; -const RootWindowContainer = require('flicker').com.android.server.wm.traces. - common.windowmanager.windows.RootWindowContainer; -const Task = require('flicker').com.android.server.wm.traces.common. - windowmanager.windows.Task; -const TaskFragment = require('flicker').com.android.server.wm.traces.common. - windowmanager.windows.TaskFragment; -const WindowConfiguration = require('flicker').com.android.server.wm.traces. - common.windowmanager.windows.WindowConfiguration; -const WindowContainer = require('flicker').com.android.server.wm.traces.common. - windowmanager.windows.WindowContainer; -const WindowLayoutParams= require('flicker').com.android.server.wm.traces. - common.windowmanager.windows.WindowLayoutParams; -const WindowManagerPolicy = require('flicker').com.android.server.wm.traces. - common.windowmanager.windows.WindowManagerPolicy; -const WindowState = require('flicker').com.android.server.wm.traces.common. - windowmanager.windows.WindowState; -const WindowToken = require('flicker').com.android.server.wm.traces.common. - windowmanager.windows.WindowToken; -const WINDOW_MANAGER_KIND = 'WindowManagerState'; - -// SF -const Layer = require('flicker').com.android.server.wm.traces.common. - layers.Layer; -const LayerProperties = require('flicker').com.android.server.wm.traces.common. - layers.LayerProperties; -const BaseLayerTraceEntry = require('flicker').com.android.server.wm.traces.common. - layers.BaseLayerTraceEntry; -const LayerTraceEntry = require('flicker').com.android.server.wm.traces.common. - layers.LayerTraceEntry; -const LayerTraceEntryBuilder = require('flicker').com.android.server.wm.traces. - common.layers.LayerTraceEntryBuilder; -const LayersTrace = require('flicker').com.android.server.wm.traces.common. - layers.LayersTrace; -const Matrix22 = require('flicker').com.android.server.wm.traces.common - .Matrix22; -const Matrix33 = require('flicker').com.android.server.wm.traces.common - .Matrix33; -const Transform = require('flicker').com.android.server.wm.traces.common. - layers.Transform; -const Display = require('flicker').com.android.server.wm.traces.common. - layers.Display; -const SURFACE_FLINGER_KIND = 'SurfaceFlingerLayer'; - -// Common -const Size = require('flicker').com.android.server.wm.traces.common.Size; -const ActiveBuffer = require('flicker').com.android.server.wm.traces.common - .ActiveBuffer; -const Color3 = require('flicker').com.android.server.wm.traces.common.Color3; -const Color = require('flicker').com.android.server.wm.traces.common.Color; -const Point = require('flicker').com.android.server.wm.traces.common.Point; -const Rect = require('flicker').com.android.server.wm.traces.common.Rect; -const RectF = require('flicker').com.android.server.wm.traces.common.RectF; -const Region = require('flicker').com.android.server.wm.traces.common.region.Region; - -//Tags -const Tag = require('flicker').com.android.server.wm.traces.common.tags.Tag; -const TagState = require('flicker').com.android.server.wm.traces.common.tags.TagState; -const TagTrace = require('flicker').com.android.server.wm.traces.common.tags.TagTrace; - -//Errors -const Error = require('flicker').com.android.server.wm.traces.common.errors.Error; -const ErrorState = require('flicker').com.android.server.wm.traces.common.errors.ErrorState; -const ErrorTrace = require('flicker').com.android.server.wm.traces.common.errors.ErrorTrace; - -// Service -const TaggingEngine = require('flicker').com.android.server.wm.traces.common.service.TaggingEngine; - -const EMPTY_BUFFER = new ActiveBuffer(0, 0, 0, 0); -const EMPTY_COLOR3 = new Color3(-1, -1, -1); -const EMPTY_COLOR = new Color(-1, -1, -1, 0); -const EMPTY_RECT = new Rect(0, 0, 0, 0); -const EMPTY_RECTF = new RectF(0, 0, 0, 0); -const EMPTY_POINT = new Point(0, 0); -const EMPTY_MATRIX22 = new Matrix22(0, 0, 0, 0, 0, 0); -const EMPTY_MATRIX33 = new Matrix33(0, 0, 0, 0, 0, 0); -const EMPTY_TRANSFORM = new Transform(0, EMPTY_MATRIX33); - -function toSize(proto) { - if (proto == null) { - return EMPTY_BOUNDS; - } - const width = proto.width ?? proto.w ?? 0; - const height = proto.height ?? proto.h ?? 0; - if (width || height) { - return new Size(width, height); - } - return EMPTY_BOUNDS; -} - -function toActiveBuffer(proto) { - const width = proto?.width ?? 0; - const height = proto?.height ?? 0; - const stride = proto?.stride ?? 0; - const format = proto?.format ?? 0; - - if (width || height || stride || format) { - return new ActiveBuffer(width, height, stride, format); - } - return EMPTY_BUFFER; -} - -function toColor3(proto) { - if (proto == null) { - return EMPTY_COLOR; - } - const r = proto.r ?? 0; - const g = proto.g ?? 0; - const b = proto.b ?? 0; - if (r || g || b) { - return new Color3(r, g, b); - } - return EMPTY_COLOR3; -} - -function toColor(proto) { - if (proto == null) { - return EMPTY_COLOR; - } - const r = proto.r ?? 0; - const g = proto.g ?? 0; - const b = proto.b ?? 0; - const a = proto.a ?? 0; - if (r || g || b || a) { - return new Color(r, g, b, a); - } - return EMPTY_COLOR; -} - -function toPoint(proto) { - if (proto == null) { - return null; - } - const x = proto.x ?? 0; - const y = proto.y ?? 0; - if (x || y) { - return new Point(x, y); - } - return EMPTY_POINT; -} - -function toRect(proto) { - if (proto == null) { - return EMPTY_RECT; - } - - const left = proto?.left ?? 0; - const top = proto?.top ?? 0; - const right = proto?.right ?? 0; - const bottom = proto?.bottom ?? 0; - if (left || top || right || bottom) { - return new Rect(left, top, right, bottom); - } - return EMPTY_RECT; -} - -function toRectF(proto) { - if (proto == null) { - return EMPTY_RECTF; - } - - const left = proto?.left ?? 0; - const top = proto?.top ?? 0; - const right = proto?.right ?? 0; - const bottom = proto?.bottom ?? 0; - if (left || top || right || bottom) { - return new RectF(left, top, right, bottom); - } - return EMPTY_RECTF; -} - -function toRegion(proto) { - if (proto == null) { - return null; - } - - const rects = []; - for (let x = 0; x < proto.rect.length; x++) { - const rect = proto.rect[x]; - const parsedRect = toRect(rect); - rects.push(parsedRect); - } - - return new Region(rects); -} - -function toTransform(proto) { - if (proto == null) { - return EMPTY_TRANSFORM; - } - const dsdx = proto.dsdx ?? 0; - const dtdx = proto.dtdx ?? 0; - const tx = proto.tx ?? 0; - const dsdy = proto.dsdy ?? 0; - const dtdy = proto.dtdy ?? 0; - const ty = proto.ty ?? 0; - - if (dsdx || dtdx || tx || dsdy || dtdy || ty) { - const matrix = new Matrix33(dsdx, dtdx, tx, dsdy, dtdy, ty); - return new Transform(proto.type ?? 0, matrix); - } - - if (proto.type) { - return new Transform(proto.type ?? 0, EMPTY_MATRIX33); - } - return EMPTY_TRANSFORM; -} - -function toMatrix22(proto) { - if (proto == null) { - return EMPTY_MATRIX22; - } - const dsdx = proto.dsdx ?? 0; - const dtdx = proto.dtdx ?? 0; - const dsdy = proto.dsdy ?? 0; - const dtdy = proto.dtdy ?? 0; - - if (dsdx || dtdx || dsdy || dtdy) { - return new Matrix22(dsdx, dtdx, dsdy, dtdy); - } - - return EMPTY_MATRIX22; -} - -export { - Activity, - Configuration, - ConfigurationContainer, - DisplayArea, - DisplayContent, - KeyguardControllerState, - RootWindowContainer, - Task, - TaskFragment, - WindowConfiguration, - WindowContainer, - WindowState, - WindowToken, - WindowLayoutParams, - WindowManagerPolicy, - WindowManagerTrace, - WindowManagerState, - WINDOW_MANAGER_KIND, - // SF - BaseLayerTraceEntry, - Layer, - LayerProperties, - LayerTraceEntry, - LayerTraceEntryBuilder, - LayersTrace, - Transform, - Matrix22, - Matrix33, - Display, - SURFACE_FLINGER_KIND, - // Tags - Tag, - TagState, - TagTrace, - // Errors - Error, - ErrorState, - ErrorTrace, - // Common - Size, - ActiveBuffer, - Color, - Color3, - Point, - Rect, - RectF, - Region, - // Service - TaggingEngine, - toSize, - toActiveBuffer, - toColor, - toColor3, - toPoint, - toRect, - toRectF, - toRegion, - toMatrix22, - toTransform, -}; diff --git a/tools/winscope/src/flickerlib/errors/Error.ts b/tools/winscope/src/flickerlib/errors/Error.ts deleted file mode 100644 index eb81715a9..000000000 --- a/tools/winscope/src/flickerlib/errors/Error.ts +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2021, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -import { Error } from "../common" - -Error.fromProto = function (proto: any): Error { - const error = new Error( - proto.stacktrace, - proto.message, - proto.layerId, - proto.windowToken, - proto.taskId, - proto.assertionName - ); - return error; -} - -export default Error; diff --git a/tools/winscope/src/flickerlib/errors/ErrorState.ts b/tools/winscope/src/flickerlib/errors/ErrorState.ts deleted file mode 100644 index 533af2383..000000000 --- a/tools/winscope/src/flickerlib/errors/ErrorState.ts +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { ErrorState } from "../common"; -import Error from './Error'; - -ErrorState.fromProto = function (protos: any[], timestamp: number): ErrorState { - const errors = protos.map(it => Error.fromProto(it)); - const state = new ErrorState(errors, `${timestamp}`); - return state; -} - -export default ErrorState; diff --git a/tools/winscope/src/flickerlib/index.js b/tools/winscope/src/flickerlib/index.js deleted file mode 100644 index 216d621cb..000000000 --- a/tools/winscope/src/flickerlib/index.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import LayersTrace from './LayersTrace'; -import WindowManagerState from './WindowManagerState'; -import WindowManagerTrace from './WindowManagerTrace'; -import ObjectFormatter from './ObjectFormatter'; -import TagTrace from './TagTrace'; -import ErrorTrace from './ErrorTrace'; -/** - * Entry point into the flickerlib for Winscope. - * Expose everything we want Winscope to have access to here. - */ -export {ObjectFormatter, LayersTrace, WindowManagerState, WindowManagerTrace, TagTrace, ErrorTrace}; - diff --git a/tools/winscope/src/flickerlib/layers/Layer.ts b/tools/winscope/src/flickerlib/layers/Layer.ts deleted file mode 100644 index 19ba180a7..000000000 --- a/tools/winscope/src/flickerlib/layers/Layer.ts +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright 2021, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -import { Layer, LayerProperties, Rect, toActiveBuffer, toColor, toRect, toRectF, toRegion } from "../common" -import { shortenName } from '../mixin' -import { RELATIVE_Z_CHIP, GPU_CHIP, HWC_CHIP } from '../treeview/Chips' -import Transform from './Transform' - -Layer.fromProto = function (proto: any): Layer { - const visibleRegion = toRegion(proto.visibleRegion) - const activeBuffer = toActiveBuffer(proto.activeBuffer) - const bounds = toRectF(proto.bounds) - const color = toColor(proto.color) - const screenBounds = toRectF(proto.screenBounds) - const sourceBounds = toRectF(proto.sourceBounds) - const transform = Transform.fromProto(proto.transform, proto.position) - const bufferTransform = Transform.fromProto(proto.bufferTransform, /* position */ null) - const hwcCrop = toRectF(proto.hwcCrop) - const hwcFrame = toRect(proto.hwcFrame) - const requestedColor = toColor(proto.requestedColor) - const requestedTransform = - Transform.fromProto(proto.requestedTransform, proto.requestedPosition) - const cornerRadiusCrop = toRectF(proto.cornerRadiusCrop) - const inputTransform = - Transform.fromProto(proto.inputWindowInfo ? proto.inputWindowInfo.transform : null) - const inputRegion = - toRegion(proto.inputWindowInfo ? proto.inputWindowInfo.touchableRegion : null) - let crop: Rect - if (proto.crop) { - crop = toRect(proto.crop) - }; - - const properties = new LayerProperties( - visibleRegion, - activeBuffer, - /* flags */ proto.flags, - bounds, - color, - /* isOpaque */ proto.isOpaque, - /* shadowRadius */ proto.shadowRadius, - /* cornerRadius */ proto.cornerRadius, - /* type */ proto.type ?? ``, - screenBounds, - transform, - sourceBounds, - /* effectiveScalingMode */ proto.effectiveScalingMode, - bufferTransform, - /* hwcCompositionType */ proto.hwcCompositionType, - hwcCrop, - hwcFrame, - /* backgroundBlurRadius */ proto.backgroundBlurRadius, - crop, - /* isRelativeOf */ proto.isRelativeOf, - /* zOrderRelativeOfId */ proto.zOrderRelativeOf, - /* stackId */ proto.layerStack, - requestedTransform, - requestedColor, - cornerRadiusCrop, - inputTransform, - inputRegion - ); - - const entry = new Layer( - /* name */ proto.name ?? ``, - /* id */ proto.id, - /*parentId */ proto.parent, - /* z */ proto.z, - /* currFrame */ proto.currFrame, - properties - ); - addAttributes(entry, proto); - return entry -} - -function addAttributes(entry: Layer, proto: any) { - entry.kind = `${entry.id}`; - entry.shortName = shortenName(entry.name); - entry.proto = proto; - entry.rect = entry.bounds; - entry.rect.transform = entry.transform; - entry.rect.ref = entry; - entry.rect.label = entry.name; - entry.chips = []; - updateChips(entry); -} - -function updateChips(entry) { - if ((entry.zOrderRelativeOf || -1) !== -1) { - entry.chips.push(RELATIVE_Z_CHIP); - } - if (entry.hwcCompositionType === 'CLIENT') { - entry.chips.push(GPU_CHIP); - } else if (entry.hwcCompositionType === 'DEVICE' || entry.hwcCompositionType === 'SOLID_COLOR') { - entry.chips.push(HWC_CHIP); - } -} - -export default Layer; diff --git a/tools/winscope/src/flickerlib/layers/LayerTraceEntry.ts b/tools/winscope/src/flickerlib/layers/LayerTraceEntry.ts deleted file mode 100644 index ffa723d46..000000000 --- a/tools/winscope/src/flickerlib/layers/LayerTraceEntry.ts +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright 2021, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { Display, LayerTraceEntry, LayerTraceEntryBuilder, toRect, toSize, toTransform, SURFACE_FLINGER_KIND } from "../common" -import Layer from './Layer' -import { VISIBLE_CHIP, RELATIVE_Z_PARENT_CHIP, MISSING_LAYER } from '../treeview/Chips' - -LayerTraceEntry.fromProto = function (protos: any[], displayProtos: any[], - timestamp: number, hwcBlob: string, where: string = ''): LayerTraceEntry { - const layers = protos.map(it => Layer.fromProto(it)); - const displays = (displayProtos || []).map(it => newDisplay(it)); - const builder = new LayerTraceEntryBuilder(timestamp, layers, displays, hwcBlob, where); - const entry: LayerTraceEntry = builder.build(); - - updateChildren(entry); - addAttributes(entry, protos); - return entry; -} - -function addAttributes(entry: LayerTraceEntry, protos: any) { - entry.kind = SURFACE_FLINGER_KIND; - // There no JVM/JS translation for Longs yet - entry.timestampMs = entry.timestamp.toString() - entry.rects = entry.visibleLayers - .sort((a, b) => (b.absoluteZ > a.absoluteZ) ? 1 : (a.absoluteZ == b.absoluteZ) ? 0 : -1) - .map(it => it.rect); - - // Avoid parsing the entry root because it is an array of layers - // containing all trace information, this slows down the property tree. - // Instead parse only key properties for debugging - const entryIds = {} - protos.forEach(it => - entryIds[it.id] = `\nparent=${it.parent}\ntype=${it.type}\nname=${it.name}` - ); - entry.proto = entryIds; - entry.shortName = entry.name; - entry.chips = []; - entry.isVisible = true; -} - -function updateChildren(entry: LayerTraceEntry) { - entry.flattenedLayers.forEach(it => { - if (it.isVisible) { - it.chips.push(VISIBLE_CHIP); - } - if (it.zOrderRelativeOf) { - it.chips.push(RELATIVE_Z_PARENT_CHIP); - } - if (it.isMissing) { - it.chips.push(MISSING_LAYER); - } - }); -} - -function newDisplay(proto: any): Display { - return new Display( - proto.id, - proto.name, - proto.layerStack, - toSize(proto.size), - toRect(proto.layerStackSpaceRect), - toTransform(proto.transform), - proto.isVirtual - ) -} - -export default LayerTraceEntry; diff --git a/tools/winscope/src/flickerlib/layers/LayerTraceEntryLazy.ts b/tools/winscope/src/flickerlib/layers/LayerTraceEntryLazy.ts deleted file mode 100644 index 393e97caa..000000000 --- a/tools/winscope/src/flickerlib/layers/LayerTraceEntryLazy.ts +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright 2021, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -import { BaseLayerTraceEntry } from "../common"; -import LayerTraceEntry from "./LayerTraceEntry"; - -class LayerTraceEntryLazy extends BaseLayerTraceEntry { - private _isInitialized: boolean = false; - private _layersProto: any[]; - private _displayProtos: any[]; - timestamp: number; - timestampMs: string; - hwcBlob: string; - where: string; - private _lazyLayerTraceEntry: LayerTraceEntry; - - constructor (layersProto: any[], displayProtos: any[], - timestamp: number, hwcBlob: string, where: string = '') { - super(); - this._layersProto = layersProto; - this._displayProtos = displayProtos; - this.timestamp = timestamp; - this.timestampMs = timestamp.toString(); - this.hwcBlob = hwcBlob; - this.where = where; - - this.declareLazyProperties(); - } - - private initialize() { - if (this._isInitialized) return; - - this._isInitialized = true; - this._lazyLayerTraceEntry = LayerTraceEntry.fromProto( - this._layersProto, this._displayProtos, this.timestamp, - this.hwcBlob, this.where); - this._layersProto = []; - this._displayProtos = []; - } - - - private declareLazyProperties() { - Object.defineProperty(this, 'kind', {configurable: true, enumerable: true, get: function () { - this.initialize(); - return this._lazyLayerTraceEntry.kind; - }}); - - Object.defineProperty(this, 'timestampMs', {configurable: true, enumerable: true, get: function () { - this.initialize(); - return this._lazyLayerTraceEntry.timestampMs; - }}); - - Object.defineProperty(this, 'rects', {configurable: true, enumerable: true, get: function () { - this.initialize(); - return this._lazyLayerTraceEntry.rects; - }}); - - Object.defineProperty(this, 'proto', {configurable: true, enumerable: true, get: function () { - this.initialize(); - return this._lazyLayerTraceEntry.proto; - }}); - - Object.defineProperty(this, 'shortName', {configurable: true, enumerable: true, get: function () { - this.initialize(); - return this._lazyLayerTraceEntry.shortName; - }}); - - Object.defineProperty(this, 'isVisible', {configurable: true, enumerable: true, get: function () { - this.initialize(); - return this._lazyLayerTraceEntry.isVisible; - }}); - - Object.defineProperty(this, 'flattenedLayers', {configurable: true, enumerable: true, get: function () { - this.initialize(); - return this._lazyLayerTraceEntry.flattenedLayers; - }}); - - Object.defineProperty(this, 'stableId', {configurable: true, enumerable: true, get: function () { - this.initialize(); - return this._lazyLayerTraceEntry.stableId; - }}); - - Object.defineProperty(this, 'visibleLayers', {configurable: true, enumerable: true, get: function () { - this.initialize(); - return this._lazyLayerTraceEntry.visibleLayers; - }}); - - Object.defineProperty(this, 'children', {configurable: true, enumerable: true, get: function () { - this.initialize(); - return this._lazyLayerTraceEntry.children; - }}); - - Object.defineProperty(this, 'displays', {configurable: true, enumerable: true, get: function () { - this.initialize(); - return this._lazyLayerTraceEntry.displays; - }}); - } -} - -export default LayerTraceEntryLazy; diff --git a/tools/winscope/src/flickerlib/layers/Transform.ts b/tools/winscope/src/flickerlib/layers/Transform.ts deleted file mode 100644 index e0c6defef..000000000 --- a/tools/winscope/src/flickerlib/layers/Transform.ts +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright 2021, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { Transform, Matrix33 } from "../common" - -Transform.fromProto = function (transformProto, positionProto): Transform { - const entry = new Transform( - transformProto?.type ?? 0, - getMatrix(transformProto, positionProto)) - - return entry -} - -function getMatrix(transform, position): Matrix33 { - const x = position?.x ?? 0 - const y = position?.y ?? 0 - - if (transform == null || isSimpleTransform(transform.type)) { - return getDefaultTransform(transform?.type, x, y) - } - - return new Matrix33(transform.dsdx, transform.dtdx, x, transform.dsdy, transform.dtdy, y) -} - -function getDefaultTransform(type, x, y): Matrix33 { - // IDENTITY - if (!type) { - return new Matrix33(1, 0, x, 0, 1, y) - } - - // ROT_270 = ROT_90|FLIP_H|FLIP_V - if (isFlagSet(type, ROT_90_VAL | FLIP_V_VAL | FLIP_H_VAL)) { - return new Matrix33(0, -1, x, 1, 0, y) - } - - // ROT_180 = FLIP_H|FLIP_V - if (isFlagSet(type, FLIP_V_VAL | FLIP_H_VAL)) { - return new Matrix33(-1, 0, x, 0, -1, y) - } - - // ROT_90 - if (isFlagSet(type, ROT_90_VAL)) { - return new Matrix33(0, 1, x, -1, 0, y) - } - - // IDENTITY - if (isFlagClear(type, SCALE_VAL | ROTATE_VAL)) { - return new Matrix33(1, 0, x, 0, 1, y) - } - - throw new Error(`Unknown transform type ${type}`) -} - -export function isFlagSet(type, bits): Boolean { - var type = type || 0; - return (type & bits) === bits; -} - -export function isFlagClear(type, bits): Boolean { - return (type & bits) === 0; -} - -export function isSimpleTransform(type): Boolean { - return isFlagClear(type, ROT_INVALID_VAL | SCALE_VAL) -} - -/* transform type flags */ -const ROTATE_VAL = 0x0002 -const SCALE_VAL = 0x0004 - -/* orientation flags */ -const FLIP_H_VAL = 0x0100 // (1 << 0 << 8) -const FLIP_V_VAL = 0x0200 // (1 << 1 << 8) -const ROT_90_VAL = 0x0400 // (1 << 2 << 8) -const ROT_INVALID_VAL = 0x8000 // (0x80 << 8) - -export default Transform diff --git a/tools/winscope/src/flickerlib/mixin.ts b/tools/winscope/src/flickerlib/mixin.ts deleted file mode 100644 index 5625ba1f6..000000000 --- a/tools/winscope/src/flickerlib/mixin.ts +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import ObjectFormatter from "./ObjectFormatter" - -/** - * Get the properties of a WM object for display. - * - * @param entry WM hierarchy element - * @param proto Associated proto object - */ -export function getPropertiesForDisplay(entry: any): any { - if (!entry) { - return - } - - let obj: any = {} - const properties = ObjectFormatter.getProperties(entry) - properties.forEach(prop => obj[prop] = entry[prop]); - - // we remove the children property from the object to avoid it showing the - // the properties view of the element as we can always see those elements' - // properties by changing the target element in the hierarchy tree view. - if (obj.children) delete obj.children - if (obj.proto) delete obj.proto - - obj.proto = Object.assign({}, entry.proto) - if (obj.proto.children) delete obj.proto.children - if (obj.proto.childWindows) delete obj.proto.childWindows - if (obj.proto.childrenWindows) delete obj.proto.childrenWindows - if (obj.proto.childContainers) delete obj.proto.childContainers - if (obj.proto.windowToken) delete obj.proto.windowToken - if (obj.proto.rootDisplayArea) delete obj.proto.rootDisplayArea - if (obj.proto.rootWindowContainer) delete obj.proto.rootWindowContainer - if (obj.proto.windowContainer?.children) delete obj.proto.windowContainer.children - obj = ObjectFormatter.format(obj) - - return obj -} - -export function shortenName(name: any): string { - const classParts = (name + "").split(".") - if (classParts.length <= 3) { - return name - } - const className = classParts.slice(-1)[0] // last element - return `${classParts[0]}.${classParts[1]}.(...).${className}` -} diff --git a/tools/winscope/src/flickerlib/tags/Tag.ts b/tools/winscope/src/flickerlib/tags/Tag.ts deleted file mode 100644 index 25a50a307..000000000 --- a/tools/winscope/src/flickerlib/tags/Tag.ts +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 2021, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -import { Tag } from "../common"; -import TransitionType from "./TransitionType"; - -const transitionTypeMap = new Map([ - ['ROTATION', TransitionType.ROTATION], - ['PIP_ENTER', TransitionType.PIP_ENTER], - ['PIP_RESIZE', TransitionType.PIP_RESIZE], - ['PIP_EXPAND', TransitionType.PIP_EXPAND], - ['PIP_EXIT', TransitionType.PIP_EXIT], - ['APP_LAUNCH', TransitionType.APP_LAUNCH], - ['APP_CLOSE', TransitionType.APP_CLOSE], - ['IME_APPEAR', TransitionType.IME_APPEAR], - ['IME_DISAPPEAR', TransitionType.IME_DISAPPEAR], - ['APP_PAIRS_ENTER', TransitionType.APP_PAIRS_ENTER], - ['APP_PAIRS_EXIT', TransitionType.APP_PAIRS_EXIT], -]); - -Tag.fromProto = function (proto: any): Tag { - const tag = new Tag( - proto.id, - transitionTypeMap.get(proto.transition), - proto.isStartTag, - proto.layerId, - proto.windowToken, - proto.taskId - ); - return tag; -}; - -export default Tag; diff --git a/tools/winscope/src/flickerlib/tags/TagState.ts b/tools/winscope/src/flickerlib/tags/TagState.ts deleted file mode 100644 index 7a3de7bc1..000000000 --- a/tools/winscope/src/flickerlib/tags/TagState.ts +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { TagState } from "../common"; -import Tag from './Tag'; - -TagState.fromProto = function (timestamp: number, protos: any[]): TagState { - const tags = protos.map(it => Tag.fromProto(it)); - const state = new TagState(`${timestamp}`, tags); - return state; -} - -export default TagState; diff --git a/tools/winscope/src/flickerlib/tags/TransitionType.ts b/tools/winscope/src/flickerlib/tags/TransitionType.ts deleted file mode 100644 index ac5d02d16..000000000 --- a/tools/winscope/src/flickerlib/tags/TransitionType.ts +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2021, 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. - */ - -enum TransitionType { - ROTATION = 'ROTATION', - PIP_ENTER = 'PIP_ENTER', - PIP_RESIZE ='PIP_RESIZE', - PIP_EXPAND = 'PIP_EXPAND', - PIP_EXIT = 'PIP_EXIT', - APP_LAUNCH = 'APP_LAUNCH', - APP_CLOSE = 'APP_CLOSE', - IME_APPEAR = 'IME_APPEAR', - IME_DISAPPEAR = 'IME_DISAPPEAR', - APP_PAIRS_ENTER = 'APP_PAIRS_ENTER', - APP_PAIRS_EXIT = 'APP_PAIRS_EXIT', -}; - -export default TransitionType; \ No newline at end of file diff --git a/tools/winscope/src/flickerlib/treeview/Chip.ts b/tools/winscope/src/flickerlib/treeview/Chip.ts deleted file mode 100644 index 30f1c839b..000000000 --- a/tools/winscope/src/flickerlib/treeview/Chip.ts +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import ChipType from "./ChipType" - -export default class Chip { - short: String - long: String - type: ChipType - - constructor(short: String, long: String, type: ChipType) { - this.short = short - this.long = long - this.type = type - } -} \ No newline at end of file diff --git a/tools/winscope/src/flickerlib/treeview/ChipType.ts b/tools/winscope/src/flickerlib/treeview/ChipType.ts deleted file mode 100644 index 70c25d7f3..000000000 --- a/tools/winscope/src/flickerlib/treeview/ChipType.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -enum ChipType { - DEFAULT = 'default' -} - -export default ChipType \ No newline at end of file diff --git a/tools/winscope/src/flickerlib/treeview/Chips.ts b/tools/winscope/src/flickerlib/treeview/Chips.ts deleted file mode 100644 index 23b8e8b85..000000000 --- a/tools/winscope/src/flickerlib/treeview/Chips.ts +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import Chip from "./Chip" -import ChipType from "./ChipType" - -export const VISIBLE_CHIP = new Chip("V", "visible", ChipType.DEFAULT) - -export const RELATIVE_Z_CHIP = { - short: 'RelZ', - long: 'Is relative Z-ordered to another surface', - class: 'warn', -}; - -export const RELATIVE_Z_PARENT_CHIP = { - short: 'RelZParent', - long: 'Something is relative Z-ordered to this surface', - class: 'warn', -}; - -export const MISSING_LAYER = { - short: 'MissingLayer', - long: 'This layer was referenced from the parent, but not present in the trace', - class: 'error', -}; - -export const GPU_CHIP = { - short: 'GPU', - long: 'This layer was composed on the GPU', - class: 'gpu', -}; - -export const HWC_CHIP = { - short: 'HWC', - long: 'This layer was composed by Hardware Composer', - class: 'hwc', -}; \ No newline at end of file diff --git a/tools/winscope/src/flickerlib/windows/Activity.ts b/tools/winscope/src/flickerlib/windows/Activity.ts deleted file mode 100644 index 51e8139e6..000000000 --- a/tools/winscope/src/flickerlib/windows/Activity.ts +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { shortenName } from '../mixin' -import { Activity } from "../common" -import { VISIBLE_CHIP } from '../treeview/Chips' -import WindowContainer from "./WindowContainer" - -Activity.fromProto = function (proto: any): Activity { - if (proto == null) { - return null; - } else { - const windowContainer = WindowContainer.fromProto( - /* proto */ proto.windowToken.windowContainer, - /* protoChildren */ proto.windowToken.windowContainer?.children?.reverse() ?? [], - /* isActivityInTree */ true, - /* nameOverride */ null, - /* identifierOverride */ proto.identifier - ); - - const entry = new Activity( - proto.name, - proto.state, - proto.visible, - proto.frontOfTask, - proto.procId, - proto.translucent, - windowContainer - ); - - addAttributes(entry, proto); - return entry; - } -} - -function addAttributes(entry: Activity, proto: any) { - entry.proto = proto; - entry.kind = entry.constructor.name; - entry.shortName = shortenName(entry.name); - entry.chips = entry.isVisible ? [VISIBLE_CHIP] : []; -} - -export default Activity; diff --git a/tools/winscope/src/flickerlib/windows/DisplayArea.ts b/tools/winscope/src/flickerlib/windows/DisplayArea.ts deleted file mode 100644 index 121bb3e91..000000000 --- a/tools/winscope/src/flickerlib/windows/DisplayArea.ts +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { shortenName } from '../mixin' -import { DisplayArea } from "../common" -import WindowContainer from "./WindowContainer" - -DisplayArea.fromProto = function (proto: any, isActivityInTree: Boolean): DisplayArea { - if (proto == null) { - return null; - } else { - const windowContainer = WindowContainer.fromProto( - /* proto */ proto.windowContainer, - /* protoChildren */ proto.windowContainer?.children?.reverse() ?? [], - /* isActivityInTree */ isActivityInTree, - /* nameOverride */ proto.name - ); - - const entry = new DisplayArea(proto.isTaskDisplayArea, windowContainer); - - addAttributes(entry, proto); - return entry; - } -} - -function addAttributes(entry: DisplayArea, proto: any) { - entry.proto = proto; - entry.kind = entry.constructor.name; - entry.shortName = shortenName(entry.name); -} - -export default DisplayArea; diff --git a/tools/winscope/src/flickerlib/windows/DisplayContent.ts b/tools/winscope/src/flickerlib/windows/DisplayContent.ts deleted file mode 100644 index 69ac12ffc..000000000 --- a/tools/winscope/src/flickerlib/windows/DisplayContent.ts +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { shortenName } from '../mixin' -import { toRect, DisplayContent, Rect } from "../common" -import WindowContainer from "./WindowContainer" - -DisplayContent.fromProto = function (proto: any, isActivityInTree: Boolean): DisplayContent { - if (proto == null) { - return null; - } else { - const windowContainer = WindowContainer.fromProto( - /* proto */ proto.rootDisplayArea.windowContainer, - /* protoChildren */ proto.rootDisplayArea.windowContainer?.children?.reverse() ?? [], - /* isActivityInTree */ isActivityInTree, - /* nameOverride */ proto.displayInfo?.name ?? null - ); - const displayRectWidth = proto.displayInfo?.logicalWidth ?? 0; - const displayRectHeight = proto.displayInfo?.logicalHeight ?? 0; - const appRectWidth = proto.displayInfo?.appWidth ?? 0; - const appRectHeight = proto.displayInfo?.appHeight ?? 0; - const defaultBounds = proto.pinnedStackController?.defaultBounds ?? null; - const movementBounds = proto.pinnedStackController?.movementBounds ?? null; - - const entry = new DisplayContent( - proto.id, - proto.focusedRootTaskId, - proto.resumedActivity?.title ?? "", - proto.singleTaskInstance, - toRect(defaultBounds), - toRect(movementBounds), - new Rect(0, 0, displayRectWidth, displayRectHeight), - new Rect(0, 0, appRectWidth, appRectHeight), - proto.dpi, - proto.displayInfo?.flags ?? 0, - toRect(proto.displayFrames?.stableBounds), - proto.surfaceSize, - proto.focusedApp, - proto.appTransition?.lastUsedAppTransition ?? "", - proto.appTransition?.appTransitionState ?? "", - proto.displayRotation?.rotation ?? 0, - proto.displayRotation?.lastOrientation ?? 0, - windowContainer - ); - - addAttributes(entry, proto); - return entry; - } -} - -function addAttributes(entry: DisplayContent, proto: any) { - entry.proto = proto; - entry.kind = entry.constructor.name; - entry.shortName = shortenName(entry.name); -} - -export default DisplayContent; diff --git a/tools/winscope/src/flickerlib/windows/Task.ts b/tools/winscope/src/flickerlib/windows/Task.ts deleted file mode 100644 index fcf623608..000000000 --- a/tools/winscope/src/flickerlib/windows/Task.ts +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { shortenName } from '../mixin' -import { Task, toRect } from "../common" -import WindowContainer from "./WindowContainer" - -Task.fromProto = function (proto: any, isActivityInTree: Boolean): Task { - if (proto == null) { - return null; - } else { - const windowContainerProto = proto.taskFragment?.windowContainer ?? proto.windowContainer; - const windowContainer = WindowContainer.fromProto( - /* proto */ windowContainerProto, - /* protoChildren */ windowContainerProto?.children?.reverse() ?? [], - /* isActivityInTree */ isActivityInTree - ); - - const entry = new Task( - proto.taskFragment?.activityType ?? proto.activityType, - proto.fillsParent, - toRect(proto.bounds), - proto.id, - proto.rootTaskId, - proto.taskFragment?.displayId, - toRect(proto.lastNonFullscreenBounds), - proto.realActivity, - proto.origActivity, - proto.resizeMode, - proto.resumedActivity?.title ?? "", - proto.animatingBounds, - proto.surfaceWidth, - proto.surfaceHeight, - proto.createdByOrganizer, - proto.taskFragment?.minWidth ?? proto.minWidth, - proto.taskFragment?.minHeight ?? proto.minHeight, - windowContainer - ); - - addAttributes(entry, proto); - return entry; - } -} - -function addAttributes(entry: Task, proto: any) { - entry.proto = proto; - entry.kind = entry.constructor.name; - entry.shortName = shortenName(entry.name); -} - -export default Task; diff --git a/tools/winscope/src/flickerlib/windows/TaskFragment.ts b/tools/winscope/src/flickerlib/windows/TaskFragment.ts deleted file mode 100644 index 017f76029..000000000 --- a/tools/winscope/src/flickerlib/windows/TaskFragment.ts +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2021, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { shortenName } from '../mixin' -import { TaskFragment } from "../common" -import WindowContainer from "./WindowContainer" - -TaskFragment.fromProto = function (proto: any, isActivityInTree: Boolean): TaskFragment { - if (proto == null) { - return null; - } else { - const windowContainer = WindowContainer.fromProto( - /* proto */ proto.windowContainer, - /* protoChildren */ proto.windowContainer?.children?.reverse() ?? [], - /* isActivityInTree */ isActivityInTree); - const entry = new TaskFragment( - proto.activityType, - proto.displayId, - proto.minWidth, - proto.minHeight, - windowContainer - ); - - addAttributes(entry, proto); - return entry; - } -} - -function addAttributes(entry: TaskFragment, proto: any) { - entry.proto = proto; - entry.kind = entry.constructor.name; - entry.shortName = shortenName(entry.name); -} - -export default TaskFragment; diff --git a/tools/winscope/src/flickerlib/windows/WindowContainer.ts b/tools/winscope/src/flickerlib/windows/WindowContainer.ts deleted file mode 100644 index 7d71f38b2..000000000 --- a/tools/winscope/src/flickerlib/windows/WindowContainer.ts +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { shortenName } from '../mixin' - -import { - Configuration, - ConfigurationContainer, - toRect, - WindowConfiguration, - WindowContainer, - WindowContainerChild, - } from "../common" - -import Activity from "./Activity" -import DisplayArea from "./DisplayArea" -import DisplayContent from "./DisplayContent" -import Task from "./Task" -import TaskFragment from "./TaskFragment" -import WindowState from "./WindowState" -import WindowToken from "./WindowToken" - -WindowContainer.fromProto = function ( - proto: any, - protoChildren: any[], - isActivityInTree: boolean, - nameOverride: string = null, - identifierOverride: string = null, - tokenOverride = null, -): WindowContainer { - if (proto == null) { - return null; - } - - const children = protoChildren - .filter(it => it != null) - .map(it => WindowContainer.childrenFromProto(it, isActivityInTree)) - .filter(it => it != null); - - const identifier = identifierOverride ?? proto.identifier; - var name = nameOverride ?? identifier?.title ?? ""; - var token = tokenOverride?.toString(16) ?? identifier?.hashCode?.toString(16) ?? ""; - - const config = createConfigurationContainer(proto.configurationContainer); - const entry = new WindowContainer( - name, - token, - proto.orientation, - proto.surfaceControl?.layerId ?? 0, - proto.visible, - config, - children - ); - - addAttributes(entry, proto); - return entry; -} - -function addAttributes(entry: WindowContainer, proto: any) { - entry.proto = proto; - entry.kind = entry.constructor.name; - entry.shortName = shortenName(entry.name); -} - -WindowContainer.childrenFromProto = function(proto: any, isActivityInTree: Boolean): WindowContainerChild { - return DisplayContent.fromProto(proto.displayContent, isActivityInTree) ?? - DisplayArea.fromProto(proto.displayArea, isActivityInTree) ?? - Task.fromProto(proto.task, isActivityInTree) ?? - TaskFragment.fromProto(proto.taskFragment, isActivityInTree) ?? - Activity.fromProto(proto.activity) ?? - WindowToken.fromProto(proto.windowToken, isActivityInTree) ?? - WindowState.fromProto(proto.window, isActivityInTree) ?? - WindowContainer.fromProto(proto.windowContainer); -} - -function createConfigurationContainer(proto: any): ConfigurationContainer { - const entry = new ConfigurationContainer( - createConfiguration(proto?.overrideConfiguration ?? null), - createConfiguration(proto?.fullConfiguration ?? null), - createConfiguration(proto?.mergedOverrideConfiguration ?? null) - ); - - entry.obj = entry; - return entry; -} - -function createConfiguration(proto: any): Configuration { - if (proto == null) { - return null; - } - var windowConfiguration = null; - - if (proto != null && proto.windowConfiguration != null) { - windowConfiguration = createWindowConfiguration(proto.windowConfiguration); - } - - return new Configuration( - windowConfiguration, - proto?.densityDpi ?? 0, - proto?.orientation ?? 0, - proto?.screenHeightDp ?? 0, - proto?.screenHeightDp ?? 0, - proto?.smallestScreenWidthDp ?? 0, - proto?.screenLayout ?? 0, - proto?.uiMode ?? 0 - ); -} - -function createWindowConfiguration(proto: any): WindowConfiguration { - return new WindowConfiguration( - toRect(proto.appBounds), - toRect(proto.bounds), - toRect(proto.maxBounds), - proto.windowingMode, - proto.activityType - ); -} - -export default WindowContainer; diff --git a/tools/winscope/src/flickerlib/windows/WindowState.ts b/tools/winscope/src/flickerlib/windows/WindowState.ts deleted file mode 100644 index a9cdf0829..000000000 --- a/tools/winscope/src/flickerlib/windows/WindowState.ts +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { shortenName } from '../mixin' -import { toRect, Size, WindowState, WindowLayoutParams } from "../common" -import { VISIBLE_CHIP } from '../treeview/Chips' -import WindowContainer from "./WindowContainer" - - WindowState.fromProto = function (proto: any, isActivityInTree: Boolean): WindowState { - if (proto == null) { - return null; - } else { - const windowParams = createWindowLayoutParams(proto.attributes); - const identifierName = getIdentifier(proto); - const windowType = getWindowType(proto, identifierName); - const name = getName(identifierName); - const windowContainer = WindowContainer.fromProto( - /* proto */ proto.windowContainer, - /* protoChildren */ proto.windowContainer?.children.reverse() ?? [], - /* isActivityInTree */ isActivityInTree, - /* nameOverride */ name, - /* identifierOverride */ proto.identifier - ); - - const entry = new WindowState( - windowParams, - proto.displayId, - proto.stackId, - proto.animator?.surface?.layer ?? 0, - proto.animator?.surface?.shown ?? false, - windowType, - new Size(proto.requestedWidth, proto.requestedHeight), - toRect(proto.surfacePosition), - toRect(proto.windowFrames?.frame ?? null), - toRect(proto.windowFrames?.containingFrame ?? null), - toRect(proto.windowFrames?.parentFrame ?? null), - toRect(proto.windowFrames?.contentFrame ?? null), - toRect(proto.windowFrames?.contentInsets ?? null), - toRect(proto.surfaceInsets), - toRect(proto.givenContentInsets), - toRect(proto.animator?.lastClipRect ?? null), - windowContainer, - /* isAppWindow */ isActivityInTree - ); - - addAttributes(entry, proto); - return entry; - } -} - -function createWindowLayoutParams(proto: any): WindowLayoutParams { - return new WindowLayoutParams( - /* type */ proto?.type ?? 0, - /* x */ proto?.x ?? 0, - /* y */ proto?.y ?? 0, - /* width */ proto?.width ?? 0, - /* height */ proto?.height ?? 0, - /* horizontalMargin */ proto?.horizontalMargin ?? 0, - /* verticalMargin */ proto?.verticalMargin ?? 0, - /* gravity */ proto?.gravity ?? 0, - /* softInputMode */ proto?.softInputMode ?? 0, - /* format */ proto?.format ?? 0, - /* windowAnimations */ proto?.windowAnimations ?? 0, - /* alpha */ proto?.alpha ?? 0, - /* screenBrightness */ proto?.screenBrightness ?? 0, - /* buttonBrightness */ proto?.buttonBrightness ?? 0, - /* rotationAnimation */ proto?.rotationAnimation ?? 0, - /* preferredRefreshRate */ proto?.preferredRefreshRate ?? 0, - /* preferredDisplayModeId */ proto?.preferredDisplayModeId ?? 0, - /* hasSystemUiListeners */ proto?.hasSystemUiListeners ?? false, - /* inputFeatureFlags */ proto?.inputFeatureFlags ?? 0, - /* userActivityTimeout */ proto?.userActivityTimeout ?? 0, - /* colorMode */ proto?.colorMode ?? 0, - /* flags */ proto?.flags ?? 0, - /* privateFlags */ proto?.privateFlags ?? 0, - /* systemUiVisibilityFlags */ proto?.systemUiVisibilityFlags ?? 0, - /* subtreeSystemUiVisibilityFlags */ proto?.subtreeSystemUiVisibilityFlags ?? 0, - /* appearance */ proto?.appearance ?? 0, - /* behavior */ proto?.behavior ?? 0, - /* fitInsetsTypes */ proto?.fitInsetsTypes ?? 0, - /* fitInsetsSides */ proto?.fitInsetsSides ?? 0, - /* fitIgnoreVisibility */ proto?.fitIgnoreVisibility ?? false - ) -} - -function getWindowType(proto: any, identifierName: string): number { - if (identifierName.startsWith(WindowState.STARTING_WINDOW_PREFIX)) { - return WindowState.WINDOW_TYPE_STARTING; - } else if (proto.animatingExit) { - return WindowState.WINDOW_TYPE_EXITING; - } else if (identifierName.startsWith(WindowState.DEBUGGER_WINDOW_PREFIX)) { - return WindowState.WINDOW_TYPE_STARTING; - } - - return 0; -} - -function getName(identifierName: string): string { - var name = identifierName; - - if (identifierName.startsWith(WindowState.STARTING_WINDOW_PREFIX)) { - name = identifierName.substring(WindowState.STARTING_WINDOW_PREFIX.length); - } else if (identifierName.startsWith(WindowState.DEBUGGER_WINDOW_PREFIX)) { - name = identifierName.substring(WindowState.DEBUGGER_WINDOW_PREFIX.length); - } - - return name; -} - -function getIdentifier(proto: any): string { - return proto.windowContainer.identifier?.title ?? proto.identifier?.title ?? ""; -} - -function addAttributes(entry: WindowState, proto: any) { - entry.kind = entry.constructor.name; - entry.rect = entry.frame; - entry.rect.ref = entry; - entry.rect.label = entry.name; - entry.proto = proto; - entry.shortName = shortenName(entry.name); - entry.chips = entry.isVisible ? [VISIBLE_CHIP] : []; -} - -export default WindowState diff --git a/tools/winscope/src/flickerlib/windows/WindowToken.ts b/tools/winscope/src/flickerlib/windows/WindowToken.ts deleted file mode 100644 index 2e50e1d9c..000000000 --- a/tools/winscope/src/flickerlib/windows/WindowToken.ts +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { shortenName } from '../mixin' -import { WindowToken } from "../common" -import WindowContainer from "./WindowContainer" - -WindowToken.fromProto = function (proto: any, isActivityInTree: Boolean): WindowToken { - if (proto == null) { - return null; - } - - const windowContainer = WindowContainer.fromProto( - /* proto */ proto.windowContainer, - /* protoChildren */ proto.windowContainer?.children?.reverse() ?? [], - /* isActivityInTree */ isActivityInTree, - /* nameOverride */ null, - /* identifierOverride */ null, - /* tokenOverride */ proto.hashCode - ); - const entry = new WindowToken(windowContainer); - entry.kind = entry.constructor.name; - entry.proto = proto; - entry.shortName = shortenName(entry.name); - return entry; -} - -export default WindowToken; diff --git a/tools/winscope/src/ime_processing.js b/tools/winscope/src/ime_processing.js deleted file mode 100644 index 1fe913a78..000000000 --- a/tools/winscope/src/ime_processing.js +++ /dev/null @@ -1,283 +0,0 @@ -/* - * Copyright 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. - */ - -/** - * @fileoverview This file contains functions used after the decoding of proto - * trace files and before the display of trace entries in DataView panels - * to combine WM & SF trace properties into IME trace entries. - */ - -import {TRACE_TYPES} from '@/decode'; -import {WINDOW_MANAGER_KIND} from '@/flickerlib/common'; -import {getFilter} from '@/utils/utils'; - -function combineWmSfWithImeDataIfExisting(dataFiles) { - // TODO(b/237744706): Add tests for this function - console.log('before combining', dataFiles); - let filesAsDict; - if (Array.isArray(dataFiles)) { - // transform dataFiles to a dictionary / object with filetype as the key - // this happens for the adb direct capture case - filesAsDict = {}; - for (const dataFile of dataFiles) { - const dataType = dataFile.type; - filesAsDict[dataType] = dataFile; - } - } else { - filesAsDict = dataFiles; - } - - const imeTraceFiles = Object.entries(filesAsDict) - .filter( - ([filetype]) => ( - // mapping it to an array of files; removes - // the key which is filetype - filetype.includes('ImeTrace'))) - .map(([k, v]) => v); - for (const imeTraceFile of imeTraceFiles) { - if (filesAsDict[TRACE_TYPES.WINDOW_MANAGER]) { - console.log('combining WM file to', imeTraceFile.type, 'file'); - combineWmSfPropertiesIntoImeData( - imeTraceFile, filesAsDict[TRACE_TYPES.WINDOW_MANAGER]); - } - if (filesAsDict[TRACE_TYPES.SURFACE_FLINGER] && - imeTraceFile.type !== TRACE_TYPES.IME_MANAGERSERVICE) { - console.log('combining SF file to', imeTraceFile.type, 'file'); - // don't need SF properties for ime manager service - combineWmSfPropertiesIntoImeData( - imeTraceFile, filesAsDict[TRACE_TYPES.SURFACE_FLINGER]); - } - processImeAfterCombiningWmAndSfProperties(imeTraceFile); - } - console.log('after combining', dataFiles); -} - -function combineWmSfPropertiesIntoImeData(imeTraceFile, wmOrSfTraceFile) { - const imeTimestamps = imeTraceFile.timeline; - const wmOrSfTimestamps = wmOrSfTraceFile.timeline; - const intersectWmOrSfIndices = - matchCorrespondingTimestamps(imeTimestamps, wmOrSfTimestamps); - - const wmOrSfData = wmOrSfTraceFile.data; - - console.log('number of entries:', imeTimestamps.length); - for (let i = 0; i < imeTimestamps.length; i++) { - const wmOrSfIntersectIndex = intersectWmOrSfIndices[i]; - const wmStateOrSfLayer = wmOrSfData[wmOrSfIntersectIndex]; - // filter wmStateOrSfLayer to only relevant nodes & fields - if (wmStateOrSfLayer && wmStateOrSfLayer.kind === WINDOW_MANAGER_KIND) { - const wmProperties = filterWmStateForIme(wmStateOrSfLayer); - imeTraceFile.data[i].wmProperties = wmProperties; - imeTraceFile.data[0].hasWmSfProperties = true; - // hasWmSfProperties is added into data because the - // imeTraceFile object itself is inextensible if it's from file input - } else if (wmStateOrSfLayer) { - const sfProperties = extractSfProperties(wmStateOrSfLayer); - imeTraceFile.data[i].sfProperties = sfProperties; - - const sfSubtrees = filterSfLayerForIme( - wmStateOrSfLayer); // for display in Hierarchy sub-panel - imeTraceFile.data[i].children.push(...sfSubtrees); - - if (sfProperties || sfSubtrees.length > 0) { - imeTraceFile.data[0].hasWmSfProperties = true; - } - } - } -} - -function matchCorrespondingTimestamps(imeTimestamps, wmOrSfTimestamps) { - // we want to take the earliest sf / wm entry that is within - // +-[FAULT_TOLERANCE] ns of the ime entry as the corresponding sf / wm entry - const FAULT_TOLERANCE = 200000000; // 200ms in ns - - let wmOrSfIndex = 0; - const intersectWmOrSfIndices = []; - for (let imeIndex = 0; imeIndex < imeTimestamps.length; imeIndex++) { - const currImeTimestamp = imeTimestamps[imeIndex]; - let wmOrSfTimestamp = wmOrSfTimestamps[wmOrSfIndex]; - while (wmOrSfTimestamp < currImeTimestamp) { - wmOrSfIndex++; - wmOrSfTimestamp = wmOrSfTimestamps[wmOrSfIndex]; - } - // wmOrSfIndex should now be at the first entry that is past - // [currImeTimestamp] ns. We want the most recent entry that comes - // before [currImeTimestamp] ns if it's within - // [currImeTimestamp - FAULT_TOLERANCE] ns. Otherwise, we want the most - // recent entry that comes after [currImeTimestamp] ns if it's within - // [currImeTimestamp + FAULT_TOLERANCE] ns. - const previousWmOrSfTimestamp = wmOrSfTimestamps[wmOrSfIndex - 1]; - if (previousWmOrSfTimestamp >= currImeTimestamp - FAULT_TOLERANCE) { - intersectWmOrSfIndices.push(wmOrSfIndex - 1); - } else if (wmOrSfTimestamp <= currImeTimestamp + FAULT_TOLERANCE) { - intersectWmOrSfIndices.push(wmOrSfIndex); - } else { - intersectWmOrSfIndices.push(null); - } - } - console.log('done matching corresponding timestamps', intersectWmOrSfIndices); - return intersectWmOrSfIndices; -} - -function filterWmStateForIme(wmState) { - // create and return a custom entry that just contains relevant properties - const displayContent = wmState.root.children[0]; - const controlTargetActualName = getActualFieldNameFromPossibilities( - 'controlTarget', displayContent.proto); - const inputTargetActualName = - getActualFieldNameFromPossibilities('inputTarget', displayContent.proto); - const layeringTargetActualName = getActualFieldNameFromPossibilities( - 'layeringTarget', displayContent.proto); - const isInputMethodWindowVisible = findInputMethodVisibility(displayContent); - return { - 'kind': 'WM State Properties', - 'name': wmState.name, // 'name' is a timestamp of ..d..h..m..s..ms format - 'stableId': wmState.stableId, - 'focusedApp': wmState.focusedApp, - 'focusedWindow': wmState.focusedWindow, - 'focusedActivity': wmState.focusedActivity, - 'isInputMethodWindowVisible': isInputMethodWindowVisible, - 'imeControlTarget': displayContent.proto[controlTargetActualName], - 'imeInputTarget': displayContent.proto[inputTargetActualName], - 'imeLayeringTarget': displayContent.proto[layeringTargetActualName], - 'imeInsetsSourceProvider': displayContent.proto.imeInsetsSourceProvider, - 'proto': wmState, - }; -} - -function getActualFieldNameFromPossibilities(wantedKey, protoObject) { - // for backwards compatibility purposes: find the actual name in the - // protoObject out of a list of possible names, as field names may change - const possibleNamesMap = { - // inputMethod...Target is legacy name, ime...Target is new name - 'controlTarget': ['inputMethodControlTarget', 'imeControlTarget'], - 'inputTarget': ['inputMethodInputTarget', 'imeInputTarget'], - 'layeringTarget': ['inputMethodTarget', 'imeLayeringTarget'], - }; - - const possibleNames = possibleNamesMap[wantedKey]; - const actualName = - Object.keys(protoObject).find((el) => possibleNames.includes(el)); - return actualName; -} - -function filterSfLayerForIme(sfLayer) { - const parentTaskOfImeContainer = - findParentTaskOfNode(sfLayer, 'ImeContainer'); - const parentTaskOfImeSnapshot = findParentTaskOfNode(sfLayer, 'IME-snapshot'); - // we want to see both ImeContainer and IME-snapshot if there are - // cases where both exist - const resultSubtree = [parentTaskOfImeContainer, parentTaskOfImeSnapshot] - .filter((node) => node) // filter away null values - .map((node) => { - node.kind = 'SF subtree - ' + node.id; - return node; - }); - return resultSubtree; -} - -function findParentTaskOfNode(curr, nodeName) { - const isImeContainer = getFilter(nodeName); - if (isImeContainer(curr)) { - console.log('found ' + nodeName + '; searching for parent'); - let parent = curr.parent; - const isTask = getFilter('Task, ImePlaceholder'); - while (parent.parent && !isTask(parent)) { - // if parent.parent is null, 'parent' is already the root node -- use it - if (parent.parent != null) { - parent = parent.parent; - } - } - return parent; - } - // search for ImeContainer in children - for (const child of curr.children) { - const result = findParentTaskOfNode(child, nodeName); - if (result != null) { - return result; - } - } - return null; -} - -function extractSfProperties(curr) { - const imeFields = extractImeFields(curr); - if (imeFields == null) { - return null; - } - return Object.assign({'name': curr.name, 'proto': curr}, imeFields); - // 'name' is a timestamp of ..d..h..m..s..ms format -} - -function extractImeFields(curr) { - const isImeContainer = getFilter('ImeContainer'); - const imeContainer = findWindowOrLayerMatch(isImeContainer, curr); - if (imeContainer != null) { - const isInputMethodSurface = getFilter('InputMethod'); - const inputMethodSurface = - findWindowOrLayerMatch(isInputMethodSurface, imeContainer); - return { - 'imeContainer': imeContainer, - 'inputMethodSurface': inputMethodSurface, - 'screenBounds': inputMethodSurface.screenBounds, - 'rect': inputMethodSurface.rect, - 'isInputMethodSurfaceVisible': inputMethodSurface.isVisible, - 'zOrderRelativeOfId': imeContainer.zOrderRelativeOfId, - 'z': imeContainer.z, - }; - } - return null; -} - -function findWindowOrLayerMatch(filter, curr) { - if (filter(curr)) { - return curr; - } - for (const child of curr.children) { - const result = findWindowOrLayerMatch(filter, child); - if (result) { - return result; - } - } - return null; -} - -function findInputMethodVisibility(windowOrLayer) { - const isInputMethod = getFilter('InputMethod'); - const inputMethodWindowOrLayer = - findWindowOrLayerMatch(isInputMethod, windowOrLayer); - return inputMethodWindowOrLayer && inputMethodWindowOrLayer.isVisible; -} - -function processImeAfterCombiningWmAndSfProperties(imeTraceFile) { - for (const imeEntry of imeTraceFile.data) { - if (imeEntry.wmProperties?.focusedWindow && imeEntry.sfProperties?.proto) { - const focusedWindowRgba = findFocusedWindowRgba( - imeEntry.wmProperties.focusedWindow, imeEntry.sfProperties.proto); - imeEntry.sfProperties.focusedWindowRgba = focusedWindowRgba; - } - } -} - -function findFocusedWindowRgba(focusedWindow, sfLayer) { - const focusedWindowToken = focusedWindow.token; - console.log(focusedWindowToken); - const isFocusedWindow = getFilter(focusedWindowToken); - const focusedWindowLayer = findWindowOrLayerMatch(isFocusedWindow, sfLayer); - return focusedWindowLayer.color; -} - -export {combineWmSfWithImeDataIfExisting}; diff --git a/tools/winscope/src/index_template.html b/tools/winscope/src/index_template.html deleted file mode 100644 index a7168a1e9..000000000 --- a/tools/winscope/src/index_template.html +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - winscope - - -
- - diff --git a/tools/winscope/src/localstore.js b/tools/winscope/src/localstore.js deleted file mode 100644 index cf4336af8..000000000 --- a/tools/winscope/src/localstore.js +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2017, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import Vue from 'vue'; - -function Store(name, data) { - return new Vue({ - data, - created() { - Object.keys(this.$data).forEach((k) =>{ - var stored = window.localStorage.getItem(name + '.' + k); - if (stored) { - this.$data[k] = JSON.parse(stored); - } - this.$watch(k, () => { - window.localStorage.setItem(name + '.' + k, - JSON.stringify(this.$data[k])); - }, {deep: true}); - }); - } - }); -} - -export default Store; diff --git a/tools/winscope/src/main.js b/tools/winscope/src/main.js deleted file mode 100644 index 587f42519..000000000 --- a/tools/winscope/src/main.js +++ /dev/null @@ -1,440 +0,0 @@ -/* - * Copyright 2017, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import Vue from 'vue' -import Vuex from 'vuex' -import VueMaterial from 'vue-material' -import VueGtag from "vue-gtag"; - -import App from './App.vue' -import { TRACE_TYPES, DUMP_TYPES, TRACE_INFO, DUMP_INFO } from './decode.js' -import { DIRECTION, findLastMatchingSorted, stableIdCompatibilityFixup } from './utils/utils.js' - -import 'style-loader!css-loader!vue-material/dist/vue-material.css' -import 'style-loader!css-loader!vue-material/dist/theme/default.css' - -Vue.use(Vuex) -Vue.use(VueMaterial) - -// Used to determine the order in which files or displayed -const fileOrder = { - [TRACE_TYPES.WINDOW_MANAGER]: 1, - [TRACE_TYPES.SURFACE_FLINGER]: 2, - [TRACE_TYPES.TRANSACTION_LEGACY]: 3, - [TRACE_TYPES.PROTO_LOG]: 4, - [TRACE_TYPES.IME_CLIENTS]: 5, - [TRACE_TYPES.IME_SERVICE]: 6, - [TRACE_TYPES.IME_MANAGERSERVICE]: 7, -}; - -function sortFiles(files) { - return files.sort( - (a, b) => (fileOrder[a.type] ?? Infinity) - (fileOrder[b.type] ?? Infinity)); -}; - -/** - * Find the smallest timeline timestamp in a list of files - * @return undefined if not timestamp exists in the timelines of the files - */ -function findSmallestTimestamp(files) { - let timestamp = Infinity; - for (const file of files) { - if (file.timeline[0] && file.timeline[0] < timestamp) { - timestamp = file.timeline[0]; - } - } - - return timestamp === Infinity ? undefined : timestamp; -} - -const store = new Vuex.Store({ - state: { - currentTimestamp: 0, - traces: {}, - dumps: {}, - excludeFromTimeline: [ - TRACE_TYPES.PROTO_LOG, - TRACE_TYPES.TAG, - TRACE_TYPES.ERROR - ], - activeFile: null, - focusedFile: null, - mergedTimeline: null, - navigationFilesFilter: f => true, - // obj -> bool, identifies whether or not an item is collapsed in a treeView - collapsedStateStore: {}, - }, - getters: { - collapsedStateStoreFor: (state) => (item) => { - if (item.stableId === undefined || item.stableId === null) { - console.error("Missing stable ID for item", item); - throw new Error("Failed to get collapse state of item — missing a stableId"); - } - - return state.collapsedStateStore[stableIdCompatibilityFixup(item)]; - }, - files(state) { - return Object.values(state.traces).concat(Object.values(state.dumps)); - }, - sortedFiles(state, getters) { - return sortFiles(getters.files); - }, - timelineFiles(state, getters) { - return Object.values(state.traces) - .filter(file => !state.excludeFromTimeline.includes(file.type)); - }, - tagFiles(state, getters) { - return Object.values(state.traces) - .filter(file => file.type === TRACE_TYPES.TAG); - }, - errorFiles(state, getters) { - return Object.values(state.traces) - .filter(file => file.type === TRACE_TYPES.ERROR); - }, - sortedTimelineFiles(state, getters) { - return sortFiles(getters.timelineFiles); - }, - video(state) { - return state.traces[TRACE_TYPES.SCREEN_RECORDING]; - }, - tagGenerationWmTrace(state, getters) { - return state.traces[TRACE_TYPES.WINDOW_MANAGER].tagGenerationTrace; - }, - tagGenerationSfTrace(state, getters) { - return state.traces[TRACE_TYPES.SURFACE_FLINGER].tagGenerationTrace; - } - }, - mutations: { - setCurrentTimestamp(state, timestamp) { - state.currentTimestamp = timestamp; - }, - setFileEntryIndex(state, { type, entryIndex }) { - if (state.traces[type]) { - state.traces[type].selectedIndex = entryIndex; - } else { - throw new Error("Unexpected type — not a trace..."); - } - }, - setFiles(state, files) { - const filesByType = {}; - for (const file of files) { - if (!filesByType[file.type]) { - filesByType[file.type] = []; - } - filesByType[file.type].push(file); - } - - // TODO: Extract into smaller functions - const traces = {}; - for (const traceType of Object.values(TRACE_TYPES)) { - const traceFiles = {}; - const typeInfo = TRACE_INFO[traceType]; - - for (const traceDataFile of typeInfo.files) { - - const files = filesByType[traceDataFile.type]; - - if (!files) { - continue; - } - - if (traceDataFile.oneOf) { - if (files.length > 1) { - throw new Error(`More than one file of type ${traceDataFile.type} has been provided`); - } - - traceFiles[traceDataFile.type] = files[0]; - } else if (traceDataFile.manyOf) { - traceFiles[traceDataFile.type] = files; - } else { - throw new Error("Missing oneOf or manyOf property..."); - } - } - - if (Object.keys(traceFiles).length > 0 && typeInfo.constructor) { - const newObj = new typeInfo.constructor(traceFiles); - newObj.data = Object.freeze(newObj.data); - traces[traceType] = newObj; - } - } - - state.traces = traces; - - // TODO: Refactor common code out - const dumps = {}; - for (const dumpType of Object.values(DUMP_TYPES)) { - const dumpFiles = {}; - const typeInfo = DUMP_INFO[dumpType]; - - for (const dumpDataFile of typeInfo.files) { - const files = filesByType[dumpDataFile.type]; - - if (!files) { - continue; - } - - if (dumpDataFile.oneOf) { - if (files.length > 1) { - throw new Error(`More than one file of type ${dumpDataFile.type} has been provided`); - } - - dumpFiles[dumpDataFile.type] = files[0]; - } else if (dumpDataFile.manyOf) { - - } else { - throw new Error("Missing oneOf or manyOf property..."); - } - } - - if (Object.keys(dumpFiles).length > 0 && typeInfo.constructor) { - const newObj = new typeInfo.constructor(dumpFiles); - newObj.data = Object.freeze(newObj.data); - dumps[dumpType] = newObj; - } - - } - - state.dumps = dumps; - - if (!state.activeFile && Object.keys(traces).length > 0) { - state.activeFile = sortFiles(Object.values(traces))[0]; - } - - // TODO: Add same for dumps - }, - clearFiles(state) { - for (const traceType in state.traces) { - if (state.traces.hasOwnProperty(traceType)) { - Vue.delete(state.traces, traceType); - } - } - - for (const dumpType in state.dumps) { - if (state.dumps.hasOwnProperty(dumpType)) { - Vue.delete(state.dumps, dumpType); - } - } - - state.activeFile = null; - state.mergedTimeline = null; - }, - setActiveFile(state, file) { - state.activeFile = file; - }, - setMergedTimeline(state, timeline) { - state.mergedTimeline = timeline; - }, - removeMergedTimeline(state, timeline) { - state.mergedTimeline = null; - }, - setMergedTimelineIndex(state, newIndex) { - state.mergedTimeline.selectedIndex = newIndex; - }, - setCollapsedState(state, { item, isCollapsed }) { - if (item.stableId === undefined || item.stableId === null) { - return; - } - - Vue.set( - state.collapsedStateStore, - stableIdCompatibilityFixup(item), - isCollapsed - ); - }, - setFocusedFile(state, file) { - state.focusedFile = file; - }, - setNavigationFilesFilter(state, filter) { - state.navigationFilesFilter = filter; - }, - }, - actions: { - setFiles(context, files) { - context.commit('clearFiles'); - context.commit('setFiles', files); - - const timestamp = findSmallestTimestamp(files); - if (timestamp !== undefined) { - context.commit('setCurrentTimestamp', timestamp); - } - }, - updateTimelineTime(context, timestamp) { - for (const file of context.getters.files) { - //dumps do not have a timeline, so only look at files with timelines to update the timestamp - if (!file.timeline) continue; - - const type = file.type; - const entryIndex = findLastMatchingSorted( - file.timeline, - (array, idx) => parseInt(array[idx]) <= timestamp, - ); - - context.commit('setFileEntryIndex', { type, entryIndex }); - } - - if (context.state.mergedTimeline) { - const newIndex = findLastMatchingSorted( - context.state.mergedTimeline.timeline, - (array, idx) => parseInt(array[idx]) <= timestamp, - ); - - context.commit('setMergedTimelineIndex', newIndex); - } - - context.commit('setCurrentTimestamp', timestamp); - }, - advanceTimeline(context, direction) { - // NOTE: MergedTimeline is never considered to find the next closest index - // MergedTimeline only represented the timelines overlapped together and - // isn't considered an actual timeline. - - if (direction !== DIRECTION.FORWARD && direction !== DIRECTION.BACKWARD) { - throw new Error("Unsupported direction provided."); - } - - const consideredFiles = context.getters.timelineFiles - .filter(context.state.navigationFilesFilter); - - let fileIndex = -1; - let timelineIndex; - let minTimeDiff = Infinity; - - for (let idx = 0; idx < consideredFiles.length; idx++) { - const file = consideredFiles[idx]; - - let candidateTimestampIndex = file.selectedIndex; - let candidateTimestamp = file.timeline[candidateTimestampIndex]; - - let candidateCondition; - switch (direction) { - case DIRECTION.BACKWARD: - candidateCondition = () => candidateTimestamp < context.state.currentTimestamp; - break; - case DIRECTION.FORWARD: - candidateCondition = () => candidateTimestamp > context.state.currentTimestamp; - break; - } - - if (!candidateCondition()) { - // Not a candidate — find a valid candidate - let noCandidate = false; - while (!candidateCondition()) { - candidateTimestampIndex += direction; - if (candidateTimestampIndex < 0 || candidateTimestampIndex >= file.timeline.length) { - noCandidate = true; - break; - } - candidateTimestamp = file.timeline[candidateTimestampIndex]; - } - - if (noCandidate) { - continue; - } - } - - const timeDiff = Math.abs(candidateTimestamp - context.state.currentTimestamp); - if (minTimeDiff > timeDiff) { - minTimeDiff = timeDiff; - fileIndex = idx; - timelineIndex = candidateTimestampIndex; - } - } - - if (fileIndex >= 0) { - const closestFile = consideredFiles[fileIndex]; - const timestamp = parseInt(closestFile.timeline[timelineIndex]); - - context.dispatch('updateTimelineTime', timestamp); - } - } - } -}) - -/** - * Make Google analytics functionalities available for recording events. - */ -Vue.use(VueGtag, { - config: { id: 'G-RRV0M08Y76'} -}) - -Vue.mixin({ - methods: { - recordButtonClickedEvent(button) { - const txt = "Clicked " + button + " Button"; - this.$gtag.event(txt, { - 'event_category': 'Button Clicked', - 'event_label': "Winscope Interactions", - 'value': button, - }); - }, - recordDragAndDropFileEvent(val) { - this.$gtag.event("Dragged And DroppedFile", { - 'event_category': 'Uploaded file', - 'event_label': "Winscope Interactions", - 'value': val, - }); - }, - recordFileUploadEvent(val) { - this.$gtag.event("Uploaded File From Filesystem", { - 'event_category': 'Uploaded file', - 'event_label': "Winscope Interactions", - 'value': val, - }); - }, - recordNewEvent(event) { - this.$gtag.event(event, { - 'event_category': event, - 'event_label': "Winscope Interactions", - 'value': 1, - }); - }, - recordOpenTraceEvent(traceType) { - this.$gtag.screenview({ - app_name: "Winscope", - screen_name: traceType, - }) - }, - recordExpandedPropertyEvent(field) { - const string = "Property: " + field; - this.$gtag.event(string, { - 'event_category': "Expanded property", - 'event_label': "Winscope Interactions", - 'value': field, - }); - }, - recordOpenedEntryEvent(entryType) { - const string = "Trace: " + entryType; - this.$gtag.event(string, { - 'event_category': "Opened trace", - 'event_label': "Winscope Interactions", - 'value': entryType, - }); - }, - recordChangedNavigationStyleEvent(field) { - this.$gtag.event("Navigation mode changed", { - 'event_category': "Timeline Navigation", - 'event_label': "Winscope Interactions", - 'value': field, - }); - }, - } -}); - -new Vue({ - el: '#app', - store, // inject the Vuex store into all components - render: h => h(App) -}) diff --git a/tools/winscope/src/matrix_utils.js b/tools/winscope/src/matrix_utils.js deleted file mode 100644 index 55fcfecb2..000000000 --- a/tools/winscope/src/matrix_utils.js +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2019, 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. - */ - -function multiplyVec2(matrix, x, y) { - if (!matrix) return {x, y}; - // |dsdx dsdy tx| | x | - // |dtdx dtdy ty| x | y | - // |0 0 1 | | 1 | - return { - x: matrix.dsdx * x + matrix.dsdy * y + matrix.tx, - y: matrix.dtdx * x + matrix.dtdy * y + matrix.ty, - }; -} - -function multiplyRect(transform, rect) { - let matrix = transform; - if (transform && transform.matrix) { - matrix = transform.matrix; - } - // |dsdx dsdy tx| | left, top | - // matrix = |dtdx dtdy ty| rect = | | - // |0 0 1 | | right, bottom | - - const leftTop = multiplyVec2(matrix, rect.left, rect.top); - const rightTop = multiplyVec2(matrix, rect.right, rect.top); - const leftBottom = multiplyVec2(matrix, rect.left, rect.bottom); - const rightBottom = multiplyVec2(matrix, rect.right, rect.bottom); - - const outrect = {}; - outrect.left = Math.min(leftTop.x, rightTop.x, leftBottom.x, rightBottom.x); - outrect.top = Math.min(leftTop.y, rightTop.y, leftBottom.y, rightBottom.y); - outrect.right = Math.max(leftTop.x, rightTop.x, leftBottom.x, rightBottom.x); - outrect.bottom = Math.max(leftTop.y, rightTop.y, leftBottom.y, - rightBottom.y); - return outrect; -} - -export {multiplyRect}; diff --git a/tools/winscope/src/mixins/FileType.js b/tools/winscope/src/mixins/FileType.js deleted file mode 100644 index 8365fa01e..000000000 --- a/tools/winscope/src/mixins/FileType.js +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {TRACE_TYPES, DUMP_TYPES} from '@/decode.js'; - -const mixin = { - showInTraceView(file) { - return file.type == TRACE_TYPES.WINDOW_MANAGER || - file.type == TRACE_TYPES.ACCESSIBILITY || - file.type == TRACE_TYPES.SURFACE_FLINGER || - file.type == TRACE_TYPES.TRANSACTION || - file.type == TRACE_TYPES.WAYLAND || - file.type == TRACE_TYPES.SYSTEM_UI || - file.type == TRACE_TYPES.LAUNCHER || - file.type == TRACE_TYPES.IME_CLIENTS || - file.type == TRACE_TYPES.IME_SERVICE || - file.type == TRACE_TYPES.IME_MANAGERSERVICE || - file.type == DUMP_TYPES.WINDOW_MANAGER || - file.type == DUMP_TYPES.SURFACE_FLINGER || - file.type == DUMP_TYPES.WAYLAND; - }, - showInAccessibilityTraceView(file) { - return file.type == TRACE_TYPES.ACCESSIBILITY; - }, - showInWindowManagerTraceView(file) { - return file.type == TRACE_TYPES.WINDOW_MANAGER || - file.type == DUMP_TYPES.WINDOW_MANAGER; - }, - showInSurfaceFlingerTraceView(file) { - return file.type == TRACE_TYPES.SURFACE_FLINGER || - file.type == DUMP_TYPES.SURFACE_FLINGER; - }, - showInImeTraceView(file) { - return file.type == TRACE_TYPES.IME_CLIENTS || - file.type == TRACE_TYPES.IME_SERVICE || - file.type == TRACE_TYPES.IME_MANAGERSERVICE; - }, - isVideo(file) { - return file.type == TRACE_TYPES.SCREEN_RECORDING; - }, - isTransactions(file) { - return file.type == TRACE_TYPES.TRANSACTION; - }, - isTransactionsLegacy(file) { - return file.type == TRACE_TYPES.TRANSACTION_LEGACY; - }, - isLog(file) { - return file.type == TRACE_TYPES.PROTO_LOG; - }, - hasDataView(file) { - return this.isLog(file) || this.showInTraceView(file) || - this.isTransactionsLegacy(file); - }, -}; - -export {mixin}; - -export default { - name: 'FileType', - methods: mixin, -}; diff --git a/tools/winscope/src/mixins/FocusedDataViewFinder.js b/tools/winscope/src/mixins/FocusedDataViewFinder.js deleted file mode 100644 index 27f341f6d..000000000 --- a/tools/winscope/src/mixins/FocusedDataViewFinder.js +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export default { - name: 'FocusedDataViewFinder', - created() { - document.addEventListener('scroll', this.updateFocusedView); - }, - deleted() { - document.removeEventListener('scroll', this.updateFocusedView); - }, - computed: { - timelineFiles() { - return this.$store.getters.timelineFiles; - }, - }, - methods: { - updateFocusedView() { - const positions = this.getDataViewPositions(); - const focusedFile = this.findFocusedDataView(positions); - - this.$store.commit('setFocusedFile', focusedFile); - }, - getDataViewPositions() { - const positions = {}; - - for (const file of this.files) { - const dataView = this.$refs[file.type]; - if (!dataView || dataView.length === 0) { - continue; - } - - const dataViewEl = dataView[0].$el; - positions[file.type] = dataViewEl.getBoundingClientRect(); - } - - return positions; - }, - /** - * Returns the file of the DataView that takes up the most of the visible - * screen space. - * @param {Object} positions A map from filenames to their respective - * boundingClientRect. - * @return {String} The dataView that is in focus. - */ - findFocusedDataView(positions) { - const visibleHeight = - Math.max(document.documentElement.clientHeight || 0, - window.innerHeight || 0); - - let maxScreenSpace = 0; - let focusedDataView = this.files[0]; - for (const file of this.files) { - const pos = positions[file.type]; - if (!pos) { - continue; - } - - let screenSpace = 0; - if (0 <= pos.top && pos.top <= visibleHeight) { - screenSpace = Math.min(visibleHeight, pos.bottom) - pos.top; - } else if (0 <= pos.bottom && pos.bottom <= visibleHeight) { - screenSpace = pos.bottom - Math.max(0, pos.top); - } else if (pos.top <= 0 && pos.bottom >= visibleHeight) { - screenSpace = visibleHeight; - } - - if (screenSpace >= maxScreenSpace) { - maxScreenSpace = screenSpace; - focusedDataView = file; - } - } - - return focusedDataView; - }, - }, -}; diff --git a/tools/winscope/src/mixins/SaveAsZip.js b/tools/winscope/src/mixins/SaveAsZip.js deleted file mode 100644 index e85feecd3..000000000 --- a/tools/winscope/src/mixins/SaveAsZip.js +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import JSZip from 'jszip'; - -export default { - name: 'SaveAsZip', - methods: { - saveAs(blob, filename) { - const a = document.createElement('a'); - a.style = 'display: none'; - document.body.appendChild(a); - - const url = window.URL.createObjectURL(blob); - - a.href = url; - a.download = filename; - a.click(); - window.URL.revokeObjectURL(url); - - document.body.removeChild(a); - }, - /** - * Returns the file name, if the file has an extension use its default, - * otherwise use ".mp4" for screen recording (name from proxy script) and - * ".winscope" for traces - * @param {*} fileName - */ - getFileName(fileName) { - var re = /(?:\.([^.]+))?$/; - var extension = re.exec(fileName)[1]; - if (!extension) { - extension = ""; - } - switch (extension) { - case "": { - if (fileName == "Screen recording") { - return fileName + ".mp4" - } - return fileName + ".winscope" - } - default: return fileName - } - }, - async downloadAsZip(traces, traceName='winscope') { - const zip = new JSZip(); - this.recordButtonClickedEvent("Download All") - - for (const trace of traces) { - const traceFolder = zip.folder(trace.type); - for (const file of trace.files) { - var fileName = this.getFileName(file.filename); - const blob = await fetch(file.blobUrl).then((r) => r.blob()); - traceFolder.file(fileName, blob); - } - } - - const zipFile = await zip.generateAsync({type: 'blob'}); - - this.saveAs(zipFile, `${traceName}.zip`); - }, - }, -}; diff --git a/tools/winscope/src/mixins/Timeline.js b/tools/winscope/src/mixins/Timeline.js deleted file mode 100644 index 444d52568..000000000 --- a/tools/winscope/src/mixins/Timeline.js +++ /dev/null @@ -1,408 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import _ from "lodash"; -import { nanos_to_string } from "../transform"; -import { transitionMap } from "../utils/consts"; - -/** - * Represents a continuous section of the timeline that is rendered into the - * timeline svg. - */ -class Block { - /** - * Create a block. - * @param {number} startPos - The start position of the block as a percentage - * of the timeline width. - * @param {number} width - The width of the block as a percentage of the - * timeline width. - */ - constructor(startPos, width) { - this.startPos = startPos; - this.width = width; - } -} - -//Represents a continuous section of the tag display that relates to a specific transition -class Transition { - /** - * Create a transition. - * @param {number} startPos - The position of the start tag as a percentage - * of the timeline width. - * @param {number} startTime - The start timestamp in ms of the transition. - * @param {number} endTime - The end timestamp in ms of the transition. - * @param {number} width - The width of the transition as a percentage of the - * timeline width. - * @param {string} color - the color of transition depending on type. - * @param {number} overlap - number of transitions with which this transition overlaps. - * @param {string} tooltip - The tooltip of the transition, minus the type of transition. - */ - constructor(startPos, startTime, endTime, width, color, overlap, tooltip) { - this.startPos = startPos; - this.startTime = startTime; - this.endTime = endTime; - this.width = width; - this.color = color; - this.overlap = overlap; - this.tooltip = tooltip; - } -} - -/** - * This Mixin should only be injected into components which have the following: - * - An element in the template referenced as 'timeline' (this.$refs.timeline). - */ - -export default { - name: 'timeline', - props: { - /** - * A 'timeline' as an array of timestamps - */ - 'timeline': { - type: Array, - }, - /** - * A scale factor is an array of two elements, the min and max timestamps of - * the timeline - */ - 'scale': { - type: Array, - }, - 'tags': { - type: Array, - }, - 'errors': { - type: Array, - }, - 'flickerMode': { - type: Boolean, - } - }, - data() { - return { - /** - * Is a number representing the percentage of the timeline a block should - * be at a minimum or what percentage of the timeline a single entry takes - * up when rendered. - */ - pointWidth: 1, - }; - }, - computed: { - /** - * Converts the timeline (list of timestamps) to an array of blocks to be - * displayed. This is to have fewer elements in the rendered timeline. - * Instead of having one rect for each timestamp in the timeline we only - * have one for each continuous segment of the timeline. This is to improve - * both the Vue patching step's performance and the DOM rendering - * performance. - */ - timelineBlocks() { - const blocks = []; - - // The difference in time between two timestamps after which they are no - // longer rendered as a continuous segment/block. - const overlapDistanceInTs = (this.scale[1] - this.scale[0]) * - ((this.crop?.right ?? 1) - (this.crop?.left ?? 0)) * - 1 / (100 - this.pointWidth); - - let blockStartTs = this.timeline[0]; - for (let i = 1; i < this.timeline.length; i++) { - const lastTs = this.timeline[i - 1]; - const ts = this.timeline[i]; - if (ts - lastTs > overlapDistanceInTs) { - const block = this.generateTimelineBlock(blockStartTs, lastTs); - blocks.push(block); - blockStartTs = ts; - } - } - - const blockEndTs = this.timeline[this.timeline.length - 1]; - const block = this.generateTimelineBlock(blockStartTs, blockEndTs); - blocks.push(block); - - return Object.freeze(blocks); - }, - - //Generates list of transitions to be displayed in flicker mode - timelineTransitions() { - const transitions = []; - - //group tags by transition and 'id' property - const groupedTags = _.groupBy(this.tags, tag => `"${tag.transition} ${tag.id}"`); - - for (const transitionId in groupedTags) { - const id = groupedTags[transitionId]; - //there are at least two tags per id, maybe more if multiple traces - // determine which tag is the start (min of start times), which is end (max of end times) - const startTimes = id.filter(tag => tag.isStartTag).map(tag => tag.timestamp); - const endTimes = id.filter(tag => !tag.isStartTag).map(tag => tag.timestamp); - - const transitionStartTime = Math.min(...startTimes); - const transitionEndTime = Math.max(...endTimes); - - //do not freeze new transition, as overlap still to be handled (defaulted to 0) - const transition = this.generateTransition( - transitionStartTime, - transitionEndTime, - id[0].transition, - 0, - id[0].layerId, - id[0].taskId, - id[0].windowToken - ); - transitions.push(transition); - } - - //sort transitions in ascending start position in order to handle overlap - transitions.sort((a, b) => (a.startPos > b.startPos) ? 1 : -1); - - //compare each transition to the ones that came before - for (let curr=0; curr transition.overlap); - - if (transitions[curr].overlap === Math.max(...overlapStore)) { - let previousTransition = processedTransitions.find(transition => { - return transition.overlap===transitions[curr].overlap; - }); - if (this.isSimultaneousTransition(transitions[curr], previousTransition)) { - transitions[curr].overlap++; - } - } - } - - return Object.freeze(transitions); - }, - errorPositions() { - if (!this.flickerMode) return []; - const errorPositions = this.errors.map( - error => ({ pos: this.position(error.timestamp), ts: error.timestamp }) - ); - return Object.freeze(errorPositions); - }, - }, - methods: { - position(item) { - let pos; - pos = this.translate(item); - pos = this.applyCrop(pos); - - return pos * (100 - this.pointWidth); - }, - - translate(cx) { - const scale = [...this.scale]; - if (scale[0] >= scale[1]) { - return cx; - } - - return (cx - scale[0]) / (scale[1] - scale[0]); - }, - - untranslate(pos) { - const scale = [...this.scale]; - if (scale[0] >= scale[1]) { - return pos; - } - - return pos * (scale[1] - scale[0]) + scale[0]; - }, - - applyCrop(cx) { - if (!this.crop) { - return cx; - } - - return (cx - this.crop.left) / (this.crop.right - this.crop.left); - }, - - unapplyCrop(pos) { - if (!this.crop) { - return pos; - } - - return pos * (this.crop.right - this.crop.left) + this.crop.left; - }, - - objectWidth(startTs, endTs) { - return this.position(endTs) - this.position(startTs) + this.pointWidth; - }, - - isSimultaneousTransition(currTransition, prevTransition) { - return prevTransition.startPos <= currTransition.startPos - && currTransition.startPos <= prevTransition.startPos+prevTransition.width - && currTransition.overlap === prevTransition.overlap; - }, - - /** - * Converts a position as a percentage of the timeline width to a timestamp. - * @param {number} position - target position as a percentage of the - * timeline's width. - * @return {number} The index of the closest timestamp in the timeline to - * the target position. - */ - positionToTsIndex(position) { - let targetTimestamp = position / (100 - this.pointWidth); - targetTimestamp = this.unapplyCrop(targetTimestamp); - targetTimestamp = this.untranslate(targetTimestamp); - - // The index of the timestamp in the timeline that is closest to the - // targetTimestamp. - const closestTsIndex = this.findClosestTimestampIndexTo(targetTimestamp); - - return closestTsIndex; - }, - - indexOfClosestElementTo(target, array) { - let smallestDiff = Math.abs(target - array[0]); - let closestIndex = 0; - for (let i = 1; i < array.length; i++) { - const elem = array[i]; - if (Math.abs(target - elem) < smallestDiff) { - closestIndex = i; - smallestDiff = Math.abs(target - elem); - } - } - - return closestIndex; - }, - - findClosestTimestampIndexTo(ts) { - let left = 0; - let right = this.timeline.length - 1; - let mid = Math.floor((left + right) / 2); - - while (left < right) { - if (ts < this.timeline[mid]) { - right = mid - 1; - } else if (ts > this.timeline[mid]) { - left = mid + 1; - } else { - return mid; - } - mid = Math.floor((left + right) / 2); - } - - const candidateElements = this.timeline.slice(left - 1, right + 2); - const closestIndex = - this.indexOfClosestElementTo(ts, candidateElements) + (left - 1); - return closestIndex; - }, - - /** - * Transforms an absolute position in the timeline to a timestamp present in - * the timeline. - * @param {number} absolutePosition - Pixels from the left of the timeline. - * @return {number} The timestamp in the timeline that is closest to the - * target position. - */ - absolutePositionAsTimestamp(absolutePosition) { - const timelineWidth = this.$refs.timeline.clientWidth; - const position = (absolutePosition / timelineWidth) * 100; - - return this.timeline[this.positionToTsIndex(position)]; - }, - - /** - * Handles the block click event. - * When a block in the timeline is clicked this function will determine - * the target timeline index and update the timeline to match this index. - * @param {MouseEvent} e - The mouse event of the click on a timeline block. - */ - onBlockClick(e) { - const clickOffset = e.offsetX; - const timelineWidth = this.$refs.timeline.clientWidth; - const clickOffsetAsPercentage = (clickOffset / timelineWidth) * 100; - - const clickedOnTsIndex = - this.positionToTsIndex(clickOffsetAsPercentage - this.pointWidth / 2); - - if (this.disabled) { - return; - } - - var timestamp = parseInt(this.timeline[clickedOnTsIndex]); - - //pointWidth is always 1 - //if offset percentage < 1, clickedOnTsIndex becomes negative, leading to a negative index - if (clickedOnTsIndex < 0) { - timestamp = parseInt(this.timeline[0]) - } - this.$store.dispatch('updateTimelineTime', timestamp); - }, - - /** - * Handles the error click event. - * When an error in the timeline is clicked this function will update the timeline - * to match the error timestamp. - * @param {number} errorTimestamp - */ - onErrorClick(errorTimestamp) { - this.$store.dispatch('updateTimelineTime', errorTimestamp); - }, - - /** - * Generate a block object that can be used by the timeline SVG to render - * a transformed block that starts at `startTs` and ends at `endTs`. - * @param {number} startTs - The timestamp at which the block starts. - * @param {number} endTs - The timestamp at which the block ends. - * @return {Block} A block object transformed to the timeline's crop and - * scale parameter. - */ - generateTimelineBlock(startTs, endTs) { - const blockWidth = this.objectWidth(startTs, endTs); - return Object.freeze(new Block(this.position(startTs), blockWidth)); - }, - /** - * Generate a transition object that can be used by the tag-timeline to render - * a transformed transition that starts at `startTs` and ends at `endTs`. - * @param {number} startTs - The timestamp at which the transition starts. - * @param {number} endTs - The timestamp at which the transition ends. - * @param {string} transitionType - The type of transition. - * @param {number} overlap - The degree to which the transition overlaps with others. - * @param {number} layerId - Helps determine if transition is associated with SF trace. - * @param {number} taskId - Helps determine if transition is associated with WM trace. - * @param {number} windowToken - Helps determine if transition is associated with WM trace. - * @return {Transition} A transition object transformed to the timeline's crop and - * scale parameter. - */ - generateTransition(startTs, endTs, transitionType, overlap, layerId, taskId, windowToken) { - const transitionWidth = this.objectWidth(startTs, endTs); - const transitionDesc = transitionMap.get(transitionType).desc; - const transitionColor = transitionMap.get(transitionType).color; - var tooltip = `${transitionDesc}. Start: ${nanos_to_string(startTs)}. End: ${nanos_to_string(endTs)}.`; - - if (layerId !== 0 && taskId === 0 && windowToken === "") { - tooltip += " SF only."; - } else if ((taskId !== 0 || windowToken !== "") && layerId === 0) { - tooltip += " WM only."; - } - - return new Transition(this.position(startTs), startTs, endTs, transitionWidth, transitionColor, overlap, tooltip); - }, - }, -}; \ No newline at end of file diff --git a/tools/winscope/src/proxyclient/ProxyClient.ts b/tools/winscope/src/proxyclient/ProxyClient.ts deleted file mode 100644 index b2a2bfa9b..000000000 --- a/tools/winscope/src/proxyclient/ProxyClient.ts +++ /dev/null @@ -1,220 +0,0 @@ -/* - * Copyright 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. - */ - -import LocalStore from '../localstore.js'; -import {FILE_DECODERS, FILE_TYPES} from '../decode.js'; -import {combineWmSfWithImeDataIfExisting} from '../ime_processing.js'; - -export enum ProxyState { - ERROR = 0, - CONNECTING = 1, - NO_PROXY = 2, - INVALID_VERSION = 3, - UNAUTH = 4, - DEVICES = 5, - START_TRACE = 6, - END_TRACE = 7, - LOAD_DATA = 8, -}; - -export enum ProxyEndpoint { - DEVICES = '/devices/', - START_TRACE = '/start/', - END_TRACE = '/end/', - CONFIG_TRACE = '/configtrace/', - SELECTED_WM_CONFIG_TRACE = '/selectedwmconfigtrace/', - SELECTED_SF_CONFIG_TRACE = '/selectedsfconfigtrace/', - DUMP = '/dump/', - FETCH = '/fetch/', - STATUS = '/status/', - CHECK_WAYLAND = '/checkwayland/', -}; - -const proxyFileTypeAdapter = { - 'window_trace': FILE_TYPES.WINDOW_MANAGER_TRACE, - 'accessibility_trace': FILE_TYPES.ACCESSIBILITY_TRACE, - 'layers_trace': FILE_TYPES.SURFACE_FLINGER_TRACE, - 'wl_trace': FILE_TYPES.WAYLAND_TRACE, - 'layers_dump': FILE_TYPES.SURFACE_FLINGER_DUMP, - 'window_dump': FILE_TYPES.WINDOW_MANAGER_DUMP, - 'wl_dump': FILE_TYPES.WAYLAND_DUMP, - 'screen_recording': FILE_TYPES.SCREEN_RECORDING, - 'transactions': FILE_TYPES.TRANSACTIONS_TRACE, - 'transactions_legacy': FILE_TYPES.TRANSACTIONS_TRACE_LEGACY, - 'proto_log': FILE_TYPES.PROTO_LOG, - 'system_ui_trace': FILE_TYPES.SYSTEM_UI, - 'launcher_trace': FILE_TYPES.LAUNCHER, - 'ime_trace_clients': FILE_TYPES.IME_TRACE_CLIENTS, - 'ime_trace_service': FILE_TYPES.IME_TRACE_SERVICE, - 'ime_trace_managerservice': FILE_TYPES.IME_TRACE_MANAGERSERVICE, -}; - -class ProxyClient { - readonly WINSCOPE_PROXY_URL = 'http://localhost:5544'; - readonly VERSION = '0.8'; - - store:LocalStore = LocalStore('adb', { - proxyKey: '', - lastDevice: ''}); - - state:ProxyState = ProxyState.CONNECTING; - stateChangeListeners:{(param:ProxyState, errorText:String): void;}[] = []; - refresh_worker: NodeJS.Timer = null; - devices = {}; - selectedDevice = "" - errorText:String = "" - - call(method, path, view, onSuccess, type = null, jsonRequest = null) { - const request = new XMLHttpRequest(); - let client = this; - request.onreadystatechange = function() { - if (this.readyState !== 4) { - return; - } - if (this.status === 0) { - client.setState(ProxyState.NO_PROXY); - } else if (this.status === 200) { - if (this.getResponseHeader('Winscope-Proxy-Version') !== client.VERSION) { - client.setState(ProxyState.INVALID_VERSION); - } else if (onSuccess) { - onSuccess(this, view); - } - } else if (this.status === 403) { - client.setState(ProxyState.UNAUTH); - } else { - if (this.responseType === 'text' || !this.responseType) { - client.errorText = this.responseText; - } else if (this.responseType === 'arraybuffer') { - client.errorText = String.fromCharCode.apply(null, new Uint8Array(this.response)); - } - client.setState(ProxyState.ERROR); - } - }; - request.responseType = type || ""; - request.open(method, client.WINSCOPE_PROXY_URL + path); - request.setRequestHeader('Winscope-Token', client.store.proxyKey); - if (jsonRequest) { - const json = JSON.stringify(jsonRequest); - request.setRequestHeader('Content-Type', 'application/json;charset=UTF-8'); - request.send(json); - } else { - request.send(); - } - } - - setState(state:ProxyState, errorText:String = "") { - this.state = state; - this.errorText = errorText; - for (let listener of this.stateChangeListeners) { - listener(state, errorText); - } - } - - onStateChange(fn: (state:ProxyState, errorText:String) => void) { - this.removeOnStateChange(fn); - this.stateChangeListeners.push(fn); - } - - removeOnStateChange(removeFn: (state:ProxyState, errorText:String) => void) { - this.stateChangeListeners = this.stateChangeListeners.filter(fn => fn !== removeFn); - } - - getDevices() { - if (this.state !== ProxyState.DEVICES && this.state !== ProxyState.CONNECTING) { - clearInterval(this.refresh_worker); - this.refresh_worker = null; - return; - } - let client = this; - this.call('GET', ProxyEndpoint.DEVICES, this, function(request, view) { - try { - client.devices = JSON.parse(request.responseText); - if (client.store.lastDevice && client.devices[client.store.lastDevice] && - client.devices[client.store.lastDevice].authorised) { - client.selectDevice(client.store.lastDevice); - } else { - if (client.refresh_worker === null) { - client.refresh_worker = setInterval(client.getDevices, 1000); - } - client.setState(ProxyState.DEVICES); - } - } catch (err) { - console.error(err); - client.errorText = request.responseText; - client.setState(ProxyState.ERROR); - } - }); - } - - selectDevice(device_id) { - this.selectedDevice = device_id; - this.store.lastDevice = device_id; - this.setState(ProxyState.START_TRACE); - } - - deviceId() { - return this.selectedDevice; - } - - resetLastDevice() { - this.store.lastDevice = ''; - } - - loadFile(files, idx, traceType, view) { - let client = this; - this.call('GET', `${ProxyEndpoint.FETCH}${proxyClient.deviceId()}/${files[idx]}/`, view, - (request, view) => { - try { - const enc = new TextDecoder('utf-8'); - const resp = enc.decode(request.response); - const filesByType = JSON.parse(resp); - - for (const filetype in filesByType) { - if (filesByType.hasOwnProperty(filetype)) { - const files = filesByType[filetype]; - const fileDecoder = FILE_DECODERS[proxyFileTypeAdapter[filetype]]; - - for (const encodedFileBuffer of files) { - const buffer = Uint8Array.from(atob(encodedFileBuffer), (c) => c.charCodeAt(0)); - const data = fileDecoder.decoder(buffer, fileDecoder.decoderParams, - fileDecoder.name, view.store); - view.dataFiles.push(data); - view.loadProgress = 100 * (idx + 1) / files.length; // TODO: Update this - } - } - } - - if (idx < files.length - 1) { - client.loadFile(files, idx + 1, traceType, view); - } else { - if (view.store.betaFeatures.newImePanels) { - combineWmSfWithImeDataIfExisting(view.dataFiles); - } - const currentDate = new Date().toISOString(); - view.$emit('dataReady', - `winscope-${traceType}-${currentDate}`, - view.dataFiles); - } - } catch (err) { - console.error(err); - client.setState(ProxyState.ERROR, err); - } - }, 'arraybuffer'); - } - -} - -export const proxyClient = new ProxyClient(); diff --git a/tools/winscope/src/stubs/waylandtrace.proto b/tools/winscope/src/stubs/waylandtrace.proto deleted file mode 100644 index bfe19ceed..000000000 --- a/tools/winscope/src/stubs/waylandtrace.proto +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -syntax = "proto2"; - -package org.chromium.arc.wayland_composer; - -message TraceFileProto {} -message OutputStateProto {} \ No newline at end of file diff --git a/tools/winscope/src/traces/Accessibility.ts b/tools/winscope/src/traces/Accessibility.ts deleted file mode 100644 index 523c5710d..000000000 --- a/tools/winscope/src/traces/Accessibility.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { FILE_TYPES, TRACE_TYPES } from '@/decode.js'; -import TraceBase from './TraceBase'; - -export default class Accessibility extends TraceBase { - accessibilityTraceFile: Object; - - constructor(files) { - const accessibilityTraceFile = files[FILE_TYPES.ACCESSIBILITY_TRACE]; - super(accessibilityTraceFile.data, accessibilityTraceFile.timeline, files); - - this.accessibilityTraceFile = accessibilityTraceFile; - } - - get type() { - return TRACE_TYPES.ACCESSIBILITY; - } -} diff --git a/tools/winscope/src/traces/InputMethodClients.ts b/tools/winscope/src/traces/InputMethodClients.ts deleted file mode 100644 index 95e1d8e44..000000000 --- a/tools/winscope/src/traces/InputMethodClients.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { FILE_TYPES, TRACE_TYPES } from '@/decode.js'; -import TraceBase from './TraceBase'; - -export default class InputMethodClients extends TraceBase { - imeTraceFileClients: any; - - constructor(files) { - const imeTraceFileClients = files[FILE_TYPES.IME_TRACE_CLIENTS]; - super(imeTraceFileClients.data, imeTraceFileClients.timeline, files); - - this.imeTraceFileClients = imeTraceFileClients; - } - - get type() { - return TRACE_TYPES.IME_CLIENTS; - } -} diff --git a/tools/winscope/src/traces/InputMethodManagerService.ts b/tools/winscope/src/traces/InputMethodManagerService.ts deleted file mode 100644 index 7ae0434b6..000000000 --- a/tools/winscope/src/traces/InputMethodManagerService.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { FILE_TYPES, TRACE_TYPES } from '@/decode.js'; -import TraceBase from './TraceBase'; - -export default class InputMethodManagerService extends TraceBase { - imeTraceFileManagerService: any; - - constructor(files) { - const imeTraceFileManagerService = files[FILE_TYPES.IME_TRACE_MANAGERSERVICE]; - super(imeTraceFileManagerService.data, imeTraceFileManagerService.timeline, files); - - this.imeTraceFileManagerService = imeTraceFileManagerService; - } - - get type() { - return TRACE_TYPES.IME_MANAGERSERVICE; - } -} diff --git a/tools/winscope/src/traces/InputMethodService.ts b/tools/winscope/src/traces/InputMethodService.ts deleted file mode 100644 index 64b7841a6..000000000 --- a/tools/winscope/src/traces/InputMethodService.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { FILE_TYPES, TRACE_TYPES } from '@/decode.js'; -import TraceBase from './TraceBase'; - -export default class InputMethodService extends TraceBase { - imeTraceFileService: any; - - constructor(files) { - const imeTraceFileService = files[FILE_TYPES.IME_TRACE_SERVICE]; - super(imeTraceFileService.data, imeTraceFileService.timeline, files); - - this.imeTraceFileService = imeTraceFileService; - } - - get type() { - return TRACE_TYPES.IME_SERVICE; - } -} diff --git a/tools/winscope/src/traces/Launcher.ts b/tools/winscope/src/traces/Launcher.ts deleted file mode 100644 index 9649296cd..000000000 --- a/tools/winscope/src/traces/Launcher.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { FILE_TYPES, TRACE_TYPES } from '@/decode.js'; -import TraceBase from './TraceBase'; - -export default class Launcher extends TraceBase { - launcherFile: any; - - constructor(files) { - const launcherFile = files[FILE_TYPES.LAUNCHER]; - super(launcherFile.data, launcherFile.timeline, files); - - this.launcherFile = launcherFile; - } - - get type() { - return TRACE_TYPES.LAUNCHER; - } -} diff --git a/tools/winscope/src/traces/ProtoLog.ts b/tools/winscope/src/traces/ProtoLog.ts deleted file mode 100644 index f251114c5..000000000 --- a/tools/winscope/src/traces/ProtoLog.ts +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { FILE_TYPES, TRACE_TYPES } from '@/decode.js'; -import TraceBase from './TraceBase'; - -import { nanos_to_string } from '@/transform.js'; -import viewerConfig from - '@/../../../../frameworks/base/data/etc/services.core.protolog.json'; - -export default class ProtoLog extends TraceBase { - protoLogFile: any; - - constructor(files) { - const protoLogFile = files[FILE_TYPES.PROTO_LOG]; - super(protoLogFile.data, protoLogFile.timeline, files); - - this.protoLogFile = protoLogFile; - } - - get type() { - return TRACE_TYPES.PROTO_LOG; - } -} - -export class LogMessage { - text: String; - time: String; - tag: String; - level: String; - at: String; - timestamp: Number; - - constructor({ text, time, tag, level, at, timestamp }) { - this.text = text; - this.time = time; - this.tag = tag; - this.level = level; - this.at = at; - this.timestamp = timestamp; - } -} - -export class FormattedLogMessage extends LogMessage { - constructor(entry) { - super({ - text: (entry.messageHash.toString() + - ' - [' + entry.strParams.toString() + - '] [' + entry.sint64Params.toString() + - '] [' + entry.doubleParams.toString() + - '] [' + entry.booleanParams.toString() + ']'), - time: nanos_to_string(entry.elapsedRealtimeNanos), - tag: 'INVALID', - level: 'invalid', - at: '', - timestamp: entry.elapsedRealtimeNanos, - }); - } -} - -export class UnformattedLogMessage extends LogMessage { - constructor(entry, message) { - super({ - text: formatText(message.message, entry), - time: nanos_to_string(entry.elapsedRealtimeNanos), - tag: viewerConfig.groups[message.group].tag, - level: message.level, - at: message.at, - timestamp: entry.elapsedRealtimeNanos, - }); - } -} - -function formatText(messageFormat, data) { - let out = ''; - const strParams = data.strParams; - let strParamsIdx = 0; - const sint64Params = data.sint64Params; - let sint64ParamsIdx = 0; - const doubleParams = data.doubleParams; - let doubleParamsIdx = 0; - const booleanParams = data.booleanParams; - let booleanParamsIdx = 0; - for (let i = 0; i < messageFormat.length;) { - if (messageFormat[i] == '%') { - if (i + 1 >= messageFormat.length) { - // Should never happen - protologtool checks for that - throw new Error('Invalid format string'); - } - switch (messageFormat[i + 1]) { - case '%': - out += '%'; - break; - case 'd': - out += getParam(sint64Params, sint64ParamsIdx++).toString(10); - break; - case 'o': - out += getParam(sint64Params, sint64ParamsIdx++).toString(8); - break; - case 'x': - out += getParam(sint64Params, sint64ParamsIdx++).toString(16); - break; - case 'f': - out += getParam(doubleParams, doubleParamsIdx++).toFixed(6); - break; - case 'e': - out += getParam(doubleParams, doubleParamsIdx++).toExponential(); - break; - case 'g': - out += getParam(doubleParams, doubleParamsIdx++).toString(); - break; - case 's': - out += getParam(strParams, strParamsIdx++); - break; - case 'b': - out += getParam(booleanParams, booleanParamsIdx++).toString(); - break; - default: - // Should never happen - protologtool checks for that - throw new Error('Invalid format string conversion: ' + - messageFormat[i + 1]); - } - i += 2; - } else { - out += messageFormat[i]; - i += 1; - } - } - return out; -} - -function getParam(arr, idx) { - if (arr.length <= idx) { - throw new Error('No param for format string conversion'); - } - return arr[idx]; -} \ No newline at end of file diff --git a/tools/winscope/src/traces/ScreenRecording.ts b/tools/winscope/src/traces/ScreenRecording.ts deleted file mode 100644 index c781d7dff..000000000 --- a/tools/winscope/src/traces/ScreenRecording.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { FILE_TYPES, TRACE_TYPES } from '@/decode.js'; -import TraceBase from './TraceBase'; - -export default class ScreenRecording extends TraceBase { - screenRecordingFile: any; - - constructor(files) { - const screenRecordingFile = files[FILE_TYPES.SCREEN_RECORDING]; - super(screenRecordingFile.data, screenRecordingFile.timeline, files); - - this.screenRecordingFile = screenRecordingFile; - } - - get type() { - return TRACE_TYPES.SCREEN_RECORDING; - } -} diff --git a/tools/winscope/src/traces/SurfaceFlinger.ts b/tools/winscope/src/traces/SurfaceFlinger.ts deleted file mode 100644 index b8ec6df93..000000000 --- a/tools/winscope/src/traces/SurfaceFlinger.ts +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { FILE_TYPES, TRACE_TYPES } from '@/decode.js'; -import TraceBase from './TraceBase'; -import { LayersTrace } from '@/flickerlib'; - -export default class SurfaceFlinger extends TraceBase { - readonly sfTraceFile: Object; - readonly tagGenerationTrace: Object; - - constructor(files) { - const sfTraceFile = Object.freeze(files[FILE_TYPES.SURFACE_FLINGER_TRACE]); - const tagGenerationTrace = files[FILE_TYPES.SURFACE_FLINGER_TRACE].tagGenerationTrace; - super(sfTraceFile.data, sfTraceFile.timeline, files); - - this.tagGenerationTrace = Object.freeze(tagGenerationTrace); - this.sfTraceFile = sfTraceFile; - } - - get type() { - return TRACE_TYPES.SURFACE_FLINGER; - } - - static fromProto(proto: any): LayersTrace { - return LayersTrace.fromProto(proto); - } -} diff --git a/tools/winscope/src/traces/SystemUI.ts b/tools/winscope/src/traces/SystemUI.ts deleted file mode 100644 index 4bc28d410..000000000 --- a/tools/winscope/src/traces/SystemUI.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { FILE_TYPES, TRACE_TYPES } from '@/decode.js'; -import TraceBase from './TraceBase'; - -export default class SystemUI extends TraceBase { - systemUIFile: any; - - constructor(files) { - const systemUIFile = files[FILE_TYPES.SYSTEM_UI]; - super(systemUIFile.data, systemUIFile.timeline, files); - - this.systemUIFile = systemUIFile; - } - - get type() { - return TRACE_TYPES.SYSTEM_UI; - } -} diff --git a/tools/winscope/src/traces/TraceBase.ts b/tools/winscope/src/traces/TraceBase.ts deleted file mode 100644 index ab9666c6d..000000000 --- a/tools/winscope/src/traces/TraceBase.ts +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -type File = { - blobUrl: string, - filename: string, -} - -import JSZip from 'jszip'; - -export default abstract class Trace implements ITrace { - selectedIndex: Number; - readonly data: Object; - readonly timeline: Array; - readonly _files: File[]; - - constructor(data: any, timeline: Number[], files: any[]) { - this.selectedIndex = 0; - this.data = data; - this.timeline = timeline; - this._files = files; - } - - get files(): readonly File[] { - return Object.values(this._files).flat(); - } - - abstract get type(): String; - - get blobUrl() { - if (this.files.length == 0) { - return null; - } - - if (this.files.length == 1) { - return this.files[0].blobUrl; - } - - const zip = new JSZip(); - - return (async () => { - for (const file of this.files) { - const blob = await fetch(file.blobUrl).then((r) => r.blob()); - zip.file(file.filename, blob); - } - - return await zip.generateAsync({ type: 'blob' }); - })(); - - } -} - -interface ITrace { - files: readonly Object[]; - type: String, -} diff --git a/tools/winscope/src/traces/TraceError.ts b/tools/winscope/src/traces/TraceError.ts deleted file mode 100644 index 3c9daa75b..000000000 --- a/tools/winscope/src/traces/TraceError.ts +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { FILE_TYPES, TRACE_TYPES } from '@/decode.js'; -import TraceBase from './TraceBase'; -import { ErrorTrace } from '@/flickerlib'; - -export default class TraceError extends TraceBase { - errorTraceFile: Object; - - constructor(files) { - const errorTraceFile = files[FILE_TYPES.ERROR_TRACE]; - super(errorTraceFile.data, errorTraceFile.timeline, files); - this.errorTraceFile = errorTraceFile; - } - - get type() { - return TRACE_TYPES.ERROR; - } - - static fromProto(proto: any): ErrorTrace { - return ErrorTrace.fromProto(proto); - } -} diff --git a/tools/winscope/src/traces/TraceTag.ts b/tools/winscope/src/traces/TraceTag.ts deleted file mode 100644 index 401a18578..000000000 --- a/tools/winscope/src/traces/TraceTag.ts +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { FILE_TYPES, TRACE_TYPES } from '@/decode.js'; -import TraceBase from './TraceBase'; -import { TagTrace } from '@/flickerlib'; - -export default class TraceTag extends TraceBase { - tagTraceFile: Object; - - constructor(files) { - const tagTraceFile = files[FILE_TYPES.TAG_TRACE]; - super(tagTraceFile.data, tagTraceFile.timeline, files); - this.tagTraceFile = tagTraceFile; - } - - get type() { - return TRACE_TYPES.TAG; - } - - static fromProto(proto: any): TagTrace { - return TagTrace.fromProto(proto); - } -} \ No newline at end of file diff --git a/tools/winscope/src/traces/Transactions.ts b/tools/winscope/src/traces/Transactions.ts deleted file mode 100644 index 587d76ba3..000000000 --- a/tools/winscope/src/traces/Transactions.ts +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2021, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { FILE_TYPES, TRACE_TYPES } from '@/decode.js'; -import TraceBase from './TraceBase'; - -export default class TransactionsTrace extends TraceBase { - transactionsFile: Object; - - constructor(files: any[]) { - const transactionsFile = files[FILE_TYPES.TRANSACTIONS_TRACE]; - - super(transactionsFile.data, transactionsFile.timeline, files); - - this.transactionsFile = transactionsFile; - } - - get type() { - return TRACE_TYPES.TRANSACTION; - } -} diff --git a/tools/winscope/src/traces/TransactionsLegacy.ts b/tools/winscope/src/traces/TransactionsLegacy.ts deleted file mode 100644 index ad25d4283..000000000 --- a/tools/winscope/src/traces/TransactionsLegacy.ts +++ /dev/null @@ -1,226 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { FILE_TYPES, TRACE_TYPES } from '@/decode.js'; -import TraceBase from './TraceBase'; - -/** - * @deprecated This trace has been replaced by the new transactions trace - */ -export default class TransactionsTraceLegacy extends TraceBase { - transactionsFile: Object; - transactionHistory: TransactionHistory; - - constructor(files: any[]) { - const transactionsFile = files[FILE_TYPES.TRANSACTIONS_TRACE_LEGACY]; - - super(transactionsFile.data, transactionsFile.timeline, files); - - this.transactionsFile = transactionsFile; - - // Create new transaction history - this.transactionHistory = new TransactionHistory(transactionsFile); - } - - get type() { - return TRACE_TYPES.TRANSACTION_LEGACY; - } -} - -class TransactionHistory { - history: Object; - applied: Object; - mergeTrees: any; - - constructor(transactionsEventsFiles) { - this.history = {}; - this.applied = {}; - - if (!transactionsEventsFiles) { - return; - } - - for (const eventsFile of transactionsEventsFiles) { - for (const event of eventsFile.data) { - if (event.merge) { - const merge = event.merge; - const originalId = merge.originalTransaction.id; - const mergedId = merge.mergedTransaction.id; - - this.addMerge(originalId, mergedId); - } else if (event.apply) { - this.addApply(event.apply.tx_id); - } - } - } - } - - addMerge(originalId, mergedId) { - const merge = new Merge(originalId, mergedId, this.history); - this.addToHistoryOf(originalId, merge); - } - - addApply(transactionId) { - this.applied[transactionId] = true; - this.addToHistoryOf(transactionId, new Apply(transactionId)); - } - - addToHistoryOf(transactionId, event) { - if (!this.history[transactionId]) { - this.history[transactionId] = []; - } - this.history[transactionId].push(event); - } - - generateHistoryTreesOf(transactionId) { - return this._generateHistoryTree(transactionId); - } - - _generateHistoryTree(transactionId, upTo = null) { - if (!this.history[transactionId]) { - return []; - } - - const children = []; - const events = this.history[transactionId]; - for (let i = 0; i < (upTo ?? events.length); i++) { - const event = events[i]; - - if (event instanceof Merge) { - const historyTree = this. - _generateHistoryTree(event.mergedId, event.mergedAt); - const mergeTreeNode = new MergeTreeNode(event.mergedId, historyTree); - children.push(mergeTreeNode); - } else if (event instanceof Apply) { - children.push(new ApplyTreeNode()); - } else { - throw new Error('Unhandled event type'); - } - } - - return children; - } - - /** - * Generates the list of all the transactions that have ever been merged into - * the target transaction directly or indirectly through the merges of - * transactions that ended up being merged into the transaction. - * This includes both merges that occur before and after the transaction is - * applied. - * @param {Number} transactionId - The id of the transaction we want the list - * of transactions merged in for - * @return {Set} a set of all the transaction ids that are in the - * history of merges of the transaction - */ - allTransactionsMergedInto(transactionId) { - const allTransactionsMergedIn = new Set(); - - let event; - const toVisit = this.generateHistoryTreesOf(transactionId); - while (event = toVisit.pop()) { - if (event instanceof MergeTreeNode) { - allTransactionsMergedIn.add(event.mergedId); - for (const child of event.children) { - toVisit.push(child); - } - } - } - - return allTransactionsMergedIn; - } - - /** - * Generated the list of transactions that have been directly merged into the - * target transaction those are transactions that have explicitly been merged - * in the code with a call to merge. - * @param {Number} transactionId - The id of the target transaction. - * @return {Array} an array of the transaction ids of the transactions - * directly merged into the target transaction - */ - allDirectMergesInto(transactionId) { - return (this.history[transactionId] ?? []) - .filter((event) => event instanceof Merge) - .map((merge) => merge.mergedId); - } -} - -class MergeTreeNode { - mergedId: Number; - mergedTransactionHistory: TransactionHistory; - children: TransactionHistory[]; - - constructor(mergedId, mergedTransactionHistory) { - this.mergedId = mergedId; - this.mergedTransactionHistory = mergedTransactionHistory; - this.children = mergedTransactionHistory; - } - - get type() { - return 'merge'; - } -} - -class ApplyTreeNode { - children: any[]; - - constructor() { - this.children = []; - } - - get type() { - return 'apply'; - } -} - -class Merge { - originalId: Number; - mergedId: Number; - mergedAt: Number; - - constructor(originalId, mergedId, history) { - this.originalId = originalId; - this.mergedId = mergedId; - // Specifies how long the merge chain of the merged transaction was at the - // time is was merged. - this.mergedAt = history[mergedId]?.length ?? 0; - } -} - -class Apply { - transactionId: Number; - - constructor(transactionId) { - this.transactionId = transactionId; - } -} - -/** - * Converts the transactionId to the values that compose the identifier. - * The top 32 bits is the PID of the process that created the transaction - * and the bottom 32 bits is the ID of the transaction unique within that - * process. - * @param {Number} transactionId - * @return {Object} An object containing the id and pid of the transaction. - */ -export function expandTransactionId(transactionId) { - // Can't use bit shift operation because it isn't a 32 bit integer... - // Because js uses floating point numbers for everything, maths isn't 100% - // accurate so we need to round... - return Object.freeze({ - id: Math.round(transactionId % Math.pow(2, 32)), - pid: Math.round(transactionId / Math.pow(2, 32)), - }); -} diff --git a/tools/winscope/src/traces/Wayland.ts b/tools/winscope/src/traces/Wayland.ts deleted file mode 100644 index b5924d869..000000000 --- a/tools/winscope/src/traces/Wayland.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { FILE_TYPES, TRACE_TYPES } from "@/decode.js"; -import TraceBase from './TraceBase'; - -export default class WayLand extends TraceBase { - waylandFile: Object; - - constructor(files) { - const waylandFile = files[FILE_TYPES.WAYLAND_TRACE]; - super(waylandFile.data, waylandFile.timeline, files); - - this.waylandFile = waylandFile; - } - - get type() { - return TRACE_TYPES.WAYLAND; - } -} \ No newline at end of file diff --git a/tools/winscope/src/traces/WindowManager.ts b/tools/winscope/src/traces/WindowManager.ts deleted file mode 100644 index eb41ad90d..000000000 --- a/tools/winscope/src/traces/WindowManager.ts +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { FILE_TYPES, TRACE_TYPES } from '@/decode.js'; -import TraceBase from './TraceBase'; - -import { WindowManagerTrace } from '@/flickerlib'; - -export default class WindowManager extends TraceBase { - wmTraceFile: Object; - tagGenerationTrace: Object; - - constructor(files) { - const wmTraceFile = files[FILE_TYPES.WINDOW_MANAGER_TRACE]; - const tagGenerationTrace = files[FILE_TYPES.WINDOW_MANAGER_TRACE].tagGenerationTrace; - super(wmTraceFile.data, wmTraceFile.timeline, files); - - this.tagGenerationTrace = tagGenerationTrace; - this.wmTraceFile = wmTraceFile; - } - - get type() { - return TRACE_TYPES.WINDOW_MANAGER; - } - - static fromProto(proto: any): WindowManagerTrace { - return WindowManagerTrace.fromProto(proto); - } -} diff --git a/tools/winscope/src/transform.js b/tools/winscope/src/transform.js deleted file mode 100644 index 51bedafd2..000000000 --- a/tools/winscope/src/transform.js +++ /dev/null @@ -1,418 +0,0 @@ -/* - * Copyright 2017, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {DiffType} from './utils/diff.js'; -import {regExpTimestampSearch} from './utils/consts'; - -// kind - a type used for categorization of different levels -// name - name of the node -// children - list of child entries. Each child entry is pair list -// [raw object, nested transform function]. -// bounds - used to calculate the full bounds of parents -// stableId - unique id for an entry. Used to maintain selection across frames. -function transform({ - obj, - kind, - name, - shortName, - children, - timestamp, - rect, - bounds, - highlight, - rectsTransform, - chips, - visible, - flattened, - stableId, - freeze = true, -}) { - function call(fn, arg) { - return (typeof fn == 'function') ? fn(arg) : fn; - } - function handleChildren(arg, transform) { - return [].concat(...arg.map((item) => { - const childrenFunc = item[0]; - const transformFunc = item[1]; - const childs = call(childrenFunc, obj); - if (childs) { - if (typeof childs.map != 'function') { - throw new Error( - 'Childs should be an array, but is: ' + (typeof childs) + '.'); - } - return transform ? childs.map(transformFunc) : childs; - } else { - return []; - } - })); - } - function concat(arg, args, argsmap) { - const validArg = arg !== undefined && arg !== null; - - if (Array.isArray(args)) { - if (validArg) { - return [arg].concat(...args.map(argsmap)); - } else { - return [].concat(...args.map(argsmap)); - } - } else if (validArg) { - return [arg]; - } else { - return undefined; - } - } - - const transformedChildren = handleChildren(children, true /* transform */); - rectsTransform = (rectsTransform === undefined) ? (e) => e : rectsTransform; - - const kindResolved = call(kind, obj); - const nameResolved = call(name, obj); - const shortNameResolved = call(shortName, obj); - const rectResolved = call(rect, obj); - // eslint-disable-next-line max-len - const stableIdResolved = (stableId === undefined) ? kindResolved + '|-|' + nameResolved : call(stableId, obj); - - const result = { - kind: kindResolved, - name: nameResolved, - shortName: shortNameResolved, - collapsed: false, - children: transformedChildren, - obj: obj, - timestamp: call(timestamp, obj), - skip: handleChildren(children, false /* transform */), - bounds: call(bounds, obj) || transformedChildren.map( - (e) => e.bounds).find((e) => true) || undefined, - rect: rectResolved, - rects: rectsTransform( - concat(rectResolved, transformedChildren, (e) => e.rects)), - highlight: call(highlight, obj), - chips: call(chips, obj), - stableId: stableIdResolved, - visible: call(visible, obj), - childrenVisible: transformedChildren.some((c) => { - return c.childrenVisible || c.isVisible; - }), - flattened: call(flattened, obj), - }; - - if (rectResolved) { - rectResolved.ref = result; - } - - return freeze ? Object.freeze(result) : result; -} - -function getDiff(val, compareVal) { - if (val && isTerminal(compareVal)) { - return {type: DiffType.ADDED}; - } else if (isTerminal(val) && compareVal) { - return {type: DiffType.DELETED}; - } else if (compareVal != val) { - return {type: DiffType.MODIFIED}; - } else { - return {type: DiffType.NONE}; - } -} - -// Represents termination of the object traversal, -// differentiated with a null value in the object. -class Terminal { } - -function isTerminal(obj) { - return obj instanceof Terminal; -} - -class ObjectTransformer { - constructor(obj, rootName, stableId) { - this.obj = obj; - this.rootName = rootName; - this.stableId = stableId; - this.diff = false; - } - - setOptions(options) { - this.options = options; - return this; - } - - withDiff(obj, fieldOptions) { - this.diff = true; - this.compareWithObj = obj ?? new Terminal(); - this.compareWithFieldOptions = fieldOptions; - return this; - } - - /** - * Transform the raw JS Object into a TreeView compatible object - * @param {Object} transformOptions detailed below - * @param {bool} keepOriginal whether or not to store the original object in - * the obj property of a tree node for future - * reference - * @param {bool} freeze whether or not the returned objected should be frozen - * to prevent changing any of its properties - * @param {string} metadataKey the key that contains a node's metadata to be - * accessible after the transformation - * @return {Object} the transformed JS object compatible with treeviews. - */ - transform(transformOptions = { - keepOriginal: false, freeze: true, metadataKey: null, - }) { - const {formatter} = this.options; - if (!formatter) { - throw new Error('Missing formatter, please set with setOptions()'); - } - - return this._transform(this.obj, this.rootName, null, - this.compareWithObj, this.rootName, null, - this.stableId, transformOptions); - } - - /** - * @param {Object} obj the object to transform to a treeview compatible object - * @param {Object} fieldOptions options on how to transform fields - * @param {*} metadataKey if 'obj' contains this key, it is excluded from the - * transformation - * @return {Object} the transformed JS object compatible with treeviews. - */ - _transformObject(obj, fieldOptions, metadataKey) { - const {skip, formatter} = this.options; - const transformedObj = { - obj: {}, - fieldOptions: {}, - }; - let formatted = undefined; - - if (skip && skip.includes(obj)) { - // skip - } else if ((formatted = formatter(obj))) { - // Obj has been formatted into a terminal node — has no children. - transformedObj.obj[formatted] = new Terminal(); - transformedObj.fieldOptions[formatted] = fieldOptions; - } else if (Array.isArray(obj)) { - obj.forEach((e, i) => { - transformedObj.obj['' + i] = e; - transformedObj.fieldOptions['' + i] = fieldOptions; - }); - } else if (typeof obj == 'string') { - // Object is a primitive type — has no children. Set to terminal - // to differentiate between null object and Terminal element. - transformedObj.obj[obj] = new Terminal(); - transformedObj.fieldOptions[obj] = fieldOptions; - } else if (typeof obj == 'number' || typeof obj == 'boolean') { - // Similar to above — primitive type node has no children. - transformedObj.obj['' + obj] = new Terminal(); - transformedObj.fieldOptions['' + obj] = fieldOptions; - } else if (obj && typeof obj == 'object') { - Object.keys(obj).forEach((key) => { - if (key === metadataKey) { - return; - } - transformedObj.obj[key] = obj[key]; - transformedObj.fieldOptions[key] = obj.$type?.fields[key]?.options; - }); - } else if (obj === null) { - // Null object is a has no children — set to be terminal node. - transformedObj.obj.null = new Terminal(); - transformedObj.fieldOptions.null = undefined; - } - - return transformedObj; - } - - /** - * Extract the value of obj's property with key 'metadataKey' - * @param {Object} obj the obj we want to extract the metadata from - * @param {string} metadataKey the key that stores the metadata in the object - * @return {Object} the metadata value or null in no metadata is present - */ - _getMetadata(obj, metadataKey) { - if (metadataKey && obj[metadataKey]) { - const metadata = obj[metadataKey]; - obj[metadataKey] = undefined; - return metadata; - } else { - return null; - } - } - - _transform(obj, name, fieldOptions, - compareWithObj, compareWithName, compareWithFieldOptions, - stableId, transformOptions) { - const originalObj = obj; - const metadata = this._getMetadata(obj, transformOptions.metadataKey); - - const children = []; - - if (!isTerminal(obj)) { - const transformedObj = - this._transformObject( - obj, fieldOptions, transformOptions.metadataKey); - obj = transformedObj.obj; - fieldOptions = transformedObj.fieldOptions; - } - if (!isTerminal(compareWithObj)) { - const transformedObj = - this._transformObject( - compareWithObj, compareWithFieldOptions, - transformOptions.metadataKey); - compareWithObj = transformedObj.obj; - compareWithFieldOptions = transformedObj.fieldOptions; - } - - for (const key in obj) { - if (obj.hasOwnProperty(key)) { - let compareWithChild = new Terminal(); - let compareWithChildName = new Terminal(); - let compareWithChildFieldOptions = undefined; - if (compareWithObj.hasOwnProperty(key)) { - compareWithChild = compareWithObj[key]; - compareWithChildName = key; - compareWithChildFieldOptions = compareWithFieldOptions[key]; - } - children.push(this._transform(obj[key], key, fieldOptions[key], - compareWithChild, compareWithChildName, - compareWithChildFieldOptions, - `${stableId}.${key}`, transformOptions)); - } - } - - // Takes care of adding deleted items to final tree - for (const key in compareWithObj) { - if (!obj.hasOwnProperty(key) && compareWithObj.hasOwnProperty(key)) { - children.push(this._transform(new Terminal(), new Terminal(), undefined, - compareWithObj[key], key, compareWithFieldOptions[key], - `${stableId}.${key}`, transformOptions)); - } - } - - let transformedObj; - if ( - children.length == 1 && - children[0].children.length == 0 && - !children[0].combined - ) { - // Merge leaf key value pairs. - const child = children[0]; - - transformedObj = { - kind: '', - name: (isTerminal(name) ? compareWithName : name) + ': ' + child.name, - stableId, - children: child.children, - combined: true, - }; - - if (this.diff) { - transformedObj.diff = child.diff; - } - } else { - transformedObj = { - kind: '', - name, - stableId, - children, - }; - - let fieldOptionsToUse = fieldOptions; - - if (this.diff) { - const diff = getDiff(name, compareWithName); - transformedObj.diff = diff; - - if (diff.type == DiffType.DELETED) { - transformedObj.name = compareWithName; - fieldOptionsToUse = compareWithFieldOptions; - } - } - } - - if (transformOptions.keepOriginal) { - transformedObj.obj = originalObj; - } - - if (metadata) { - transformedObj[transformOptions.metadataKey] = metadata; - } - - return transformOptions.freeze ? - Object.freeze(transformedObj) : transformedObj; - } -} - -// eslint-disable-next-line camelcase -function nanos_to_string(elapsedRealtimeNanos) { - const units = [ - [1000000, '(ns)'], - [1000, 'ms'], - [60, 's'], - [60, 'm'], - [24, 'h'], - [Infinity, 'd'], - ]; - - const parts = []; - units.some(([div, str], i) => { - const part = (elapsedRealtimeNanos % div).toFixed(); - if (!str.startsWith('(')) { - parts.push(part + str); - } - elapsedRealtimeNanos = Math.floor(elapsedRealtimeNanos / div); - return elapsedRealtimeNanos == 0; - }); - - return parts.reverse().join(''); -} - -function string_to_nanos(stringTime) { - //isolate the times for each unit in an array - var times = stringTime.split(/\D+/).filter(unit => unit.length > 0); - - //add zeroes to start of array if only partial timestamp is input - while (times.length<5) { - times.unshift("0"); - } - - var units = [24*60*60, 60*60, 60, 1, 0.001]; - var nanos = 0; - //multiply the times by the relevant unit and sum - for (var x=0; x<5; x++) { - nanos += units[x]*parseInt(times[x]); - } - return nanos*(10**9); -} - -// Returns a UI element used highlight a visible entry. -// eslint-disable-next-line camelcase -function get_visible_chip() { - return {short: 'V', long: 'visible', class: 'default'}; -} - -// Returns closest timestamp in timeline based on search input*/ -function getClosestTimestamp(searchInput, timeline) { - if (regExpTimestampSearch.test(searchInput)) { - var roundedTimestamp = parseInt(searchInput); - } else { - var roundedTimestamp = string_to_nanos(searchInput); - } - const closestTimestamp = timeline.reduce((prev, curr) => { - return Math.abs(curr-roundedTimestamp) < Math.abs(prev-roundedTimestamp) ? curr : prev; - }); - return closestTimestamp; -} - -// eslint-disable-next-line camelcase -export {transform, ObjectTransformer, nanos_to_string, string_to_nanos, get_visible_chip, getClosestTimestamp}; diff --git a/tools/winscope/src/transform_accessibility.js b/tools/winscope/src/transform_accessibility.js deleted file mode 100644 index 6c622f2c8..000000000 --- a/tools/winscope/src/transform_accessibility.js +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { transform, nanos_to_string, get_visible_chip } from './transform.js' - -function transform_accessibility(accessibility) { - return transform({ - obj: accessibility, - kind: 'accessibility', - name: 'accessibility', - children: [] - }); -} - -function transform_entry(entry) { - return transform({ - obj: entry, - kind: 'entry', - name: nanos_to_string(entry.elapsedRealtimeNanos), - children: [ - [entry.accessibilityService, transform_accessibility], - ], - timestamp: entry.elapsedRealtimeNanos, - stableId: 'entry' - }); -} - -function transform_accessibility_trace(entries) { - return transform({ - obj: entries, - kind: 'entries', - name: 'entries', - children: [ - [entries.entry, transform_entry], - ], - }); -} - -export { transform_accessibility_trace }; diff --git a/tools/winscope/src/transform_ime.js b/tools/winscope/src/transform_ime.js deleted file mode 100644 index 7792a3d22..000000000 --- a/tools/winscope/src/transform_ime.js +++ /dev/null @@ -1,119 +0,0 @@ -import {nanos_to_string, transform} from './transform.js' - -function transform_ime_trace_clients(entries) { - return transform({ - obj: entries, - kind: 'entries', - name: 'entries', - children: [ - [entries.entry, transform_entry_clients] - ] - }); -} - -function transform_entry_clients(entry) { - return transform({ - obj: entry, - kind: 'InputMethodClient entry', - name: nanos_to_string(entry.elapsedRealtimeNanos) + " - " + entry.where, - children: [ - [[entry.client], transform_client_dump] - ], - timestamp: entry.elapsedRealtimeNanos, - stableId: 'entry', - freeze: false, - }); -} - -function transform_client_dump(entry) { - return transform({ - obj: transform_input_connection_call(entry), - kind: 'Client', - name: entry?.viewRootImpl?.view, - children: [], - stableId: 'client' - }); -} - -function transform_ime_trace_service(entries) { - return transform({ - obj: entries, - kind: 'entries', - name: 'entries', - children: [ - [entries.entry, transform_entry_service] - ] - }); -} - -function transform_entry_service(entry) { - return transform({ - obj: entry, - kind: 'InputMethodService entry', - name: nanos_to_string(entry.elapsedRealtimeNanos) + " - " + entry.where, - children: [ - [[entry.inputMethodService], transform_service_dump] - ], - timestamp: entry.elapsedRealtimeNanos, - stableId: 'entry', - freeze: false, - }); -} - -function transform_service_dump(entry) { - return transform({ - obj: transform_input_connection_call(entry), - kind: 'InputMethodService', - name: '', - children: [], - stableId: 'service' - }); -} - -function transform_ime_trace_managerservice(entries) { - return transform({ - obj: entries, - kind: 'entries', - name: 'entries', - children: [ - [entries.entry, transform_entry_managerservice] - ] - }); -} - -function transform_entry_managerservice(entry) { - return transform({ - obj: entry, - kind: 'InputMethodManagerService entry', - name: nanos_to_string(entry.elapsedRealtimeNanos) + " - " + entry.where, - children: [ - [[entry.inputMethodManagerService], transform_managerservice_dump] - ], - timestamp: entry.elapsedRealtimeNanos, - stableId: 'entry', - freeze: false, - }); -} - -function transform_managerservice_dump(entry) { - return transform({ - obj: entry, - kind: 'InputMethodManagerService', - name: '', - children: [], - stableId: 'managerservice' - }); -} - -function transform_input_connection_call(entry) { - const obj = Object.assign({}, entry) - if (obj.inputConnectionCall) { - Object.getOwnPropertyNames(obj.inputConnectionCall).forEach(name => { - const value = Object.getOwnPropertyDescriptor(obj.inputConnectionCall, name) - if (!value.value) delete obj.inputConnectionCall[name] - }) - } - return obj -} - -export {transform_ime_trace_clients, transform_ime_trace_service, transform_ime_trace_managerservice}; diff --git a/tools/winscope/src/transform_launcher.js b/tools/winscope/src/transform_launcher.js deleted file mode 100644 index 24a137658..000000000 --- a/tools/winscope/src/transform_launcher.js +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2019, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { transform, nanos_to_string, get_visible_chip } from './transform.js' - -function transform_launcher(launcher) { - return transform({ - obj: launcher, - kind: 'launcher', - name: 'launcher', - children: [] - }); -} - -function transform_entry(entry) { - return transform({ - obj: entry, - kind: 'entry', - name: nanos_to_string(entry.elapsedRealtimeNanos), - children: [ - [[entry.launcher], transform_launcher] - ], - timestamp: entry.elapsedRealtimeNanos, - stableId: 'entry' - }); -} - -function transform_launcher_trace(entries) { - return transform({ - obj: entries, - kind: 'entries', - name: 'entries', - children: [ - [entries.entry, transform_entry], - ], - }); -} - -export { transform_launcher_trace }; diff --git a/tools/winscope/src/transform_protolog.js b/tools/winscope/src/transform_protolog.js deleted file mode 100644 index c3f91228d..000000000 --- a/tools/winscope/src/transform_protolog.js +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import viewerConfig - from '../../../../frameworks/base/data/etc/services.core.protolog.json'; - -import {FormattedLogMessage, UnformattedLogMessage} from '@/traces/ProtoLog.ts'; - -const PROTOLOG_VERSION = '1.0.0'; - -class FormatStringMismatchError extends Error { - constructor(message) { - super(message); - } -} - -function transformMessage(entry) { - const message = viewerConfig.messages[entry.messageHash]; - if (message === undefined) { - return new FormattedLogMessage(entry); - } else { - try { - return new UnformattedLogMessage(entry, message); - } catch (err) { - if (err instanceof FormatStringMismatchError) { - return new FormattedLogMessage(entry); - } - throw err; - } - } -} - -function transformProtolog(log) { - if (log.version !== PROTOLOG_VERSION) { - throw new Error('Unsupported log version'); - } - if (viewerConfig.version !== PROTOLOG_VERSION) { - throw new Error('Unsupported viewer config version'); - } - - const data = log.log.map((entry) => (transformMessage(entry))); - data.sort(function(a, b) { - return a.timestamp - b.timestamp; - }); - const transformed = { - children: data, - }; - return transformed; -} - -export {transformProtolog}; diff --git a/tools/winscope/src/transform_sys_ui.js b/tools/winscope/src/transform_sys_ui.js deleted file mode 100644 index 3b14546b4..000000000 --- a/tools/winscope/src/transform_sys_ui.js +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 2019, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { transform, nanos_to_string, get_visible_chip } from './transform.js' - -function transform_edgeBack(edgeBack) { - return transform({ - obj: edgeBack, - kind: 'edgeBack', - name: 'edgeBack', - children: [] - }); -} - -function transform_systemUi(sysui) { - return transform({ - obj: sysui, - kind: 'systemUi', - name: 'systemUi', - children: [ - [[sysui.edgeBackGestureHandler], transform_edgeBack] - ] - }); -} - -function transform_entry(entry) { - return transform({ - obj: entry, - kind: 'entry', - name: nanos_to_string(entry.elapsedRealtimeNanos), - children: [ - [[entry.systemUi], transform_systemUi] - ], - timestamp: entry.elapsedRealtimeNanos, - stableId: 'entry' - }); -} - -function transform_sysui_trace(entries) { - return transform({ - obj: entries, - kind: 'entries', - name: 'entries', - children: [ - [entries.entry, transform_entry], - ], - }); -} - -export { transform_sysui_trace }; diff --git a/tools/winscope/src/transform_transaction.js b/tools/winscope/src/transform_transaction.js deleted file mode 100644 index baf816a42..000000000 --- a/tools/winscope/src/transform_transaction.js +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright 2021, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {nanos_to_string, transform} from './transform.js' - -function transform_change(change_data) { - const kind = change_data.__proto__.$type.name; - const name = change_data.layerId || change_data.id; - return transform({ - kind: kind, - name: name, - stableId: kind + name, - obj: change_data, - children: [], - isVisible: true, - }); -} - -function transform_transaction_state(transaction_state) { - const obj = Object.assign({}, transaction_state) - if (obj.displayChanges) delete obj.displayChanges; - if (obj.layerChanges) delete obj.layerChanges; - const stableId = 'pid=' + transaction_state.pid + - ' uid=' + transaction_state.uid + - ' postTime=' + transaction_state.postTime; - return transform({ - kind: 'TransactionState', - name: stableId, - stableId: stableId, - obj: obj, - children: [ - [ - [...transaction_state.layerChanges, ...transaction_state.displayChanges], - transform_change] - ] - }); -} - -function transform_transaction_trace_entry(entry) { - const obj = Object.assign({}, entry) - if (obj.transactions) delete obj.transactions; - - return transform({ - obj: obj, - kind: 'entry', - stableId: 'entry', - timestamp: entry.elapsedRealtimeNanos, - name: nanos_to_string(entry.elapsedRealtimeNanos), - children: [ - [entry.transactions, transform_transaction_state] - ], - }); -} - -function transform_transaction_trace(trace) { - const data = trace.entry.map((entry) => transform_transaction_trace_entry(entry)); - return {children: data}; -} - -export {transform_transaction_trace}; diff --git a/tools/winscope/src/transform_wl.js b/tools/winscope/src/transform_wl.js deleted file mode 100644 index aafc63759..000000000 --- a/tools/winscope/src/transform_wl.js +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright 2019, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {transform, nanos_to_string, get_visible_chip} from './transform.js' - -function transform_wl_layer(layer) { - function is_visible(layer) { - return layer.parent == 0 || (layer.visibleInParent && layer.visible && (layer.hidden != 1)); - } - - var chips = []; - var rect = layer.displayFrame; - var visible = is_visible(layer); - if (visible && layer.parent != 0) { - chips.push(get_visible_chip()); - } - if (!visible) { - rect = undefined; - } - - return transform({ - obj: layer, - kind: 'layer', - name: layer.name, - children: [ - [layer.resolvedChildren, transform_wl_layer], - ], - rect, - highlight: rect, - chips, - visible, - stableId: layer.id, - }); -} - -function transform_wl_container(cntnr) { - var rect = cntnr.geometry; - var layersList = cntnr.layers || []; - - return transform({ - obj: cntnr, - kind: 'container', - name: cntnr.name, - children: [ - [layersList, transform_wl_layer], - ], - rect, - highlight: rect, - stableId: cntnr.id, - }); -} - -function transform_wl_outputstate(layers) { - var containerList = layers.containers || []; - var fullBounds = layers.fullBounds; - - return transform({ - obj: {name: "Output State", fullBounds: fullBounds}, - kind: 'outputstate', - name: 'Output State', - rect: fullBounds, - highlight: fullBounds, - children: [ - [containerList, transform_wl_container], - ], - }); -} - -function transform_wl_entry(entry) { - return transform({ - obj: entry, - kind: 'entry', - name: nanos_to_string(entry.elapsedRealtimeNanos) + " - " + entry.where, - children: [ - [[entry.state], transform_wl_outputstate], - ], - timestamp: entry.elapsedRealtimeNanos, - stableId: 'entry', - }); -} - -function transform_wayland_trace(entries) { - var r = transform({ - obj: entries, - kind: 'wltrace', - name: 'wltrace', - children: [ - [entries.entry, transform_wl_entry], - ], - }); - - return r; -} - -export {transform_wl_outputstate, transform_wayland_trace}; diff --git a/tools/winscope/src/utils/compatibility.js b/tools/winscope/src/utils/compatibility.js deleted file mode 100644 index 5685f3787..000000000 --- a/tools/winscope/src/utils/compatibility.js +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -const CompatibleFeatures = { - DiffVisualization: true, -} - -export { CompatibleFeatures } \ No newline at end of file diff --git a/tools/winscope/src/utils/consts.js b/tools/winscope/src/utils/consts.js deleted file mode 100644 index 4be6a4419..000000000 --- a/tools/winscope/src/utils/consts.js +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import TransitionType from "../flickerlib/tags/TransitionType"; - -/** - * Should be kept in sync with ENUM is in Google3 under: - * google3/wireless/android/tools/android_bug_tool/extension/common/actions - */ -const WebContentScriptMessageType = { - UNKNOWN: 0, - CONVERT_OBJECT_URL: 1, - CONVERT_OBJECT_URL_RESPONSE: 2, -}; - -const NAVIGATION_STYLE = { - GLOBAL: 'Global', - FOCUSED: 'Focused', - CUSTOM: 'Custom', - TARGETED: 'Targeted', -}; - -const SEARCH_TYPE = { - TRANSITIONS: 'Transitions', - ERRORS: 'Errors', - TIMESTAMP: 'Timestamp', -}; - -const logLevel = { - INFO: 'info', - DEBUG: 'debug', - VERBOSE: 'verbose', - WARN: 'warn', - ERROR: 'error', - WTF: 'wtf', -}; - -const transitionMap = new Map([ - [TransitionType.ROTATION, {desc: 'Rotation', color: '#9900ffff'}], - [TransitionType.PIP_ENTER, {desc: 'Entering PIP mode', color: '#4a86e8ff'}], - [TransitionType.PIP_RESIZE, {desc: 'Resizing PIP mode', color: '#2b9e94ff'}], - [TransitionType.PIP_EXPAND, {desc: 'Expanding PIP mode', color: 'rgb(57, 57, 182)'}], - [TransitionType.PIP_EXIT, {desc: 'Exiting PIP mode', color: 'darkblue'}], - [TransitionType.APP_LAUNCH, {desc: 'Launching app', color: '#ef6befff'}], - [TransitionType.APP_CLOSE, {desc: 'Closing app', color: '#d10ddfff'}], - [TransitionType.IME_APPEAR, {desc: 'IME appearing', color: '#ff9900ff'}], - [TransitionType.IME_DISAPPEAR, {desc: 'IME disappearing', color: '#ad6800ff'}], - [TransitionType.APP_PAIRS_ENTER, {desc: 'Entering app pairs mode', color: 'rgb(58, 151, 39)'}], - [TransitionType.APP_PAIRS_EXIT, {desc: 'Exiting app pairs mode', color: 'rgb(45, 110, 32)'}], -]) - -//used to split timestamp search input by unit, to convert to nanoseconds -const regExpTimestampSearch = new RegExp(/^\d+$/); - -export { WebContentScriptMessageType, NAVIGATION_STYLE, SEARCH_TYPE, logLevel, transitionMap, regExpTimestampSearch }; diff --git a/tools/winscope/src/utils/diff.js b/tools/winscope/src/utils/diff.js deleted file mode 100644 index 7449b5520..000000000 --- a/tools/winscope/src/utils/diff.js +++ /dev/null @@ -1,250 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// TODO (b/162300507): Get rid of cloning -import ObjectFormatter from '../flickerlib/ObjectFormatter'; - -export const DiffType = Object.freeze({ - NONE: 'none', - ADDED: 'added', - DELETED: 'deleted', - ADDED_MOVE: 'addedMove', - DELETED_MOVE: 'deletedMove', - MODIFIED: 'modified', -}); - -export function defaultModifiedCheck(newNode, oldNode) { - if (!newNode && !oldNode) { - return false; - } - - if ((newNode && !oldNode) || (!newNode && oldNode)) { - return true; - } - - return !newNode.equals(oldNode); -} - -export class DiffGenerator { - constructor(tree) { - this.tree = tree; - } - - compareWith(tree) { - this.diffWithTree = tree; - return this; - } - - withUniqueNodeId(getNodeId) { - this.getNodeId = (node) => { - const id = getNodeId(node); - if (id === null || id === undefined) { - console.error('Null node ID for node', node); - throw new Error('Node ID can\'t be null or undefined'); - } - return id; - }; - return this; - } - - withModifiedCheck(isModified) { - this.isModified = isModified; - return this; - } - - generateDiffTree() { - this.newMapping = this._generateIdToNodeMapping(this.tree); - this.oldMapping = this.diffWithTree ? - this._generateIdToNodeMapping(this.diffWithTree) : {}; - - const diffTrees = - this._generateDiffTree(this.tree, this.diffWithTree, [], []); - - let diffTree; - if (diffTrees.length > 1) { - diffTree = { - kind: '', - name: 'DiffTree', - children: diffTrees, - stableId: 'DiffTree', - }; - } else { - diffTree = diffTrees[0]; - } - - return Object.freeze(diffTree); - } - - _generateIdToNodeMapping(node, acc) { - acc = acc || {}; - - const nodeId = this.getNodeId(node); - - if (acc[nodeId]) { - throw new Error(`Duplicate node id '${nodeId}' detected...`); - } - - acc[this.getNodeId(node)] = node; - - if (node.children) { - for (const child of node.children) { - this._generateIdToNodeMapping(child, acc); - } - } - - return acc; - } - - _objIsEmpty(obj) { - return Object.keys(obj).length === 0 && obj.constructor === Object; - } - - _cloneNode(node) { - const clone = ObjectFormatter.cloneObject(node); - clone.children = node.children; - clone.name = node.name; - clone.kind = node.kind; - clone.stableId = node.stableId; - clone.shortName = node.shortName; - if ('chips' in node) { - clone.chips = node.chips.slice(); - } - return clone; - } - - _generateDiffTree(newTree, oldTree, newTreeSiblings, oldTreeSiblings) { - const diffTrees = []; - - // NOTE: A null ID represents a non existent node. - const newId = newTree ? this.getNodeId(newTree) : null; - const oldId = oldTree ? this.getNodeId(oldTree) : null; - - const newTreeSiblingIds = newTreeSiblings.map(this.getNodeId); - const oldTreeSiblingIds = oldTreeSiblings.map(this.getNodeId); - - if (newTree) { - // Deep clone newTree omitting children field - // Clone is required because trees are frozen objects — we can't - // modify the original tree object. Also means there is no side effect. - const diffTree = this._cloneNode(newTree); - - // Default to no changes - diffTree.diff = {type: DiffType.NONE}; - - if (newId !== oldId) { - // A move, addition, or deletion has occurred - let nextOldTree; - - // Check if newTree has been added or moved - if (!oldTreeSiblingIds.includes(newId)) { - if (this.oldMapping[newId]) { - // Objected existed in old tree, the counter party - // DELETED_MOVE will be/has been flagged and added to the - // diffTree when visiting it in the oldTree. - diffTree.diff = {type: DiffType.ADDED_MOVE}; - - // TODO: Figure out if oldTree is ever visited now... - - // Switch out oldTree for new one to compare against - nextOldTree = this.oldMapping[newId]; - } else { - diffTree.diff = {type: DiffType.ADDED}; - - // TODO: Figure out if oldTree is ever visited now... - - // Stop comparing against oldTree - nextOldTree = null; - } - } - - // Check if oldTree has been deleted of moved - if (oldTree && !newTreeSiblingIds.includes(oldId)) { - const deletedTreeDiff = this._cloneNode(oldTree); - - if (this.newMapping[oldId]) { - deletedTreeDiff.diff = {type: DiffType.DELETED_MOVE}; - - // Stop comparing against oldTree, will be/has been - // visited when object is seen in newTree - nextOldTree = null; - } else { - deletedTreeDiff.diff = {type: DiffType.DELETED}; - - // Visit all children to check if they have been deleted or moved - deletedTreeDiff.children = this._visitChildren(null, oldTree); - } - - diffTrees.push(deletedTreeDiff); - } - - oldTree = nextOldTree; - } else { - // TODO: Always have modified check and add modified tags on top of - // others - // NOTE: Doesn't check for moved and modified at the same time - if (this.isModified && this.isModified(newTree, oldTree)) { - diffTree.diff = {type: DiffType.MODIFIED}; - } - } - - diffTree.children = this._visitChildren(newTree, oldTree); - diffTrees.push(diffTree); - } else if (oldTree) { - if (!newTreeSiblingIds.includes(oldId)) { - // Deep clone oldTree omitting children field - const diffTree = this._cloneNode(oldTree); - - // newTree doesn't exists, oldTree has either been moved or deleted. - if (this.newMapping[oldId]) { - diffTree.diff = {type: DiffType.DELETED_MOVE}; - } else { - diffTree.diff = {type: DiffType.DELETED}; - } - - diffTree.children = this._visitChildren(null, oldTree); - diffTrees.push(diffTree); - } - } else { - throw new Error('Both newTree and oldTree are undefined...'); - } - - return diffTrees; - } - - _visitChildren(newTree, oldTree) { - // Recursively traverse all children of new and old tree. - const diffChildren = []; - - // TODO: Try replacing this with some sort of zipWith. - const numOfChildren = Math.max( - newTree?.children?.length ?? 0, oldTree?.children?.length ?? 0); - for (let i = 0; i < numOfChildren; i++) { - const newChild = i < newTree?.children?.length ? - newTree.children[i] : null; - - const oldChild = i < oldTree?.children?.length ? - oldTree.children[i] : null; - - const childDiffTrees = this._generateDiffTree( - newChild, oldChild, - newTree?.children ?? [], oldTree?.children ?? [], - ); - diffChildren.push(...childDiffTrees); - } - - return diffChildren; - } -} diff --git a/tools/winscope/src/utils/names.js b/tools/winscope/src/utils/names.js deleted file mode 100644 index a5ae03797..000000000 --- a/tools/winscope/src/utils/names.js +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// Returns just the class name and root package information -function getComponentClassName(componentFullName) { - const classParts = componentFullName.split('.'); - - if (classParts.length <= 3) { - return componentFullName; - } - - const className = classParts.slice(-1).pop(); - - return `${classParts[0]}.${classParts[1]}.(...).${className}` -} - -const hashCode = /([A-Fa-f0-9]{7}|[A-Fa-f0-9]{6})/; -const packageRegex = /(([a-z][a-z_0-9]*\.)*([a-z][a-z_0-9]*))/; -const qualifiedClassNameRegex = /(([a-z][a-z_0-9]*\.)*[A-Z_]($[A-Z_]|[\w_])*)/; - -const surfaceRegex = - new RegExp(/^Surface\(.*\)\/@0x/.source + hashCode.source + - / - .*/.source + "$"); - -const moduleName = - new RegExp("^" + - "(" + packageRegex.source + /\//.source + ")?" + - qualifiedClassNameRegex.source + - /(\$.*)?/.source + - /(\#.*)?/.source + - "$"); - -function getSimplifiedLayerName(layerName) { - // Get rid of prepended hash code - let removedHashCodePrefix = false; - if (new RegExp("^" + hashCode.source + " ").test(layerName)) { - layerName = layerName.split(" ").slice(1).join(" "); - removedHashCodePrefix = true; - } - - if (/^ActivityRecord\{.*\}?(\#[0-9]+)?$/.test(layerName)) { - return "ActivityRecord"; - } - - if (/^WindowToken\{.*\}(\#[0-9]*)?$/.test(layerName)) { - return "WindowToken"; - } - - if (/^WallpaperWindowToken\{.*\}(\#[0-9]*)?$/.test(layerName)) { - return "WallpaperWindowToken"; - } - - if (surfaceRegex.test(layerName)) { - return "Surface - " + layerName.split("- ").slice(-1).pop(); - } - - if (moduleName.test(layerName)) { - return layerName.split(".").slice(-1).pop(); - } - - if (removedHashCodePrefix) { - return layerName; - } - - return null; -} - -export { getComponentClassName, getSimplifiedLayerName }; \ No newline at end of file diff --git a/tools/winscope/src/utils/utils.js b/tools/winscope/src/utils/utils.js deleted file mode 100644 index 5ee25d6b2..000000000 --- a/tools/winscope/src/utils/utils.js +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Find the index of the last element matching the predicate in a sorted array - */ -function findLastMatchingSorted(array, predicate) { - let a = 0; - let b = array.length - 1; - while (b - a > 1) { - const m = Math.floor((a + b) / 2); - if (predicate(array, m)) { - a = m; - } else { - b = m - 1; - } - } - - return predicate(array, b) ? b : a; -} - -/** - * Make sure stableId is unique (makes old versions of proto compatible) - */ -function stableIdCompatibilityFixup(item) { - // For backwards compatibility - // (the only item that doesn't have a unique stable ID in the tree) - if (item.stableId === 'winToken|-|') { - return item.stableId + item.children[0].stableId; - } - - return item.stableId; -} - -const DIRECTION = Object.freeze({ - BACKWARD: -1, - FORWARD: 1, -}); - -const TimeUnits = Object.freeze({ - NANO_SECONDS: 'ns', - MILLI_SECONDS: 'ms', - SECONDS: 's', - MINUTES: 'm', - HOURS: 'h', - DAYS: 'd', -}); - -function nanosToString(elapsedRealtimeNanos, precision) { - const units = [ - [1000000, TimeUnits.NANO_SECONDS], - [1000, TimeUnits.MILLI_SECONDS], - [60, TimeUnits.SECONDS], - [60, TimeUnits.MINUTES], - [24, TimeUnits.HOURS], - [Infinity, TimeUnits.DAYS], - ]; - - const parts = []; - - let precisionThresholdReached = false; - units.some(([div, timeUnit], i) => { - const part = (elapsedRealtimeNanos % div).toFixed() - if (timeUnit === precision) { - precisionThresholdReached = true; - } - if (precisionThresholdReached) { - parts.push(part + timeUnit); - } - elapsedRealtimeNanos = Math.floor(elapsedRealtimeNanos / div); - - return elapsedRealtimeNanos == 0; - }); - - return parts.reverse().join(''); -} - -/** - * Checks for match in window manager properties taskId, layerId, or - * windowToken, or surface flinger property id - */ -function isPropertyMatch(flickerItem, entryItem) { - return flickerItem.taskId === entryItem.taskId || - (flickerItem.windowToken === entryItem.windowToken) || - ((flickerItem.layerId === entryItem.layerId) && flickerItem.layerId !== 0) || - flickerItem.layerId === entryItem.id; -} - -/** - * Get a function that will filter tree items based on a filter string - * @param filterString a string of "queries" used to match tree items' names - * @return {function(*)} a filter function that determines whether a tree item's - * name matches what is wanted based on the filterString - */ -function getFilter(filterString) { - const filterStrings = filterString.split(','); - const positive = []; - const negative = []; - filterStrings.forEach((f) => { - f = f.trim(); - if (f.startsWith('!')) { - const regex = new RegExp(f.substring(1), "i"); - negative.push((s) => !regex.test(s)); - } else { - const regex = new RegExp(f, "i"); - positive.push((s) => regex.test(s)); - } - }); - const filter = (item) => { - const apply = (f) => f(String(item.name)); - return (positive.length === 0 || positive.some(apply)) && - (negative.length === 0 || negative.every(apply)); - }; - return filter; -} - -export { - DIRECTION, - findLastMatchingSorted, - isPropertyMatch, - stableIdCompatibilityFixup, - nanosToString, - TimeUnits, - getFilter, -}; diff --git a/tools/winscope/static/favicon.svg b/tools/winscope/static/favicon.svg deleted file mode 100644 index 8a75c7fcb..000000000 --- a/tools/winscope/static/favicon.svg +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - diff --git a/tools/winscope/tests/samples/wl_trace.pb b/tools/winscope/tests/samples/wl_trace.pb deleted file mode 100644 index 7e1f0075e..000000000 Binary files a/tools/winscope/tests/samples/wl_trace.pb and /dev/null differ diff --git a/tools/winscope/trace.sh b/tools/winscope/trace.sh deleted file mode 100755 index ff0174850..000000000 --- a/tools/winscope/trace.sh +++ /dev/null @@ -1,85 +0,0 @@ -#!/bin/bash -# -# Copyright (C) 2017 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. -# - -WINSCOPE_URL='http://go/winscope/' - -set -e - -help= - -for arg in "$@"; do - case $arg in - -h|--help) help=1;; - --);; - -*) echo "Unknown option: $arg"; help=1;; - *) outfile="$arg";; - esac -done - -WINSCOPE_EXT=.winscope -outfileTrans=${outfile}_transactiontrace$WINSCOPE_EXT -outfileSurf=${outfile}_layerstrace$WINSCOPE_EXT - -outfileTrans_abs="$(cd "$(dirname "$outfileTrans")"; pwd)/$(basename "$outfileTrans")" -outfileSurf_abs="$(cd "$(dirname "$outfileSurf")"; pwd)/$(basename "$outfileSurf")" - -if [ "$help" != "" ]; then - echo "usage: $0 [-h | --help] [OUTFILE]" - echo - echo "Records Transaction traces (default transactiontrace$WINSCOPE_EXT)." - echo "Records Surface traces (default layerstrace$WINSCOPE_EXT)." - echo "To view the traces, use $WINSCOPE_URL." - exit 1 -fi - -function log_error() { - echo "FAILED" -} -trap log_error ERR - -function start_tracing() { - echo -n "Starting transaction and surface recording..." - echo - adb shell su root service call SurfaceFlinger 1020 i32 1 >/dev/null - adb shell su root service call SurfaceFlinger 1025 i32 1 >/dev/null - echo "DONE" - trap stop_tracing EXIT -} - -function stop_tracing() { - echo -n "Stopping transaction and surface recording..." - echo - adb shell su root service call SurfaceFlinger 1020 i32 0 >/dev/null - adb shell su root service call SurfaceFlinger 1025 i32 0 >/dev/null - echo "DONE" - trap - EXIT -} - -which adb >/dev/null 2>/dev/null || { echo "ERROR: ADB not found."; exit 1; } -adb get-state 2>/dev/null | grep -q device || { echo "ERROR: No device connected or device is unauthorized."; exit 1; } - -start_tracing -read -p "Press ENTER to stop recording" -s x -echo -stop_tracing -adb exec-out su root cat /data/misc/wmtrace/transaction_trace$WINSCOPE_EXT >"$outfileTrans" -adb exec-out su root cat /data/misc/wmtrace/layers_trace$WINSCOPE_EXT >"$outfileSurf" - -echo -echo "To view the trace, go to $WINSCOPE_URL, and open" -echo "${outfileTrans_abs}" -echo "${outfileSurf_abs}" diff --git a/tools/winscope/tsconfig.json b/tools/winscope/tsconfig.json deleted file mode 100644 index 486e68b16..000000000 --- a/tools/winscope/tsconfig.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - "baseUrl": "./src", - "outDir": "./dist/", - "noImplicitAny": false, - "module": "es6", - "target": "es5", - "allowJs": false, - "resolveJsonModule": true, - "moduleResolution": "node", - "allowSyntheticDefaultImports": true, - "lib": [ - "es2019", - "dom", - ], - "paths": { - "@/*": [ - "*" - ], - } - } -} \ No newline at end of file diff --git a/tools/winscope/vue.config.js b/tools/winscope/vue.config.js deleted file mode 100644 index ab7013e05..000000000 --- a/tools/winscope/vue.config.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - configureWebpack: { - devtool: 'source-map' - } - } \ No newline at end of file diff --git a/tools/winscope/webpack.config.common.js b/tools/winscope/webpack.config.common.js deleted file mode 100644 index 48d950a51..000000000 --- a/tools/winscope/webpack.config.common.js +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -'use strict'; - -const path = require('path'); -const fs = require('fs'); - -const { VueLoaderPlugin } = require("vue-loader") -const HtmlWebpackPlugin = require('html-webpack-plugin'); -const KotlinWebpackPlugin = require('@jetbrains/kotlin-webpack-plugin'); -const HtmlWebpackInlineSourcePlugin = - require('html-webpack-inline-source-plugin'); - -const isDev = process.env.NODE_ENV === 'development'; - - -function getWaylandSafePath() { - const waylandPath = - path.resolve(__dirname, '../../../vendor/google_arc/libs/wayland_service'); - - if (fs.existsSync(waylandPath)) { - return waylandPath; - } - - return path.resolve(__dirname, 'src/stubs'); -} - -const webpackConfig = { - entry: { - polyfill: '@babel/polyfill', - main: './src/main.js', - }, - externals: { - _: 'lodash', - }, - resolve: { - extensions: ['.tsx', '.ts', '.js', '.vue'], - alias: { - 'vue$': isDev ? 'vue/dist/vue.runtime.js' : 'vue/dist/vue.runtime.min.js', - '@': path.resolve(__dirname, 'src'), - 'WaylandSafePath': getWaylandSafePath(), - }, - modules: [ - 'node_modules', - 'kotlin_build', - path.resolve(__dirname, '../../..'), - ], - }, - resolveLoader: { - modules: [ - 'node_modules', - path.resolve(__dirname, 'loaders'), - ], - }, - module: { - rules: [ - { - test: /\.vue$/, - loader: 'vue-loader', - include: path.resolve(__dirname, './src'), - exclude: /node_modules/, - }, - { - test: /\.tsx?$/, - use: 'ts-loader', - include: path.resolve(__dirname, './src'), - exclude: /node_modules/, - }, - { - test: /\.js$/, - loader: 'babel-loader', - include: path.resolve(__dirname, './src'), - exclude: /node_modules/, - }, - { - test: /\.css$/, - use: [ - 'vue-style-loader', - {loader: 'css-loader', options: {sourceMap: isDev}}, - ], - include: path.resolve(__dirname, './src'), - exclude: /node_modules/, - }, - { - test: /\.proto$/, - loader: 'proto-loader', - options: { - paths: [ - path.resolve(__dirname, '../../..'), - path.resolve(__dirname, '../../../external/protobuf/src'), - ], - }, - }, - { - test: /\.(png|jpg|gif|svg)$/, - loader: 'file-loader', - options: { - name: '[name].[ext]?[hash]', - }, - }, - { - test: /\.(ttf|otf|eot|woff|woff2)$/, - use: { - loader: 'file-loader', - options: { - name: 'fonts/[name].[ext]', - }, - }, - }, - ], - }, - plugins: [ - new VueLoaderPlugin(), - new HtmlWebpackPlugin({ - inlineSource: isDev ? false : '.(js|css)', - template: 'src/index_template.html', - }), - new HtmlWebpackInlineSourcePlugin(HtmlWebpackPlugin), - new KotlinWebpackPlugin({ - src: [ - path.join(__dirname, '../../../platform_testing/libraries/flicker/' + - 'src/com/android/server/wm/traces/common/'), - ], - output: 'kotlin_build', - moduleName: 'flicker', - librariesAutoLookup: true, - sourceMaps: true, - sourceMapEmbedSources: 'always', - verbose: true, - optimize: true, - }), - ], -}; - -module.exports = webpackConfig; diff --git a/tools/winscope/webpack.config.dev.js b/tools/winscope/webpack.config.dev.js deleted file mode 100644 index 31d79ca81..000000000 --- a/tools/winscope/webpack.config.dev.js +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -'use strict'; - -const webpack = require('webpack'); -const { merge } = require('webpack-merge'); -const path = require('path'); -const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin'); -const commonConfig = require('./webpack.config.common'); -const environment = require('./env/dev.env'); - -const webpackConfig = merge(commonConfig, { - mode: 'development', - devtool: 'cheap-module-eval-source-map', - output: { - path: path.resolve(__dirname, 'dist'), - publicPath: '/', - filename: 'js/[name].bundle.js', - chunkFilename: 'js/[id].chunk.js' - }, - optimization: { - runtimeChunk: 'single', - splitChunks: { - chunks: 'all' - } - }, - module: { - rules: [ - // Enable sourcemaps for Kotlin code, source-map-loader should be configured - { - test: /\.js$/, - include: path.resolve(__dirname, './kotlin_build'), - exclude: [ - /kotlin\.js$/, // Kotlin runtime doesn't have sourcemaps at the moment - ], - use: ['source-map-loader'], - enforce: 'pre' - }, - ] - }, - plugins: [ - new webpack.EnvironmentPlugin(environment), - new webpack.HotModuleReplacementPlugin(), - new FriendlyErrorsPlugin() - ], - devServer: { - compress: true, - historyApiFallback: true, - hot: true, - open: true, - overlay: true, - port: 8080, - stats: { - normal: true - } - } -}); - -module.exports = webpackConfig; \ No newline at end of file diff --git a/tools/winscope/webpack.config.js b/tools/winscope/webpack.config.js deleted file mode 100644 index ac6ab2334..000000000 --- a/tools/winscope/webpack.config.js +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -'use strict'; - -const environment = (process.env.NODE_ENV || 'development').trim(); - -if (environment === 'development') { - module.exports = require('./webpack.config.dev'); -} else { - module.exports = require('./webpack.config.prod'); -} diff --git a/tools/winscope/webpack.config.prod.js b/tools/winscope/webpack.config.prod.js deleted file mode 100644 index 33f7a8d82..000000000 --- a/tools/winscope/webpack.config.prod.js +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright 2020, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -'use strict'; - -const webpack = require('webpack'); -const {merge} = require('webpack-merge'); -const path = require('path'); -const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin'); -const MiniCSSExtractPlugin = require('mini-css-extract-plugin'); -const CompressionPlugin = require('compression-webpack-plugin'); -const commonConfig = require('./webpack.config.common'); -const isProd = process.env.NODE_ENV === 'production'; -const environment = - isProd ? require('./env/prod.env') : require('./env/staging.env'); - - -const webpackConfig = merge(commonConfig, { - mode: 'production', - output: { - path: path.resolve(__dirname, 'dist'), - publicPath: '/', - filename: 'js/[hash].js', - chunkFilename: 'js/[id].[hash].chunk.js', - }, - optimization: { - runtimeChunk: 'single', - minimizer: [ - new OptimizeCSSAssetsPlugin({ - cssProcessorPluginOptions: { - preset: ['default', {discardComments: {removeAll: true}}], - }, - }), - ], - splitChunks: { - chunks: 'all', - maxInitialRequests: Infinity, - minSize: 0, - cacheGroups: { - vendor: { - test: /[\\/]node_modules[\\/]/, - name(module) { - const packageName = module.context - .match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1]; - return `npm.${packageName.replace('@', '')}`; - }, - }, - styles: { - test: /\.css$/, - name: 'styles', - chunks: 'all', - enforce: true, - }, - }, - }, - }, - plugins: [ - new webpack.EnvironmentPlugin(environment), - new MiniCSSExtractPlugin({ - filename: 'css/[name].[hash].css', - chunkFilename: 'css/[id].[hash].css', - }), - new CompressionPlugin({ - filename: '[path].gz[query]', - algorithm: 'gzip', - test: new RegExp('\\.(js|css)$'), - threshold: 10240, - minRatio: 0.8, - }), - new webpack.HashedModuleIdsPlugin(), - ], -}); - -if (!isProd) { - webpackConfig.devtool = 'source-map'; - - if (process.env.npm_config_report) { - const BundleAnalyzerPlugin = - require('webpack-bundle-analyzer').BundleAnalyzerPlugin; - webpackConfig.plugins.push(new BundleAnalyzerPlugin()); - } -} - -module.exports = webpackConfig; diff --git a/tools/winscope/webpack.spec.config.js b/tools/winscope/webpack.spec.config.js deleted file mode 100644 index 080da8005..000000000 --- a/tools/winscope/webpack.spec.config.js +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright 2017, 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. - */ - -const fs = require('fs'); -const path = require('path'); -const glob = require('glob'); -const KotlinWebpackPlugin = require('@jetbrains/kotlin-webpack-plugin'); - -function getWaylandSafePath() { - waylandPath = path.resolve( - __dirname, '../../../vendor/google_arc/libs/wayland_service'); - if (fs.existsSync(waylandPath)) { - return waylandPath; - } - return path.resolve(__dirname, 'src/stubs'); -} - -module.exports = { - entry: { - js: glob.sync('./spec/**/*Spec.js'), - }, - output: { - path: path.resolve(__dirname, './dist'), - filename: 'bundleSpec.js', - }, - target: 'node', - node: { - __dirname: false, - }, - module: { - rules: [ - { - test: /\.js$/, - loader: 'babel-loader', - exclude: /node_modules/, - }, - { - test: /\.tsx?$/, - use: 'ts-loader', - include: path.resolve(__dirname, './src'), - exclude: /node_modules/, - }, - { - test: /\.proto$/, - loader: 'proto-loader', - options: { - paths: [ - path.resolve(__dirname, '../../..'), - path.resolve(__dirname, '../../../external/protobuf/src'), - ], - }, - }, - { - test: /\.(pb|winscope)/, - loader: 'file-loader', - options: { - paths: [ - path.resolve(__dirname, './spec'), - ], - }, - }, - ], - }, - resolve: { - extensions: ['.tsx', '.ts', '.js', '.vue'], - alias: { - '@': path.resolve(__dirname, 'src'), - 'WaylandSafePath': getWaylandSafePath(), - }, - modules: [ - 'node_modules', - 'kotlin_build', - path.resolve(__dirname, '../../..'), - ], - }, - resolveLoader: { - modules: [ - 'node_modules', - path.resolve(__dirname, 'loaders'), - ], - }, - plugins: [ - new KotlinWebpackPlugin({ - src: [ - path.join(__dirname, '../../../platform_testing/libraries/flicker/' + - 'src/com/android/server/wm/traces/common/'), - ], - output: 'kotlin_build', - moduleName: 'flicker', - librariesAutoLookup: true, - sourceMaps: true, - sourceMapEmbedSources: 'always', - verbose: true, - optimize: true, - }), - ], - devServer: { - historyApiFallback: true, - noInfo: true, - }, - performance: { - hints: false, - }, -}; diff --git a/tools/winscope/yarn.lock b/tools/winscope/yarn.lock deleted file mode 100644 index 57ac5a378..000000000 --- a/tools/winscope/yarn.lock +++ /dev/null @@ -1,8113 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" - integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== - dependencies: - "@babel/highlight" "^7.14.5" - -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.14.5", "@babel/compat-data@^7.14.7": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.7.tgz#7b047d7a3a89a67d2258dc61f604f098f1bc7e08" - integrity sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw== - -"@babel/core@^7.14.6": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.6.tgz#e0814ec1a950032ff16c13a2721de39a8416fcab" - integrity sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/generator" "^7.14.5" - "@babel/helper-compilation-targets" "^7.14.5" - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helpers" "^7.14.6" - "@babel/parser" "^7.14.6" - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.1.2" - semver "^6.3.0" - source-map "^0.5.0" - -"@babel/generator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.5.tgz#848d7b9f031caca9d0cd0af01b063f226f52d785" - integrity sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA== - dependencies: - "@babel/types" "^7.14.5" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/helper-annotate-as-pure@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz#7bf478ec3b71726d56a8ca5775b046fc29879e61" - integrity sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz#b939b43f8c37765443a19ae74ad8b15978e0a191" - integrity sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz#7a99c5d0967911e972fe2c3411f7d5b498498ecf" - integrity sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw== - dependencies: - "@babel/compat-data" "^7.14.5" - "@babel/helper-validator-option" "^7.14.5" - browserslist "^4.16.6" - semver "^6.3.0" - -"@babel/helper-create-class-features-plugin@^7.14.5": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz#f114469b6c06f8b5c59c6c4e74621f5085362542" - integrity sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-member-expression-to-functions" "^7.14.5" - "@babel/helper-optimise-call-expression" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" - "@babel/helper-split-export-declaration" "^7.14.5" - -"@babel/helper-create-regexp-features-plugin@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz#c7d5ac5e9cf621c26057722fb7a8a4c5889358c4" - integrity sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A== - dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - regexpu-core "^4.7.1" - -"@babel/helper-define-polyfill-provider@^0.2.2": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz#0525edec5094653a282688d34d846e4c75e9c0b6" - integrity sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew== - dependencies: - "@babel/helper-compilation-targets" "^7.13.0" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/traverse" "^7.13.0" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" - -"@babel/helper-explode-assignable-expression@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz#8aa72e708205c7bb643e45c73b4386cdf2a1f645" - integrity sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-function-name@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz#89e2c474972f15d8e233b52ee8c480e2cfcd50c4" - integrity sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ== - dependencies: - "@babel/helper-get-function-arity" "^7.14.5" - "@babel/template" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/helper-get-function-arity@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz#25fbfa579b0937eee1f3b805ece4ce398c431815" - integrity sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-hoist-variables@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz#e0dd27c33a78e577d7c8884916a3e7ef1f7c7f8d" - integrity sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-member-expression-to-functions@^7.14.5": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz#97e56244beb94211fe277bd818e3a329c66f7970" - integrity sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3" - integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-module-transforms@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz#7de42f10d789b423eb902ebd24031ca77cb1e10e" - integrity sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA== - dependencies: - "@babel/helper-module-imports" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" - "@babel/helper-simple-access" "^7.14.5" - "@babel/helper-split-export-declaration" "^7.14.5" - "@babel/helper-validator-identifier" "^7.14.5" - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/helper-optimise-call-expression@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz#f27395a8619e0665b3f0364cddb41c25d71b499c" - integrity sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" - integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== - -"@babel/helper-remap-async-to-generator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz#51439c913612958f54a987a4ffc9ee587a2045d6" - integrity sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A== - dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-wrap-function" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/helper-replace-supers@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz#0ecc0b03c41cd567b4024ea016134c28414abb94" - integrity sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.14.5" - "@babel/helper-optimise-call-expression" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/helper-simple-access@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz#66ea85cf53ba0b4e588ba77fc813f53abcaa41c4" - integrity sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-skip-transparent-expression-wrappers@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz#96f486ac050ca9f44b009fbe5b7d394cab3a0ee4" - integrity sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-split-export-declaration@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz#22b23a54ef51c2b7605d851930c1976dd0bc693a" - integrity sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-validator-identifier@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8" - integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg== - -"@babel/helper-validator-option@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" - integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== - -"@babel/helper-wrap-function@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz#5919d115bf0fe328b8a5d63bcb610f51601f2bff" - integrity sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ== - dependencies: - "@babel/helper-function-name" "^7.14.5" - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/helpers@^7.14.6": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.6.tgz#5b58306b95f1b47e2a0199434fa8658fa6c21635" - integrity sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA== - dependencies: - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/highlight@^7.10.4", "@babel/highlight@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" - integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== - dependencies: - "@babel/helper-validator-identifier" "^7.14.5" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.14.5", "@babel/parser@^7.14.6", "@babel/parser@^7.14.7": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.7.tgz#6099720c8839ca865a2637e6c85852ead0bdb595" - integrity sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA== - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz#4b467302e1548ed3b1be43beae2cc9cf45e0bb7e" - integrity sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" - "@babel/plugin-proposal-optional-chaining" "^7.14.5" - -"@babel/plugin-proposal-async-generator-functions@^7.14.7": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz#784a48c3d8ed073f65adcf30b57bcbf6c8119ace" - integrity sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-remap-async-to-generator" "^7.14.5" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-proposal-class-properties@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz#40d1ee140c5b1e31a350f4f5eed945096559b42e" - integrity sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-proposal-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz#158e9e10d449c3849ef3ecde94a03d9f1841b681" - integrity sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-proposal-dynamic-import@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz#0c6617df461c0c1f8fff3b47cd59772360101d2c" - integrity sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-proposal-export-namespace-from@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz#dbad244310ce6ccd083072167d8cea83a52faf76" - integrity sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-proposal-json-strings@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz#38de60db362e83a3d8c944ac858ddf9f0c2239eb" - integrity sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-proposal-logical-assignment-operators@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz#6e6229c2a99b02ab2915f82571e0cc646a40c738" - integrity sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz#ee38589ce00e2cc59b299ec3ea406fcd3a0fdaf6" - integrity sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-proposal-numeric-separator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz#83631bf33d9a51df184c2102a069ac0c58c05f18" - integrity sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-proposal-object-rest-spread@^7.14.7": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz#5920a2b3df7f7901df0205974c0641b13fd9d363" - integrity sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g== - dependencies: - "@babel/compat-data" "^7.14.7" - "@babel/helper-compilation-targets" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.14.5" - -"@babel/plugin-proposal-optional-catch-binding@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz#939dd6eddeff3a67fdf7b3f044b5347262598c3c" - integrity sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-proposal-optional-chaining@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz#fa83651e60a360e3f13797eef00b8d519695b603" - integrity sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-proposal-private-methods@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz#37446495996b2945f30f5be5b60d5e2aa4f5792d" - integrity sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-proposal-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz#9f65a4d0493a940b4c01f8aa9d3f1894a587f636" - integrity sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q== - dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-create-class-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-proposal-unicode-property-regex@^7.14.5", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz#0f95ee0e757a5d647f378daa0eca7e93faa8bbe8" - integrity sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-top-level-await@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-arrow-functions@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz#f7187d9588a768dd080bf4c9ffe117ea62f7862a" - integrity sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-async-to-generator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz#72c789084d8f2094acb945633943ef8443d39e67" - integrity sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA== - dependencies: - "@babel/helper-module-imports" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-remap-async-to-generator" "^7.14.5" - -"@babel/plugin-transform-block-scoped-functions@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz#e48641d999d4bc157a67ef336aeb54bc44fd3ad4" - integrity sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-block-scoping@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz#8cc63e61e50f42e078e6f09be775a75f23ef9939" - integrity sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-classes@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz#0e98e82097b38550b03b483f9b51a78de0acb2cf" - integrity sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-optimise-call-expression" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" - "@babel/helper-split-export-declaration" "^7.14.5" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz#1b9d78987420d11223d41195461cc43b974b204f" - integrity sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-destructuring@^7.14.7": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz#0ad58ed37e23e22084d109f185260835e5557576" - integrity sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-dotall-regex@^7.14.5", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz#2f6bf76e46bdf8043b4e7e16cf24532629ba0c7a" - integrity sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-duplicate-keys@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz#365a4844881bdf1501e3a9f0270e7f0f91177954" - integrity sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-exponentiation-operator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz#5154b8dd6a3dfe6d90923d61724bd3deeb90b493" - integrity sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-for-of@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz#dae384613de8f77c196a8869cbf602a44f7fc0eb" - integrity sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-function-name@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz#e81c65ecb900746d7f31802f6bed1f52d915d6f2" - integrity sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ== - dependencies: - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz#41d06c7ff5d4d09e3cf4587bd3ecf3930c730f78" - integrity sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-member-expression-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz#b39cd5212a2bf235a617d320ec2b48bcc091b8a7" - integrity sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-modules-amd@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz#4fd9ce7e3411cb8b83848480b7041d83004858f7" - integrity sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g== - dependencies: - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-commonjs@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz#7aaee0ea98283de94da98b28f8c35701429dad97" - integrity sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A== - dependencies: - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-simple-access" "^7.14.5" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-systemjs@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz#c75342ef8b30dcde4295d3401aae24e65638ed29" - integrity sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA== - dependencies: - "@babel/helper-hoist-variables" "^7.14.5" - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-validator-identifier" "^7.14.5" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-umd@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz#fb662dfee697cce274a7cda525190a79096aa6e0" - integrity sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA== - dependencies: - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.14.7": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.7.tgz#60c06892acf9df231e256c24464bfecb0908fd4e" - integrity sha512-DTNOTaS7TkW97xsDMrp7nycUVh6sn/eq22VaxWfEdzuEbRsiaOU0pqU7DlyUGHVsbQbSghvjKRpEl+nUCKGQSg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" - -"@babel/plugin-transform-new-target@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz#31bdae8b925dc84076ebfcd2a9940143aed7dbf8" - integrity sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-object-super@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz#d0b5faeac9e98597a161a9cf78c527ed934cdc45" - integrity sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" - -"@babel/plugin-transform-parameters@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz#49662e86a1f3ddccac6363a7dfb1ff0a158afeb3" - integrity sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-property-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz#0ddbaa1f83db3606f1cdf4846fa1dfb473458b34" - integrity sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-regenerator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz#9676fd5707ed28f522727c5b3c0aa8544440b04f" - integrity sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg== - dependencies: - regenerator-transform "^0.14.2" - -"@babel/plugin-transform-reserved-words@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz#c44589b661cfdbef8d4300dcc7469dffa92f8304" - integrity sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-shorthand-properties@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz#97f13855f1409338d8cadcbaca670ad79e091a58" - integrity sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-spread@^7.14.6": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz#6bd40e57fe7de94aa904851963b5616652f73144" - integrity sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" - -"@babel/plugin-transform-sticky-regex@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz#5b617542675e8b7761294381f3c28c633f40aeb9" - integrity sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-template-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz#a5f2bc233937d8453885dc736bdd8d9ffabf3d93" - integrity sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-typeof-symbol@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz#39af2739e989a2bd291bf6b53f16981423d457d4" - integrity sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-unicode-escapes@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz#9d4bd2a681e3c5d7acf4f57fa9e51175d91d0c6b" - integrity sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-unicode-regex@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz#4cd09b6c8425dd81255c7ceb3fb1836e7414382e" - integrity sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/polyfill@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.12.1.tgz#1f2d6371d1261bbd961f3c5d5909150e12d0bd96" - integrity sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g== - dependencies: - core-js "^2.6.5" - regenerator-runtime "^0.13.4" - -"@babel/preset-env@^7.14.7": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.7.tgz#5c70b22d4c2d893b03d8c886a5c17422502b932a" - integrity sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA== - dependencies: - "@babel/compat-data" "^7.14.7" - "@babel/helper-compilation-targets" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-validator-option" "^7.14.5" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.14.5" - "@babel/plugin-proposal-async-generator-functions" "^7.14.7" - "@babel/plugin-proposal-class-properties" "^7.14.5" - "@babel/plugin-proposal-class-static-block" "^7.14.5" - "@babel/plugin-proposal-dynamic-import" "^7.14.5" - "@babel/plugin-proposal-export-namespace-from" "^7.14.5" - "@babel/plugin-proposal-json-strings" "^7.14.5" - "@babel/plugin-proposal-logical-assignment-operators" "^7.14.5" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5" - "@babel/plugin-proposal-numeric-separator" "^7.14.5" - "@babel/plugin-proposal-object-rest-spread" "^7.14.7" - "@babel/plugin-proposal-optional-catch-binding" "^7.14.5" - "@babel/plugin-proposal-optional-chaining" "^7.14.5" - "@babel/plugin-proposal-private-methods" "^7.14.5" - "@babel/plugin-proposal-private-property-in-object" "^7.14.5" - "@babel/plugin-proposal-unicode-property-regex" "^7.14.5" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.14.5" - "@babel/plugin-transform-async-to-generator" "^7.14.5" - "@babel/plugin-transform-block-scoped-functions" "^7.14.5" - "@babel/plugin-transform-block-scoping" "^7.14.5" - "@babel/plugin-transform-classes" "^7.14.5" - "@babel/plugin-transform-computed-properties" "^7.14.5" - "@babel/plugin-transform-destructuring" "^7.14.7" - "@babel/plugin-transform-dotall-regex" "^7.14.5" - "@babel/plugin-transform-duplicate-keys" "^7.14.5" - "@babel/plugin-transform-exponentiation-operator" "^7.14.5" - "@babel/plugin-transform-for-of" "^7.14.5" - "@babel/plugin-transform-function-name" "^7.14.5" - "@babel/plugin-transform-literals" "^7.14.5" - "@babel/plugin-transform-member-expression-literals" "^7.14.5" - "@babel/plugin-transform-modules-amd" "^7.14.5" - "@babel/plugin-transform-modules-commonjs" "^7.14.5" - "@babel/plugin-transform-modules-systemjs" "^7.14.5" - "@babel/plugin-transform-modules-umd" "^7.14.5" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.7" - "@babel/plugin-transform-new-target" "^7.14.5" - "@babel/plugin-transform-object-super" "^7.14.5" - "@babel/plugin-transform-parameters" "^7.14.5" - "@babel/plugin-transform-property-literals" "^7.14.5" - "@babel/plugin-transform-regenerator" "^7.14.5" - "@babel/plugin-transform-reserved-words" "^7.14.5" - "@babel/plugin-transform-shorthand-properties" "^7.14.5" - "@babel/plugin-transform-spread" "^7.14.6" - "@babel/plugin-transform-sticky-regex" "^7.14.5" - "@babel/plugin-transform-template-literals" "^7.14.5" - "@babel/plugin-transform-typeof-symbol" "^7.14.5" - "@babel/plugin-transform-unicode-escapes" "^7.14.5" - "@babel/plugin-transform-unicode-regex" "^7.14.5" - "@babel/preset-modules" "^0.1.4" - "@babel/types" "^7.14.5" - babel-plugin-polyfill-corejs2 "^0.2.2" - babel-plugin-polyfill-corejs3 "^0.2.2" - babel-plugin-polyfill-regenerator "^0.2.2" - core-js-compat "^3.15.0" - semver "^6.3.0" - -"@babel/preset-modules@^0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" - integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/register@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.14.5.tgz#d0eac615065d9c2f1995842f85d6e56c345f3233" - integrity sha512-TjJpGz/aDjFGWsItRBQMOFTrmTI9tr79CHOK+KIvLeCkbxuOAk2M5QHjvruIMGoo9OuccMh5euplPzc5FjAKGg== - dependencies: - clone-deep "^4.0.1" - find-cache-dir "^2.0.0" - make-dir "^2.1.0" - pirates "^4.0.0" - source-map-support "^0.5.16" - -"@babel/runtime-corejs3@^7.10.2": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.14.7.tgz#0ef292bbce40ca00f874c9724ef175a12476465c" - integrity sha512-Wvzcw4mBYbTagyBVZpAJWI06auSIj033T/yNE0Zn1xcup83MieCddZA7ls3kme17L4NOGBrQ09Q+nKB41RLWBA== - dependencies: - core-js-pure "^3.15.0" - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.8.4": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.6.tgz#535203bc0892efc7dec60bdc27b2ecf6e409062d" - integrity sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/template@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4" - integrity sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/parser" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/traverse@^7.13.0", "@babel/traverse@^7.14.5": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.7.tgz#64007c9774cfdc3abd23b0780bc18a3ce3631753" - integrity sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/generator" "^7.14.5" - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-hoist-variables" "^7.14.5" - "@babel/helper-split-export-declaration" "^7.14.5" - "@babel/parser" "^7.14.7" - "@babel/types" "^7.14.5" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.14.5", "@babel/types@^7.4.4": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.5.tgz#3bb997ba829a2104cedb20689c4a5b8121d383ff" - integrity sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg== - dependencies: - "@babel/helper-validator-identifier" "^7.14.5" - to-fast-properties "^2.0.0" - -"@discoveryjs/json-ext@^0.5.0": - version "0.5.3" - resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz#90420f9f9c6d3987f176a19a7d8e764271a2f55d" - integrity sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g== - -"@eslint/eslintrc@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.2.tgz#f63d0ef06f5c0c57d76c4ab5f63d3835c51b0179" - integrity sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg== - dependencies: - ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^13.9.0" - ignore "^4.0.6" - import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - strip-json-comments "^3.1.1" - -"@humanwhocodes/config-array@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" - integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== - dependencies: - "@humanwhocodes/object-schema" "^1.2.0" - debug "^4.1.1" - minimatch "^3.0.4" - -"@humanwhocodes/object-schema@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf" - integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w== - -"@jest/types@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" - integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^15.0.0" - chalk "^4.0.0" - -"@jetbrains/kotlin-webpack-plugin@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@jetbrains/kotlin-webpack-plugin/-/kotlin-webpack-plugin-3.0.2.tgz#a8c0c5dfc35cfc4d72faf8c1921bddca46849e20" - integrity sha512-I3vYv6RXRHSQpmMeClVISdo0KDGeF+FJ0v+p84DCJ3eJzBWbHtYbCwMg5rEHlX05D793RnKa4f5dyyOQOixLPA== - dependencies: - "@jetbrains/kotlinc-js-api" "^2.0.1" - fs-extra "^8.1.0" - glob "^7.1.6" - globby "^10.0.1" - kotlin-compiler "^1.3.61" - webpack-log "^3.0.1" - -"@jetbrains/kotlinc-js-api@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@jetbrains/kotlinc-js-api/-/kotlinc-js-api-2.0.1.tgz#17c3211fd7eccf3e9a6bd3bf3ec45937d94a45c1" - integrity sha512-l4gvsbZjscFu0yNlrnQqKoYmOoVHHmZ6q5AyRpXQk+lPWKvbK73qnuFT9oihUGGqRrDqPZ6hQO73exYbz4O+zw== - dependencies: - cross-spawn "^7.0.1" - kotlin-compiler "^1.3.61" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@npmcli/move-file@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" - integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" - -"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" - integrity sha1-m4sMxmPWaafY9vXQiToU00jzD78= - -"@protobufjs/base64@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" - integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== - -"@protobufjs/codegen@^2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" - integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== - -"@protobufjs/eventemitter@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" - integrity sha1-NVy8mLr61ZePntCV85diHx0Ga3A= - -"@protobufjs/fetch@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" - integrity sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU= - dependencies: - "@protobufjs/aspromise" "^1.1.1" - "@protobufjs/inquire" "^1.1.0" - -"@protobufjs/float@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" - integrity sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E= - -"@protobufjs/inquire@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" - integrity sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik= - -"@protobufjs/path@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" - integrity sha1-bMKyDFya1q0NzP0hynZz2Nf79o0= - -"@protobufjs/pool@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" - integrity sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q= - -"@protobufjs/utf8@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" - integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA= - -"@testing-library/dom@^7.26.6": - version "7.31.2" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.31.2.tgz#df361db38f5212b88555068ab8119f5d841a8c4a" - integrity sha512-3UqjCpey6HiTZT92vODYLPxTBWlM8ZOOjr3LX5F37/VRipW2M1kX6I/Cm4VXzteZqfGfagg8yXywpcOgQBlNsQ== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/runtime" "^7.12.5" - "@types/aria-query" "^4.2.0" - aria-query "^4.2.2" - chalk "^4.1.0" - dom-accessibility-api "^0.5.6" - lz-string "^1.4.4" - pretty-format "^26.6.2" - -"@testing-library/vue@^5.8.1": - version "5.8.1" - resolved "https://registry.yarnpkg.com/@testing-library/vue/-/vue-5.8.1.tgz#0292c030f99fcd40e0828f0ebed531ba35fb681f" - integrity sha512-QX9L6dlJXi/6gfmf+yQBB9lmjGo5iI5xSwpRPJ2ma36D5aXwliHGkJg+w3aPaHDvkbEzxZSmXMt0jvP06BJZVA== - dependencies: - "@babel/runtime" "^7.12.5" - "@testing-library/dom" "^7.26.6" - "@vue/test-utils" "^1.1.0" - -"@types/aria-query@^4.2.0": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.2.tgz#ed4e0ad92306a704f9fb132a0cfcf77486dbe2bc" - integrity sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig== - -"@types/glob@^7.1.1": - version "7.1.4" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.4.tgz#ea59e21d2ee5c517914cb4bc8e4153b99e566672" - integrity sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA== - dependencies: - "@types/minimatch" "*" - "@types/node" "*" - -"@types/html-minifier-terser@^5.0.0": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz#693b316ad323ea97eed6b38ed1a3cc02b1672b57" - integrity sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w== - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" - integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== - -"@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" - integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7": - version "7.0.8" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.8.tgz#edf1bf1dbf4e04413ca8e5b17b3b7d7d54b59818" - integrity sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg== - -"@types/lodash@^4.14.171": - version "4.14.171" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.171.tgz#f01b3a5fe3499e34b622c362a46a609fdb23573b" - integrity sha512-7eQ2xYLLI/LsicL2nejW9Wyko3lcpN6O/z0ZLHrEQsg280zIdCv1t/0m6UtBjUHokCGBQ3gYTbHzDkZ1xOBwwg== - -"@types/long@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9" - integrity sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w== - -"@types/minimatch@*": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" - integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== - -"@types/node@*", "@types/node@>=13.7.0": - version "16.3.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.3.2.tgz#655432817f83b51ac869c2d51dd8305fb8342e16" - integrity sha512-jJs9ErFLP403I+hMLGnqDRWT0RYKSvArxuBVh2veudHV7ifEC1WAmjJADacZ7mRbA2nWgHtn8xyECMAot0SkAw== - -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - -"@types/q@^1.5.1": - version "1.5.5" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df" - integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ== - -"@types/source-list-map@*": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" - integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== - -"@types/tapable@^1", "@types/tapable@^1.0.5": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.8.tgz#b94a4391c85666c7b73299fd3ad79d4faa435310" - integrity sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ== - -"@types/uglify-js@*": - version "3.13.1" - resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.13.1.tgz#5e889e9e81e94245c75b6450600e1c5ea2878aea" - integrity sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ== - dependencies: - source-map "^0.6.1" - -"@types/webpack-sources@*": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-2.1.1.tgz#6af17e3a3ded71eec2b98008d7c12f498a0a4506" - integrity sha512-MjM1R6iuw8XaVbtkCBz0N349cyqBjJHCbQiOeppe3VBeFvxqs74RKHAVt9LkxTnUWc7YLZOEsUfPUnmK6SBPKQ== - dependencies: - "@types/node" "*" - "@types/source-list-map" "*" - source-map "^0.7.3" - -"@types/webpack@^4.41.8": - version "4.41.30" - resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.30.tgz#fd3db6d0d41e145a8eeeafcd3c4a7ccde9068ddc" - integrity sha512-GUHyY+pfuQ6haAfzu4S14F+R5iGRwN6b2FRNJY7U0NilmFAqbsOfK6j1HwuLBAqwRIT+pVdNDJGJ6e8rpp0KHA== - dependencies: - "@types/node" "*" - "@types/tapable" "^1" - "@types/uglify-js" "*" - "@types/webpack-sources" "*" - anymatch "^3.0.0" - source-map "^0.6.0" - -"@types/yargs-parser@*": - version "20.2.1" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129" - integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw== - -"@types/yargs@^15.0.0": - version "15.0.14" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.14.tgz#26d821ddb89e70492160b66d10a0eb6df8f6fb06" - integrity sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ== - dependencies: - "@types/yargs-parser" "*" - -"@vue/component-compiler-utils@^3.1.0": - version "3.2.2" - resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.2.2.tgz#2f7ed5feed82ff7f0284acc11d525ee7eff22460" - integrity sha512-rAYMLmgMuqJFWAOb3Awjqqv5X3Q3hVr4jH/kgrFJpiU0j3a90tnNBplqbj+snzrgZhC9W128z+dtgMifOiMfJg== - dependencies: - consolidate "^0.15.1" - hash-sum "^1.0.2" - lru-cache "^4.1.2" - merge-source-map "^1.1.0" - postcss "^7.0.36" - postcss-selector-parser "^6.0.2" - source-map "~0.6.1" - vue-template-es2015-compiler "^1.9.0" - optionalDependencies: - prettier "^1.18.2" - -"@vue/test-utils@^1.1.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-1.2.1.tgz#4671fc8844e09ccddb6801ceedd7b7309ae11d06" - integrity sha512-WBRdWNJwWTodJlV9mjunTrhgfsTPI5tMuxsCxqSmQs+vyB3ccZIYixnBrkxpKRsXyah/RtEv6+kUPZhnLd9smA== - dependencies: - dom-event-types "^1.0.0" - lodash "^4.17.15" - pretty "^2.0.0" - -"@webassemblyjs/ast@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" - integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== - dependencies: - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" - -"@webassemblyjs/floating-point-hex-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" - integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== - -"@webassemblyjs/helper-api-error@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" - integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== - -"@webassemblyjs/helper-buffer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" - integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== - -"@webassemblyjs/helper-code-frame@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" - integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== - dependencies: - "@webassemblyjs/wast-printer" "1.9.0" - -"@webassemblyjs/helper-fsm@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" - integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== - -"@webassemblyjs/helper-module-context@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" - integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== - dependencies: - "@webassemblyjs/ast" "1.9.0" - -"@webassemblyjs/helper-wasm-bytecode@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" - integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== - -"@webassemblyjs/helper-wasm-section@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" - integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - -"@webassemblyjs/ieee754@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" - integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" - integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" - integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== - -"@webassemblyjs/wasm-edit@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" - integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/helper-wasm-section" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-opt" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - "@webassemblyjs/wast-printer" "1.9.0" - -"@webassemblyjs/wasm-gen@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" - integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" - -"@webassemblyjs/wasm-opt@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" - integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - -"@webassemblyjs/wasm-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" - integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" - -"@webassemblyjs/wast-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" - integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/floating-point-hex-parser" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-code-frame" "1.9.0" - "@webassemblyjs/helper-fsm" "1.9.0" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/wast-printer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" - integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" - "@xtuc/long" "4.2.2" - -"@webpack-cli/configtest@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.0.4.tgz#f03ce6311c0883a83d04569e2c03c6238316d2aa" - integrity sha512-cs3XLy+UcxiP6bj0A6u7MLLuwdXJ1c3Dtc0RkKg+wiI1g/Ti1om8+/2hc2A2B60NbBNAbMgyBMHvyymWm/j4wQ== - -"@webpack-cli/info@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.3.0.tgz#9d78a31101a960997a4acd41ffd9b9300627fe2b" - integrity sha512-ASiVB3t9LOKHs5DyVUcxpraBXDOKubYu/ihHhU+t1UPpxsivg6Od2E2qU4gJCekfEddzRBzHhzA/Acyw/mlK/w== - dependencies: - envinfo "^7.7.3" - -"@webpack-cli/serve@^1.5.1": - version "1.5.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.5.1.tgz#b5fde2f0f79c1e120307c415a4c1d5eb15a6f278" - integrity sha512-4vSVUiOPJLmr45S8rMGy7WDvpWxfFxfP/Qx/cxZFCfvoypTYpPPL1X8VIZMe0WTA+Jr7blUxwUSEZNkjoMTgSw== - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - -abab@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" - integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" - integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== - dependencies: - mime-types "~2.1.24" - negotiator "0.6.2" - -acorn-jsx@^5.2.0, acorn-jsx@^5.3.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn@^6.4.1: - version "6.4.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" - integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== - -acorn@^7.1.1, acorn@^7.4.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv-errors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" - integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== - -ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.12.5: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - 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" - -ajv@^8.0.1: - version "8.6.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.1.tgz#ae65764bf1edde8cd861281cda5057852364a295" - integrity sha512-42VLtQUOLefAvKFAQIxIZDaThq6om/PrfP0CYk3/vn+y4BMNkKnbli8ON2QCiHov4KkzOSJ/xSoBJdayiiYvVQ== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -alphanum-sort@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" - integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= - -ansi-colors@^3.0.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" - integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== - -ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-escapes@^4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-html@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" - integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -anymatch@^3.0.0, anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -aproba@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -aria-query@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" - integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== - dependencies: - "@babel/runtime" "^7.10.2" - "@babel/runtime-corejs3" "^7.10.2" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= - -array-flatten@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= - dependencies: - array-uniq "^1.0.1" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -asn1.js@^5.2.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - safer-buffer "^2.1.0" - -assert@^1.1.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" - integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== - dependencies: - object-assign "^4.1.1" - util "0.10.3" - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== - -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - -async@^2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" - integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== - dependencies: - lodash "^4.17.14" - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -babel-loader@^8.2.2: - version "8.2.2" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81" - integrity sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g== - dependencies: - find-cache-dir "^3.3.1" - loader-utils "^1.4.0" - make-dir "^3.1.0" - schema-utils "^2.6.5" - -babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - -babel-plugin-polyfill-corejs2@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz#e9124785e6fd94f94b618a7954e5693053bf5327" - integrity sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ== - dependencies: - "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.2.2" - semver "^6.1.1" - -babel-plugin-polyfill-corejs3@^0.2.2: - version "0.2.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.3.tgz#72add68cf08a8bf139ba6e6dfc0b1d504098e57b" - integrity sha512-rCOFzEIJpJEAU14XCcV/erIf/wZQMmMT5l5vXOpL5uoznyOGfDIjPj6FVytMvtzaKSTSVKouOCTPJ5OMUZH30g== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.2" - core-js-compat "^3.14.0" - -babel-plugin-polyfill-regenerator@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz#b310c8d642acada348c1fa3b3e6ce0e851bee077" - integrity sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.2" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-arraybuffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz#1c37589a7c4b0746e34bd1feb951da2df01c1bdc" - integrity sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ== - -base64-js@^1.0.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -batch@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" - integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -bluebird@^3.1.1, bluebird@^3.5.5: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.0.0, bn.js@^5.1.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" - integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== - -body-parser@1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" - integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== - dependencies: - bytes "3.1.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.2" - http-errors "1.7.2" - iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.7.0" - raw-body "2.4.0" - type-is "~1.6.17" - -bonjour@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" - integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= - dependencies: - array-flatten "^2.1.0" - deep-equal "^1.0.1" - dns-equal "^1.0.0" - dns-txt "^2.0.2" - multicast-dns "^6.0.1" - multicast-dns-service-types "^1.1.0" - -boolbase@^1.0.0, boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^2.3.1, braces@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -braces@^3.0.1, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -brorand@^1.0.1, brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= - -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" - integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== - dependencies: - bn.js "^5.0.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" - integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== - dependencies: - bn.js "^5.1.1" - browserify-rsa "^4.0.1" - create-hash "^1.2.0" - create-hmac "^1.1.7" - elliptic "^6.5.3" - inherits "^2.0.4" - parse-asn1 "^5.1.5" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -browserify-zlib@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== - dependencies: - pako "~1.0.5" - -browserslist@^4.0.0, browserslist@^4.16.6: - version "4.16.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" - integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== - dependencies: - caniuse-lite "^1.0.30001219" - colorette "^1.2.2" - electron-to-chromium "^1.3.723" - escalade "^3.1.1" - node-releases "^1.1.71" - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -buffer-indexof@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" - integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= - -buffer@^4.3.0: - version "4.9.2" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" - integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= - -bytes@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== - -cacache@^12.0.2: - version "12.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" - integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== - dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" - glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" - unique-filename "^1.1.1" - y18n "^4.0.0" - -cacache@^15.0.5: - version "15.2.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.2.0.tgz#73af75f77c58e72d8c630a7a2858cb18ef523389" - integrity sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw== - dependencies: - "@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" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= - dependencies: - callsites "^2.0.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= - dependencies: - caller-callsite "^2.0.0" - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camel-case@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" - integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== - dependencies: - pascal-case "^3.1.2" - tslib "^2.0.3" - -camelcase@^5.0.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -caniuse-api@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" - integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== - dependencies: - browserslist "^4.0.0" - caniuse-lite "^1.0.0" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001219: - version "1.0.30001245" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001245.tgz#45b941bbd833cb0fa53861ff2bae746b3c6ca5d4" - integrity sha512-768fM9j1PKXpOCKws6eTo3RHmvTUsG9UrpT4WoREFeZgJBTi4/X9g565azS/rVUGtqb8nt7FjLeF5u4kukERnA== - -chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= - dependencies: - 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" - -chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" - integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chokidar@^2.1.8: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" - -chokidar@^3.4.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" - integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -clean-css@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" - integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== - dependencies: - source-map "~0.6.0" - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-truncate@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" - integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== - dependencies: - slice-ansi "^3.0.0" - string-width "^4.2.0" - -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - -coa@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" - integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== - dependencies: - "@types/q" "^1.5.1" - chalk "^2.4.1" - q "^1.1.2" - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0, color-convert@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@^1.0.0, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-string@^1.5.4: - version "1.5.5" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.5.tgz#65474a8f0e7439625f3d27a6a19d89fc45223014" - integrity sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^3.0.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" - integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== - dependencies: - color-convert "^1.9.1" - color-string "^1.5.4" - -colorette@^1.2.1, colorette@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" - integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== - -commander@^2.19.0, commander@^2.20.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - -commander@^7.0.0, commander@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= - -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - -compressible@~2.0.16: - version "2.0.18" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - -compression-webpack-plugin@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-6.1.1.tgz#ae8e4b2ffdb7396bb776e66918d751a20d8ccf0e" - integrity sha512-BEHft9M6lwOqVIQFMS/YJGmeCYXVOakC5KzQk05TFpMBlODByh1qNsZCWjUBxCQhUP9x0WfGidxTbGkjbWO/TQ== - dependencies: - cacache "^15.0.5" - find-cache-dir "^3.3.1" - schema-utils "^3.0.0" - serialize-javascript "^5.0.1" - webpack-sources "^1.4.3" - -compression@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -concat-stream@^1.5.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -condense-newlines@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/condense-newlines/-/condense-newlines-0.2.1.tgz#3de985553139475d32502c83b02f60684d24c55f" - integrity sha1-PemFVTE5R10yUCyDsC9gaE0kxV8= - dependencies: - extend-shallow "^2.0.1" - is-whitespace "^0.3.0" - kind-of "^3.0.2" - -config-chain@^1.1.12: - version "1.1.13" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" - integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -connect-history-api-fallback@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" - integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== - -console-browserify@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" - integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== - -consolidate@^0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.15.1.tgz#21ab043235c71a07d45d9aad98593b0dba56bab7" - integrity sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw== - dependencies: - bluebird "^3.1.1" - -constants-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= - -content-disposition@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" - integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== - dependencies: - safe-buffer "5.1.2" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - -convert-source-map@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= - -cookie@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" - integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== - -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - -core-js-compat@^3.14.0, core-js-compat@^3.15.0: - version "3.15.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.15.2.tgz#47272fbb479880de14b4e6081f71f3492f5bd3cb" - integrity sha512-Wp+BJVvwopjI+A1EFqm2dwUmWYXrvucmtIB2LgXn/Rb+gWPKYxtmb4GKHGKG/KGF1eK9jfjzT38DITbTOCX/SQ== - dependencies: - browserslist "^4.16.6" - semver "7.0.0" - -core-js-pure@^3.15.0: - version "3.15.2" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.15.2.tgz#c8e0874822705f3385d3197af9348f7c9ae2e3ce" - integrity sha512-D42L7RYh1J2grW8ttxoY1+17Y4wXZeKe7uyplAI3FkNQyI5OgBIAjUfFiTPfL1rs0qLpxaabITNbjKl1Sp82tA== - -core-js@^2.6.5: - version "2.6.12" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" - integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== - -core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -cosmiconfig@^5.0.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.0" - -cosmiconfig@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" - integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - -create-ecdh@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" - integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== - dependencies: - bn.js "^4.1.0" - elliptic "^6.5.3" - -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -cross-env@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" - integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== - dependencies: - cross-spawn "^7.0.1" - -cross-spawn@^6.0.0: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - -css-color-names@0.0.4, css-color-names@^0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= - -css-declaration-sorter@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" - integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== - dependencies: - postcss "^7.0.1" - timsort "^0.3.0" - -css-line-break@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-line-break/-/css-line-break-2.1.0.tgz#bfef660dfa6f5397ea54116bb3cb4873edbc4fa0" - integrity sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w== - dependencies: - utrie "^1.0.2" - -css-loader@^5.2.7: - version "5.2.7" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.7.tgz#9b9f111edf6fb2be5dc62525644cbc9c232064ae" - integrity sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg== - dependencies: - icss-utils "^5.1.0" - loader-utils "^2.0.0" - postcss "^8.2.15" - postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.0" - postcss-modules-scope "^3.0.0" - postcss-modules-values "^4.0.0" - postcss-value-parser "^4.1.0" - schema-utils "^3.0.0" - semver "^7.3.5" - -css-select-base-adapter@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" - integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== - -css-select@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" - integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== - dependencies: - boolbase "^1.0.0" - css-what "^3.2.1" - domutils "^1.7.0" - nth-check "^1.0.2" - -css-select@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.1.3.tgz#a70440f70317f2669118ad74ff105e65849c7067" - integrity sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA== - dependencies: - boolbase "^1.0.0" - css-what "^5.0.0" - domhandler "^4.2.0" - domutils "^2.6.0" - nth-check "^2.0.0" - -css-tree@1.0.0-alpha.37: - version "1.0.0-alpha.37" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" - integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== - dependencies: - mdn-data "2.0.4" - source-map "^0.6.1" - -css-tree@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" - integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== - dependencies: - mdn-data "2.0.14" - source-map "^0.6.1" - -css-what@^3.2.1: - version "3.4.2" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" - integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== - -css-what@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.0.1.tgz#3efa820131f4669a8ac2408f9c32e7c7de9f4cad" - integrity sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -cssnano-preset-default@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz#920622b1fc1e95a34e8838203f1397a504f2d3ff" - integrity sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ== - dependencies: - css-declaration-sorter "^4.0.1" - cssnano-util-raw-cache "^4.0.1" - postcss "^7.0.0" - postcss-calc "^7.0.1" - postcss-colormin "^4.0.3" - postcss-convert-values "^4.0.1" - postcss-discard-comments "^4.0.2" - postcss-discard-duplicates "^4.0.2" - postcss-discard-empty "^4.0.1" - postcss-discard-overridden "^4.0.1" - postcss-merge-longhand "^4.0.11" - postcss-merge-rules "^4.0.3" - postcss-minify-font-values "^4.0.2" - postcss-minify-gradients "^4.0.2" - postcss-minify-params "^4.0.2" - postcss-minify-selectors "^4.0.2" - postcss-normalize-charset "^4.0.1" - postcss-normalize-display-values "^4.0.2" - postcss-normalize-positions "^4.0.2" - postcss-normalize-repeat-style "^4.0.2" - postcss-normalize-string "^4.0.2" - postcss-normalize-timing-functions "^4.0.2" - postcss-normalize-unicode "^4.0.1" - postcss-normalize-url "^4.0.1" - postcss-normalize-whitespace "^4.0.2" - postcss-ordered-values "^4.1.2" - postcss-reduce-initial "^4.0.3" - postcss-reduce-transforms "^4.0.2" - postcss-svgo "^4.0.3" - postcss-unique-selectors "^4.0.1" - -cssnano-util-get-arguments@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" - integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= - -cssnano-util-get-match@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" - integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= - -cssnano-util-raw-cache@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" - integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== - dependencies: - postcss "^7.0.0" - -cssnano-util-same-parent@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" - integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== - -cssnano@^4.1.10: - version "4.1.11" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.11.tgz#c7b5f5b81da269cb1fd982cb960c1200910c9a99" - integrity sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g== - dependencies: - cosmiconfig "^5.0.0" - cssnano-preset-default "^4.0.8" - is-resolvable "^1.0.0" - postcss "^7.0.0" - -csso@^4.0.2: - version "4.2.0" - resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" - integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== - dependencies: - css-tree "^1.1.2" - -cyclist@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" - integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= - -de-indent@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" - integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0= - -debug@2.6.9, debug@^2.2.0, debug@^2.3.3: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^3.1.1, debug@^3.2.6: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" - integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== - dependencies: - ms "2.1.2" - -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= - -deep-equal@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" - integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== - dependencies: - is-arguments "^1.0.4" - is-date-object "^1.0.1" - is-regex "^1.0.4" - object-is "^1.0.1" - object-keys "^1.1.1" - regexp.prototype.flags "^1.2.0" - -deep-is@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - -default-gateway@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" - integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== - dependencies: - execa "^1.0.0" - ip-regex "^2.1.0" - -define-properties@^1.1.2, define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -del@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" - integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== - dependencies: - "@types/glob" "^7.1.1" - globby "^6.1.0" - is-path-cwd "^2.0.0" - is-path-in-cwd "^2.0.0" - p-map "^2.0.0" - pify "^4.0.1" - rimraf "^2.6.3" - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -des.js@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" - integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= - -detect-node@^2.0.4: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" - integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== - -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= - -dns-packet@^1.3.1: - version "1.3.4" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.4.tgz#e3455065824a2507ba886c55a89963bb107dec6f" - integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA== - dependencies: - ip "^1.1.0" - safe-buffer "^5.0.1" - -dns-txt@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" - integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= - dependencies: - buffer-indexof "^1.0.0" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dom-accessibility-api@^0.5.6: - version "0.5.6" - resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.6.tgz#3f5d43b52c7a3bd68b5fb63fa47b4e4c1fdf65a9" - integrity sha512-DplGLZd8L1lN64jlT27N9TVSESFR5STaEJvX+thCby7fuCHonfPpAlodYc3vuUYbDuDec5w8AMP7oCM5TWFsqw== - -dom-converter@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" - integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== - dependencies: - utila "~0.4" - -dom-event-types@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dom-event-types/-/dom-event-types-1.0.0.tgz#5830a0a29e1bf837fe50a70cd80a597232813cae" - integrity sha512-2G2Vwi2zXTHBGqXHsJ4+ak/iP0N8Ar+G8a7LiD2oup5o4sQWytwqqrZu/O6hIMV0KMID2PL69OhpshLO0n7UJQ== - -dom-serializer@0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - -dom-serializer@^1.0.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" - integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.0" - entities "^2.0.0" - -domain-browser@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== - -domelementtype@1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - -domelementtype@^2.0.1, domelementtype@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" - integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== - -domhandler@^4.0.0, domhandler@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.0.tgz#f9768a5f034be60a89a27c2e4d0f74eba0d8b059" - integrity sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA== - dependencies: - domelementtype "^2.2.0" - -domutils@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^2.5.2, domutils@^2.6.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.7.0.tgz#8ebaf0c41ebafcf55b0b72ec31c56323712c5442" - integrity sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.2.0" - -dot-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" - integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -dot-prop@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -editorconfig@^0.15.3: - version "0.15.3" - resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.15.3.tgz#bef84c4e75fb8dcb0ce5cee8efd51c15999befc5" - integrity sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g== - dependencies: - commander "^2.19.0" - lru-cache "^4.1.5" - semver "^5.6.0" - sigmund "^1.0.1" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - -electron-to-chromium@^1.3.723: - version "1.3.776" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.776.tgz#33f6e2423b61f1bdaa8d2a103aae78a09764a75f" - integrity sha512-V0w7eFSBoFPpdw4xexjVPZ770UDZIevSwkkj4W97XbE3IsCsTRFpa7/yXGZ88EOQAUEA09JMMsWK0xsw0kRAYw== - -elliptic@^6.5.3: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= - -end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enhanced-resolve@^4.0.0, enhanced-resolve@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" - integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.5.0" - tapable "^1.0.0" - -enquirer@^2.3.5, enquirer@^2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -envinfo@^7.7.3: - version "7.8.1" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" - integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== - -errno@^0.1.3, errno@~0.1.7: - version "0.1.8" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" - integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== - dependencies: - prr "~1.0.1" - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -error-stack-parser@^2.0.0: - version "2.0.6" - resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8" - integrity sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ== - dependencies: - stackframe "^1.1.1" - -es-abstract@^1.17.2, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2: - version "1.18.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0" - integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - get-intrinsic "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.2" - is-callable "^1.2.3" - is-negative-zero "^2.0.1" - is-regex "^1.1.3" - is-string "^1.0.6" - object-inspect "^1.10.3" - object-keys "^1.1.1" - object.assign "^4.1.2" - string.prototype.trimend "^1.0.4" - string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.1" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-config-google@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/eslint-config-google/-/eslint-config-google-0.14.0.tgz#4f5f8759ba6e11b424294a219dbfa18c508bcc1a" - integrity sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw== - -eslint-plugin-vue@^7.13.0: - version "7.13.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-7.13.0.tgz#6f3d232bf1fcd0428353b0d581ebaca1c5dbc17a" - integrity sha512-u0+jL8h2MshRuMTCLslktxRsPTjlENNcNufhgHu01N982DmHVdeFniyMPoVLLRjACQOwdz3FdlsgYGBMBG+AKg== - dependencies: - eslint-utils "^2.1.0" - natural-compare "^1.4.0" - semver "^7.3.2" - vue-eslint-parser "^7.8.0" - -eslint-scope@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" - integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint@^7.30.0: - version "7.30.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.30.0.tgz#6d34ab51aaa56112fd97166226c9a97f505474f8" - integrity sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg== - dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.2" - "@humanwhocodes/config-array" "^0.5.0" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.0.1" - doctrine "^3.0.0" - enquirer "^2.3.5" - escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" - globals "^13.6.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.0.4" - natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^6.0.9" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" - integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== - dependencies: - acorn "^7.1.1" - acorn-jsx "^5.2.0" - eslint-visitor-keys "^1.1.0" - -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== - dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.1.0, esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= - -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -events@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -eventsource@^1.0.7: - version "1.1.0" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.0.tgz#00e8ca7c92109e94b0ddf32dac677d841028cfaf" - integrity sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg== - dependencies: - original "^1.0.0" - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -express@^4.17.1: - version "4.17.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" - integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== - dependencies: - accepts "~1.3.7" - array-flatten "1.1.1" - body-parser "1.19.0" - content-disposition "0.5.3" - content-type "~1.0.4" - cookie "0.4.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~1.1.2" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "~1.1.2" - fresh "0.5.2" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.5" - qs "6.7.0" - range-parser "~1.2.1" - safe-buffer "5.1.2" - send "0.17.1" - serve-static "1.14.1" - setprototypeof "1.1.1" - statuses "~1.5.0" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^3.0.3: - version "3.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" - integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fastest-levenshtein@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" - integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== - -fastq@^1.6.0: - version "1.11.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.1.tgz#5d8175aae17db61947f8b162cfc7f63264d22807" - integrity sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw== - dependencies: - reusify "^1.0.4" - -faye-websocket@^0.11.3: - version "0.11.4" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" - integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== - dependencies: - websocket-driver ">=0.5.1" - -figgy-pudding@^3.5.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" - integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -file-loader@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" - integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.3" - statuses "~1.5.0" - unpipe "~1.0.0" - -find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" - integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== - dependencies: - commondir "^1.0.1" - make-dir "^2.0.0" - pkg-dir "^3.0.0" - -find-cache-dir@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" - integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - -flatted@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.1.tgz#bbef080d95fca6709362c73044a1634f7c6e7d05" - integrity sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg== - -flush-write-stream@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" - -follow-redirects@^1.0.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43" - integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg== - -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -format-thousands@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/format-thousands/-/format-thousands-1.1.1.tgz#7975bee30338d9006390da5831db0b41c323fbfa" - integrity sha1-eXW+4wM42QBjkNpYMdsLQcMj+/o= - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= - -friendly-errors-webpack-plugin@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.0.tgz#efc86cbb816224565861a1be7a9d84d0aafea136" - integrity sha512-K27M3VK30wVoOarP651zDmb93R9zF28usW4ocaK3mfQeIEI5BPht/EzZs5E8QLLwbLRJQMwscAjDxYPb1FuNiw== - dependencies: - chalk "^1.1.3" - error-stack-parser "^2.0.0" - string-width "^2.0.0" - -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= - dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@^1.2.7: - version "1.2.13" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" - integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" - -fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - -get-own-enumerable-property-symbols@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" - integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== - -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -github-buttons@^2.8.0: - version "2.18.1" - resolved "https://registry.yarnpkg.com/github-buttons/-/github-buttons-2.18.1.tgz#93737ca38dd6a108799ebbbce7bafc46eb80c535" - integrity sha512-s3I3D3d0lNIflVBRFHsCoIkNfSZqBO6ivzWjNdoefBf+7TPMLgXiFoezr8M6SABiYCjZ8UXB3sIxa+ZxTKmWHw== - -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob@^7.0.3, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: - version "7.1.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== - 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" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.6.0, globals@^13.9.0: - version "13.10.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.10.0.tgz#60ba56c3ac2ca845cfbf4faeca727ad9dd204676" - integrity sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g== - dependencies: - type-fest "^0.20.2" - -globby@^10.0.1: - version "10.0.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" - integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== - dependencies: - "@types/glob" "^7.1.1" - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.0.3" - glob "^7.1.3" - ignore "^5.1.1" - merge2 "^1.2.3" - slash "^3.0.0" - -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== - -handle-thing@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" - integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= - dependencies: - ansi-regex "^2.0.0" - -has-bigints@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" - integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-symbols@^1.0.1, has-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" - integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.0, has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash-sum@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04" - integrity sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ= - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -he@^1.1.0, he@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -hex-color-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" - integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -hpack.js@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" - integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= - dependencies: - inherits "^2.0.1" - obuf "^1.0.0" - readable-stream "^2.0.1" - wbuf "^1.1.0" - -hsl-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" - integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= - -hsla-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" - integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= - -html-entities@^1.3.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" - integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== - -html-minifier-terser@^5.0.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" - integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg== - dependencies: - camel-case "^4.1.1" - clean-css "^4.2.3" - commander "^4.1.1" - he "^1.2.0" - param-case "^3.0.3" - relateurl "^0.2.7" - terser "^4.6.3" - -html-webpack-inline-source-plugin@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/html-webpack-inline-source-plugin/-/html-webpack-inline-source-plugin-1.0.0-beta.2.tgz#71a9234c170ef18df6e51f4594a09b540ff03111" - integrity sha512-ydsEKdp0tnbmnqRAH2WSSMXerCNYhjes5b79uvP2BU3p6cyk+6ucNMsw5b5xD1QxphgvBBA3QqVmdcpu8QLlRQ== - dependencies: - escape-string-regexp "^1.0.5" - slash "^1.0.0" - source-map-url "^0.4.0" - -html-webpack-plugin@4.5.2: - version "4.5.2" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz#76fc83fa1a0f12dd5f7da0404a54e2699666bc12" - integrity sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A== - dependencies: - "@types/html-minifier-terser" "^5.0.0" - "@types/tapable" "^1.0.5" - "@types/webpack" "^4.41.8" - html-minifier-terser "^5.0.1" - loader-utils "^1.2.3" - lodash "^4.17.20" - pretty-error "^2.1.1" - tapable "^1.1.3" - util.promisify "1.0.0" - -html2canvas@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/html2canvas/-/html2canvas-1.4.1.tgz#7cef1888311b5011d507794a066041b14669a543" - integrity sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA== - dependencies: - css-line-break "^2.1.0" - text-segmentation "^1.0.3" - -htmlparser2@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" - integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.0.0" - domutils "^2.5.2" - entities "^2.0.0" - -http-deceiver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" - integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= - -http-errors@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" - integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-parser-js@>=0.5.1: - version "0.5.3" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" - integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== - -http-proxy-middleware@0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" - integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== - dependencies: - http-proxy "^1.17.0" - is-glob "^4.0.0" - lodash "^4.17.11" - micromatch "^3.1.10" - -http-proxy@^1.17.0: - version "1.18.1" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" - integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== - dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -husky@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.1.tgz#579f4180b5da4520263e8713cc832942b48e1f1c" - integrity sha512-gceRaITVZ+cJH9sNHqx5tFwbzlLCVxtVZcusME8JYQ8Edy5mpGDOqD8QBCdMhpyo9a+JXddnujQ4rpY2Ff9SJA== - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -iconv-lite@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -icss-utils@^5.0.0, icss-utils@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" - integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== - -ieee754@^1.1.4: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.1.1: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== - -immediate@~3.0.5: - version "3.0.6" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" - integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= - -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" - -import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-local@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" - integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== - dependencies: - pkg-dir "^3.0.0" - resolve-cwd "^2.0.0" - -import-local@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" - integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= - -infer-owner@^1.0.3, infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -ini@^1.3.4: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -internal-ip@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" - integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== - dependencies: - default-gateway "^4.2.0" - ipaddr.js "^1.9.0" - -interpret@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" - integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== - -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= - -ip@^1.1.0, ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= - -ipaddr.js@1.9.1, ipaddr.js@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-absolute-url@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" - integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= - -is-absolute-url@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" - integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - -is-arguments@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" - integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== - dependencies: - call-bind "^1.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - -is-bigint@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a" - integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA== - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= - dependencies: - binary-extensions "^1.0.0" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-boolean-object@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.1.tgz#3c0878f035cb821228d350d2e1e36719716a3de8" - integrity sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng== - dependencies: - call-bind "^1.0.2" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-callable@^1.1.4, is-callable@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" - integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== - -is-color-stop@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" - integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= - dependencies: - css-color-names "^0.0.4" - hex-color-regex "^1.1.0" - hsl-regex "^1.0.0" - hsla-regex "^1.0.0" - rgb-regex "^1.0.1" - rgba-regex "^1.0.0" - -is-core-module@^2.2.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.5.0.tgz#f754843617c70bfd29b7bd87327400cda5c18491" - integrity sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg== - dependencies: - has "^1.0.3" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.4.tgz#550cfcc03afada05eea3dd30981c7b09551f73e5" - integrity sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A== - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-negative-zero@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" - integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== - -is-number-object@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb" - integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw== - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-path-cwd@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -is-path-in-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" - integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== - dependencies: - is-path-inside "^2.1.0" - -is-path-inside@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" - integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== - dependencies: - path-is-inside "^1.0.2" - -is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-regex@^1.0.4, is-regex@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f" - integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ== - dependencies: - call-bind "^1.0.2" - has-symbols "^1.0.2" - -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= - -is-resolvable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - -is-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" - integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== - -is-string@^1.0.5, is-string@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f" - integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -is-whitespace@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/is-whitespace/-/is-whitespace-0.3.0.tgz#1639ecb1be036aec69a54cbb401cfbed7114ab7f" - integrity sha1-Fjnssb4DauxppUy7QBz77XEUq38= - -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= - -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -jasmine-core@~3.8.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.8.0.tgz#815399aae5aa5d9beeb1262805f981b99ffc9bf0" - integrity sha512-zl0nZWDrmbCiKns0NcjkFGYkVTGCPUgoHypTaj+G2AzaWus7QGoXARSlYsSle2VRpSdfJmM+hzmFKzQNhF2kHg== - -jasmine@^3.8.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-3.8.0.tgz#4497bc797eede7ca9de18179aedd4cf50245d8dc" - integrity sha512-kdQ3SfcNpMbbMdgJPLyFe9IksixdnrgYaCJapP9sS0aLgdWdIZADNXEr+11Zafxm1VDfRSC5ZL4fzXT0bexzXw== - dependencies: - glob "^7.1.6" - jasmine-core "~3.8.0" - -js-beautify@^1.6.12: - version "1.14.0" - resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.14.0.tgz#2ce790c555d53ce1e3d7363227acf5dc69024c2d" - integrity sha512-yuck9KirNSCAwyNJbqW+BxJqJ0NLJ4PwBUzQQACl5O3qHMBXVkXb/rD0ilh/Lat/tn88zSZ+CAHOlk0DsY7GuQ== - dependencies: - config-chain "^1.1.12" - editorconfig "^0.15.3" - glob "^7.1.3" - nopt "^5.0.0" - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - -json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -json3@^3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" - integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== - -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== - dependencies: - minimist "^1.2.0" - -json5@^2.1.2: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== - dependencies: - minimist "^1.2.5" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" - -jszip@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.6.0.tgz#839b72812e3f97819cc13ac4134ffced95dd6af9" - integrity sha512-jgnQoG9LKnWO3mnVNBnfhkh0QknICd1FGSrXcgrl67zioyJ4wgx25o9ZqwNtrROSflGBCGYnJfjrIyRIby1OoQ== - dependencies: - lie "~3.3.0" - pako "~1.0.2" - readable-stream "~2.3.6" - set-immediate-shim "~1.0.1" - -killable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" - integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -kotlin-compiler@^1.3.61: - version "1.5.21" - resolved "https://registry.yarnpkg.com/kotlin-compiler/-/kotlin-compiler-1.5.21.tgz#6bbba315c1cc31b0f00e13c52c9cd5ec4e8defb7" - integrity sha512-bmO0HI1ojCpbzWsPvhniDUWBDK6OZcSKG2C2uYrDsw9/91gL4W857ckRvHHFZfUEhPdr63Fgrc+8teVfEnWIzQ== - -kotlin@^1.5.21: - version "1.5.21" - resolved "https://registry.yarnpkg.com/kotlin/-/kotlin-1.5.21.tgz#07f11f4bae47815e9dce55880895f1452293d95f" - integrity sha512-U6PXruPv/YP7Ar+8ScfurSKftcv5QoB2o517puswGotrRvxrT9WnrtNiRdd5pmG9GasBJau9/PemGx83FpTJ0g== - -last-call-webpack-plugin@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555" - integrity sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w== - dependencies: - lodash "^4.17.5" - webpack-sources "^1.1.0" - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -lie@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" - integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== - dependencies: - immediate "~3.0.5" - -lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= - -lint-staged@^11.0.1: - version "11.0.1" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-11.0.1.tgz#1b8ae8ed5a52ed87252db95fe008c2618c85f55a" - integrity sha512-RkTA1ulE6jAGFskxpGAwxfVRXjHp7D9gFg/+KMARUWMPiVFP0t28Em2u0gL8sA0w3/ck3TC57F2v2RNeQ5XPnw== - dependencies: - chalk "^4.1.1" - cli-truncate "^2.1.0" - commander "^7.2.0" - cosmiconfig "^7.0.0" - debug "^4.3.1" - dedent "^0.7.0" - enquirer "^2.3.6" - execa "^5.0.0" - listr2 "^3.8.2" - log-symbols "^4.1.0" - micromatch "^4.0.4" - normalize-path "^3.0.0" - please-upgrade-node "^3.2.0" - string-argv "0.3.1" - stringify-object "^3.3.0" - -listr2@^3.8.2: - version "3.10.0" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.10.0.tgz#58105a53ed7fa1430d1b738c6055ef7bb006160f" - integrity sha512-eP40ZHihu70sSmqFNbNy2NL1YwImmlMmPh9WO5sLmPDleurMHt3n+SwEWNu2kzKScexZnkyFtc1VI0z/TGlmpw== - dependencies: - cli-truncate "^2.1.0" - colorette "^1.2.2" - log-update "^4.0.0" - p-map "^4.0.0" - rxjs "^6.6.7" - through "^2.3.8" - wrap-ansi "^7.0.0" - -loader-runner@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" - integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== - -loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" - integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^1.0.1" - -loader-utils@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" - integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= - -lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.5: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -log-update@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" - integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== - dependencies: - ansi-escapes "^4.3.0" - cli-cursor "^3.1.0" - slice-ansi "^4.0.0" - wrap-ansi "^6.2.0" - -loglevel@^1.6.8: - version "1.7.1" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" - integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== - -loglevelnext@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/loglevelnext/-/loglevelnext-3.0.1.tgz#e3e4659c4061c09264f6812c33586dc55a009a04" - integrity sha512-JpjaJhIN1reaSb26SIxDGtE0uc67gPl19OMVHrr+Ggt6b/Vy60jmCtKgQBrygAH0bhRA2nkxgDvM+8QvR8r0YA== - -long@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" - integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== - -loose-envify@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== - dependencies: - tslib "^2.0.3" - -lru-cache@^4.1.2, lru-cache@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -lz-string@^1.4.4: - version "1.4.4" - resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" - integrity sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY= - -make-dir@^2.0.0, make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -make-dir@^3.0.2, make-dir@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -mdn-data@2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" - integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== - -mdn-data@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" - integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= - -memory-fs@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -memory-fs@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" - integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= - -merge-source-map@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" - integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== - dependencies: - source-map "^0.6.1" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.2.3, merge2@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= - -micromatch@^3.1.10, micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -micromatch@^4.0.0, micromatch@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" - integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== - dependencies: - braces "^3.0.1" - picomatch "^2.2.3" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -mime-db@1.48.0, "mime-db@>= 1.43.0 < 2": - version "1.48.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d" - integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ== - -mime-types@~2.1.17, mime-types@~2.1.24: - version "2.1.31" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b" - integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg== - dependencies: - mime-db "1.48.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mime@^2.4.4: - version "2.5.2" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" - integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mini-css-extract-plugin@^1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz#83172b4fd812f8fc4a09d6f6d16f924f53990ca8" - integrity sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - webpack-sources "^1.1.0" - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.0, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-pipeline@^1.2.2: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass@^3.0.0, minipass@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" - integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== - dependencies: - yallist "^4.0.0" - -minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mississippi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" - integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^3.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - -mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -multicast-dns-service-types@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" - integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= - -multicast-dns@^6.0.1: - version "6.2.3" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" - integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== - dependencies: - dns-packet "^1.3.1" - thunky "^1.0.2" - -nan@^2.12.1: - version "2.14.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" - integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== - -nanoid@^2.0.3: - version "2.1.11" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.11.tgz#ec24b8a758d591561531b4176a01e3ab4f0f0280" - integrity sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA== - -nanoid@^3.1.23: - version "3.1.23" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" - integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -negotiator@0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" - integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== - -neo-async@^2.5.0, neo-async@^2.6.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - -node-fetch@^2.3.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" - integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== - -node-forge@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" - integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== - -node-libs-browser@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" - integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== - dependencies: - assert "^1.1.1" - browserify-zlib "^0.2.0" - buffer "^4.3.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "^3.11.0" - domain-browser "^1.1.1" - events "^3.0.0" - https-browserify "^1.0.0" - os-browserify "^0.3.0" - path-browserify "0.0.1" - process "^0.11.10" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.3.3" - stream-browserify "^2.0.1" - stream-http "^2.7.2" - string_decoder "^1.0.0" - timers-browserify "^2.0.4" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.11.0" - vm-browserify "^1.0.1" - -node-modules-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" - integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= - -node-releases@^1.1.71: - version "1.1.73" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20" - integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg== - -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== - dependencies: - abbrev "1" - -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-url@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" - integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -nth-check@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - -nth-check@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.0.tgz#1bb4f6dac70072fc313e8c9cd1417b5074c0a125" - integrity sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q== - dependencies: - boolbase "^1.0.0" - -object-assign@^4.0.1, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-inspect@^1.10.3: - version "1.11.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" - integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== - -object-is@^1.0.1: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -object-keys@^1.0.12, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - -object.assign@^4.1.0, object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" - -object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz#1bd63aeacf0d5d2d2f31b5e393b03a7c601a23f7" - integrity sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - -object.values@^1.1.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.4.tgz#0d273762833e816b693a637d30073e7051535b30" - integrity sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.2" - -obuf@^1.0.0, obuf@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" - integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^5.1.0, onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -opencollective-postinstall@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259" - integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q== - -opn@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" - integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== - dependencies: - is-wsl "^1.1.0" - -optimize-css-assets-webpack-plugin@^5.0.3: - version "5.0.8" - resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.8.tgz#cbccdcf5a6ef61d4f8cc78cf083a67446e5f402a" - integrity sha512-mgFS1JdOtEGzD8l+EuISqL57cKO+We9GcoiQEmdCWRqqck+FGNmYJtx9qfAPzEz+lRrlThWMuGDaRkI/yWNx/Q== - dependencies: - cssnano "^4.1.10" - last-call-webpack-plugin "^3.0.0" - -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.3" - -original@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" - integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== - dependencies: - url-parse "^1.4.3" - -os-browserify@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - -p-limit@^2.0.0, p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-map@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-retry@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" - integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== - dependencies: - retry "^0.12.0" - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -pako@~1.0.2, pako@~1.0.5: - version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - -parallel-transform@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" - integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== - dependencies: - cyclist "^1.0.1" - inherits "^2.0.3" - readable-stream "^2.1.5" - -param-case@^3.0.3: - version "3.0.4" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" - integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-asn1@^5.0.0, parse-asn1@^5.1.5: - version "5.1.6" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" - integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== - dependencies: - asn1.js "^5.2.0" - browserify-aes "^1.0.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - 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" - -parseurl@~1.3.2, parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascal-case@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" - integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -path-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" - integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pbkdf2@^3.0.3: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" - integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" - integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - -pirates@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" - integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== - dependencies: - node-modules-regexp "^1.0.0" - -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.0.0" - -pkg-dir@^4.1.0, pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -please-upgrade-node@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" - integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== - dependencies: - semver-compare "^1.0.0" - -portfinder@^1.0.26: - version "1.0.28" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" - integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== - dependencies: - async "^2.6.2" - debug "^3.1.1" - mkdirp "^0.5.5" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - -postcss-calc@^7.0.1: - version "7.0.5" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.5.tgz#f8a6e99f12e619c2ebc23cf6c486fdc15860933e" - integrity sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg== - dependencies: - postcss "^7.0.27" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.0.2" - -postcss-colormin@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" - integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== - dependencies: - browserslist "^4.0.0" - color "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-convert-values@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" - integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-discard-comments@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" - integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== - dependencies: - postcss "^7.0.0" - -postcss-discard-duplicates@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" - integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== - dependencies: - postcss "^7.0.0" - -postcss-discard-empty@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" - integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== - dependencies: - postcss "^7.0.0" - -postcss-discard-overridden@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" - integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== - dependencies: - postcss "^7.0.0" - -postcss-merge-longhand@^4.0.11: - version "4.0.11" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" - integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== - dependencies: - css-color-names "0.0.4" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - stylehacks "^4.0.0" - -postcss-merge-rules@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" - integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== - dependencies: - browserslist "^4.0.0" - caniuse-api "^3.0.0" - cssnano-util-same-parent "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - vendors "^1.0.0" - -postcss-minify-font-values@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" - integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-minify-gradients@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" - integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== - dependencies: - cssnano-util-get-arguments "^4.0.0" - is-color-stop "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-minify-params@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" - integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== - dependencies: - alphanum-sort "^1.0.0" - browserslist "^4.0.0" - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - uniqs "^2.0.0" - -postcss-minify-selectors@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" - integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== - dependencies: - alphanum-sort "^1.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - -postcss-modules-extract-imports@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" - integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== - -postcss-modules-local-by-default@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" - integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== - dependencies: - icss-utils "^5.0.0" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.1.0" - -postcss-modules-scope@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" - integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== - dependencies: - postcss-selector-parser "^6.0.4" - -postcss-modules-values@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" - integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== - dependencies: - icss-utils "^5.0.0" - -postcss-normalize-charset@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" - integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== - dependencies: - postcss "^7.0.0" - -postcss-normalize-display-values@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" - integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== - dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-positions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" - integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== - dependencies: - cssnano-util-get-arguments "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-repeat-style@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" - integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== - dependencies: - cssnano-util-get-arguments "^4.0.0" - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-string@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" - integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== - dependencies: - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-timing-functions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" - integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== - dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-unicode@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" - integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== - dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-url@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" - integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== - dependencies: - is-absolute-url "^2.0.0" - normalize-url "^3.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-whitespace@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" - integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-ordered-values@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" - integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== - dependencies: - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-reduce-initial@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" - integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== - dependencies: - browserslist "^4.0.0" - caniuse-api "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - -postcss-reduce-transforms@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" - integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== - dependencies: - cssnano-util-get-match "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-selector-parser@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" - integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== - dependencies: - dot-prop "^5.2.0" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: - version "6.0.6" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz#2c5bba8174ac2f6981ab631a42ab0ee54af332ea" - integrity sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-svgo@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.3.tgz#343a2cdbac9505d416243d496f724f38894c941e" - integrity sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - svgo "^1.0.0" - -postcss-unique-selectors@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" - integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== - dependencies: - alphanum-sort "^1.0.0" - postcss "^7.0.0" - uniqs "^2.0.0" - -postcss-value-parser@^3.0.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" - integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== - -postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" - integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== - -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.27, postcss@^7.0.36: - version "7.0.36" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.36.tgz#056f8cffa939662a8f5905950c07d5285644dfcb" - integrity sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw== - dependencies: - chalk "^2.4.2" - source-map "^0.6.1" - supports-color "^6.1.0" - -postcss@^8.2.15: - version "8.3.5" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.5.tgz#982216b113412bc20a86289e91eb994952a5b709" - integrity sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA== - dependencies: - colorette "^1.2.2" - nanoid "^3.1.23" - source-map-js "^0.6.2" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prettier@^1.18.2: - version "1.19.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" - integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== - -pretty-error@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" - integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw== - dependencies: - lodash "^4.17.20" - renderkid "^2.0.4" - -pretty-format@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" - integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== - dependencies: - "@jest/types" "^26.6.2" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^17.0.1" - -pretty@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pretty/-/pretty-2.0.0.tgz#adbc7960b7bbfe289a557dc5f737619a220d06a5" - integrity sha1-rbx5YLe7/iiaVX3F9zdhmiINBqU= - dependencies: - condense-newlines "^0.2.1" - extend-shallow "^2.0.1" - js-beautify "^1.6.12" - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= - -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= - -protobufjs@^6.11.3: - version "6.11.3" - resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.3.tgz#637a527205a35caa4f3e2a9a4a13ddffe0e7af74" - integrity sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg== - 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" - -proxy-addr@~2.0.5: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^1.3.3: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= - -punycode@^1.2.4: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -q@^1.1.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= - -qs@6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" - integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== - -querystring-es3@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= - -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -range-parser@^1.2.1, range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" - integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== - dependencies: - bytes "3.1.0" - http-errors "1.7.2" - iconv-lite "0.4.24" - unpipe "1.0.0" - -react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== - -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - 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" - -readable-stream@^3.0.6, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -rechoir@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.0.tgz#32650fd52c21ab252aa5d65b19310441c7e03aca" - integrity sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q== - dependencies: - resolve "^1.9.0" - -regenerate-unicode-properties@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" - integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== - dependencies: - regenerate "^1.4.0" - -regenerate@^1.4.0: - version "1.4.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - -regenerator-runtime@^0.13.4: - version "0.13.7" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" - integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== - -regenerator-transform@^0.14.2: - version "0.14.5" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" - integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== - dependencies: - "@babel/runtime" "^7.8.4" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexp.prototype.flags@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" - integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -regexpp@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -regexpu-core@^4.7.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" - integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.2.0" - regjsgen "^0.5.1" - regjsparser "^0.6.4" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.2.0" - -regjsgen@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" - integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== - -regjsparser@^0.6.4: - version "0.6.9" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.9.tgz#b489eef7c9a2ce43727627011429cf833a7183e6" - integrity sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ== - dependencies: - jsesc "~0.5.0" - -relateurl@^0.2.7: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -renderkid@^2.0.4: - version "2.0.7" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.7.tgz#464f276a6bdcee606f4a15993f9b29fc74ca8609" - integrity sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ== - dependencies: - css-select "^4.1.3" - dom-converter "^0.2.0" - htmlparser2 "^6.1.0" - lodash "^4.17.21" - strip-ansi "^3.0.1" - -repeat-element@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" - integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= - -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= - dependencies: - resolve-from "^3.0.0" - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@^1.14.2, resolve@^1.9.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== - dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rgb-regex@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" - integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= - -rgba-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" - integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= - -rimraf@^2.5.4, rimraf@^2.6.3: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= - dependencies: - aproba "^1.1.1" - -rxjs@^6.6.7: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sax@~1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - -schema-utils@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" - integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== - dependencies: - ajv "^6.1.0" - ajv-errors "^1.0.0" - ajv-keywords "^3.1.0" - -schema-utils@^2.6.5: - version "2.7.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" - integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== - dependencies: - "@types/json-schema" "^7.0.5" - ajv "^6.12.4" - ajv-keywords "^3.5.2" - -schema-utils@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.0.tgz#95986eb604f66daadeed56e379bfe7a7f963cdb9" - integrity sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w== - dependencies: - "@types/json-schema" "^7.0.7" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -select-hose@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" - integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= - -selfsigned@^1.10.8: - version "1.10.11" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.11.tgz#24929cd906fe0f44b6d01fb23999a739537acbe9" - integrity sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA== - dependencies: - node-forge "^0.10.0" - -semver-compare@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" - integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= - -semver@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - -semver@^5.5.0, semver@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - -send@0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" - integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== - dependencies: - debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.7.2" - mime "1.6.0" - ms "2.1.1" - on-finished "~2.3.0" - range-parser "~1.2.1" - statuses "~1.5.0" - -serialize-javascript@^1.7.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb" - integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A== - -serialize-javascript@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== - dependencies: - randombytes "^2.1.0" - -serialize-javascript@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" - integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== - dependencies: - randombytes "^2.1.0" - -serve-index@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= - dependencies: - accepts "~1.3.4" - batch "0.6.1" - debug "2.6.9" - escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" - -serve-static@1.14.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" - integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.17.1" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -set-immediate-shim@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" - integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setimmediate@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== - -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== - -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -sigmund@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" - integrity sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA= - -signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= - dependencies: - is-arrayish "^0.3.1" - -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" - integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -sockjs-client@^1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.5.1.tgz#256908f6d5adfb94dabbdbd02c66362cca0f9ea6" - integrity sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ== - dependencies: - debug "^3.2.6" - eventsource "^1.0.7" - faye-websocket "^0.11.3" - inherits "^2.0.4" - json3 "^3.3.3" - url-parse "^1.5.1" - -sockjs@^0.3.21: - version "0.3.21" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.21.tgz#b34ffb98e796930b60a0cfa11904d6a339a7d417" - integrity sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw== - dependencies: - faye-websocket "^0.11.3" - uuid "^3.4.0" - websocket-driver "^0.7.4" - -source-list-map@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== - -source-map-js@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e" - integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== - -source-map-loader@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-1.1.3.tgz#7dbc2fe7ea09d3e43c51fd9fc478b7f016c1f820" - integrity sha512-6YHeF+XzDOrT/ycFJNI53cgEsp/tHTMl37hi7uVyqFAlTXW109JazaQCkbc+jjoL2637qkH1amLi+JzrIpt5lA== - dependencies: - abab "^2.0.5" - iconv-lite "^0.6.2" - loader-utils "^2.0.0" - schema-utils "^3.0.0" - source-map "^0.6.1" - whatwg-mimetype "^2.3.0" - -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.5.16, source-map-support@~0.5.12: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" - integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== - -source-map@^0.5.0, source-map@^0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@^0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - -spdy-transport@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" - integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== - dependencies: - debug "^4.1.0" - detect-node "^2.0.4" - hpack.js "^2.1.6" - obuf "^1.1.2" - readable-stream "^3.0.6" - wbuf "^1.7.3" - -spdy@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" - integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== - dependencies: - debug "^4.1.0" - handle-thing "^2.0.0" - http-deceiver "^1.2.7" - select-hose "^2.0.0" - spdy-transport "^3.0.0" - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -ssri@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" - integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== - dependencies: - figgy-pudding "^3.5.1" - -ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== - dependencies: - minipass "^3.1.1" - -stable@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" - integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== - -stackframe@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303" - integrity sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA== - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -stream-browserify@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" - integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - -stream-each@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" - integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-http@^2.7.2: - version "2.8.3" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" - integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.6" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - -string-argv@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" - integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== - -string-width@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.1.0, string-width@^4.2.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -string.prototype.trimend@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" - integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -string.prototype.trimstart@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" - integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -string_decoder@^1.0.0, string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -stringify-object@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" - integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== - dependencies: - get-own-enumerable-property-symbols "^3.0.0" - is-obj "^1.0.1" - is-regexp "^1.0.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -style-loader@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-2.0.0.tgz#9669602fd4690740eaaec137799a03addbbc393c" - integrity sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -stylehacks@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" - integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== - dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -svgo@^1.0.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" - integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== - dependencies: - chalk "^2.4.1" - coa "^2.0.2" - css-select "^2.0.0" - css-select-base-adapter "^0.1.1" - css-tree "1.0.0-alpha.37" - csso "^4.0.2" - js-yaml "^3.13.1" - mkdirp "~0.5.1" - object.values "^1.1.0" - sax "~1.2.4" - stable "^0.1.8" - unquote "~1.1.1" - util.promisify "~1.0.0" - -table@^6.0.9: - version "6.7.1" - resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" - integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== - dependencies: - ajv "^8.0.1" - lodash.clonedeep "^4.5.0" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.0" - strip-ansi "^6.0.0" - -tapable@^1.0.0, tapable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" - integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== - -tar@^6.0.2: - version "6.1.0" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.0.tgz#d1724e9bcc04b977b18d5c573b333a2207229a83" - integrity sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA== - 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" - -terser-webpack-plugin@^1.4.3: - version "1.4.5" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" - integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== - dependencies: - cacache "^12.0.2" - find-cache-dir "^2.1.0" - is-wsl "^1.1.0" - schema-utils "^1.0.0" - serialize-javascript "^4.0.0" - source-map "^0.6.1" - terser "^4.1.2" - webpack-sources "^1.4.0" - worker-farm "^1.7.0" - -terser@^4.1.2, terser@^4.6.3: - version "4.8.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" - integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== - dependencies: - commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" - -text-segmentation@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/text-segmentation/-/text-segmentation-1.0.3.tgz#52a388159efffe746b24a63ba311b6ac9f2d7943" - integrity sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw== - dependencies: - utrie "^1.0.2" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -through2@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through@^2.3.8: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -thunky@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" - integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== - -timers-browserify@^2.0.4: - version "2.0.12" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" - integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== - dependencies: - setimmediate "^1.0.4" - -timsort@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" - integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= - -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== - -ts-loader@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-8.3.0.tgz#83360496d6f8004fab35825279132c93412edf33" - integrity sha512-MgGly4I6cStsJy27ViE32UoqxPTN9Xly4anxxVyaIWR+9BGxboV4EyJBGfR3RePV7Ksjj3rHmPZJeIt+7o4Vag== - dependencies: - chalk "^4.1.0" - enhanced-resolve "^4.0.0" - loader-utils "^2.0.0" - micromatch "^4.0.0" - semver "^7.3.4" - -tslib@^1.9.0, tslib@^1.9.3: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e" - integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== - -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-is@~1.6.17, type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - -typescript@^4.3.5: - version "4.3.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4" - integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA== - -uglify-js@^3.6.0: - version "3.13.10" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.10.tgz#a6bd0d28d38f592c3adb6b180ea6e07e1e540a8d" - integrity sha512-57H3ACYFXeo1IaZ1w02sfA71wI60MGco/IQFjOqK+WtKoprh7Go2/yvd2HPtoJILO2Or84ncLccI4xoHMTSbGg== - -uglifyjs-webpack-plugin@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-2.2.0.tgz#e75bc80e7f1937f725954c9b4c5a1e967ea9d0d7" - integrity sha512-mHSkufBmBuJ+KHQhv5H0MXijtsoA1lynJt1lXOaotja8/I0pR4L9oGaPIZw+bQBOFittXZg9OC1sXSGO9D9ZYg== - dependencies: - cacache "^12.0.2" - find-cache-dir "^2.1.0" - is-wsl "^1.1.0" - schema-utils "^1.0.0" - serialize-javascript "^1.7.0" - source-map "^0.6.1" - uglify-js "^3.6.0" - webpack-sources "^1.4.0" - worker-farm "^1.7.0" - -unbox-primitive@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" - integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== - dependencies: - function-bind "^1.1.1" - has-bigints "^1.0.1" - has-symbols "^1.0.2" - which-boxed-primitive "^1.0.2" - -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== - -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== - dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" - -unicode-match-property-value-ecmascript@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" - integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== - -unicode-property-aliases-ecmascript@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" - integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== - -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= - -uniqs@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" - integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= - -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= - -unquote@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" - integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -upath@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -url-parse@^1.4.3, url-parse@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.1.tgz#d5fa9890af8a5e1f274a2c98376510f6425f6e3b" - integrity sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - -url@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -util.promisify@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" - integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== - dependencies: - define-properties "^1.1.2" - object.getownpropertydescriptors "^2.0.3" - -util.promisify@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" - integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.2" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.0" - -util@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= - dependencies: - inherits "2.0.1" - -util@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" - integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== - dependencies: - inherits "2.0.3" - -utila@~0.4: - version "0.4.0" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= - -utrie@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/utrie/-/utrie-1.0.2.tgz#d42fe44de9bc0119c25de7f564a6ed1b2c87a645" - integrity sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw== - dependencies: - base64-arraybuffer "^1.0.2" - -uuid@^3.3.2, uuid@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -v8-compile-cache@^2.0.3, v8-compile-cache@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= - -vendors@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" - integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== - -vm-browserify@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" - integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== - -vue-clickaway@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/vue-clickaway/-/vue-clickaway-2.2.2.tgz#cecf6839575e8b2afc5d3edb3efb616d293dbb44" - integrity sha512-25SpjXKetL06GLYoLoC8pqAV6Cur9cQ//2g35GRFBV4FgoljbZZjTINR8g2NuVXXDMLSUXaKx5dutgO4PaDE7A== - dependencies: - loose-envify "^1.2.0" - -vue-context@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/vue-context/-/vue-context-6.0.0.tgz#97a1a423fc86fb7a54f46d1567670aba281a5970" - integrity sha512-x8gO6xgj0MtTCWcYbDjO/7VJ/gT+nV+unqICvsN0hwqqBzft31eYyExYqrSvfDCRI7ixxObu5tbl7BQAKge7eg== - dependencies: - vue-clickaway "^2.2.2" - -vue-eslint-parser@^7.8.0: - version "7.8.0" - resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-7.8.0.tgz#43850bf856c9a69d62c0e12769609c338423684b" - integrity sha512-ehmmrLZNYLUoKayvVW8l8HyPQIfuYZHiJoQLRP3dapDlTU7bGs4tqIKVGdAEpMuXS/b4R/PImCt7Tkj4UhX1SQ== - dependencies: - debug "^4.1.1" - eslint-scope "^5.1.1" - eslint-visitor-keys "^1.1.0" - espree "^6.2.1" - esquery "^1.4.0" - lodash "^4.17.21" - semver "^6.3.0" - -vue-github-button@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/vue-github-button/-/vue-github-button-1.3.0.tgz#a4da317a3b93d05824768b3916a0d22fa91603be" - integrity sha512-Cc92t+GBLwBPhwtHSvKXjbx07U3+6xdi+eR+s9c734tHbndipCLenJjLVkgErNhKZ0EvDjRyuu8Hu69gg9/TxQ== - dependencies: - github-buttons "^2.8.0" - -vue-github-buttons@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/vue-github-buttons/-/vue-github-buttons-3.1.0.tgz#eaea2ba0b7e0df5a7fd1c61ba37dabf7553dd79a" - integrity sha512-x0b9bdhP5xZOD5kQ9+nnCzvKqVyHb4moqN2l06mjYB/k2WRdW5jiAWlneUgoPFwPvcqM40vrTDXVvBrS0MMlEQ== - dependencies: - format-thousands "^1.1.1" - node-fetch "^2.3.0" - tslib "^1.9.3" - -vue-gtag@^1.16.1: - version "1.16.1" - resolved "https://registry.yarnpkg.com/vue-gtag/-/vue-gtag-1.16.1.tgz#edb2f20ab4f6c4d4d372dfecf8c1fcc8ab890181" - integrity sha512-5vs0pSGxdqrfXqN1Qwt0ZFXG0iTYjRMu/saddc7QIC5yp+DKgjWQRpGYVa7Pq+KbThxwzzMfo0sGi7ISa6NowA== - -vue-hot-reload-api@^2.3.0: - version "2.3.4" - resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2" - integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog== - -vue-loader@^15.9.2: - version "15.9.7" - resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.9.7.tgz#15b05775c3e0c38407679393c2ce6df673b01044" - integrity sha512-qzlsbLV1HKEMf19IqCJqdNvFJRCI58WNbS6XbPqK13MrLz65es75w392MSQ5TsARAfIjUw+ATm3vlCXUJSOH9Q== - dependencies: - "@vue/component-compiler-utils" "^3.1.0" - hash-sum "^1.0.2" - loader-utils "^1.1.0" - vue-hot-reload-api "^2.3.0" - vue-style-loader "^4.1.0" - -vue-material@^1.0.0-beta-14: - version "1.0.0-beta-15" - resolved "https://registry.yarnpkg.com/vue-material/-/vue-material-1.0.0-beta-15.tgz#949025464f8fe2ff3b9be2ba1365d9eab770ad8a" - integrity sha512-nNC1mF1BQNKsyEjRXPYxweYlIOcVE9rK4LeeyppOU6h4vgQnZuNmlGIRnl6fUe8dj+x7c5x5/qydLhJRabPMng== - dependencies: - opencollective-postinstall "^2.0.2" - vue-github-button "^1.2.0" - vue-github-buttons "^3.1.0" - vue-toc "0.0.1" - -vue-style-loader@^4.1.0, vue-style-loader@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz#6d55863a51fa757ab24e89d9371465072aa7bc35" - integrity sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg== - dependencies: - hash-sum "^1.0.2" - loader-utils "^1.0.2" - -vue-template-compiler@^2.6.14: - version "2.6.14" - resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.14.tgz#a2f0e7d985670d42c9c9ee0d044fed7690f4f763" - integrity sha512-ODQS1SyMbjKoO1JBJZojSw6FE4qnh9rIpUZn2EUT86FKizx9uH5z6uXiIrm4/Nb/gwxTi/o17ZDEGWAXHvtC7g== - dependencies: - de-indent "^1.0.2" - he "^1.1.0" - -vue-template-es2015-compiler@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825" - integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw== - -vue-toc@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/vue-toc/-/vue-toc-0.0.1.tgz#6a4dfa9c144445679705cd7b991a1a73ac080cc0" - integrity sha512-RZfVgLzk/kpEmk05ptvU/+x3TVo4Ai4BBARvV4iCurR9bJsAqnnrqwjEBKnEG+s6NT0yQ6EY0JMGViyOUGysDw== - dependencies: - vue "^2.6.10" - -vue@^2.6.10, vue@^2.6.14: - version "2.6.14" - resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.14.tgz#e51aa5250250d569a3fbad3a8a5a687d6036e235" - integrity sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ== - -vuex@^3.6.2: - version "3.6.2" - resolved "https://registry.yarnpkg.com/vuex/-/vuex-3.6.2.tgz#236bc086a870c3ae79946f107f16de59d5895e71" - integrity sha512-ETW44IqCgBpVomy520DT5jf8n0zoCac+sxWnn+hMe/CzaSejb/eVw2YToiXYX+Ex/AuHHia28vWTq4goAexFbw== - -watchpack-chokidar2@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" - integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== - dependencies: - chokidar "^2.1.8" - -watchpack@^1.7.4: - version "1.7.5" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" - integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== - dependencies: - graceful-fs "^4.1.2" - neo-async "^2.5.0" - optionalDependencies: - chokidar "^3.4.1" - watchpack-chokidar2 "^2.0.1" - -wbuf@^1.1.0, wbuf@^1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" - integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== - dependencies: - minimalistic-assert "^1.0.0" - -webpack-cli@^4.7.2: - version "4.7.2" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.7.2.tgz#a718db600de6d3906a4357e059ae584a89f4c1a5" - integrity sha512-mEoLmnmOIZQNiRl0ebnjzQ74Hk0iKS5SiEEnpq3dRezoyR3yPaeQZCMCe+db4524pj1Pd5ghZXjT41KLzIhSLw== - dependencies: - "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^1.0.4" - "@webpack-cli/info" "^1.3.0" - "@webpack-cli/serve" "^1.5.1" - colorette "^1.2.1" - commander "^7.0.0" - execa "^5.0.0" - fastest-levenshtein "^1.0.12" - import-local "^3.0.2" - interpret "^2.2.0" - rechoir "^0.7.0" - v8-compile-cache "^2.2.0" - webpack-merge "^5.7.3" - -webpack-dev-middleware@^3.7.2: - version "3.7.3" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" - integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== - dependencies: - memory-fs "^0.4.1" - mime "^2.4.4" - mkdirp "^0.5.1" - range-parser "^1.2.1" - webpack-log "^2.0.0" - -webpack-dev-server@^3.11.2: - version "3.11.2" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz#695ebced76a4929f0d5de7fd73fafe185fe33708" - integrity sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ== - dependencies: - ansi-html "0.0.7" - bonjour "^3.5.0" - chokidar "^2.1.8" - compression "^1.7.4" - connect-history-api-fallback "^1.6.0" - debug "^4.1.1" - del "^4.1.1" - express "^4.17.1" - html-entities "^1.3.1" - http-proxy-middleware "0.19.1" - import-local "^2.0.0" - internal-ip "^4.3.0" - ip "^1.1.5" - is-absolute-url "^3.0.3" - killable "^1.0.1" - loglevel "^1.6.8" - opn "^5.5.0" - p-retry "^3.0.1" - portfinder "^1.0.26" - schema-utils "^1.0.0" - selfsigned "^1.10.8" - semver "^6.3.0" - serve-index "^1.9.1" - sockjs "^0.3.21" - sockjs-client "^1.5.0" - spdy "^4.0.2" - strip-ansi "^3.0.1" - supports-color "^6.1.0" - url "^0.11.0" - webpack-dev-middleware "^3.7.2" - webpack-log "^2.0.0" - ws "^6.2.1" - yargs "^13.3.2" - -webpack-log@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" - integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== - dependencies: - ansi-colors "^3.0.0" - uuid "^3.3.2" - -webpack-log@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-3.0.2.tgz#edf64fe4cabffeb04a03ca44d89f9908a4a9d238" - integrity sha512-ijm2zgqTY2omtlxRNrtDqxAQOrfAGMxWg9fQB/kuFSeZjx/OkYnfYLqsjf/JkrWOHINMzqxaJDXaog6Mx9KaHg== - dependencies: - chalk "^2.4.2" - loglevelnext "^3.0.1" - nanoid "^2.0.3" - -webpack-merge@^5.7.3, webpack-merge@^5.8.0: - version "5.8.0" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" - integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== - dependencies: - clone-deep "^4.0.1" - wildcard "^2.0.0" - -webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" - integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack@^4.46.0: - version "4.46.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.46.0.tgz#bf9b4404ea20a073605e0a011d188d77cb6ad542" - integrity sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/wasm-edit" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - acorn "^6.4.1" - ajv "^6.10.2" - ajv-keywords "^3.4.1" - chrome-trace-event "^1.0.2" - enhanced-resolve "^4.5.0" - eslint-scope "^4.0.3" - json-parse-better-errors "^1.0.2" - loader-runner "^2.4.0" - loader-utils "^1.2.3" - memory-fs "^0.4.1" - micromatch "^3.1.10" - mkdirp "^0.5.3" - neo-async "^2.6.1" - node-libs-browser "^2.2.1" - schema-utils "^1.0.0" - tapable "^1.1.3" - terser-webpack-plugin "^1.4.3" - watchpack "^1.7.4" - webpack-sources "^1.4.1" - -websocket-driver@>=0.5.1, websocket-driver@^0.7.4: - version "0.7.4" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" - integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== - dependencies: - http-parser-js ">=0.5.1" - safe-buffer ">=5.1.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" - integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== - -whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - -which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wildcard@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" - integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== - -word-wrap@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -worker-farm@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" - integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== - dependencies: - errno "~0.1.7" - -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -ws@^6.2.1: - version "6.2.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" - integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== - dependencies: - async-limiter "~1.0.0" - -xtend@^4.0.0, xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^1.10.0: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs@^13.3.2: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - 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"