diff --git a/anyfig/__init__.py b/anyfig/__init__.py index 567eafa..1517e1d 100644 --- a/anyfig/__init__.py +++ b/anyfig/__init__.py @@ -1,8 +1,9 @@ __author__ = """Olof Harrysson""" __email__ = 'harrysson.olof@gmail.com' -__version__ = '0.1.0' +__version__ = '0.2.0' import sys +from functools import wraps from anyfig.figutils import * from anyfig.anyfig_setup import * @@ -12,3 +13,30 @@ from anyfig.fields import * else: from anyfig.dummyfields import * + + +def get_global_cfg(func): + ''' Decorator for GlobalConfig methods. Saves the config if it's not already saved ''' + @wraps(func) + def wrapper(*args, **kwargs): + self = args[0] + if self.global_cfg is None: + self.global_cfg = get_config() + return func(*args, **kwargs) + + return wrapper + + +class GlobalConfig: + global_cfg = None + + @get_global_cfg + def __getattr__(self, name): + return getattr(self.global_cfg, name) + + @get_global_cfg + def __str__(self): + return str(self.global_cfg) + + +global_cfg = GlobalConfig() diff --git a/anyfig/anyfig_setup.py b/anyfig/anyfig_setup.py index a1b68cf..664fc22 100644 --- a/anyfig/anyfig_setup.py +++ b/anyfig/anyfig_setup.py @@ -33,22 +33,20 @@ def init_config(default_config, cli_args=None): # Create config config_str = cli_args.pop('config', default_config.__name__) config = create_config(config_str) + fields.validate_fields(config) # Print config help - if 'help' in cli_args: - config_classes = list(figutils.get_config_classes()) - print( - f"Available config classes {config_classes}. Set config with --config=OtherConfigClass\n", - f"\nCurrent config is '{config_str}'. The available input arguments are") - - help_string = config.comments_string() - print(help_string) + if 'help' in cli_args or 'h' in cli_args: + print(config.cli_help()) sys.exit(0) # Overwrite parameters via optional input flags config = overwrite(config, cli_args) - # Resolve required values + # Perform deep post init after input flags + figutils.post_init(config) + + # Unwrap the field values fields.resolve_fields(config) # Freezes config @@ -110,20 +108,20 @@ def overwrite(main_config_obj, args): config_obj = main_config_obj config_class = type(config_obj).__name__ - for key_part in outer_keys: + for key_idx, key_part in enumerate(argument_key.split('.')): err_msg = f"{base_err_msg}. '{key_part}' isn't an attribute in '{config_class}'" assert hasattr(config_obj, key_part), err_msg - config_obj = getattr(config_obj, key_part) - config_class = type(config_obj).__name__ - err_msg = f"{base_err_msg}. '{'.'.join(outer_keys)}' isn't a registered Anyfig config class" - assert figutils.is_config_class(config_obj), err_msg + # Check if the config allows the argument + figutils.check_allowed_input_argument(config_obj, key_part, argument_key) - # Error if trying to set unknown attribute key - err_msg = f"{base_err_msg}. '{inner_key}' isn't an attribute in '{config_class}'" - assert inner_key in vars(config_obj), err_msg + # Check if the outer attributes are config classes + if key_idx < len(outer_keys): + config_obj = getattr(config_obj, key_part) + config_class = type(config_obj).__name__ + err_msg = f"{base_err_msg}. '{'.'.join(outer_keys)}' isn't a registered Anyfig config class" + assert figutils.is_config_class(config_obj), err_msg - # Class definition value_class = type(getattr(config_obj, inner_key)) base_err_msg = f"Input argument '{argument_key}' with value {val} can't create an object of the expected type" @@ -134,9 +132,14 @@ def overwrite(main_config_obj, args): # Create new object that follows the InterfaceField's rules elif issubclass(value_class, fields.InterfaceField): field = getattr(config_obj, inner_key) + + if isinstance(value_class, fields.InputField): + value_class = field.type_pattern + else: + value_class = type(field.value) + try: - # TODO: Naive solution. Doesn't handle e.g. typing.Union[Path, str] - val = field.type_pattern(val) + val = value_class(val) except Exception as e: err_msg = f"{base_err_msg} {field.type_pattern}. {e}" raise RuntimeError(err_msg) from None diff --git a/anyfig/config_functions.py b/anyfig/config_functions.py index 63e7bff..f5a0c3e 100644 --- a/anyfig/config_functions.py +++ b/anyfig/config_functions.py @@ -14,13 +14,23 @@ class MasterConfig(ABC): def __init__(self): pass # Add empty init if config doesn't have one - def comments_string(self): - ''' Returns string for config class's attributes and comments ''' - return print_utils.comments_string(self) + def allowed_cli_args(self): + ''' Returns the attribute names that can be be overwritten from command line input ''' + return self.get_parameters() + + def post_init(self): + ''' A function that is called after overwriting from command line input ''' + pass + + def cli_help(self): + return print_utils.cli_help(self) def frozen(self, freeze=True): ''' Freeze/unfreeze config ''' - self.__class__._frozen = freeze # TODO: .__class__ needed? type(self) instead? + self._frozen = freeze + for _, val in self.get_parameters(copy=False).items(): + if figutils.is_config_class(val): + val.frozen(freeze) return self def get_parameters(self, copy=True): diff --git a/anyfig/dummyfields.py b/anyfig/dummyfields.py index 0c4ead1..b018ce5 100644 --- a/anyfig/dummyfields.py +++ b/anyfig/dummyfields.py @@ -4,7 +4,7 @@ def raise_error(): - err_msg = f"This feature isn't supported in Python {sys.version}. See our website '{figutils.get_website()}' for more information" + err_msg = f"This feature isn't supported in Python {sys.version_info.major}.{sys.version_info.minor}. See our website '{figutils.get_website()}' for more information" raise RuntimeError(err_msg) @@ -14,3 +14,7 @@ def field(*args, **kwargs): def constant(value, strict=False): raise_error() + + +def cli_input(type_pattern): + raise_error() diff --git a/anyfig/fields.py b/anyfig/fields.py index 7ba80d0..498914d 100644 --- a/anyfig/fields.py +++ b/anyfig/fields.py @@ -7,9 +7,9 @@ from .figutils import is_config_class -def field(*args, **kwargs): +def field(type_pattern=typing.Any, tests=None): ''' Returns an InterfaceField ''' - return InterfaceField(*args, **kwargs) + return InterfaceField(type_pattern, tests) def constant(value, strict=False): @@ -17,20 +17,42 @@ def constant(value, strict=False): return ConstantField(value, strict) -def resolve_fields(config): +def cli_input(type_pattern): + ''' Returns an InputField ''' + assert type_pattern in [str, int, tuple, list, dict] + return InputField(type_pattern) + + +def validate_fields(config): + ''' Validates that fields has a value ''' + for key, val in vars(config).items(): + if type(val) is InterfaceField: # Don't check InputField or ConstantField + err_msg = ( + f"Missing value for '{key}' in config '{type(config).__name__}'. " + "Set a value or change the type to 'anyfig.cli_input' to allow input arguments without default values" + ) + assert hasattr(val, 'value'), err_msg + + # Resolve nested configs + if is_config_class(val): + validate_fields(val) + + +def resolve_fields(config, cli_name=''): ''' Removes wrapping for InterfaceFields ''' for key, val in vars(config).items(): if isinstance(val, InterfaceField): + cli_name = '.'.join([cli_name, key]).lstrip('.') config_class = type(config).__name__ - value = val.finish_wrapping_phase(key, config_class) + value = val.finish_wrapping_phase(cli_name, config_class) setattr(config, key, value) # Resolve nested configs if is_config_class(val): - resolve_fields(val) + resolve_fields(val, cli_name=key) -class InterfaceField(): +class InterfaceField: ''' Used to define allowed values for a config-attribute ''' def __init__(self, type_pattern=typing.Any, tests=None): err_msg = f"Expected 'type_pattern' to be a type or a typing pattern but got {type(type_pattern)}" @@ -44,8 +66,7 @@ def __init__(self, type_pattern=typing.Any, tests=None): def update_value(self, name, value, config_class): # Updates value and return wrapped value or value if setup is finished - if self.type_pattern: - check_type(name, value, self.type_pattern) + check_type(name, value, self.type_pattern) for test in self.tests: self._check_test(test, name, value, config_class) @@ -55,7 +76,8 @@ def update_value(self, name, value, config_class): def finish_wrapping_phase(self, name, config_class): # Verifies that attribute is overridden and finishes setup - err_msg = f"Attribute '{name}' in '{config_class}' is required to be overridden" + inner_key = name.split('.')[-1] + err_msg = f"The field '{inner_key}' in '{config_class}' is required to be overridden" assert hasattr(self, 'value'), err_msg self.wrapping_phase = False @@ -95,3 +117,17 @@ def _check_test(self, test, name, value, config_class): ''' Calls the test with the new attribute value. Raises error if test doesn't pass ''' err_msg = f"Can't override constant '{name}' with value '{value}' in config '{config_class}'" assert test(value), err_msg + + +class InputField(InterfaceField): + ''' Used to define required config-attribute from command line input ''' + def __init__(self, type_pattern): + super().__init__(type_pattern=type_pattern) + + def finish_wrapping_phase(self, name, config_class): + # Verifies that attribute is overridden and finishes setup + err_msg = f"Missing required input argument --{name}. See --help for more info" + assert hasattr(self, 'value'), err_msg + + self.wrapping_phase = False + return self.value diff --git a/anyfig/figutils.py b/anyfig/figutils.py index 4e9dfdb..0d11bd8 100644 --- a/anyfig/figutils.py +++ b/anyfig/figutils.py @@ -1,7 +1,8 @@ import inspect -import dill - from pathlib import Path +from collections.abc import Iterable + +import dill registered_config_classes = {} global_configs = {} @@ -46,8 +47,8 @@ def is_config_class(obj): return inspect.isclass(obj) and obj.__name__ in registered_config_classes -def cfg(): - ''' Returns the config object that is registed with anyfig ''' +def get_config(): + ''' Returns the config object that is registered with anyfig ''' # Normal case if len(global_configs) == 1: @@ -55,7 +56,7 @@ def cfg(): # init_config function adds one so this should never happen elif len(global_configs) == 0: - raise RuntimeError("No global config has been registered") + raise RuntimeError("No config object has been registered") # If multiple config objects has been marked as global raise RuntimeError( @@ -117,3 +118,42 @@ def find_arguments(callable_): if param.default == inspect.Parameter.empty ] return list(parameters), required_args + + +def check_allowed_input_argument(config_obj, name, deep_name): + ''' Raises error if the input argument isn't marked as "allowed" ''' + allowed_args = get_allowed_cli_args(config_obj) + if name not in allowed_args: + err_msg = f"Input argument '{deep_name}' is not allowed to be overwritten. See --help for more info" + raise ValueError(err_msg) + + +def get_allowed_cli_args(config_obj): + ''' Returns the attribute names that can be be overwritten from command line input. + Raises AttributeError if an attribute doesn't exist ''' + allowed_items = config_obj.allowed_cli_args() + if allowed_items is None: + allowed_items = [] + if isinstance(allowed_items, str): + allowed_items = [allowed_items] + err_msg = ( + f"Expected return type 'String, None or Iterable' for {type(config_obj).__name__}'s allowed_cli_args method, " + f"was {allowed_items} with type {type(allowed_items)}") + assert isinstance(allowed_items, Iterable), err_msg + + attributes = config_obj.get_parameters() + for item in allowed_items: + if item not in attributes: + err_msg = ( + f"'{type(config_obj).__name__}' has no attribute '{item}' and should not be marked as an allowed command line " + "input argument") + raise AttributeError(err_msg) + return allowed_items + + +def post_init(config_obj): + ''' Recursively calls the post_init method on a config and it's attributes ''' + config_obj.post_init() + for _, val in config_obj.get_parameters(copy=False).items(): + if is_config_class(val): + post_init(val) diff --git a/anyfig/print_utils.py b/anyfig/print_utils.py index 476f2b0..4fff178 100644 --- a/anyfig/print_utils.py +++ b/anyfig/print_utils.py @@ -2,11 +2,12 @@ import functools from . import figutils +from .fields import InputField, InterfaceField -def comments_string(config_obj): - ''' Returns a "help" string for the config object that contain attributes and any matching comments ''' - comments = _extract_config_obj_comments(config_obj) +def cli_help(config_obj): + ''' Returns string for config's cli-arguments with corresponding comments ''' + comments = extract_config_obj_comments(config_obj) indent_width = 4 # In spaces comment_indents = {} # attribute-name=indent. key = '' for main config class @@ -20,6 +21,11 @@ def comments_string(config_obj): # Formats the attribute string attribute_type = type(attribute_value).__name__ + if isinstance(attribute_value, InputField): + attribute_type = str(attribute_value.type_pattern.__name__) + elif isinstance(attribute_value, InterfaceField): + attribute_type = type(attribute_value.value).__name__ + nested_level = attribute_name.count('.') nested_indent = ' ' * (indent_width * nested_level) attr_string = f"{nested_indent}--{attribute_name} ({attribute_type}):" @@ -41,14 +47,31 @@ def comments_string(config_obj): help_string = f"{attr_string}{' ' * (n_spaces - len(attr_string))}{comment}" help_strings.append(help_string) - return '\n'.join(help_strings) + # Add header info + cli_help_header = [] + config_classes = list(figutils.get_config_classes()) + if len(config_classes) > 1: + header = ( + f"Current config is '{type(config_obj).__name__}'. Available config classes {config_classes}. " + "Set config with --config=OtherConfigClass") + cli_help_header.append(header) + + if help_strings: + cli_help_header.append("{}The available input arguments are".format( + '\n' if cli_help_header else '')) + return '\n'.join(cli_help_header + help_strings) -def _extract_config_obj_comments(config_obj): + +def extract_config_obj_comments(config_obj): ''' Extracts comments for a config object and any config-class children objects ''' config_classes = figutils.get_config_classes().values() comments = _extract_comments(type(config_obj)) + # Remove the keys that aren't allowed from command line input + allowed_cli_args = figutils.get_allowed_cli_args(config_obj) + comments = {k: v for k, v in comments.items() if k in allowed_cli_args} + flat_comments = {} for attribute_name, comment in comments.items(): flat_comments[attribute_name] = comment @@ -56,7 +79,7 @@ def _extract_config_obj_comments(config_obj): # Check if config class has config-class children attribute_value = getattr(config_obj, attribute_name) if type(attribute_value) in config_classes: - child_comments = _extract_config_obj_comments(attribute_value) + child_comments = extract_config_obj_comments(attribute_value) # Add child comments for child_attribute_name, child_comment in child_comments.items(): @@ -86,6 +109,8 @@ def _extract_comments(class_type): # Extract attribute name attribute_name = code_line.split('=')[0] + if ':' in attribute_name: + attribute_name = attribute_name.split(':')[0] attribute_name = attribute_name.strip().replace('self.', '', 1) # Override parent comment diff --git a/examples/online_demo.ipynb b/examples/online_demo.ipynb index 1a8fdae..7b521ae 100644 --- a/examples/online_demo.ipynb +++ b/examples/online_demo.ipynb @@ -8,7 +8,7 @@ "\n", "This notebook will allow you to play around with Anyfig directly in your browser, no installation required!\n", "\n", - "For more information about Anyfig, check out the website [https://anyfig.now.sh/](https://anyfig.now.sh/)" + "For more information about Anyfig, check out our website [https://anyfig.now.sh/](https://anyfig.now.sh/)" ] }, { @@ -20,7 +20,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -55,32 +55,21 @@ }, { "cell_type": "code", - "execution_count": 15, - "metadata": {}, + "execution_count": 2, + "metadata": { + "tags": [] + }, "outputs": [ { - "name": "stdout", "output_type": "stream", - "text": [ - "MyConfig:\n", - " experiment_note (str): Changed stuff\n", - " save_directory (PosixPath): output\n", - " start_time (float): 1597155436.506847\n", - " inner_config (InnerConfig): \n", - " inception (str): Yo Dawg\n", - "MyConfig:\n", - " experiment_note (str): new note\n", - " save_directory (PosixPath): string-becomes-path\n", - " start_time (float): 1597155436.507649\n", - " inner_config (InnerConfig): \n", - " inception (str): nested-input-support\n" - ] + "name": "stdout", + "text": "Without command line input:\nMyConfig:\n experiment_note (str): Changed stuff\n save_directory (PosixPath): output\n start_time (float): 1598543535.0318332\n inner_config (InnerConfig): \n inception (str): Yo Dawg\n\nWith command line input:\nMyConfig:\n experiment_note (str): new note\n save_directory (PosixPath): string-becomes-path\n start_time (float): 1598543535.032667\n inner_config (InnerConfig): \n inception (str): nested-input-support\n" } ], "source": [ "cli_args = {} # No input parameters\n", "config = anyfig.init_config(default_config=MyConfig, cli_args=cli_args)\n", - "print(config)\n", + "print('Without command line input:', config, sep='\\n')\n", "\n", "# Input parameters of string type\n", "cli_args = {\n", @@ -89,15 +78,8 @@ " 'inner_config.inception': 'nested-input-support'\n", "}\n", "config = anyfig.init_config(default_config=MyConfig, cli_args=cli_args)\n", - "print(config)" + "print('\\nWith command line input:', config, sep='\\n')" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { @@ -121,4 +103,4 @@ }, "nbformat": 4, "nbformat_minor": 2 -} +} \ No newline at end of file diff --git a/hacking/cli.py b/hacking/cli.py index 07bd56b..73f3f80 100644 --- a/hacking/cli.py +++ b/hacking/cli.py @@ -5,7 +5,7 @@ @anyfig.config_class # Registers the class with anyfig -class MyConfig(): +class MyConfig: def __init__(self): # Config-parameters goes as attributes self.experiment_note = 'Changed stuff' diff --git a/hacking/required_cli.py b/hacking/required_cli.py new file mode 100644 index 0000000..f1001a0 --- /dev/null +++ b/hacking/required_cli.py @@ -0,0 +1,55 @@ +import anyfig +# from anyfig import input_argument as inp_arg +from pathlib import Path +import time +import typing +from anyfig import print_utils + + +@anyfig.config_class # Registers the class with anyfig +class MyConfig: + def __init__(self): + # Note help + self.experiment_note: str = 'Changed stuff' + # Start help + self.start_time = time.time() + + # The inner config obj + self.innerfig = InnerConfig() + + # self.help = 'heeelp' + + # def allowed_cli_args(self): + # pass + + # def cli_help(self): + # hej = "YOOOLLOOF" + # cmt = print_utils.cli_help(self) + # return hej + cmt + # return "YOOOLLOOF" + + # return ['start_time1'] + # return 'start_time', 'innerfig' + # return 'start_time' + + +@anyfig.config_class +class InnerConfig: + def __init__(self): + + # An integer between the values of 1 and 10 because the world has never seen such apples + self.inner = 'innner' + self.inner2 = 'innner2' + + def allowed_cli_args(self): + return 11 + + +class InnerConfig2: + def __init__(self): + # Note help + self.inner = 'innner2' + + +config = anyfig.init_config(default_config=MyConfig) +print(config) diff --git a/notes.txt b/notes.txt index 345c7a2..67818fe 100644 --- a/notes.txt +++ b/notes.txt @@ -3,28 +3,23 @@ Support json - Have it work out of the box for configs that are pure json-types. Versioning support - I'd like to create a way to keep track of / load old configs. Something like a versioning system. Perhaps save this information alongside the config, or create a config-component that has the versioning elements and can be added into a mainconfig. Could add git information via gitpython (or show users how to do it). I like a built in versioning config-class that can save version number, creation time, git commit, maybe the entrypoint script filename -Implement accessing config values with square brackets/get(name, default_value)? __get_item__ - -name wrangling with double underscore? __build_target +Can I use the "with" statement to maybe say with Anyfig.OnlyOverwrite(self) or something to make sure that people don't add new attributes in configs instead of overwritting existing attributes? +"with" statement to set config attributes without having to set frozen(False) then back to frozen(True) +Test frozen for nested obejcts -Post init to help constructions objects from input arguments? To put e.g. objects of lists into the config they can't take input arguments. +Move _frozen and other default attributes to a function so it's defined at one place -Can I use the "with" statement to maybe say with Anyfig.OnlyOverwrite(self) or something to make sure that people don't add new attributes in configs instead of overwritting existing attributes? -Or something like with Anyfig.JsonCompatible() that checks that all attributes are json-compatible / have saving+loading functions? -Or marks a config as allowed/dissallowed from cli -Or used for the helpstring? +license as a button in github -Some kind of help string about the program that can be sent to init_config or place in a config? for --help output +Make target classes have a special attribute that holds the dict arguments? Good is that you can put other stiff in there, but bad is that it becomes another thing you need to remember about anyfig -A way to control which arguments that can be overwritten by cli/visible by the --help. I don't see a good way to do this that doesn't require lots of maintainence for the user. Better to do an opt-in system than an opt-out, so whitelist the ones you want exposed. -Should also be able to say if the flag should be ignored by Anyfig or raise an error. +type for target class for isinstance check -https://github.com/OlofHarrysson/anyfig -[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/OlofHarrysson/anyfig/master) +Assume unchanged instead of that ignore thing in git for user configs? It had some problems when changing branches as git couldn't handle. -https://mybinder.org/v2/gh/OlofHarrysson/anyfig/master?filepath=examples/online_demo.ipynb -TODO: Test anyfig in a notebook. Maybe have to change the way classes are registered. How to handle input parameters in notebook? +--help doesn't work with type hints +Don't allow --help (or -h in config) ~~~~~~ WEBSITE ~~~~~~ @@ -36,8 +31,7 @@ Some sort of info on the main page. ~~~~~~ Release 0.2.0 ~~~~~~ dict cli-arguments readme +cli_input readme readme save/load. Also write why its difficult - - -Off topic: -AI to read lips. Can train with videos that has subtitles. Pretrain to classify the words within a sentence and then let it predict the word from scratch. +post_init readme. Is this feature done? post init can be done to validate config or somethink +allowed_cli_args readme diff --git a/setup.cfg b/setup.cfg index a08ff92..d26ff17 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.1.0 +current_version = 0.2.0 commit = True tag = True @@ -19,3 +19,4 @@ test = pytest [tool:pytest] collect_ignore = ['setup.py'] + diff --git a/setup.py b/setup.py index 165b9f3..25b108d 100644 --- a/setup.py +++ b/setup.py @@ -49,6 +49,6 @@ test_suite='tests', tests_require=test_requirements, url='https://github.com/OlofHarrysson/anyfig', - version='0.1.0', + version='0.2.0', zip_safe=False, ) diff --git a/tests/test_anyfig.py b/tests/test_anyfig.py index ac23623..0484e04 100644 --- a/tests/test_anyfig.py +++ b/tests/test_anyfig.py @@ -29,4 +29,6 @@ class MainConfig: # @pytest.mark.parametrize('tester_arg', [datetime, datetime]) # def test_build_args(target_config): # config = anyfig.init_config(default_config=main_config, cli_args={}) -# print(config) \ No newline at end of file +# print(config) + +# TODO: Test that checks that get_parameters() get the expexted params. When I add more default attributes I also need to change that function diff --git a/website/docs/advanced.mdx b/website/docs/advanced.mdx index 69225d0..1d5b5bf 100644 --- a/website/docs/advanced.mdx +++ b/website/docs/advanced.mdx @@ -12,7 +12,7 @@ Anyfig offers the functionality to override config-values through command line a import anyfig @anyfig.config_class -class MyConfig(): +class MyConfig: def __init__(self): self.experiment_note = 'Changed stuff' @@ -36,7 +36,7 @@ import anyfig from pathlib import Path @anyfig.config_class -class MyConfig(): +class MyConfig: def __init__(self): self.save_directory = Path('output') @@ -56,7 +56,7 @@ import anyfig from pathlib import Path @anyfig.config_class -class MyConfig(): +class MyConfig: def __init__(self): # Describes the thought behind the experiment @@ -94,12 +94,12 @@ One can choose which config-class to use via the command line. If a config-class import anyfig @anyfig.config_class -class MyConfig(): +class MyConfig: def __init__(self): self.experiment_note = 'Changed stuff' @anyfig.config_class -class SecondConfig(): +class SecondConfig: def __init__(self): self.experiment_note = 'Number 2' self.anyfig_tip = 'Configs can contain different values from each other' @@ -131,7 +131,7 @@ import anyfig import logging @anyfig.config_class -class NormalConfig(): +class NormalConfig: def __init__(self): self.logger = logging.getLogger('my-app') # ... More config values @@ -152,13 +152,13 @@ For projects where the configuration grows large it helps to modularize the conf import anyfig @anyfig.config_class -class MainConfig(): +class MainConfig: def __init__(self): self.experiment_note = 'Changed stuff' self.module = ModuleConfig() # Yo dawg! @anyfig.config_class -class ModuleConfig(): +class ModuleConfig: def __init__(self): self.anyfig_tip = 'Config-classes can be used as parts or wholes' @@ -186,7 +186,7 @@ import anyfig from pathlib import Path @anyfig.config_class -class MyConfig(): +class MyConfig: def __init__(self): # Define allowed values self.save_directory = anyfig.field(Path) @@ -205,7 +205,7 @@ from pathlib import Path import typing @anyfig.config_class -class MyConfig(): +class MyConfig: def __init__(self): # Define allowed values self.save_directory = anyfig.field(typing.Union[Path, str]) # Path or String @@ -227,7 +227,7 @@ import anyfig from pathlib import Path @anyfig.config_class -class MyConfig(): +class MyConfig: def __init__(self): # Define tests file_exists = lambda new_value: new_value.exists() @@ -243,7 +243,7 @@ import anyfig from pathlib import Path @anyfig.config_class -class MyConfig(): +class MyConfig: def __init__(self): # Define tests file_exists = lambda new_value: new_value.exists() @@ -266,7 +266,7 @@ import anyfig from pathlib import Path @anyfig.config_class -class MyConfig(): +class MyConfig: def __init__(self): self.PYTHON_FILE = anyfig.constant(Path('this_file.py')) @@ -275,7 +275,7 @@ class MyConfig(): self.PYTHON_FILE = Path('other_file.py') # Error @anyfig.config_class -class StrictConfig(): +class StrictConfig: def __init__(self): self.PYTHON_FILE = anyfig.constant(Path('this_file.py'), strict=True) @@ -293,7 +293,7 @@ import anyfig from datetime import datetime @anyfig.config_class(target=datetime) -class MyConfig(): +class MyConfig: def __init__(self): self.year = 1996 # Specify the values that should be configurable self.month = 12 @@ -317,7 +317,7 @@ class DataProcesser: pass @anyfig.config_class(target=DataProcesser) -class MyConfig(): +class MyConfig: def __init__(self): self.algorithm = lambda x: x + 1 @@ -325,4 +325,4 @@ config = anyfig.init_config(default_config=MyConfig) data = [1, 2, 3] # Some complex data that can't be put into the config build_args = dict(data=data) data_processor = config.build(build_args) -``` \ No newline at end of file +``` diff --git a/website/docs/best-practices.mdx b/website/docs/best-practices.mdx index bfe487f..513c96f 100644 --- a/website/docs/best-practices.mdx +++ b/website/docs/best-practices.mdx @@ -98,7 +98,7 @@ A workaround would be to put the sensitive information in a file, have git ignor import anyfig @anyfig.config_class -class MyConfig(): +class MyConfig: def __init__(self): self.password_file = 'secrets/password.txt' @@ -114,7 +114,7 @@ It's also possible to create a function to read the password from the file direc import anyfig @anyfig.config_class -class MyConfig(): +class MyConfig: def __init__(self): with open('secrets/password.txt') as file: self.password = file.read() diff --git a/website/docs/fundamentals.mdx b/website/docs/fundamentals.mdx index 7a31edd..f3dd74f 100644 --- a/website/docs/fundamentals.mdx +++ b/website/docs/fundamentals.mdx @@ -12,7 +12,7 @@ Anyfig allows you to specify configs in Python code. Instead of defining values import anyfig @anyfig.config_class # Registers the class with anyfig -class MyConfig(): +class MyConfig: def __init__(self): # Config-values goes as attributes self.experiment_note = 'Changed stuff' @@ -32,7 +32,7 @@ from pathlib import Path import time @anyfig.config_class # Registers the class with anyfig -class MyConfig(): +class MyConfig: def __init__(self): # Config-values goes as attributes self.experiment_note = 'Changed stuff' @@ -53,7 +53,7 @@ from pathlib import Path import time @anyfig.config_class # Registers the class with anyfig -class MyConfig(): +class MyConfig: def __init__(self): # Config-parameters goes as attributes self.experiment_note = 'Changed stuff' @@ -81,7 +81,7 @@ import time from myproject.io import FileWriter @anyfig.config_class # Registers the class with anyfig -class MyConfig(): +class MyConfig: def __init__(self): # Config-parameters goes as attributes self.experiment_note = 'Changed stuff' @@ -98,18 +98,21 @@ writer = FileWriter(config.save_directory) ### Global Config -Most people pass the config-object around their code, accessing the config-values at various places to initilize their other components. Anyfig offers an alternative to this. The anyfig.init_config function registers the config-object with Anyfig, allowing it to be accessed from any file with the anyfig.cfg() function. +Most people pass the config-object around their code, accessing the config-values at various places to initilize their other components. Anyfig offers an alternative to this. The `anyfig.init_config()` function registers the config-object with Anyfig, allowing it to be accessed from any file through `anyfig.get_config()` or the proxy class `anyfig.global_cfg`. - Global objects are often considered bad practice and is thus _not recommended_ but often very practical from small projects or experimentation. The problem is allevited in Anyfig's case as **config-objects are immutable** by default, avoiding confusion if multiple components were to change the same config-values. +Global objects are often considered bad practice because multiple components can change the same global object which complicates understandability and debugging. Anyfig's config-objects are **immutable by default** to mitigate this. ```python title="my_project/another_file.py" -import anyfig +from anyfig import global_cfg, get_config -class SomeClass(): +class SomeClass: def __init__(self): - config = anyfig.cfg() # Returns the config object registered in Anyfig - print(config.start_time) # Access config-values with the dot notation - # ... Use config-values in program + # Access the config directly through an instance of the GlobalConfig helper class + self.save_dir = global_cfg.save_directory + + # Or get the actual config-object. This is needed for e.g. isinstance(...) checks + config = get_config() + self.save_dir = config.save_directory ``` ## Saving & Loading diff --git a/website/docs/introduction.mdx b/website/docs/introduction.mdx index 91e24ef..3ef633f 100644 --- a/website/docs/introduction.mdx +++ b/website/docs/introduction.mdx @@ -28,7 +28,7 @@ from pathlib import Path import time @anyfig.config_class # Registers the class with anyfig -class MyConfig(): +class MyConfig: def __init__(self): # Config-parameters goes as attributes self.experiment_note = 'Changed stuff' @@ -42,7 +42,7 @@ config = anyfig.init_config(default_config=MyConfig) print(config.start_time) ``` -Feel free to play with the [Online Demo](https://pyfiddle.io/fiddle/4de2f70f-e421-4326-bbb8-b06d5efa547d/?i=true) hosted by Pyfiddle or start learning about Anyfig @ [Fundamentals](fundamentals.mdx). +Feel free to play with the [Online Demo](https://pyfiddle.io/fiddle/4de2f70f-e421-4326-bbb8-b06d5efa547d/?i=true) hosted by Pyfiddle or start learning about Anyfig in the [Fundamentals](fundamentals.mdx) guide. # Citing Anyfig Feel free to cite Anyfig in your research: diff --git a/website/package.json b/website/package.json index 7ad90c0..2ae947c 100644 --- a/website/package.json +++ b/website/package.json @@ -9,11 +9,12 @@ "deploy": "docusaurus deploy" }, "dependencies": { - "@docusaurus/core": "^2.0.0-alpha.61", - "@docusaurus/preset-classic": "^2.0.0-alpha.61", + "@docusaurus/core": "^2.0.0-alpha.63", + "@docusaurus/preset-classic": "^2.0.0-alpha.63", "classnames": "^2.2.6", "react": "^16.8.4", - "react-dom": "^16.8.4" + "react-dom": "^16.8.4", + "serialize-javascript": "^4.0.0" }, "browserslist": { "production": [ @@ -27,4 +28,4 @@ "last 1 safari version" ] } -} \ No newline at end of file +} diff --git a/website/sidebars.js b/website/sidebars.js index c2e6b0f..85d1e9c 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -3,7 +3,7 @@ module.exports = { { type: 'category', - label: 'Getting Started', + label: 'Get Started', collapsed: false, items: ['introduction', 'installation'], }, @@ -22,4 +22,4 @@ module.exports = { ], -}; \ No newline at end of file +}; diff --git a/website/yarn.lock b/website/yarn.lock index 6093a4c..9f231f9 100644 --- a/website/yarn.lock +++ b/website/yarn.lock @@ -1200,6 +1200,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.10.3": + version "7.11.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" + integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/template@^7.8.3", "@babel/template@^7.8.6": version "7.8.6" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" @@ -1280,25 +1287,25 @@ resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw== -"@docsearch/css@^1.0.0-alpha.26": - version "1.0.0-alpha.26" - resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-1.0.0-alpha.26.tgz#a2f9b61168d527600b0e3f31c0f04998002f3aa2" - integrity sha512-YAa7R6O2MMdRtxTaMB3TTfeelhpf01J1xtnGZEQa7LNA64QO8BErceQIMQq5/ZMXnGViK/eUjqSVyCu7uzYE5w== +"@docsearch/css@^1.0.0-alpha.28": + version "1.0.0-alpha.28" + resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-1.0.0-alpha.28.tgz#c8a2cd8c1bb3a6855c51892e9dbdab5d42fe6e23" + integrity sha512-1AhRzVdAkrWwhaxTX6/R7SnFHz8yLz1W8I/AldlTrfbNvZs9INk1FZiEFTJdgHaP68nhgQNWSGlQiDiI3y2RYg== -"@docsearch/react@^1.0.0-alpha.25": - version "1.0.0-alpha.26" - resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-1.0.0-alpha.26.tgz#98b736d7de951bfa55cf3d0eb3639f93c9dd1db2" - integrity sha512-2eKIcUXuWbGgz6/xF+p7kYyd1IVGcnB8r+oIkTD6Tqtq0VGzZmf9ZPCOX37G38pVIJXAAxmtAb7oPO311xGWNQ== +"@docsearch/react@^1.0.0-alpha.27": + version "1.0.0-alpha.28" + resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-1.0.0-alpha.28.tgz#4f039ed79f8b3332b19a57677b219aebc5010e9d" + integrity sha512-XjJOnCBXn+UZmtuDmgzlVIHnnvh6yHVwG4aFq8AXN6xJEIX3f180FvGaowFWAxgdtHplJxFGux0Xx4piHqBzIw== dependencies: - "@docsearch/css" "^1.0.0-alpha.26" - "@francoischalifour/autocomplete-core" "^1.0.0-alpha.26" - "@francoischalifour/autocomplete-preset-algolia" "^1.0.0-alpha.26" + "@docsearch/css" "^1.0.0-alpha.28" + "@francoischalifour/autocomplete-core" "^1.0.0-alpha.28" + "@francoischalifour/autocomplete-preset-algolia" "^1.0.0-alpha.28" algoliasearch "^4.0.0" -"@docusaurus/core@^2.0.0-alpha.61": - version "2.0.0-alpha.61" - resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.0.0-alpha.61.tgz#4b736d36687bd12fb9399f9ce352e87da4bf8fe7" - integrity sha512-Ev0v5J7L/Pm3VJMdhhyR8I9tUQo8MhVRUUT+Bf0W3TMYG6jp2cIXE88yCfxOsTDducS7EMrdtUXfvePGH9CE/A== +"@docusaurus/core@2.0.0-alpha.63", "@docusaurus/core@^2.0.0-alpha.63": + version "2.0.0-alpha.63" + resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.0.0-alpha.63.tgz#e0b1db9b7a14773c6e0a56d48ba9ab85fe322ee4" + integrity sha512-IVSL29ZQAB7wuBTPgtJAvHUfmQRBY/MS2ypxPTwlhPqTORPIqeEaLFgyeWQ0RgZ5iqzB5WVQiEUk2Kx0WI3/Qw== dependencies: "@babel/core" "^7.9.0" "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.1" @@ -1310,8 +1317,9 @@ "@babel/preset-typescript" "^7.9.0" "@babel/runtime" "^7.9.2" "@babel/runtime-corejs3" "^7.10.4" - "@docusaurus/types" "^2.0.0-alpha.61" - "@docusaurus/utils" "^2.0.0-alpha.61" + "@docusaurus/types" "2.0.0-alpha.63" + "@docusaurus/utils" "2.0.0-alpha.63" + "@docusaurus/utils-validation" "2.0.0-alpha.63" "@endiliey/static-site-generator-webpack-plugin" "^4.0.0" "@hapi/joi" "^17.1.1" "@svgr/webpack" "^5.4.0" @@ -1322,7 +1330,7 @@ chalk "^3.0.0" chokidar "^3.3.0" commander "^4.0.1" - copy-webpack-plugin "^5.0.5" + copy-webpack-plugin "^6.0.3" core-js "^2.6.5" css-loader "^3.4.2" del "^5.1.0" @@ -1338,7 +1346,9 @@ import-fresh "^3.2.1" inquirer "^7.2.0" is-root "^2.1.0" + leven "^3.1.0" lodash "^4.5.2" + lodash.flatmap "^4.5.0" lodash.has "^4.5.2" lodash.isplainobject "^4.0.6" lodash.isstring "^4.0.1" @@ -1352,7 +1362,7 @@ react-dev-utils "^10.2.1" react-helmet "^6.0.0-beta" react-loadable "^5.5.0" - react-loadable-ssr-addon "^0.2.3" + react-loadable-ssr-addon "^0.3.0" react-router "^5.1.2" react-router-config "^5.1.1" react-router-dom "^5.1.2" @@ -1361,7 +1371,7 @@ serve-handler "^6.1.3" shelljs "^0.8.4" std-env "^2.2.1" - terser-webpack-plugin "^2.3.5" + terser-webpack-plugin "^3.0.3" update-notifier "^4.1.0" url-loader "^4.1.0" wait-file "^1.0.5" @@ -1371,14 +1381,15 @@ webpack-merge "^4.2.2" webpackbar "^4.0.0" -"@docusaurus/mdx-loader@^2.0.0-alpha.61": - version "2.0.0-alpha.61" - resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-alpha.61.tgz#90b33f928c72d47c51a3d438990e30f143b2b1ee" - integrity sha512-n7VMfyshgMjoVI2YdQFlPVcMTSR+XOl2UbOTgJXDmD4yCeLOSaj63g8fwVoCy+NRkPgjpWGTGCeLNs63dk9jYg== +"@docusaurus/mdx-loader@2.0.0-alpha.63": + version "2.0.0-alpha.63" + resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-alpha.63.tgz#e6b363bdcfae84306aad74a162130672df33ef40" + integrity sha512-zqnjIOlUSn4sXvZPydYI3z+n9U/9E4bYDn4PHNqNTxPVm5cWk+YPZtq1dP7IGkM5xCZpkApOj4oOh9qmRafoug== dependencies: "@babel/parser" "^7.9.4" "@babel/traverse" "^7.9.0" - "@docusaurus/core" "^2.0.0-alpha.61" + "@docusaurus/core" "2.0.0-alpha.63" + "@docusaurus/utils" "2.0.0-alpha.63" "@mdx-js/mdx" "^1.5.8" "@mdx-js/react" "^1.5.8" escape-html "^1.0.3" @@ -1393,17 +1404,18 @@ unist-util-visit "^2.0.2" url-loader "^4.1.0" -"@docusaurus/plugin-content-blog@^2.0.0-alpha.61": - version "2.0.0-alpha.61" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-alpha.61.tgz#fd4df3eedfd5ac8b32f2a4fcfe562804b30164eb" - integrity sha512-C2U5NTKYeDm7AViMt4fqmkLuk2kwxvvkzAK84EvEA3tVy3Q58qTfRqbDyFJGN63OL1Os+1HwQvGjPjCUWVbJ3Q== +"@docusaurus/plugin-content-blog@2.0.0-alpha.63": + version "2.0.0-alpha.63" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-alpha.63.tgz#fbb535713c73e32349e5b8ebc91d3b384acfbef9" + integrity sha512-Ew2Nzf3jpZj2xC5omVOEd+l3iwbcLjW6X++yEaFnv0F6ulQufZ7IxJgStl1mCzlxxBZ8UJLi3F5/XNPhditQtw== dependencies: - "@docusaurus/core" "^2.0.0-alpha.61" - "@docusaurus/mdx-loader" "^2.0.0-alpha.61" - "@docusaurus/types" "^2.0.0-alpha.61" - "@docusaurus/utils" "^2.0.0-alpha.61" - "@docusaurus/utils-validation" "^2.0.0-alpha.61" + "@docusaurus/core" "2.0.0-alpha.63" + "@docusaurus/mdx-loader" "2.0.0-alpha.63" + "@docusaurus/types" "2.0.0-alpha.63" + "@docusaurus/utils" "2.0.0-alpha.63" + "@docusaurus/utils-validation" "2.0.0-alpha.63" "@hapi/joi" "^17.1.1" + chalk "^3.0.0" feed "^4.1.0" fs-extra "^8.1.0" globby "^10.0.1" @@ -1411,23 +1423,26 @@ lodash.kebabcase "^4.1.1" reading-time "^1.2.0" remark-admonitions "^1.2.1" + webpack "^4.41.2" -"@docusaurus/plugin-content-docs@^2.0.0-alpha.61": - version "2.0.0-alpha.61" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-alpha.61.tgz#aa9746aa6302ae6bb7df96152734a138fba649c6" - integrity sha512-1WojgF+0ZQoARVF3I++2ghzG0sY4panxNiWv8Mzo2MdqECj3lgmR8jaVUSXj4bcTzX7uAEVS9MqKYIf3DBpgYg== +"@docusaurus/plugin-content-docs@2.0.0-alpha.63": + version "2.0.0-alpha.63" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-alpha.63.tgz#1971291320c66e7b5767f0a9e2feccafc4d8b7dd" + integrity sha512-acBjlUqLSYxY7dqbRYWpc+BHyVa0/f1O7slMKgaNuIs6xiv8vBNDpRUSkaef0MXc7L7Ez7ecxQ1r0aNV+Qsg5w== dependencies: - "@docusaurus/core" "^2.0.0-alpha.61" - "@docusaurus/mdx-loader" "^2.0.0-alpha.61" - "@docusaurus/types" "^2.0.0-alpha.61" - "@docusaurus/utils" "^2.0.0-alpha.61" - "@docusaurus/utils-validation" "^2.0.0-alpha.61" + "@docusaurus/core" "2.0.0-alpha.63" + "@docusaurus/mdx-loader" "2.0.0-alpha.63" + "@docusaurus/types" "2.0.0-alpha.63" + "@docusaurus/utils" "2.0.0-alpha.63" + "@docusaurus/utils-validation" "2.0.0-alpha.63" "@hapi/joi" "17.1.1" + chalk "^3.0.0" execa "^3.4.0" fs-extra "^8.1.0" globby "^10.0.1" import-fresh "^3.2.1" loader-utils "^1.2.3" + lodash "^4.17.19" lodash.flatmap "^4.5.0" lodash.groupby "^4.6.0" lodash.pick "^4.4.0" @@ -1435,72 +1450,93 @@ lodash.sortby "^4.6.0" remark-admonitions "^1.2.1" shelljs "^0.8.4" + utility-types "^3.10.0" + webpack "^4.41.2" -"@docusaurus/plugin-content-pages@^2.0.0-alpha.61": - version "2.0.0-alpha.61" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-alpha.61.tgz#3fdc401fe4693fc3ec1f481022ccaaeac296a36e" - integrity sha512-UQmXnGQCQoMltnL0Zvf0Dhqis+tKPwAdtcoBcQN4dvaDp4iEsS8eJjG9QZqvPzqJv+giVyuCT/KeZj/pxCitNw== +"@docusaurus/plugin-content-pages@2.0.0-alpha.63": + version "2.0.0-alpha.63" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-alpha.63.tgz#6ff1f5b3f11d4235c07163a429c2ac15e23ada06" + integrity sha512-+nnNkWOx3pHJZcZ5VRG0EULiiwTqMrY11Ib4xj8m7kHxbgr2CxUqnXBk61DYqS2wozvxCUvxk8TV8GJUrMxLag== dependencies: - "@docusaurus/mdx-loader" "^2.0.0-alpha.61" - "@docusaurus/types" "^2.0.0-alpha.61" - "@docusaurus/utils" "^2.0.0-alpha.61" - "@docusaurus/utils-validation" "^2.0.0-alpha.61" + "@docusaurus/core" "2.0.0-alpha.63" + "@docusaurus/mdx-loader" "2.0.0-alpha.63" + "@docusaurus/types" "2.0.0-alpha.63" + "@docusaurus/utils" "2.0.0-alpha.63" + "@docusaurus/utils-validation" "2.0.0-alpha.63" "@hapi/joi" "17.1.1" globby "^10.0.1" loader-utils "^1.2.3" + minimatch "^3.0.4" remark-admonitions "^1.2.1" + slash "^3.0.0" + webpack "^4.41.2" -"@docusaurus/plugin-debug@^2.0.0-alpha.61": - version "2.0.0-alpha.61" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-alpha.61.tgz#b1fab0775def0587d9e995004e117225f853b6f1" - integrity sha512-v0qbGwT/yd5Dy/dcwn5fBCdlFE60IOOhllBDuKUsjJwKCvFDKHZ6jtxrZY+ujIlDfj/Tkc4ban0w46JGWnMj+w== +"@docusaurus/plugin-debug@2.0.0-alpha.63": + version "2.0.0-alpha.63" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-alpha.63.tgz#731adf7c698614f5f7233c048ec7f5d9f31338a9" + integrity sha512-pQ2BXSg7mMkH484R9akm9wvjCZ2Rqed/so/V8Ur+xoCycJG/JrIsQE3FnMXupLJIrHzO5EgiR4qJBdDDY5AMbA== dependencies: - "@docusaurus/types" "^2.0.0-alpha.61" - "@docusaurus/utils" "^2.0.0-alpha.61" + "@docusaurus/core" "2.0.0-alpha.63" + "@docusaurus/types" "2.0.0-alpha.63" + "@docusaurus/utils" "2.0.0-alpha.63" + react-json-view "^1.19.1" -"@docusaurus/plugin-google-analytics@^2.0.0-alpha.61": - version "2.0.0-alpha.61" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-alpha.61.tgz#c57a48a1878050400631bd928f1cb74c94ba6791" - integrity sha512-f+KmaoM6eTledmgyijMNREvekZVLJ3nll6aUNDXPod9+MF673Hs4RGDyveMAjLiq03+VCgtXAniTSYsFIHcuAQ== +"@docusaurus/plugin-google-analytics@2.0.0-alpha.63": + version "2.0.0-alpha.63" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-alpha.63.tgz#2cb54d3c81bfe85b33469e00bfa669294d6a5c93" + integrity sha512-ENsXdIrWneNqcP3kkWK6lXRF9E8pQBFE5nUq9jSnmGBlh1ihS98PyJvJPHCCFHYfWOZLveEXIbhSMt+7WQftUA== + dependencies: + "@docusaurus/core" "2.0.0-alpha.63" -"@docusaurus/plugin-google-gtag@^2.0.0-alpha.61": - version "2.0.0-alpha.61" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-alpha.61.tgz#9471a39b27425708b6e8cca3fca8bace7e459153" - integrity sha512-9l/CUNtBIZqTKY7vD0dOOTrLRpbViXSQPsIOlfYDilS2AQmpsoJVQf6CcCts+GaxWMu0pTw3zeCNnFtJfDV5pA== +"@docusaurus/plugin-google-gtag@2.0.0-alpha.63": + version "2.0.0-alpha.63" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-alpha.63.tgz#0abe6c61b901897ef98e79be74bb881f377b3ddb" + integrity sha512-W0rGAfyWHstlPl2SRc6eyDq/KFuExw3+SIoVciv0XHHrLxNxrrImbuEuLwynIl45dylSRvXlaGvzRr5mGv3Y4Q== + dependencies: + "@docusaurus/core" "2.0.0-alpha.63" -"@docusaurus/plugin-sitemap@^2.0.0-alpha.61": - version "2.0.0-alpha.61" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-alpha.61.tgz#7b3d14951d834051b57223b3e9eb8ffb9bedeaaa" - integrity sha512-7nXJl/zsnr8Hlzxn3bm9NhpwP4sRFGXWwSCWCC4FMrIw9ihXWTtMGe9hDuJx4DqC8xufyQMw26VGauH7XAWdMg== +"@docusaurus/plugin-sitemap@2.0.0-alpha.63": + version "2.0.0-alpha.63" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-alpha.63.tgz#3da3aa917f5ab225cc371dee79db1b9ec788ad3a" + integrity sha512-XD4tNAXQNLv3r5Mm/RhLLcVjG1gE8UyIqaTcyW5kchhLHk1N2KWhedvu+0mSF7Ya5WzkH1cPepTVWIeznl84zA== dependencies: - "@docusaurus/types" "^2.0.0-alpha.61" + "@docusaurus/core" "2.0.0-alpha.63" + "@docusaurus/types" "2.0.0-alpha.63" "@hapi/joi" "17.1.1" fs-extra "^8.1.0" sitemap "^3.2.2" -"@docusaurus/preset-classic@^2.0.0-alpha.61": - version "2.0.0-alpha.61" - resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.0.0-alpha.61.tgz#38f9a34d3e5092264cfa48d0242ab774d13aa534" - integrity sha512-/3HL468XiSZ1T4mdvqnfV6O80Qv4BxAseJGnmkBwS0u6+Q1VgkNxRxVk4B45OWPaurK/Dl+sCn4sAAUWUGRsZg== - dependencies: - "@docusaurus/plugin-content-blog" "^2.0.0-alpha.61" - "@docusaurus/plugin-content-docs" "^2.0.0-alpha.61" - "@docusaurus/plugin-content-pages" "^2.0.0-alpha.61" - "@docusaurus/plugin-debug" "^2.0.0-alpha.61" - "@docusaurus/plugin-google-analytics" "^2.0.0-alpha.61" - "@docusaurus/plugin-google-gtag" "^2.0.0-alpha.61" - "@docusaurus/plugin-sitemap" "^2.0.0-alpha.61" - "@docusaurus/theme-classic" "^2.0.0-alpha.61" - "@docusaurus/theme-search-algolia" "^2.0.0-alpha.61" - -"@docusaurus/theme-classic@^2.0.0-alpha.61": - version "2.0.0-alpha.61" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.0.0-alpha.61.tgz#1023603aa729efe4d929b5e2c3268af1b492b891" - integrity sha512-LPJwDi8iPzBe36+U65h4w5N5rXSuXuxPXWzBe/eF0/miR7VVCKydGSSubQLSMAXV0QWspGJIRSPnwuNH3DjJZg== - dependencies: +"@docusaurus/preset-classic@^2.0.0-alpha.63": + version "2.0.0-alpha.63" + resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.0.0-alpha.63.tgz#9c6224549411c87e3b820e929c061aa1406c586b" + integrity sha512-auaqYnFTl62MRHzCoWV5s1euJvFzBWA4RlOObEkFJqADdFThc3pFj2bN3DrbDUQ9hg0iGCfH3RiLX17UhQUoDw== + dependencies: + "@docusaurus/core" "2.0.0-alpha.63" + "@docusaurus/plugin-content-blog" "2.0.0-alpha.63" + "@docusaurus/plugin-content-docs" "2.0.0-alpha.63" + "@docusaurus/plugin-content-pages" "2.0.0-alpha.63" + "@docusaurus/plugin-debug" "2.0.0-alpha.63" + "@docusaurus/plugin-google-analytics" "2.0.0-alpha.63" + "@docusaurus/plugin-google-gtag" "2.0.0-alpha.63" + "@docusaurus/plugin-sitemap" "2.0.0-alpha.63" + "@docusaurus/theme-classic" "2.0.0-alpha.63" + "@docusaurus/theme-search-algolia" "2.0.0-alpha.63" + +"@docusaurus/theme-classic@2.0.0-alpha.63": + version "2.0.0-alpha.63" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.0.0-alpha.63.tgz#ec9f1a7872adbb0f01f3e225646e5a3d3c8f69b8" + integrity sha512-xw0TQdfX2QFKnNBCq7oAwRxQ9n7wxK3/XkkSI3N46PPJx63MEvb7SF4o/S8yZgjRDUdpuKA+Ikq868yIt0cuJg== + dependencies: + "@docusaurus/core" "2.0.0-alpha.63" + "@docusaurus/plugin-content-blog" "2.0.0-alpha.63" + "@docusaurus/plugin-content-docs" "2.0.0-alpha.63" + "@docusaurus/plugin-content-pages" "2.0.0-alpha.63" + "@docusaurus/types" "2.0.0-alpha.63" + "@docusaurus/utils-validation" "2.0.0-alpha.63" "@hapi/joi" "^17.1.1" "@mdx-js/mdx" "^1.5.8" "@mdx-js/react" "^1.5.8" + "@types/react-toggle" "^4.0.2" clsx "^1.1.1" copy-text-to-clipboard "^2.2.0" infima "0.2.0-alpha.12" @@ -1511,40 +1547,46 @@ prop-types "^15.7.2" react-router-dom "^5.1.2" react-toggle "^4.1.1" + use-onclickoutside "^0.3.1" -"@docusaurus/theme-search-algolia@^2.0.0-alpha.61": - version "2.0.0-alpha.61" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-alpha.61.tgz#f29811f6e1ecc829cb933f56b8e1498903b6bba3" - integrity sha512-B47SmuBdF2kguBo3Wkx8L/jhYgHXxgxEpcf9JCLPGzK0YiRJk111z43h6PLSwirEpxb4OE+sFqr5oPvnsgnwRw== +"@docusaurus/theme-search-algolia@2.0.0-alpha.63": + version "2.0.0-alpha.63" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-alpha.63.tgz#d1563706ac4ec1d8096b32b022ac8bceee5c51d9" + integrity sha512-fqivQVnYOhPsSF/sjaWw5hZ9ltfnejqcXVlT4BNOHUu9p4Jup5vKkRytbotho1/8JTj/XG22RCPnNAcsBtdRDw== dependencies: - "@docsearch/react" "^1.0.0-alpha.25" + "@docsearch/react" "^1.0.0-alpha.27" + "@docusaurus/core" "2.0.0-alpha.63" + "@docusaurus/utils" "2.0.0-alpha.63" "@hapi/joi" "^17.1.1" algoliasearch "^4.0.0" algoliasearch-helper "^3.1.1" clsx "^1.1.1" eta "^1.1.1" + lodash "^4.17.19" -"@docusaurus/types@^2.0.0-alpha.61": - version "2.0.0-alpha.61" - resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-2.0.0-alpha.61.tgz#b2f5eaa18fb242100c0a8011edefe521b09e8375" - integrity sha512-x1fBiL/KNfREvA6B40CCTABjK9KP+kj/H/7mHfiwdtOYvVt9GJSgnjThkVD62lpVFbOhQ5C0togZsSzKlw6H/w== +"@docusaurus/types@2.0.0-alpha.63": + version "2.0.0-alpha.63" + resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-2.0.0-alpha.63.tgz#6733479ba8e0aebba183da510e7d74e3cdf45356" + integrity sha512-rzCYQKrB8xArXfSoad0RM1VtGfhmsSC3wXLVNrCFXp3F9sPTgRuev5jfEfvMWbJdkLZasNA4eNbMJ6JlrnfE4Q== dependencies: "@types/webpack" "^4.41.0" commander "^4.0.1" querystring "0.2.0" webpack-merge "^4.2.2" -"@docusaurus/utils-validation@^2.0.0-alpha.61": - version "2.0.0-alpha.61" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.0.0-alpha.61.tgz#cc8ddbf4720f29b0cb1d630e7925ab338f9a5432" - integrity sha512-3QrJqZoR5eBz2XG0ijuTIp5AEOe1OHtuv7nkKArOCzFmjuBJLhUTRcECf0K+lcmdJ25zrRAWAYNgTvpVpBjaNg== +"@docusaurus/utils-validation@2.0.0-alpha.63": + version "2.0.0-alpha.63" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.0.0-alpha.63.tgz#78e31bfa289a5c310a018465f232e4c7e369cff8" + integrity sha512-q+bHBobym6nFiK4nkJEIoPsIdHQDEatHYxv5MU1mzd8jZ2ajHYbvqjA2DWCSEZ4wrkJa0RwoP+9HUKdr3ZAPrA== dependencies: + "@docusaurus/utils" "2.0.0-alpha.63" "@hapi/joi" "17.1.1" + chalk "^3.0.0" -"@docusaurus/utils@^2.0.0-alpha.61": - version "2.0.0-alpha.61" - resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.0.0-alpha.61.tgz#bf7c7bd5a07419cafe9b67658f7f910b7fe71937" - integrity sha512-MHvR3Rq8Kk9W6skBR3x7mLsDaNrnp6Mmobyc0ZVql+eiLrjiN7SPunvrVJDE90bQ50HZFLLoAkfgfrvbX5mecg== +"@docusaurus/utils@2.0.0-alpha.63": + version "2.0.0-alpha.63" + resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.0.0-alpha.63.tgz#a33b10ae8f4920cba7cbc55566ad1c8abd716442" + integrity sha512-QrRuZAoj11cFgQMvjeNK12ds6y3VvPnYKu0mDpUp6jzB1fSlvIeKdnGR5Ju81LJ1CCXojNQkR8PtNK6kp1+KaA== dependencies: escape-string-regexp "^2.0.0" fs-extra "^8.1.0" @@ -1564,15 +1606,15 @@ url "^0.11.0" webpack-sources "^1.4.3" -"@francoischalifour/autocomplete-core@^1.0.0-alpha.26": - version "1.0.0-alpha.26" - resolved "https://registry.yarnpkg.com/@francoischalifour/autocomplete-core/-/autocomplete-core-1.0.0-alpha.26.tgz#fc9ec90a62f0665c7092d19a649c751fe3794de3" - integrity sha512-XUXAGVx0My9isShokR1QB/oPFQiaPYDCouoTZTN+DISQw5AK6kGZUCFFXJSRNHTxBq1/0e70DYEiQa8E+rT/Og== +"@francoischalifour/autocomplete-core@^1.0.0-alpha.28": + version "1.0.0-alpha.28" + resolved "https://registry.yarnpkg.com/@francoischalifour/autocomplete-core/-/autocomplete-core-1.0.0-alpha.28.tgz#6b9d8491288e77f831e9b345d461623b0d3f5005" + integrity sha512-rL9x+72btViw+9icfBKUJjZj87FgjFrD2esuTUqtj4RAX3s4AuVZiN8XEsfjQBSc6qJk31cxlvqZHC/BIyYXgg== -"@francoischalifour/autocomplete-preset-algolia@^1.0.0-alpha.26": - version "1.0.0-alpha.26" - resolved "https://registry.yarnpkg.com/@francoischalifour/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.0.0-alpha.26.tgz#3e20315d43dfef6c676cab4267974de70c2f6ec2" - integrity sha512-RrayxZgvTzpwq+RqEIpVn2UOEFLwa+HADCr2I3UI05o/OGU7Wc6LltpQy54scR+FlAIk6qTJwp5Nw/ecJn6xXg== +"@francoischalifour/autocomplete-preset-algolia@^1.0.0-alpha.28": + version "1.0.0-alpha.28" + resolved "https://registry.yarnpkg.com/@francoischalifour/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.0.0-alpha.28.tgz#a5ad7996f42e43e4acbb4e0010d663746d0e9997" + integrity sha512-bprfNmYt1opFUFEtD2XfY/kEsm13bzHQgU80uMjhuK0DJ914IjolT1GytpkdM6tJ4MBvyiJPP+bTtWO+BZ7c7w== "@hapi/address@2.x.x": version "2.1.4" @@ -1714,6 +1756,13 @@ "@nodelib/fs.scandir" "2.1.3" fastq "^1.6.0" +"@npmcli/move-file@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.0.1.tgz#de103070dac0f48ce49cf6693c23af59c0f70464" + integrity sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw== + dependencies: + mkdirp "^1.0.4" + "@sindresorhus/is@^0.14.0": version "0.14.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" @@ -1858,6 +1907,11 @@ resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.0.0.tgz#7532440c138605ced1b555935c3115ddd20e8bef" integrity sha512-q95SP4FdkmF0CwO0F2q0H6ZgudsApaY/yCtAQNRn1gduef5fGpyEphzy0YCq/N0UFvDSnLg5V8jFK/YGXlDiCw== +"@types/json-schema@^7.0.5": + version "7.0.6" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" + integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== + "@types/minimatch@*": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" @@ -1873,11 +1927,31 @@ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== +"@types/prop-types@*": + version "15.7.3" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" + integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== + "@types/q@^1.5.1": version "1.5.2" resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8" integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw== +"@types/react-toggle@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/react-toggle/-/react-toggle-4.0.2.tgz#46ffa5af1a55de5f25d0aa78ef0b557b5c8bf276" + integrity sha512-sHqfoKFnL0YU2+OC4meNEC8Ptx9FE8/+nFeFvNcdBa6ANA8KpAzj3R9JN8GtrvlLgjKDoYgI7iILgXYcTPo2IA== + dependencies: + "@types/react" "*" + +"@types/react@*": + version "16.9.49" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.49.tgz#09db021cf8089aba0cdb12a49f8021a69cce4872" + integrity sha512-DtLFjSj0OYAdVLBbyjhuV9CdGVHCkHn2R+xr3XkBvK2rS1Y1tkc14XSGjYgm5Fjjr90AxH9tiSzc1pCFMGO06g== + dependencies: + "@types/prop-types" "*" + csstype "^3.0.2" + "@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" @@ -2134,6 +2208,11 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== +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.2, ajv@^6.12.0: version "6.12.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" @@ -2144,6 +2223,16 @@ ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.0: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^6.12.4: + version "6.12.4" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.4.tgz#0614facc4522127fa713445c6bfd3ebd376e2234" + integrity sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ== + 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" + algoliasearch-helper@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.1.1.tgz#4cdfbaed6670d82626ac1fae001ccbf53192f497" @@ -2256,6 +2345,11 @@ aproba@^1.1.1: resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== +are-passive-events-supported@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/are-passive-events-supported/-/are-passive-events-supported-1.1.1.tgz#3db180a1753a2186a2de50a32cded3ac0979f5dc" + integrity sha512-5wnvlvB/dTbfrCvJ027Y4L4gW/6Mwoy1uFSavney0YO++GU+0e/flnjiBBwH+1kh7xNCgCOGvmJC3s32joYbww== + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -2315,6 +2409,11 @@ arrify@^1.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + asn1.js@^4.0.0: version "4.10.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" @@ -2431,6 +2530,11 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= +base16@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" + integrity sha1-4pf2DX7BAUp6lxo568ipjAtoHnA= + base64-js@^1.0.2: version "1.3.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" @@ -2712,7 +2816,7 @@ bytes@3.1.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== -cacache@^12.0.2, cacache@^12.0.3: +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== @@ -2733,28 +2837,27 @@ cacache@^12.0.2, cacache@^12.0.3: unique-filename "^1.1.1" y18n "^4.0.0" -cacache@^13.0.1: - version "13.0.1" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-13.0.1.tgz#a8000c21697089082f85287a1aec6e382024a71c" - integrity sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w== +cacache@^15.0.5: + version "15.0.5" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.5.tgz#69162833da29170d6732334643c60e005f5f17d0" + integrity sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A== dependencies: - chownr "^1.1.2" - figgy-pudding "^3.5.1" + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" fs-minipass "^2.0.0" glob "^7.1.4" - graceful-fs "^4.2.2" infer-owner "^1.0.4" - lru-cache "^5.1.1" - minipass "^3.0.0" + 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 "^0.5.1" - move-concurrently "^1.0.1" - p-map "^3.0.0" + mkdirp "^1.0.3" + p-map "^4.0.0" promise-inflight "^1.0.1" - rimraf "^2.7.1" - ssri "^7.0.0" + rimraf "^3.0.2" + ssri "^8.0.0" + tar "^6.0.2" unique-filename "^1.1.1" cache-base@^1.0.1: @@ -2991,11 +3094,16 @@ chokidar@^3.3.0: optionalDependencies: fsevents "~2.1.2" -chownr@^1.1.1, chownr@^1.1.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.2" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" @@ -3321,23 +3429,22 @@ copy-text-to-clipboard@^2.2.0: resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-2.2.0.tgz#329dd6daf8c42034c763ace567418401764579ae" integrity sha512-WRvoIdnTs1rgPMkgA2pUOa/M4Enh2uzCwdKsOMYNAJiz/4ZvEJgmbF4OmninPmlFdAWisfeh0tH+Cpf7ni3RqQ== -copy-webpack-plugin@^5.0.5: - version "5.1.1" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-5.1.1.tgz#5481a03dea1123d88a988c6ff8b78247214f0b88" - integrity sha512-P15M5ZC8dyCjQHWwd4Ia/dm0SgVvZJMYeykVIVYXbGyqO4dWB5oyPHp9i7wjwo5LhtlhKbiBCdS2NvM07Wlybg== - dependencies: - cacache "^12.0.3" - find-cache-dir "^2.1.0" - glob-parent "^3.1.0" - globby "^7.1.1" - is-glob "^4.0.1" - loader-utils "^1.2.3" - minimatch "^3.0.4" +copy-webpack-plugin@^6.0.3: + version "6.1.0" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-6.1.0.tgz#5bde7f826d87e716d8d5e761ddd34bb675448458" + integrity sha512-aWjIuLt1OVQxaDVffnt3bnGmLA8zGgAJaFwPA+a+QYVPh1vhIKjVfh3SbOFLV0kRPvGBITbw17n5CsmiBS4LQQ== + dependencies: + cacache "^15.0.5" + fast-glob "^3.2.4" + find-cache-dir "^3.3.1" + glob-parent "^5.1.1" + globby "^11.0.1" + loader-utils "^2.0.0" normalize-path "^3.0.0" - p-limit "^2.2.1" - schema-utils "^1.0.0" - serialize-javascript "^2.1.2" - webpack-log "^2.0.0" + p-limit "^3.0.2" + schema-utils "^2.7.1" + serialize-javascript "^4.0.0" + webpack-sources "^1.4.3" core-js-compat@^3.6.2: version "3.6.4" @@ -3352,6 +3459,11 @@ core-js-pure@^3.0.0: resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813" integrity sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA== +core-js@^1.0.0: + version "1.2.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= + core-js@^2.6.5: version "2.6.11" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" @@ -3651,6 +3763,11 @@ csso@^4.0.2: dependencies: css-tree "1.0.0-alpha.39" +csstype@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.3.tgz#2b410bbeba38ba9633353aff34b05d9755d065f8" + integrity sha512-jPl+wbWPOWJ7SXsWyqGRk3lGecbar0Cb0OvZF/r/ZU011R4YqiRehgkQ9p4eQfo9DSDLqLL3wHwfxeJiuIsNag== + cyclist@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" @@ -3848,13 +3965,6 @@ dir-glob@2.0.0: arrify "^1.0.1" path-type "^3.0.0" -dir-glob@^2.0.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" - integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== - dependencies: - path-type "^3.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" @@ -4051,6 +4161,13 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= +encoding@^0.1.11: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + 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" @@ -4364,6 +4481,18 @@ fast-glob@^3.0.3: micromatch "^4.0.2" picomatch "^2.2.1" +fast-glob@^3.1.1, fast-glob@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" + integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" + 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" @@ -4397,6 +4526,26 @@ faye-websocket@~0.11.1: dependencies: websocket-driver ">=0.5.1" +fbemitter@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fbemitter/-/fbemitter-2.1.1.tgz#523e14fdaf5248805bb02f62efc33be703f51865" + integrity sha1-Uj4U/a9SSIBbsC9i78M75wP1GGU= + dependencies: + fbjs "^0.8.4" + +fbjs@^0.8.0, fbjs@^0.8.4: + version "0.8.17" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" + integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= + dependencies: + core-js "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.18" + feed@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/feed/-/feed-4.1.0.tgz#58f1c9cc2b44715d14ac59234e1bf20c5d757aa7" @@ -4478,7 +4627,7 @@ find-cache-dir@^2.1.0: make-dir "^2.0.0" pkg-dir "^3.0.0" -find-cache-dir@^3.0.0, find-cache-dir@^3.2.0: +find-cache-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== @@ -4522,6 +4671,14 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" +flux@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/flux/-/flux-3.1.3.tgz#d23bed515a79a22d933ab53ab4ada19d05b2f08a" + integrity sha1-0jvtUVp5oi2TOrU6tK2hnQWy8Io= + dependencies: + fbemitter "^2.0.0" + fbjs "^0.8.0" + follow-redirects@^1.0.0: version "1.10.0" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.10.0.tgz#01f5263aee921c6a54fb91667f08f4155ce169eb" @@ -4683,7 +4840,7 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.1.0, glob-parent@~5.1.0: +glob-parent@^5.1.0, glob-parent@^5.1.1, glob-parent@~5.1.0: version "5.1.1" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== @@ -4762,6 +4919,18 @@ globby@^10.0.1: merge2 "^1.2.3" slash "^3.0.0" +globby@^11.0.1: + version "11.0.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" + integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + globby@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" @@ -4773,18 +4942,6 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" -globby@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" - integrity sha1-+yzP+UAfhgCUXfral0QMypcrhoA= - dependencies: - array-union "^1.0.1" - dir-glob "^2.0.0" - glob "^7.1.2" - ignore "^3.3.5" - pify "^3.0.0" - slash "^1.0.0" - good-listener@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" @@ -5192,6 +5349,13 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +iconv-lite@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" + integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + icss-utils@^4.0.0, icss-utils@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" @@ -5219,6 +5383,11 @@ ignore@^5.1.1: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf" integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A== +ignore@^5.1.4: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + immer@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/immer/-/immer-1.10.0.tgz#bad67605ba9c810275d91e1c2a47d4582e98286d" @@ -5699,7 +5868,7 @@ is-root@2.1.0, is-root@^2.1.0: resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== -is-stream@^1.1.0: +is-stream@^1.0.1, 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= @@ -5785,11 +5954,20 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= -jest-worker@^25.1.0: - version "25.2.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.2.1.tgz#209617015c768652646aa33a7828cc2ab472a18a" - integrity sha512-IHnpekk8H/hCUbBlfeaPZzU6v75bqwJp3n4dUrQuQOAgOneI4tx3jV2o8pvlXnDfcRsfkFIUD//HWXpCmR+evQ== +isomorphic-fetch@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + +jest-worker@^26.2.1: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.3.0.tgz#7c8a97e4f4364b4f05ed8bca8ca0c24de091871f" + integrity sha512-Vmpn2F6IASefL+DVBhPzI2J9/GJUsqzomdeN+P+dK8/jKxbh8R3BtFnx3FIta7wYlPU62cpJMJQo4kuOowcMnw== dependencies: + "@types/node" "*" merge-stream "^2.0.0" supports-color "^7.0.0" @@ -6027,6 +6205,11 @@ lodash.chunk@^4.2.0: resolved "https://registry.yarnpkg.com/lodash.chunk/-/lodash.chunk-4.2.0.tgz#66e5ce1f76ed27b4303d8c6512e8d1216e8106bc" integrity sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw= +lodash.curry@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" + integrity sha1-JI42By7ekGUB11lmIAqG2riyMXA= + lodash.defaults@^4.0.1: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" @@ -6047,6 +6230,11 @@ lodash.flatten@^4.2.0: resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= +lodash.flow@^3.3.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" + integrity sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o= + lodash.foreach@^4.3.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" @@ -6193,6 +6381,13 @@ lru-cache@^5.1.1: 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" + make-dir@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -6505,6 +6700,14 @@ minipass@^3.0.0, minipass@^3.1.1: 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" @@ -6544,6 +6747,11 @@ mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@~0.5.1: 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" @@ -6641,6 +6849,14 @@ node-emoji@^1.10.0: dependencies: lodash.toarray "^4.4.0" +node-fetch@^1.0.1: + version "1.7.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + node-forge@0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" @@ -6930,13 +7146,20 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.2.1, p-limit@^2.2.2: +p-limit@^2.0.0, p-limit@^2.2.0: version "2.2.2" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" integrity sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ== dependencies: p-try "^2.0.0" +p-limit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.0.2.tgz#1664e010af3cadc681baafd3e2a437be7b0fb5fe" + integrity sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg== + dependencies: + p-try "^2.0.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" @@ -6970,6 +7193,13 @@ p-map@^3.0.0: dependencies: aggregate-error "^3.0.0" +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" @@ -7937,7 +8167,14 @@ promise-inflight@^1.0.1: resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= -prop-types@^15.5.0, prop-types@^15.6.2, prop-types@^15.7.2: +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + dependencies: + asap "~2.0.3" + +prop-types@^15.5.0, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -8025,6 +8262,11 @@ pupa@^2.0.1: dependencies: escape-goat "^2.0.0" +pure-color@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e" + integrity sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4= + q@^1.1.2: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -8058,7 +8300,7 @@ querystringify@^2.1.1: resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: +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== @@ -8103,6 +8345,16 @@ rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" +react-base16-styling@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.6.0.tgz#ef2156d66cf4139695c8a167886cb69ea660792c" + integrity sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw= + dependencies: + base16 "^1.0.0" + lodash.curry "^4.0.1" + lodash.flow "^3.3.0" + pure-color "^1.2.0" + react-dev-utils@^10.2.1: version "10.2.1" resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-10.2.1.tgz#f6de325ae25fa4d546d09df4bb1befdc6dd19c19" @@ -8168,10 +8420,27 @@ react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-loadable-ssr-addon@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/react-loadable-ssr-addon/-/react-loadable-ssr-addon-0.2.3.tgz#55057abf95628d47727c68e966a6b3a53cde34e0" - integrity sha512-vPCqsmiafAMDcS9MLgXw3m4yMI40v1UeI8FTYJJkjf85LugKNnHf6D9yoDTzYwp8wEGF5viekwOD03ZPxSwnQQ== +react-json-view@^1.19.1: + version "1.19.1" + resolved "https://registry.yarnpkg.com/react-json-view/-/react-json-view-1.19.1.tgz#95d8e59e024f08a25e5dc8f076ae304eed97cf5c" + integrity sha512-u5e0XDLIs9Rj43vWkKvwL8G3JzvXSl6etuS5G42a8klMohZuYFQzSN6ri+/GiBptDqlrXPTdExJVU7x9rrlXhg== + dependencies: + flux "^3.1.3" + react-base16-styling "^0.6.0" + react-lifecycles-compat "^3.0.4" + react-textarea-autosize "^6.1.0" + +react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + +react-loadable-ssr-addon@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/react-loadable-ssr-addon/-/react-loadable-ssr-addon-0.3.0.tgz#ae9b2d3b11721930f8d8255476d288c0e9f9290f" + integrity sha512-E+lnmDakV0k6ut6R2J77vurwCOwTKEwKlHs9S62G8ez+ujecLPcqjt3YAU8M58kIGjp2QjFlZ7F9QWkq/mr6Iw== + dependencies: + "@babel/runtime" "^7.10.3" react-loadable@^5.5.0: version "5.5.0" @@ -8221,6 +8490,13 @@ react-side-effect@^2.1.0: resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-2.1.0.tgz#1ce4a8b4445168c487ed24dab886421f74d380d3" integrity sha512-IgmcegOSi5SNX+2Snh1vqmF0Vg/CbkycU9XZbOHJlZ6kMzTmi3yc254oB1WCkgA7OQtIAoLmcSFuHTc/tlcqXg== +react-textarea-autosize@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-6.1.0.tgz#df91387f8a8f22020b77e3833c09829d706a09a5" + integrity sha512-F6bI1dgib6fSvG8so1HuArPUv+iVEfPliuLWusLF+gAKz0FbB4jLrWUrTAeq1afnPT2c9toEZYUdz/y1uKMy4A== + dependencies: + prop-types "^15.6.0" + react-toggle@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/react-toggle/-/react-toggle-4.1.1.tgz#2317f67bf918ea3508a96b09dd383efd9da572af" @@ -8572,14 +8848,14 @@ rgba-regex@^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, rimraf@^2.7.1: +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.0: +rimraf@^3.0.0, 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== @@ -8654,7 +8930,7 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" -"safer-buffer@>= 2.1.2 < 3": +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -8681,7 +8957,7 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^2.0.0, schema-utils@^2.6.4, schema-utils@^2.6.5: +schema-utils@^2.0.0, schema-utils@^2.6.5: version "2.6.5" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.6.5.tgz#c758f0a7e624263073d396e29cd40aa101152d8a" integrity sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ== @@ -8689,6 +8965,15 @@ schema-utils@^2.0.0, schema-utils@^2.6.4, schema-utils@^2.6.5: ajv "^6.12.0" ajv-keywords "^3.4.1" +schema-utils@^2.6.6, schema-utils@^2.7.1: + 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" + section-matter@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" @@ -8760,6 +9045,13 @@ serialize-javascript@^2.1.2: resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== +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" + serve-handler@^6.1.3: version "6.1.3" resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.3.tgz#1bf8c5ae138712af55c758477533b9117f6435e8" @@ -8812,7 +9104,7 @@ set-value@^2.0.0, set-value@^2.0.1: is-plain-object "^2.0.3" split-string "^3.0.1" -setimmediate@^1.0.4: +setimmediate@^1.0.4, setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= @@ -9059,12 +9351,11 @@ ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" -ssri@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-7.1.0.tgz#92c241bf6de82365b5c7fb4bd76e975522e1294d" - integrity sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g== +ssri@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.0.tgz#79ca74e21f8ceaeddfcb4b90143c458b8d988808" + integrity sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA== dependencies: - figgy-pudding "^3.5.1" minipass "^3.1.1" stable@^0.1.8: @@ -9310,6 +9601,18 @@ tapable@^1.0.0, tapable@^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.0.5" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.5.tgz#bde815086e10b39f1dcd298e89d596e1535e200f" + integrity sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg== + 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" + term-size@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.0.tgz#1f16adedfe9bdc18800e1776821734086fcc6753" @@ -9330,22 +9633,22 @@ terser-webpack-plugin@^1.4.3: webpack-sources "^1.4.0" worker-farm "^1.7.0" -terser-webpack-plugin@^2.3.5: - version "2.3.5" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.3.5.tgz#5ad971acce5c517440ba873ea4f09687de2f4a81" - integrity sha512-WlWksUoq+E4+JlJ+h+U+QUzXpcsMSSNXkDy9lBVkSqDn1w23Gg29L/ary9GeJVYCGiNJJX7LnVc4bwL1N3/g1w== - dependencies: - cacache "^13.0.1" - find-cache-dir "^3.2.0" - jest-worker "^25.1.0" - p-limit "^2.2.2" - schema-utils "^2.6.4" - serialize-javascript "^2.1.2" +terser-webpack-plugin@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-3.1.0.tgz#91e6d39571460ed240c0cf69d295bcf30ebf98cb" + integrity sha512-cjdZte66fYkZ65rQ2oJfrdCAkkhJA7YLYk5eGOcGCSGlq0ieZupRdjedSQXYknMPo2IveQL+tPdrxUkERENCFA== + dependencies: + cacache "^15.0.5" + find-cache-dir "^3.3.1" + jest-worker "^26.2.1" + p-limit "^3.0.2" + schema-utils "^2.6.6" + serialize-javascript "^4.0.0" source-map "^0.6.1" - terser "^4.4.3" + terser "^4.8.0" webpack-sources "^1.4.3" -terser@^4.1.2, terser@^4.4.3, terser@^4.6.3: +terser@^4.1.2, terser@^4.6.3: version "4.6.7" resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.7.tgz#478d7f9394ec1907f0e488c5f6a6a9a2bad55e72" integrity sha512-fmr7M1f7DBly5cX2+rFDvmGBAaaZyPrHYK4mMdHEDAdNTqXSZgSOfqsfGq2HqPGT/1V0foZZuCZFx8CHKgAk3g== @@ -9354,6 +9657,15 @@ terser@^4.1.2, terser@^4.4.3, terser@^4.6.3: source-map "~0.6.1" source-map-support "~0.5.12" +terser@^4.8.0: + 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-table@0.2.0, text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -9540,6 +9852,11 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +ua-parser-js@^0.7.18: + version "0.7.21" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.21.tgz#853cf9ce93f642f67174273cc34565ae6f308777" + integrity sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ== + unherit@^1.0.4: version "1.1.3" resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22" @@ -9791,6 +10108,26 @@ url@^0.11.0: punycode "1.3.2" querystring "0.2.0" +use-isomorphic-layout-effect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.0.0.tgz#f56b4ed633e1c21cd9fc76fe249002a1c28989fb" + integrity sha512-JMwJ7Vd86NwAt1jH7q+OIozZSIxA4ND0fx6AsOe2q1H8ooBUp5aN6DvVCqZiIaYU6JaMRJGyR0FO7EBCIsb/Rg== + +use-latest@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/use-latest/-/use-latest-1.1.0.tgz#7bf9684555869c3f5f37e10d0884c8accf4d3aa6" + integrity sha512-gF04d0ZMV3AMB8Q7HtfkAWe+oq1tFXP6dZKwBHQF5nVXtGsh2oAYeeqma5ZzxtlpOcW8Ro/tLcfmEodjDeqtuw== + dependencies: + use-isomorphic-layout-effect "^1.0.0" + +use-onclickoutside@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/use-onclickoutside/-/use-onclickoutside-0.3.1.tgz#fdd723a6a499046b6bc761e4a03af432eee5917b" + integrity sha512-aahvbW5+G0XJfzj31FJeLsvc6qdKbzeTsQ8EtkHHq5qTg6bm/qkJeKLcgrpnYeHDDbd7uyhImLGdkbM9BRzOHQ== + dependencies: + are-passive-events-supported "^1.1.0" + use-latest "^1.0.0" + use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" @@ -9838,6 +10175,11 @@ utila@^0.4.0, utila@~0.4: resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= +utility-types@^3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/utility-types/-/utility-types-3.10.0.tgz#ea4148f9a741015f05ed74fd615e1d20e6bed82b" + integrity sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg== + utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" @@ -10083,6 +10425,11 @@ websocket-extensions@>=0.1.1: resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== +whatwg-fetch@>=0.10.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.4.0.tgz#e11de14f4878f773fbebcde8871b2c0699af8b30" + integrity sha512-rsum2ulz2iuZH08mJkT0Yi6JnKhwdw4oeyMjokgxd+mmqYSd9cPpOQf01TIWgjxG/U4+QR+AwKq6lSbXVxkyoQ== + whatwg-url@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06"