From 4646aa6b9ba67532ce7e8743ce16d7bd4369ad3d Mon Sep 17 00:00:00 2001 From: cpaulin Date: Wed, 23 Jun 2021 16:43:56 -0700 Subject: [PATCH 001/129] Handle race condition when a test has errored but is not finalized. (#983) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add partial test record upload with a background uploader thread. Cleanup Add missing typing.Optional type annotations to function parameters. Fixed parsing of default arguments provided to an OpenHTF phase. Print the OpenHTF result instead of logging it. Replace marginal field in mfg-i facing protos with new MARGINAL_PASS test status. Fix bug causing data to not be uploaded when a ThreadTerminationError occurs. Marginal pass - Propagate marginal determination to the test run level. Fix a few bugs with AllInRange and add unit tests Fix bug with is_marginal check on AllInRange validator Remove circular dependency between diagnoses_lib and phase_descriptor Move check_for_duplicate_results to phase_descriptor Fix and update type annotations in diagnoses_lib Update protos to output marginal determination upstream and add console coloring for marginal output cases. Add marginal measurements. See go/openhtf-marginal-pass. Added useful debugging messages to OpenHTF unit test results when they don't pass. Add a typing.overload to execute_phase_or_test Move openhtf.measures to the phase_descriptor module Added a library to convert OpenHTF objects to strings. Update built in validators to display the spec limits in the database. Fix bug where plugs were being updated twice, resulting in tearDown being called. Update unit test docs to cover TestCase.execute_phase_or_test. Retry setsockopt when starting up the multicast thread Add a decorator-free way to write unit tests. Add capturing of instantiated plugs as an attribute on the test case. Add get_attachment_or_die method to TestApi Regenerate units with the latest UNECE publication (rec20_Rev15e-2020.xls). Raise a clear Error message when a DeviceWrappingPlug is not fully initialized Fix DUT input phase hung w/ ctrl+c (sigint). Timeout when getting multicast.send() responses from queue Add force_repeat option to force a repeat of phase up to the repeat_limit. Adding the phase name to the phase outcome logging statements. Fix type of conf when accessed as openhtf.conf Give 3 retries for timeout phase as default; Add repeat_on_timeout option for phase Replace phase_group member with either phase_sequence or phases when appropriate. Add workaround for when AbortTest plug is not initialized (this happens sometimes, but is not easily reproducible). PiperOrigin-RevId: 381093144 --- CONTRIBUTORS | 1 + examples/all_the_things.py | 19 + examples/measurements.py | 12 + openhtf/__init__.py | 8 +- openhtf/core/diagnoses_lib.py | 65 +-- openhtf/core/measurements.py | 88 +--- openhtf/core/monitors.py | 2 +- openhtf/core/phase_descriptor.py | 151 ++++++- openhtf/core/phase_executor.py | 27 +- openhtf/core/phase_group.py | 2 +- openhtf/core/test_descriptor.py | 37 +- openhtf/core/test_record.py | 4 + openhtf/core/test_state.py | 56 ++- openhtf/output/callbacks/__init__.py | 2 +- openhtf/output/callbacks/mfg_inspector.py | 102 ++++- openhtf/output/proto/mfg_event_converter.py | 71 +++- openhtf/output/proto/test_runs_converter.py | 8 +- openhtf/output/servers/station_server.py | 2 +- openhtf/plugs/__init__.py | 2 +- openhtf/plugs/device_wrapping.py | 13 + openhtf/util/console_output.py | 2 +- openhtf/util/data.py | 7 +- openhtf/util/multicast.py | 50 ++- openhtf/util/test.py | 250 +++++++++-- openhtf/util/text.py | 304 ++++++++++++++ openhtf/util/units.py | 232 ++++++---- openhtf/util/validators.py | 237 ++++++++++- test/core/diagnoses_test.py | 113 ----- test/core/measurements_test.py | 18 + .../callbacks/mfg_event_converter_test.py | 22 +- test/phase_descriptor_test.py | 213 +++++++++- test/test_state_test.py | 37 +- test/util/test_test.py | 118 +++++- test/util/text_test.py | 397 ++++++++++++++++++ test/util/validators_test.py | 122 ++++++ 35 files changed, 2288 insertions(+), 506 deletions(-) create mode 100644 openhtf/util/text.py create mode 100644 test/util/text_test.py diff --git a/CONTRIBUTORS b/CONTRIBUTORS index e3718a83e..225413614 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -17,3 +17,4 @@ Joe Ethier John Hawley Keith Suda-Cederquist Kenneth Schiller +Christian Paulin diff --git a/examples/all_the_things.py b/examples/all_the_things.py index 0a1595382..9485cd921 100644 --- a/examples/all_the_things.py +++ b/examples/all_the_things.py @@ -112,6 +112,23 @@ def measures_with_args(test, minimum, maximum): test.measurements.replaced_min_max = 1 +@htf.measures( + htf.Measurement('replaced_marginal_min_only').in_range( + 0, 10, '{marginal_minimum}', 8, type=int), + htf.Measurement('replaced_marginal_max_only').in_range( + 0, 10, 2, '{marginal_maximum}', type=int), + htf.Measurement('replaced_marginal_min_max').in_range( + 0, 10, '{marginal_minimum}', '{marginal_maximum}', type=int), +) +def measures_with_marginal_args(test, marginal_minimum, marginal_maximum): + """Phase with measurement with marginal arguments.""" + del marginal_minimum # Unused. + del marginal_maximum # Unused. + test.measurements.replaced_marginal_min_only = 3 + test.measurements.replaced_marginal_max_only = 3 + test.measurements.replaced_marginal_min_max = 3 + + def attachments(test): test.attach('test_attachment', 'This is test attachment data.'.encode('utf-8')) @@ -156,6 +173,8 @@ def main(): attachments, skip_phase, measures_with_args.with_args(minimum=1, maximum=4), + measures_with_marginal_args.with_args( + marginal_minimum=4, marginal_maximum=6), analysis, ), # Some metadata fields, these in particular are used by mfg-inspector, diff --git a/examples/measurements.py b/examples/measurements.py index 23b044041..660fbec7e 100644 --- a/examples/measurements.py +++ b/examples/measurements.py @@ -162,6 +162,18 @@ def multdim_measurements(test): test.measurements['average_current']) +# Marginal measurements can be used to obtain a finer granularity of by how much +# a measurement is passing. Marginal measurements have stricter minimum and +# maximum limits, which are used to flag measurements/phase/test records as +# marginal without affecting the overall phase outcome. +@htf.measures( + htf.Measurement('resistance').with_units('ohm').in_range( + minimum=5, maximum=17, marginal_minimum=9, marginal_maximum=11)) +def marginal_measurements(test): + """Phase with a marginal measurement.""" + test.measurements.resistance = 13 + + def main(): # We instantiate our OpenHTF test with the phases we want to run as args. test = htf.Test(hello_phase, again_phase, lots_of_measurements, diff --git a/openhtf/__init__.py b/openhtf/__init__.py index b148e72ff..0e8d96271 100644 --- a/openhtf/__init__.py +++ b/openhtf/__init__.py @@ -14,12 +14,12 @@ """The main OpenHTF entry point.""" import signal +import typing from openhtf import plugs from openhtf.core import phase_executor from openhtf.core import test_record from openhtf.core.base_plugs import BasePlug -from openhtf.core.diagnoses_lib import diagnose from openhtf.core.diagnoses_lib import DiagnosesStore from openhtf.core.diagnoses_lib import Diagnosis from openhtf.core.diagnoses_lib import DiagnosisComponent @@ -30,7 +30,6 @@ from openhtf.core.measurements import Dimension from openhtf.core.measurements import Measurement -from openhtf.core.measurements import measures from openhtf.core.monitors import monitors from openhtf.core.phase_branches import BranchSequence from openhtf.core.phase_branches import DiagnosisCheckpoint @@ -38,6 +37,8 @@ from openhtf.core.phase_branches import PhaseFailureCheckpoint from openhtf.core.phase_collections import PhaseSequence from openhtf.core.phase_collections import Subtest +from openhtf.core.phase_descriptor import diagnose +from openhtf.core.phase_descriptor import measures from openhtf.core.phase_descriptor import PhaseDescriptor from openhtf.core.phase_descriptor import PhaseOptions from openhtf.core.phase_descriptor import PhaseResult @@ -57,6 +58,9 @@ from openhtf.util import units import pkg_resources +if typing.TYPE_CHECKING: + conf: conf.Configuration # Configuration is only available here in typing. + def get_version(): """Returns the version string of the 'openhtf' package. diff --git a/openhtf/core/diagnoses_lib.py b/openhtf/core/diagnoses_lib.py index 8b29dc227..884f9113f 100644 --- a/openhtf/core/diagnoses_lib.py +++ b/openhtf/core/diagnoses_lib.py @@ -123,13 +123,11 @@ def main(): """ import abc -import collections import logging -from typing import Any, Callable, DefaultDict, Dict, Iterable, Iterator, List, Optional, Sequence, Set, Text, Type, TYPE_CHECKING, Union +from typing import Any, Callable, Dict, Iterable, List, Optional, Sequence, Text, Type, TYPE_CHECKING, Union import attr import enum # pylint: disable=g-bad-import-order -from openhtf.core import phase_descriptor from openhtf.core import test_record from openhtf.util import data import six @@ -147,10 +145,6 @@ class InvalidDiagnosisError(Exception): """A Diagnosis was constructed incorrectly.""" -class DuplicateResultError(Exception): - """Different DiagResultEnum instances define the same value.""" - - @attr.s(slots=True) class DiagnosesStore(object): """Storage and lookup of diagnoses.""" @@ -265,42 +259,6 @@ def execute_test_diagnoser(self, diagnoser: 'BaseTestDiagnoser', self._add_diagnosis(diag) -def check_for_duplicate_results( - phase_iterator: Iterator[phase_descriptor.PhaseDescriptor], - test_diagnosers: Sequence['BaseTestDiagnoser']) -> None: - """Check for any results with the same enum value in different ResultTypes. - - Args: - phase_iterator: iterator over the phases to check. - test_diagnosers: list of test level diagnosers. - - Raises: - DuplicateResultError: when duplicate enum values are found. - """ - all_result_enums = set() # type: Set[Type['DiagResultEnum']] - for phase in phase_iterator: - for phase_diag in phase.diagnosers: - all_result_enums.add(phase_diag.result_type) - for test_diag in test_diagnosers: - all_result_enums.add(test_diag.result_type) - - values_to_enums = collections.defaultdict( - list) # type: DefaultDict[str, Type['DiagResultEnum']] - for enum_cls in all_result_enums: - for entry in enum_cls: - values_to_enums[entry.value].append(enum_cls) - - duplicates = [] # type: List[str] - for result_value, enum_classes in sorted(values_to_enums.items()): - if len(enum_classes) > 1: - duplicates.append('Value "{}" defined by {}'.format( - result_value, enum_classes)) - if not duplicates: - return - raise DuplicateResultError('Duplicate DiagResultEnum values: {}'.format( - '\n'.join(duplicates))) - - def _check_diagnoser(diagnoser: '_BaseDiagnoser', diagnoser_cls: Type['_BaseDiagnoser']) -> None: """Check that a diagnoser is properly created.""" @@ -377,8 +335,7 @@ class BasePhaseDiagnoser(six.with_metaclass(abc.ABCMeta, _BaseDiagnoser)): __slots__ = () @abc.abstractmethod - def run(self, - phase_record: phase_descriptor.PhaseDescriptor) -> DiagnoserReturnT: + def run(self, phase_record: test_record.PhaseRecord) -> DiagnoserReturnT: """Must be implemented to return list of Diagnoses instances. Args: @@ -547,21 +504,3 @@ def __attrs_post_init__(self) -> None: def as_base_types(self) -> Dict[Text, Any]: return data.convert_to_base_types( attr.asdict(self, filter=_diagnosis_serialize_filter)) - - -def diagnose( - *diagnosers: BasePhaseDiagnoser -) -> Callable[[phase_descriptor.PhaseT], phase_descriptor.PhaseDescriptor]: - """Decorator to add diagnosers to a PhaseDescriptor.""" - check_diagnosers(diagnosers, BasePhaseDiagnoser) - diags = list(diagnosers) - - def decorate( - wrapped_phase: phase_descriptor.PhaseT - ) -> phase_descriptor.PhaseDescriptor: - """Phase decorator to be returned.""" - phase = phase_descriptor.PhaseDescriptor.wrap_or_copy(wrapped_phase) - phase.diagnosers.extend(diags) - return phase - - return decorate diff --git a/openhtf/core/measurements.py b/openhtf/core/measurements.py index efc878db9..6774ef1b7 100644 --- a/openhtf/core/measurements.py +++ b/openhtf/core/measurements.py @@ -22,7 +22,7 @@ Measurements are described by the measurements.Measurement class. Essentially, the Measurement class is used by test authors to declare measurements by name, and to optionally provide unit, type, and validation information. Measurements -are attached to Test Phases using the @measurements.measures() decorator. +are attached to Test Phases using the @openhtf.measures() decorator. When measurements are output by the OpenHTF framework, the Measurement objects are serialized into the 'measurements' field on the PhaseRecord, which contain @@ -45,11 +45,11 @@ Examples: - @measurements.measures( + @openhtf.measures( measurements.Measurement( 'number_widgets').in_range(5, 10).doc( '''This phase parameter tracks the number of widgets.''')) - @measurements.measures( + @openhtf.measures( *(measurements.Measurement('level_%s' % lvl) for lvl in ('none', 'some', 'all'))) def WidgetTestPhase(test): @@ -62,17 +62,18 @@ def WidgetTestPhase(test): import enum import functools import logging +import typing from typing import Any, Callable, Dict, Iterator, List, Optional, Text, Tuple, Union import attr from openhtf import util -from openhtf.core import diagnoses_lib -from openhtf.core import phase_descriptor from openhtf.util import data from openhtf.util import units as util_units from openhtf.util import validators import six +if typing.TYPE_CHECKING: + from openhtf.core import diagnoses_lib try: # pylint: disable=g-import-not-at-top @@ -119,7 +120,7 @@ class _ConditionalValidator(object): """Conditional validator declaration.""" # The diagnosis result required for the validator to be used. - result = attr.ib(type=diagnoses_lib.DiagResultEnum) + result = attr.ib(type='diagnoses_lib.DiagResultEnum') # The validator to use when the result is present. validator = attr.ib(type=Callable[[Any], bool]) @@ -187,6 +188,8 @@ class Measurement(object): notification_cb: An optional function to be called when the measurement is set. outcome: One of the Outcome() enumeration values, starting at UNSET. + marginal: A bool flag indicating if this measurement is marginal if the + outcome is PASS. _cached: A cached dict representation of this measurement created initially during as_base_types and updated in place to save allocation time. """ @@ -211,6 +214,7 @@ class Measurement(object): type=Union['MeasuredValue', 'DimensionedMeasuredValue'], default=None) _notification_cb = attr.ib(type=Optional[Callable[[], None]], default=None) outcome = attr.ib(type=Outcome, default=Outcome.UNSET) + marginal = attr.ib(type=bool, default=False) # Runtime cache to speed up conversions. _cached = attr.ib(type=Optional[Dict[Text, Any]], default=None) @@ -341,7 +345,7 @@ def with_validator(self, validator: Callable[[Any], bool]) -> 'Measurement': return self def validate_on( - self, result_to_validator_mapping: Dict[diagnoses_lib.DiagResultEnum, + self, result_to_validator_mapping: Dict['diagnoses_lib.DiagResultEnum', Callable[[Any], bool]] ) -> 'Measurement': """Adds conditional validators. @@ -414,11 +418,17 @@ def _with_validator(*args, **kwargs): return _with_validator def validate(self) -> 'Measurement': - """Validate this measurement and update its 'outcome' field.""" + """Validate this measurement and update 'outcome' and 'marginal' fields.""" # PASS if all our validators return True, otherwise FAIL. try: if all(v(self._measured_value.value) for v in self.validators): self.outcome = Outcome.PASS + + # Only check marginality for passing measurements. + if any( + hasattr(v, 'is_marginal') and + v.is_marginal(self._measured_value.value) for v in self.validators): + self.marginal = True else: self.outcome = Outcome.FAIL return self @@ -811,69 +821,9 @@ def __getitem__(self, name: Text) -> Any: # Return the MeasuredValue's value, MeasuredValue will raise if not set. return m.measured_value.value + # Work around for attrs bug in 20.1.0; after the next release, this can be # removed and `Collection._custom_setattr` can be renamed to `__setattr__`. # https://github.com/python-attrs/attrs/issues/680 Collection.__setattr__ = Collection._custom_setattr # pylint: disable=protected-access del Collection._custom_setattr - - -def measures( - *measurements: Union[Text, Measurement], **kwargs: Any -) -> Callable[[phase_descriptor.PhaseT], phase_descriptor.PhaseDescriptor]: - """Decorator-maker used to declare measurements for phases. - - See the measurements module docstring for examples of usage. - - Args: - *measurements: Measurement objects to declare, or a string name from which - to create a Measurement. - **kwargs: Keyword arguments to pass to Measurement constructor if we're - constructing one. Note that if kwargs are provided, the length of - measurements must be 1, and that value must be a string containing the - measurement name. For valid kwargs, see the definition of the Measurement - class. - - Raises: - InvalidMeasurementTypeError: When the measurement is not defined correctly. - - Returns: - A decorator that declares the measurement(s) for the decorated phase. - """ - - def _maybe_make(meas: Union[Text, Measurement]) -> Measurement: - """Turn strings into Measurement objects if necessary.""" - if isinstance(meas, Measurement): - return meas - elif isinstance(meas, six.string_types): - return Measurement(meas, **kwargs) - raise InvalidMeasurementTypeError('Expected Measurement or string', meas) - - # In case we're declaring a measurement inline, we can only declare one. - if kwargs and len(measurements) != 1: - raise InvalidMeasurementTypeError( - 'If @measures kwargs are provided, a single measurement name must be ' - 'provided as a positional arg first.') - - # Unlikely, but let's make sure we don't allow overriding initial outcome. - if 'outcome' in kwargs: - raise ValueError('Cannot specify outcome in measurement declaration!') - - measurements = [_maybe_make(meas) for meas in measurements] - - # 'measurements' is guaranteed to be a list of Measurement objects here. - def decorate( - wrapped_phase: phase_descriptor.PhaseT - ) -> phase_descriptor.PhaseDescriptor: - """Phase decorator to be returned.""" - phase = phase_descriptor.PhaseDescriptor.wrap_or_copy(wrapped_phase) - duplicate_names = ( - set(m.name for m in measurements) - & set(m.name for m in phase.measurements)) - if duplicate_names: - raise DuplicateNameError('Measurement names duplicated', duplicate_names) - - phase.measurements.extend(measurements) - return phase - - return decorate diff --git a/openhtf/core/monitors.py b/openhtf/core/monitors.py index 2e301b1cf..a9a7ff256 100644 --- a/openhtf/core/monitors.py +++ b/openhtf/core/monitors.py @@ -155,7 +155,7 @@ def wrapper( @openhtf.PhaseOptions(requires_state=True) @plugs.plug(update_kwargs=False, **monitor_plugs) - @measurements.measures( + @openhtf.measures( measurements.Measurement(measurement_name).with_units( units).with_dimensions(uom.MILLISECOND)) @functools.wraps(phase_desc.func) diff --git a/openhtf/core/phase_descriptor.py b/openhtf/core/phase_descriptor.py index cad849bd4..93b3f0575 100644 --- a/openhtf/core/phase_descriptor.py +++ b/openhtf/core/phase_descriptor.py @@ -18,16 +18,19 @@ """ +import collections import enum import inspect import pdb -from typing import Any, Callable, Dict, List, Optional, Text, TYPE_CHECKING, Type, Union +from typing import Any, Callable, Dict, Iterator, List, Optional, Sequence, Set, Text, TYPE_CHECKING, Type, Union import attr import openhtf from openhtf import util from openhtf.core import base_plugs +from openhtf.core import diagnoses_lib +from openhtf.core import measurements as core_measurements from openhtf.core import phase_nodes from openhtf.core import test_record import openhtf.plugs @@ -36,8 +39,6 @@ import six if TYPE_CHECKING: - from openhtf.core import diagnoses_lib # pylint: disable=g-import-not-at-top - from openhtf.core import measurements as core_measurements # pylint: disable=g-import-not-at-top from openhtf.core import test_state # pylint: disable=g-import-not-at-top @@ -93,6 +94,8 @@ class PhaseOptions(object): otherwise only the TestApi will be passed in. This is useful if a phase needs to wrap another phase for some reason, as PhaseDescriptors can only be invoked with a TestState instance. + force_repeat: If True, force the phase to repeat up to repeat_limit times. + repeat_on_timeout: If consider repeat on phase timeout, default is No. repeat_limit: Maximum number of repeats. None indicates a phase will be repeated infinitely as long as PhaseResult.REPEAT is returned. run_under_pdb: If True, run the phase under the Python Debugger (pdb). When @@ -107,6 +110,8 @@ def PhaseFunc(test, port, other_info): pass timeout_s = attr.ib(type=Optional[TimeoutT], default=None) run_if = attr.ib(type=Optional[Callable[[], bool]], default=None) requires_state = attr.ib(type=bool, default=False) + force_repeat = attr.ib(type=bool, default=False) + repeat_on_timeout = attr.ib(type=bool, default=False) repeat_limit = attr.ib(type=Optional[int], default=None) run_under_pdb = attr.ib(type=bool, default=False) @@ -128,6 +133,8 @@ def __call__(self, phase_func: PhaseT) -> 'PhaseDescriptor': phase.options.run_if = self.run_if if self.requires_state: phase.options.requires_state = self.requires_state + if self.repeat_on_timeout: + phase.options.repeat_on_timeout = self.repeat_on_timeout if self.repeat_limit is not None: phase.options.repeat_limit = self.repeat_limit if self.run_under_pdb: @@ -157,8 +164,7 @@ class PhaseDescriptor(phase_nodes.PhaseNode): func = attr.ib(type=PhaseCallableT) options = attr.ib(type=PhaseOptions, factory=PhaseOptions) plugs = attr.ib(type=List[base_plugs.PhasePlug], factory=list) - measurements = attr.ib( - type=List['core_measurements.Measurement'], factory=list) + measurements = attr.ib(type=List[core_measurements.Measurement], factory=list) diagnosers = attr.ib( type=List['diagnoses_lib.BasePhaseDiagnoser'], factory=list) extra_kwargs = attr.ib(type=Dict[Text, Any], factory=dict) @@ -315,17 +321,21 @@ def __call__(self, Returns: The return value from calling the underlying function. """ - kwargs = dict(self.extra_kwargs) - kwargs.update( - running_test_state.plug_manager.provide_plugs( - (plug.name, plug.cls) for plug in self.plugs if plug.update_kwargs)) - + kwargs = {} if six.PY3: arg_info = inspect.getfullargspec(self.func) keywords = arg_info.varkw else: arg_info = inspect.getargspec(self.func) # pylint: disable=deprecated-method keywords = arg_info.keywords + if arg_info.defaults is not None: + for arg_name, arg_value in zip(arg_info.args[-len(arg_info.defaults):], + arg_info.defaults): + kwargs[arg_name] = arg_value + kwargs.update(self.extra_kwargs) + kwargs.update( + running_test_state.plug_manager.provide_plugs( + (plug.name, plug.cls) for plug in self.plugs if plug.update_kwargs)) # Pass in test_api if the phase takes *args, or **kwargs with at least 1 # positional, or more positional args than we have keyword args. if arg_info.varargs or (keywords and len(arg_info.args) >= 1) or (len( @@ -344,3 +354,124 @@ def __call__(self, return pdb.runcall(self.func, **kwargs) else: return self.func(**kwargs) + + +def measures(*measurements: Union[Text, core_measurements.Measurement], + **kwargs: Any) -> Callable[[PhaseT], PhaseDescriptor]: + """Creates decorators to declare measurements for phases. + + See the measurements module docstring for examples of usage. + + Args: + *measurements: Measurement objects to declare, or a string name from which + to create a Measurement. + **kwargs: Keyword arguments to pass to Measurement constructor if we're + constructing one. Note that if kwargs are provided, the length of + measurements must be 1, and that value must be a string containing the + measurement name. For valid kwargs, see the definition of the Measurement + class. + + Raises: + InvalidMeasurementTypeError: When the measurement is not defined correctly. + ValueError: If a measurement already has an outcome. + DuplicateNameError: If a measurement's name is already in use. + + Returns: + A decorator that declares the measurement(s) for the decorated phase. + """ + + def _maybe_make( + meas: Union[Text, core_measurements.Measurement] + ) -> core_measurements.Measurement: + """Turn strings into Measurement objects if necessary.""" + if isinstance(meas, core_measurements.Measurement): + return meas + elif isinstance(meas, six.string_types): + return core_measurements.Measurement(meas, **kwargs) + raise core_measurements.InvalidMeasurementTypeError( + 'Expected Measurement or string', meas) + + # In case we're declaring a measurement inline, we can only declare one. + if kwargs and len(measurements) != 1: + raise core_measurements.InvalidMeasurementTypeError( + 'If @measures kwargs are provided, a single measurement name must be ' + 'provided as a positional arg first.') + + # Unlikely, but let's make sure we don't allow overriding initial outcome. + if 'outcome' in kwargs: + raise ValueError('Cannot specify outcome in measurement declaration!') + + measurements = [_maybe_make(meas) for meas in measurements] + + # 'measurements' is guaranteed to be a list of Measurement objects here. + def decorate(wrapped_phase: PhaseT) -> PhaseDescriptor: + """Phase decorator to be returned.""" + phase = PhaseDescriptor.wrap_or_copy(wrapped_phase) + duplicate_names = ( + set(m.name for m in measurements) + & set(m.name for m in phase.measurements)) + if duplicate_names: + raise core_measurements.DuplicateNameError('Measurement names duplicated', + duplicate_names) + + phase.measurements.extend(measurements) + return phase + + return decorate + + +class DuplicateResultError(Exception): + """Different DiagResultEnum instances define the same value.""" + + +def check_for_duplicate_results( + phase_iterator: Iterator[PhaseDescriptor], + test_diagnosers: Sequence[diagnoses_lib.BaseTestDiagnoser]) -> None: + """Check for any results with the same enum value in different ResultTypes. + + Args: + phase_iterator: iterator over the phases to check. + test_diagnosers: list of test level diagnosers. + + Raises: + DuplicateResultError: when duplicate enum values are found. + """ + all_result_enums: Set[Type[diagnoses_lib.DiagResultEnum]] = set() + for phase in phase_iterator: + for phase_diag in phase.diagnosers: + all_result_enums.add(phase_diag.result_type) + for test_diag in test_diagnosers: + all_result_enums.add(test_diag.result_type) + + values_to_enums = collections.defaultdict(list) + for enum_cls in all_result_enums: + # pytype incorrectly determines that the enum cannot be iterated over. Using + # __members__.values() allows direct type inference. + for entry in enum_cls.__members__.values(): + values_to_enums[entry.value].append(enum_cls) + + duplicates: List[str] = [] + for result_value, enum_classes in sorted(values_to_enums.items()): + if len(enum_classes) > 1: + duplicates.append('Value "{}" defined by {}'.format( + result_value, enum_classes)) + if not duplicates: + return + raise DuplicateResultError('Duplicate DiagResultEnum values: {}'.format( + '\n'.join(duplicates))) + + +def diagnose( + *diagnosers: diagnoses_lib.BasePhaseDiagnoser +) -> Callable[[PhaseT], PhaseDescriptor]: + """Decorator to add diagnosers to a PhaseDescriptor.""" + diagnoses_lib.check_diagnosers(diagnosers, diagnoses_lib.BasePhaseDiagnoser) + diags = list(diagnosers) + + def decorate(wrapped_phase: PhaseT) -> PhaseDescriptor: + """Phase decorator to be returned.""" + phase = PhaseDescriptor.wrap_or_copy(wrapped_phase) + phase.diagnosers.extend(diags) + return phase + + return decorate diff --git a/openhtf/core/phase_executor.py b/openhtf/core/phase_executor.py index de3f401cc..766e4e10a 100644 --- a/openhtf/core/phase_executor.py +++ b/openhtf/core/phase_executor.py @@ -52,6 +52,8 @@ from openhtf.core import test_state as htf_test_state # pylint: disable=g-import-not-at-top DEFAULT_PHASE_TIMEOUT_S = 3 * 60 +DEFAULT_RETRIES = 3 +_JOIN_TRY_INTERVAL_SECONDS = 3 ARG_PARSER = argv.module_parser() ARG_PARSER.add_argument( @@ -69,8 +71,8 @@ class ExceptionInfo(object): """Wrap the description of a raised exception and its traceback.""" - exc_type = attr.ib(type=Type[Exception]) - exc_val = attr.ib(type=Exception) + exc_type = attr.ib(type=Type[BaseException]) + exc_val = attr.ib(type=BaseException) exc_tb = attr.ib(type=types.TracebackType) def as_base_types(self) -> Dict[Text, Text]: @@ -200,10 +202,15 @@ def _thread_exception(self, *args) -> bool: def join_or_die(self) -> PhaseExecutionOutcome: """Wait for thread to finish, returning a PhaseExecutionOutcome instance.""" + deadline = time.monotonic() + DEFAULT_PHASE_TIMEOUT_S if self._phase_desc.options.timeout_s is not None: - self.join(self._phase_desc.options.timeout_s) - else: - self.join(DEFAULT_PHASE_TIMEOUT_S) + deadline = time.monotonic() + self._phase_desc.options.timeout_s + while time.monotonic() < deadline: + # Using exception to kill thread is not honored when thread is busy, + # so we leave the thread behind, and move on teardown. + self.join(_JOIN_TRY_INTERVAL_SECONDS) + if not self.is_alive() or self._killed.is_set(): + break # We got a return value or an exception and handled it. if self._phase_execution_outcome: @@ -260,13 +267,19 @@ def execute_phase( requested and successfully ran for this phase execution. """ repeat_count = 1 - repeat_limit = phase.options.repeat_limit or sys.maxsize + repeat_limit = (phase.options.repeat_limit or + DEFAULT_RETRIES) while not self._stopping.is_set(): is_last_repeat = repeat_count >= repeat_limit phase_execution_outcome, profile_stats = self._execute_phase_once( phase, is_last_repeat, run_with_profiling, subtest_rec) - if phase_execution_outcome.is_repeat and not is_last_repeat: + # Give 3 default retries for timeout phase. + # Force repeat up to the repeat limit if force_repeat is set. + if ((phase_execution_outcome.is_timeout and + phase.options.repeat_on_timeout) or + phase_execution_outcome.is_repeat or + phase.options.force_repeat) and not is_last_repeat: repeat_count += 1 continue diff --git a/openhtf/core/phase_group.py b/openhtf/core/phase_group.py index 1694ab1fb..c62357434 100644 --- a/openhtf/core/phase_group.py +++ b/openhtf/core/phase_group.py @@ -141,7 +141,7 @@ def combine(self, def wrap(self, main_phases: phase_collections.SequenceInitializerT, - name: Text = None) -> 'PhaseGroup': + name: Optional[Text] = None) -> 'PhaseGroup': """Returns PhaseGroup with additional main phases.""" other = PhaseGroup(main=main_phases) return self.combine(other, name=name) diff --git a/openhtf/core/test_descriptor.py b/openhtf/core/test_descriptor.py index 50183b6e5..43e7e3278 100644 --- a/openhtf/core/test_descriptor.py +++ b/openhtf/core/test_descriptor.py @@ -65,6 +65,10 @@ default_value=False) +class AttachmentNotFoundError(Exception): + """Raised when test attachment not found.""" + + class UnrecognizedTestUidError(Exception): """Raised when information is requested about an unknown Test UID.""" @@ -284,7 +288,7 @@ def execute(self, Raises: InvalidTestStateError: if this test is already being executed. """ - diagnoses_lib.check_for_duplicate_results( + phase_descriptor.check_for_duplicate_results( self._test_desc.phase_sequence.all_phases(), self._test_options.diagnosers) phase_collections.check_for_duplicate_subtest_names( @@ -362,12 +366,17 @@ def trigger_phase(test): (colorama.Style.BRIGHT, colorama.Fore.GREEN)) # pytype: disable=wrong-arg-types colors[htf_test_record.Outcome.FAIL] = ''.join( (colorama.Style.BRIGHT, colorama.Fore.RED)) # pytype: disable=wrong-arg-types - msg_template = 'test: {name} outcome: {color}{outcome}{rst}' + msg_template = ( + 'test: {name} outcome: {color}{outcome}{marginal}{rst}') console_output.banner_print( msg_template.format( name=final_state.test_record.metadata['test_name'], - color=colors[final_state.test_record.outcome], + color=(colorama.Fore.YELLOW + if final_state.test_record.marginal else + colors[final_state.test_record.outcome]), outcome=final_state.test_record.outcome.name, + marginal=(' (MARGINAL)' + if final_state.test_record.marginal else ''), rst=colorama.Style.RESET_ALL)) finally: del self.TEST_INSTANCES[self.uid] @@ -573,6 +582,9 @@ def get_attachment( self, attachment_name: Text) -> Optional[htf_test_record.Attachment]: """Get a copy of an attachment from current or previous phases. + This method will return None when test attachment is not found. Please use + get_attachment_strict method if exception is expected to be raised. + Args: attachment_name: str of the attachment name @@ -581,6 +593,25 @@ def get_attachment( """ return self._running_test_state.get_attachment(attachment_name) + def get_attachment_strict( + self, attachment_name: Text) -> htf_test_record.Attachment: + """Gets a copy of an attachment or dies when attachment not found. + + Args: + attachment_name: An attachment name. + + Returns: + A copy of the attachment. + + Raises: + AttachmentNotFoundError: Raised when attachment is not found. + """ + attachment = self.get_attachment(attachment_name) + if attachment is None: + raise AttachmentNotFoundError('Failed to find test attachment: ' + f'{attachment_name}') + return attachment + def notify_update(self) -> None: """Notify any update events that there was an update.""" self._running_test_state.notify_update() diff --git a/openhtf/core/test_record.py b/openhtf/core/test_record.py index 8bb768f21..047eede28 100644 --- a/openhtf/core/test_record.py +++ b/openhtf/core/test_record.py @@ -178,6 +178,7 @@ class TestRecord(object): type=List['diagnoses_lib.BaseTestDiagnoser'], factory=list) diagnoses = attr.ib(type=List['diagnoses_lib.Diagnosis'], factory=list) log_records = attr.ib(type=List[logs.LogRecord], factory=list) + marginal = attr.ib(type=Optional[bool], default=None) # Cache fields to reduce repeated base type conversions. _cached_record = attr.ib(type=Dict[Text, Any], factory=dict) @@ -249,6 +250,7 @@ def as_base_types(self) -> Dict[Text, Any]: 'end_time_millis': self.end_time_millis, 'outcome': data.convert_to_base_types(self.outcome), 'outcome_details': data.convert_to_base_types(self.outcome_details), + 'marginal': self.marginal, 'metadata': metadata, 'phases': self._cached_phases, 'subtests': self._cached_subtests, @@ -366,6 +368,7 @@ class PhaseRecord(object): result = attr.ib( type=Optional['phase_executor.PhaseExecutionOutcome'], default=None) outcome = attr.ib(type=Optional[PhaseOutcome], default=None) + marginal = attr.ib(type=Optional[bool], default=None) @classmethod def from_descriptor( @@ -411,6 +414,7 @@ class SubtestRecord(object): start_time_millis = attr.ib(type=int, default=0) end_time_millis = attr.ib(type=Optional[int], default=None) outcome = attr.ib(type=Optional[SubtestOutcome], default=None) + marginal = attr.ib(type=Optional[bool], default=None) @property def is_fail(self) -> bool: diff --git a/openhtf/core/test_state.py b/openhtf/core/test_state.py index 780a347b0..015dd9bbb 100644 --- a/openhtf/core/test_state.py +++ b/openhtf/core/test_state.py @@ -408,13 +408,19 @@ def finalize_from_phase_outcome( 'Finishing test execution early due to an exception raised during ' 'phase execution; outcome ERROR.') # Enable CLI printing of the full traceback with the -v flag. - self.state_logger.critical( - 'Traceback:%s%s%s%s', - os.linesep, - phase_execution_outcome.phase_result.get_traceback_string(), - os.linesep, - description, - ) + if isinstance(result, phase_executor.ExceptionInfo): + self.state_logger.critical( + 'Traceback:%s%s%s%s', + os.linesep, + phase_execution_outcome.phase_result.get_traceback_string(), + os.linesep, + description, + ) + else: + self.state_logger.critical( + 'Description:%s', + description, + ) self._finalize(test_record.Outcome.ERROR) elif phase_execution_outcome.is_timeout: self.state_logger.error('Finishing test execution early due to ' @@ -461,6 +467,7 @@ def finalize_normally(self) -> None: self._finalize(test_record.Outcome.FAIL) else: # Otherwise, the test run was successful. + self.test_record.marginal = any(phase.marginal for phase in phases) self._finalize(test_record.Outcome.PASS) self.state_logger.debug( @@ -535,6 +542,7 @@ class PhaseState(object): place to save allocation time. attachments: Convenience accessor for phase_record.attachments. result: Convenience getter/setter for phase_record.result. + marginal: Convenience getter/setter for phase_record.marginal. """ name = attr.ib(type=Text) @@ -627,6 +635,14 @@ def set_subtest_name(self, subtest_name: Text) -> None: self.phase_record.subtest_name = subtest_name self._cached['subtest_name'] = subtest_name + @property + def marginal(self) -> Optional[phase_executor.PhaseExecutionOutcome]: + return self.phase_record.marginal + + @marginal.setter + def marginal(self, marginal: bool): + self.phase_record.marginal = marginal + @property def attachments(self) -> Dict[Text, test_record.Attachment]: return self.phase_record.attachments @@ -730,27 +746,35 @@ def _measurements_pass(self) -> bool: return all(meas.outcome in allowed_outcomes for meas in self.phase_record.measurements.values()) + def _measurements_marginal(self) -> bool: + return any( + meas.marginal for meas in self.phase_record.measurements.values()) + def _set_prediagnosis_phase_outcome(self) -> None: """Set the phase outcome before running diagnosers.""" result = self.result if result is None or result.is_terminal or self.hit_repeat_limit: - self.logger.debug('Phase outcome is ERROR.') + self.logger.debug('Phase outcome of %s is ERROR.', self.name) outcome = test_record.PhaseOutcome.ERROR elif result.is_repeat or result.is_skip: - self.logger.debug('Phase outcome is SKIP.') + self.logger.debug('Phase outcome of %s is SKIP.', self.name) outcome = test_record.PhaseOutcome.SKIP elif result.is_fail_subtest: - self.logger.debug('Phase outcome is FAIL due to subtest failure.') + self.logger.debug('Phase outcome of %s is FAIL due to subtest failure.', + self.name) outcome = test_record.PhaseOutcome.FAIL elif result.is_fail_and_continue: - self.logger.debug('Phase outcome is FAIL due to phase result.') + self.logger.debug('Phase outcome of %s is FAIL due to phase result.', + self.name) outcome = test_record.PhaseOutcome.FAIL elif not self._measurements_pass(): - self.logger.debug('Phase outcome is FAIL due to measurement outcome.') + self.logger.debug( + 'Phase outcome of %s is FAIL due to measurement outcome.', self.name) outcome = test_record.PhaseOutcome.FAIL else: - self.logger.debug('Phase outcome is PASS.') + self.logger.debug('Phase outcome of %s is PASS.', self.name) outcome = test_record.PhaseOutcome.PASS + self.phase_record.marginal = self._measurements_marginal() self.phase_record.outcome = outcome def _set_postdiagnosis_phase_outcome(self) -> None: @@ -759,13 +783,15 @@ def _set_postdiagnosis_phase_outcome(self) -> None: return # Check for errors during diagnoser execution. if self.result is None or self.result.is_terminal: - self.logger.debug('Phase outcome is ERROR due to diagnoses.') + self.logger.debug('Phase outcome of %s is ERROR due to diagnoses.', + self.name) self.phase_record.outcome = test_record.PhaseOutcome.ERROR return if self.phase_record.outcome != test_record.PhaseOutcome.PASS: return if self.phase_record.failure_diagnosis_results: - self.logger.debug('Phase outcome is FAIL due to diagnoses.') + self.logger.debug('Phase outcome of %s is FAIL due to diagnoses.', + self.name) self.phase_record.outcome = test_record.PhaseOutcome.FAIL def _execute_phase_diagnoser( diff --git a/openhtf/output/callbacks/__init__.py b/openhtf/output/callbacks/__init__.py index d83ea1e02..0002a9ac6 100644 --- a/openhtf/output/callbacks/__init__.py +++ b/openhtf/output/callbacks/__init__.py @@ -83,7 +83,7 @@ def __init__(self, filename_pattern_or_file: Union[Text, Callable[..., Text], self.output_file = None # type: Optional[BinaryIO] if (isinstance(filename_pattern_or_file, six.string_types) or callable(filename_pattern_or_file)): - self.filename_pattern = filename_pattern_or_file + self.filename_pattern = filename_pattern_or_file # pytype: disable=annotation-type-mismatch else: self.output_file = filename_pattern_or_file diff --git a/openhtf/output/callbacks/mfg_inspector.py b/openhtf/output/callbacks/mfg_inspector.py index 28ad52803..900785961 100644 --- a/openhtf/output/callbacks/mfg_inspector.py +++ b/openhtf/output/callbacks/mfg_inspector.py @@ -1,19 +1,23 @@ """Output and/or upload a TestRun or MfgEvent proto for mfg-inspector.com. """ +import copy import json import logging import threading import time +from typing import Any, Dict import zlib import httplib2 import oauth2client.client +from openhtf import util +from openhtf.core import test_record from openhtf.output import callbacks from openhtf.output.proto import guzzle_pb2 +from openhtf.output.proto import mfg_event_pb2 from openhtf.output.proto import test_runs_converter - import six from six.moves import range @@ -138,6 +142,12 @@ class MfgInspector(object): # saving to disk via save_to_disk. _default_filename_pattern = None + # Cached last partial upload of the run's MfgEvent. + _cached_partial_proto = None + + # Partial proto fully uploaded. + _partial_proto_upload_complete = False + def __init__(self, user=None, keydata=None, @@ -199,6 +209,44 @@ def _convert(self, test_record_obj): self._cached_params[param] = getattr(test_record_obj, param) return self._cached_proto + def _get_blobref_from_cache(self, attachment_name: str): + """Gets the existing_blobref if attachment was already uploaded.""" + if not self._cached_partial_proto: + return None + + for attachment in self._cached_partial_proto.attachment: + if (attachment.name == attachment_name and + attachment.HasField('existing_blobref')): + return attachment.existing_blobref + + def _get_blobref_from_reply(self, reply: Dict[str, Any], + attachment_name: str): + """Gets the existing_blobref if attachment was already uploaded.""" + for item in reply['extendedParameters']: + if (item['name'] == attachment_name and 'blobRef' in item): + return item['blobRef'] + + def _update_attachments_from_cache(self, proto: mfg_event_pb2.MfgEvent): + """Replaces attachments binary values with blobrefs when applicable.""" + for attachment in proto.attachment: + if attachment.HasField('value_binary'): + blobref = self._get_blobref_from_cache(attachment.name) + if blobref: + attachment.ClearField('value') + attachment.existing_blobref = blobref + + def _update_attachments_from_reply(self, proto: mfg_event_pb2.MfgEvent): + """Replaces attachments binary values with blorrefs when applicable.""" + reply = json.loads(self.upload_result['lite_test_run']) + for attachment in proto.attachment: + if attachment.HasField('value_binary'): + literun_blobref = self._get_blobref_from_reply(reply, attachment.name) + if literun_blobref: + attachment.ClearField('value') + attachment.existing_blobref.blob_id = str.encode( + literun_blobref['BlobID']) + attachment.existing_blobref.size = int(literun_blobref['Size']) + def save_to_disk(self, filename_pattern=None): """Returns a callback to convert test record to proto and save to disk.""" if not self._converter: @@ -238,6 +286,58 @@ def upload_callback(test_record_obj): return upload_callback + def partial_upload(self, payload_type: int = guzzle_pb2.COMPRESSED_TEST_RUN): + """Returns a callback to partially upload a test record as a MfgEvent.""" + if not self._converter: + raise RuntimeError( + 'Must set _converter on subclass or via set_converter before calling ' + 'partial_upload.') + + if not self.credentials: + raise RuntimeError('Must provide credentials to use partial_upload ' + 'callback.') + + def partial_upload_callback(test_record_obj: test_record.TestRecord): + if not test_record_obj.end_time_millis: + # We cannot mutate the test_record_obj, so we copy it to add a + # fake end_time_millis which is needed for MfgEvent construction. + try: + tmp_test_record = copy.deepcopy(test_record_obj) + except TypeError: + # This happens when test has errored but the partial_uploader got a + # hold of the test record before it is finalized. We force an errored + # test to be processed with zero deepcopy thus only after + # end_time_mills is set in the test record. + print('Skipping this upload cycle, waiting for test to be finalized') + return {} + tmp_test_record.end_time_millis = util.time_millis() + # Also fake a PASS outcome for now. + tmp_test_record.outcome = test_record.Outcome.PASS + proto = self._convert(tmp_test_record) + proto.test_run_type = mfg_event_pb2.TEST_RUN_PARTIAL + else: + proto = self._convert(test_record_obj) + proto.test_run_type = mfg_event_pb2.TEST_RUN_COMPLETE + # Replaces the attachment payloads already uploaded with their blob_refs. + if (self._cached_partial_proto and + self._cached_partial_proto.start_time_ms == proto.start_time_ms): + # Reads the attachments in the _cached_partial_proto and merge them into + # the proto. + self._update_attachments_from_cache(proto) + # Avoids timing issue whereby last complete upload performed twice. + # This is only for projects that use a partial uploader to mfg-inspector. + if not self._partial_proto_upload_complete: + self.upload_result = send_mfg_inspector_data( + proto, self.credentials, self.destination_url, payload_type) + # Reads the upload_result (a lite_test_run proto) and update the + # attachments blob_refs. + self._update_attachments_from_reply(proto) + if proto.test_run_type == mfg_event_pb2.TEST_RUN_COMPLETE: + self._partial_proto_upload_complete = True + return self.upload_result + + return partial_upload_callback + def set_converter(self, converter): """Set converter callable to convert a OpenHTF tester_record to a proto. diff --git a/openhtf/output/proto/mfg_event_converter.py b/openhtf/output/proto/mfg_event_converter.py index ae4613a9e..89ce78253 100644 --- a/openhtf/output/proto/mfg_event_converter.py +++ b/openhtf/output/proto/mfg_event_converter.py @@ -14,6 +14,7 @@ import numbers import os import sys +from typing import Tuple from openhtf.core import measurements from openhtf.core import test_record as htf_test_record @@ -23,12 +24,9 @@ from openhtf.util import data as htf_data from openhtf.util import units from openhtf.util import validators - - from past.builtins import unicode import six - TEST_RECORD_ATTACHMENT_NAME = 'OpenHTF_record.json' # To be lazy loaded by _LazyLoadUnitsByCode when needed. @@ -37,6 +35,7 @@ # Map test run Status (proto) name to measurement Outcome (python) enum's and # the reverse. Note: there is data lost in converting an UNSET/PARTIALLY_SET to # an ERROR so we can't completely reverse the transformation. + MEASUREMENT_OUTCOME_TO_TEST_RUN_STATUS_NAME = { measurements.Outcome.PASS: 'PASS', measurements.Outcome.FAIL: 'FAIL', @@ -45,11 +44,25 @@ } TEST_RUN_STATUS_NAME_TO_MEASUREMENT_OUTCOME = { 'PASS': measurements.Outcome.PASS, + 'MARGINAL_PASS': measurements.Outcome.PASS, 'FAIL': measurements.Outcome.FAIL, 'ERROR': measurements.Outcome.UNSET } +def _measurement_outcome_to_test_run_status_name(outcome: measurements.Outcome, + marginal: bool) -> str: + """Returns the test run status name given the outcome and marginal args.""" + return ('MARGINAL_PASS' + if marginal else MEASUREMENT_OUTCOME_TO_TEST_RUN_STATUS_NAME[outcome]) + + +def _test_run_status_name_to_measurement_outcome_and_marginal( + name: str) -> Tuple[measurements.Outcome, bool]: + """Returns the outcome and marginal args given the test run status name.""" + return TEST_RUN_STATUS_NAME_TO_MEASUREMENT_OUTCOME[name], 'MARGINAL' in name + + def _lazy_load_units_by_code(): """Populate dict of units by code iff UNITS_BY_CODE is empty.""" if UNITS_BY_CODE: @@ -103,7 +116,8 @@ def mfg_event_from_test_record(record): return mfg_event -def _populate_basic_data(mfg_event, record): +def _populate_basic_data(mfg_event: mfg_event_pb2.MfgEvent, + record: htf_test_record.TestRecord) -> None: """Copies data from the OpenHTF TestRecord to the MfgEvent proto.""" # TODO(openhtf-team): # * Missing in proto: set run name from metadata. @@ -117,10 +131,12 @@ def _populate_basic_data(mfg_event, record): mfg_event.end_time_ms = record.end_time_millis mfg_event.tester_name = record.station_id mfg_event.test_name = record.metadata.get('test_name') or record.station_id - mfg_event.test_status = test_runs_converter.OUTCOME_MAP[record.outcome] mfg_event.operator_name = record.metadata.get('operator_name', '') mfg_event.test_version = str(record.metadata.get('test_version', '')) mfg_event.test_description = record.metadata.get('test_description', '') + mfg_event.test_status = ( + test_runs_pb2.MARGINAL_PASS + if record.marginal else test_runs_converter.OUTCOME_MAP[record.outcome]) # Populate part_tags. mfg_event.part_tags.extend(record.metadata.get('part_tags', [])) @@ -284,9 +300,11 @@ def multidim_measurement_to_attachment(name, measurement): }) # Refer to the module docstring for the expected schema. dimensioned_measured_value = measurement.measured_value - value = (sorted(dimensioned_measured_value.value, key=lambda x: x[0]) - if dimensioned_measured_value.is_value_set else None) - outcome_str = MEASUREMENT_OUTCOME_TO_TEST_RUN_STATUS_NAME[measurement.outcome] + value = ( + sorted(dimensioned_measured_value.value, key=lambda x: x[0]) + if dimensioned_measured_value.is_value_set else None) + outcome_str = _measurement_outcome_to_test_run_status_name( + measurement.outcome, measurement.marginal) data = _convert_object_to_json({ 'outcome': outcome_str, 'name': name, @@ -333,11 +351,11 @@ def copy_measurements(self, mfg_event): for name, measurement in sorted(phase.measurements.items()): # Multi-dim measurements should already have been removed. assert measurement.dimensions is None - self._copy_unidimensional_measurement( - phase, name, measurement, mfg_event) + self._copy_unidimensional_measurement(phase, name, measurement, + mfg_event) - def _copy_unidimensional_measurement( - self, phase, name, measurement, mfg_event): + def _copy_unidimensional_measurement(self, phase, name, measurement, + mfg_event): """Copy uni-dimensional measurements to the MfgEvent.""" mfg_measurement = mfg_event.measurement.add() @@ -361,8 +379,8 @@ def _copy_unidimensional_measurement( # Copy measurement value. measured_value = measurement.measured_value - status_str = MEASUREMENT_OUTCOME_TO_TEST_RUN_STATUS_NAME[ - measurement.outcome] + status_str = _measurement_outcome_to_test_run_status_name( + measurement.outcome, measurement.marginal) mfg_measurement.status = test_runs_pb2.Status.Value(status_str) if not measured_value.is_value_set: return @@ -388,6 +406,12 @@ def _copy_unidimensional_measurement( mfg_measurement.numeric_minimum = float(validator.minimum) if validator.maximum is not None: mfg_measurement.numeric_maximum = float(validator.maximum) + if validator.marginal_minimum is not None: + mfg_measurement.numeric_marginal_minimum = float( + validator.marginal_minimum) + if validator.marginal_maximum is not None: + mfg_measurement.numeric_marginal_maximum = float( + validator.marginal_maximum) elif isinstance(validator, validators.RegexMatcher): mfg_measurement.expected_text = validator.regex else: @@ -430,7 +454,7 @@ def attachment_to_multidim_measurement(attachment, name=None): Args: attachment: an `openhtf.test_record.Attachment` from a multi-dim. name: an optional name for the measurement. If not provided will use the - name included in the attachment. + name included in the attachment. Returns: An multi-dim `openhtf.Measurement`. @@ -453,8 +477,13 @@ def attachment_to_multidim_measurement(attachment, name=None): attachment_outcome_str = None # Convert test status outcome str to measurement outcome - outcome = TEST_RUN_STATUS_NAME_TO_MEASUREMENT_OUTCOME.get( - attachment_outcome_str) + if attachment_outcome_str: + outcome, marginal = ( + _test_run_status_name_to_measurement_outcome_and_marginal( + attachment_outcome_str)) + else: + outcome = None + marginal = False # convert dimensions into htf.Dimensions _lazy_load_units_by_code() @@ -476,9 +505,7 @@ def attachment_to_multidim_measurement(attachment, name=None): # created dimensioned_measured_value and populate with values. measured_value = measurements.DimensionedMeasuredValue( - name=name, - num_dimensions=len(dimensions) - ) + name=name, num_dimensions=len(dimensions)) for row in attachment_values: coordinates = tuple(row[:-1]) val = row[-1] @@ -489,6 +516,6 @@ def attachment_to_multidim_measurement(attachment, name=None): units=units_, dimensions=tuple(dimensions), measured_value=measured_value, - outcome=outcome - ) + outcome=outcome, + marginal=marginal) return measurement diff --git a/openhtf/output/proto/test_runs_converter.py b/openhtf/output/proto/test_runs_converter.py index f12a18aed..467985f7d 100644 --- a/openhtf/output/proto/test_runs_converter.py +++ b/openhtf/output/proto/test_runs_converter.py @@ -92,7 +92,9 @@ def _populate_header(record, testrun): testrun.test_info.description = record.metadata['test_description'] if 'test_version' in record.metadata: testrun.test_info.version_string = record.metadata['test_version'] - testrun.test_status = OUTCOME_MAP[record.outcome] + testrun.test_status = ( + test_runs_pb2.MARGINAL_PASS + if record.marginal else OUTCOME_MAP[record.outcome]) testrun.start_time_millis = record.start_time_millis testrun.end_time_millis = record.end_time_millis if 'run_name' in record.metadata: @@ -214,7 +216,9 @@ def _extract_parameters(record, testrun, used_parameter_names): if measurement.units and measurement.units.code in UOM_CODE_MAP: testrun_param.unit_code = UOM_CODE_MAP[measurement.units.code] - if measurement.outcome == measurements.Outcome.PASS: + if measurement.marginal: + testrun_param.status = test_runs_pb2.MARGINAL_PASS + elif measurement.outcome == measurements.Outcome.PASS: testrun_param.status = test_runs_pb2.PASS elif (not measurement.measured_value or not measurement.measured_value.is_value_set): diff --git a/openhtf/output/servers/station_server.py b/openhtf/output/servers/station_server.py index 117b3ba6a..899cff6a0 100644 --- a/openhtf/output/servers/station_server.py +++ b/openhtf/output/servers/station_server.py @@ -359,7 +359,7 @@ def get(self, test_uid): phase_descriptors = [ dict(id=id(phase), **data.convert_to_base_types(phase)) - for phase in test.descriptor.phase_group + for phase in test.descriptor.phase_sequence.all_phases() ] # Wrap value in a dict because writing a list directly is prohibited. diff --git a/openhtf/plugs/__init__.py b/openhtf/plugs/__init__.py index 7ba7dc320..81d6ab23e 100644 --- a/openhtf/plugs/__init__.py +++ b/openhtf/plugs/__init__.py @@ -166,7 +166,7 @@ class PlugManager(object): """ def __init__(self, - plug_types: Set[Type[base_plugs.BasePlug]] = None, + plug_types: Optional[Set[Type[base_plugs.BasePlug]]] = None, record_logger: Optional[logging.Logger] = None): self._plug_types = plug_types or set() for plug_type in self._plug_types: diff --git a/openhtf/plugs/device_wrapping.py b/openhtf/plugs/device_wrapping.py index 01472e536..91cb0a9aa 100644 --- a/openhtf/plugs/device_wrapping.py +++ b/openhtf/plugs/device_wrapping.py @@ -39,6 +39,13 @@ def short_repr(obj, max_len=40): return '<{} of length {}>'.format(type(obj).__name__, len(obj_repr)) +class DeviceWrappingPlugNotFullyInitializedError(base_plugs.InvalidPlugError): + """Raised if DeviceWrappingPlug instances do not have _device set. + + Generally a by a subclass __init__ failing to call the superclass __init__. + """ + + class DeviceWrappingPlug(base_plugs.BasePlug): """A base plug for wrapping existing device abstractions. @@ -89,6 +96,12 @@ def __setattr__(self, name, value): setattr(self._device, name, value) def __getattr__(self, attr): + if attr == '_device': + # _device was not found in the instance attributes. + raise DeviceWrappingPlugNotFullyInitializedError( + f'{type(self)} must set _device. This is genally done in __init__ by ' + 'calling super().__init__(device)') + if self._device is None: raise base_plugs.InvalidPlugError( 'DeviceWrappingPlug instances must set the _device attribute.') diff --git a/openhtf/util/console_output.py b/openhtf/util/console_output.py index dd1d7d781..56ee5d0c8 100644 --- a/openhtf/util/console_output.py +++ b/openhtf/util/console_output.py @@ -74,7 +74,7 @@ def _linesep_for_file(file): return '\n' -def banner_print(msg, color='', width=60, file=sys.stdout, logger=_LOG): +def banner_print(msg, color='', width=80, file=sys.stdout, logger=_LOG): """Print the message as a banner with a fixed width. Also logs the message (un-bannered) to the given logger at the debug level. diff --git a/openhtf/util/data.py b/openhtf/util/data.py index ce929b0aa..e49c08339 100644 --- a/openhtf/util/data.py +++ b/openhtf/util/data.py @@ -169,7 +169,12 @@ def convert_to_base_types(obj, if hasattr(obj, 'as_base_types'): return obj.as_base_types() if hasattr(obj, '_asdict'): - obj = obj._asdict() + try: + obj = obj._asdict() + except TypeError as e: + # This happens if the object is an uninitialized class. + logging.warning( + 'Object %s is not initialized, got error %s', obj, e) elif isinstance(obj, records.RecordClass): new_obj = {} for a in type(obj).all_attribute_names: diff --git a/openhtf/util/multicast.py b/openhtf/util/multicast.py index c66c0d542..7b4c0b84a 100644 --- a/openhtf/util/multicast.py +++ b/openhtf/util/multicast.py @@ -23,6 +23,8 @@ import struct import sys import threading +import time + from six.moves import queue _LOG = logging.getLogger(__name__) @@ -36,6 +38,7 @@ DEFAULT_TTL = 1 LOCALHOST_ADDRESS = 0x7f000001 # 127.0.0.1 MAX_MESSAGE_BYTES = 1024 # Maximum allowable message length in bytes. +_SOCKOPT_RETRY_SECONDS = 10 # Short delay before retrying socket registration. class MulticastListener(threading.Thread): @@ -82,6 +85,24 @@ def stop(self, timeout_s=None): pass self.join(timeout_s) + def _add_multicast_membership(self, interface_ip: int) -> bool: + """Returns True if the interface is successfully added for multicast.""" + try: + # IP_ADD_MEMBERSHIP takes the 8-byte group address followed by the + # IP assigned to the interface on which to listen. + self._sock.setsockopt( + socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, + struct.pack('!4sL', socket.inet_aton(self.address), interface_ip)) # pylint: disable=g-socket-inet-aton + except OSError: + multicast_type = ('local' + if interface_ip == LOCALHOST_ADDRESS else 'default') + _LOG.debug( + 'Failed setsockopt for %s multicast. Will retry. Traceback:', + multicast_type, + exc_info=True) + return False + return True + def run(self): """Listen for pings until stopped.""" self._live = True @@ -91,12 +112,10 @@ def run(self): # The localhost address is used to receive messages sent in "local_only" # mode and the default address is used to receive all other messages. for interface_ip in (socket.INADDR_ANY, LOCALHOST_ADDRESS): - self._sock.setsockopt( - socket.IPPROTO_IP, - socket.IP_ADD_MEMBERSHIP, - # IP_ADD_MEMBERSHIP takes the 8-byte group address followed by the IP - # assigned to the interface on which to listen. - struct.pack('!4sL', socket.inet_aton(self.address), interface_ip)) # pylint: disable=g-socket-inet-aton + while not self._add_multicast_membership(interface_ip): + if not self._live: + return + time.sleep(_SOCKOPT_RETRY_SECONDS) if sys.platform == 'darwin': self._sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, @@ -162,24 +181,23 @@ def send(query, recv_queue = queue.Queue() def _handle_responses(): + """Collects responses in the receive queue as soon as they are received.""" while True: try: data, address = sock.recvfrom(MAX_MESSAGE_BYTES) - data = data.decode('utf-8') except socket.timeout: - recv_queue.put(None) - break + break # Give up, all stations have likely responded. else: + data = data.decode('utf-8') _LOG.debug('Multicast response to query "%s": %s:%s', query, address[0], data) - recv_queue.put((address[0], str(data))) + recv_queue.put((address[0], data)) - # Yield responses as they come in, giving up once timeout expires. response_thread = threading.Thread(target=_handle_responses) response_thread.start() - while response_thread.is_alive(): - recv_tuple = recv_queue.get() - if not recv_tuple: - break + while not recv_queue.empty() or response_thread.is_alive(): + try: + recv_tuple = recv_queue.get(block=True, timeout=timeout_s) + except queue.Empty: + continue # Retry until the thread is no longer alive. yield recv_tuple - response_thread.join() diff --git a/openhtf/util/test.py b/openhtf/util/test.py index 355b7d0f9..25d173161 100644 --- a/openhtf/util/test.py +++ b/openhtf/util/test.py @@ -14,22 +14,20 @@ """Unit test helpers for OpenHTF tests and phases. This module provides some utility for unit testing OpenHTF test phases and -whole tests. Primarily, otherwise difficult to mock mechanisms are mocked -for you, and there are a handful of convenience assertions that may be used -to write more readable (and less fragile against output format change) tests. +whole tests. Primarily, there are: +1. Mechanisms to aid in running phases and tests. +2. Convenience methods to mock plugs. +3. Assertions to validate phase/test output. The primary class in this module is the TestCase class, which is a subclass of unittest.TestCase that provides some extra utility. Use it the same way you would use unittest.TestCase. See below for examples. -OpenHTF plugs are somewhat difficult to mock (because references are grabbed -at import time, you end up having to poke at framework internals to do this), -so there's a utility decorator for doing just this, @patch_plugs. See below -for examples of how to use it. Note that plugs are initialized once and torn -down once for a single method decorated with @patch_plugs (regardless of how -many phases or Test objects are yielded). If you need new plug instances, -separate your test into separate decorated test* methods in your test case -(this is good practice anyway). +Since the test executor manages the plugs, TestCase.plugs and +TestCase.auto_mock_plugs maybe be used to set or access plug instances. Also +available is a test method decorator, @patch_plugs, but it is less flexible and +should be avoided in new code. In both cases, limit yourself to one phase/test +execution per test method to avoid surprises with plug lifetimes. Lastly, while not implemented here, it's common to need to temporarily alter configuration values for individual tests. This can be accomplished with the @@ -44,6 +42,20 @@ class PhasesTest(test.TestCase): + # Using TestCase.execute_phase_or_test, which allows more flexibility. + def test_using_execute_phase_or_test(self): + self.auto_mock_plugs(PlugA) + # Use below stub object instead of PlugB. + self.plugs[PlugB] = PlugBStub() + self.plugs[PlugA].read_something.return_value = 1234 + + # Run your OpenHTF phase/test, returning phase record. Do only one of + # these per test method to avoid unexpected behavior with plugs. + phase_record = self.execute_phase_or_test(mytest.first_phase) + self.plugs[PlugA].read_something.assert_called_once_with() + # assert* methods for checking phase/test records are defined in TestCase. + self.assertPhaseContinue(phase_record) + # Decorate with conf.save_and_restore to temporarily set conf values. # NOTE: This must come before yields_phases. @conf.save_and_restore(phase_variance='test_phase_variance') @@ -75,8 +87,10 @@ def test_second_phase(self, mock_my_plug): # arg must match keyword above. # You can apply any assertions on the mocked plug here. mock_my_plug.measure_voltage.assert_called_once_with() - # You can yield multiple phases/Test instances, but it's generally - # cleaner and more readable to limit to a single yield per test case. + # If you want to patch the plugs yourself, use mock.patch(.object) on the + # plug class; plug instances are available in the `plugs` attribute once + # the phase/test has been run: + self.plugs[my_plug.MyPlug].measure_voltage.assert_called_once_with() @test.patch_plugs(mock_my_plug='my_plug.MyPlug') def test_multiple(self, mock_my_plug): @@ -115,13 +129,23 @@ def test_multiple(self, mock_my_plug): import logging import sys import types -from typing import Any, Callable, Dict, Iterable, List, Text, Tuple, Type +import typing +from typing import ( + Any, + Callable, + Dict, + Iterable, + List, + Optional, + Text, + Tuple, + Type, +) import unittest import attr import mock -import openhtf from openhtf import plugs from openhtf import util from openhtf.core import base_plugs @@ -136,12 +160,18 @@ def test_multiple(self, mock_my_plug): from openhtf.core import test_state from openhtf.plugs import device_wrapping from openhtf.util import logs +from openhtf.util import text import six from six.moves import collections_abc logs.CLI_LOGGING_VERBOSITY = 2 +# Maximum number of measurements per phase to be printed to the assertion +# error message for test failures. +_MAXIMUM_NUM_MEASUREMENTS_PER_PHASE = 10 + + class InvalidTestError(Exception): """Raised when there's something invalid about a test.""" @@ -242,7 +272,7 @@ def __eq__(self, other: phase_nodes.PhaseNode) -> bool: self.kwargs == other.kwargs) -class FakeTestApi(openhtf.TestApi): +class FakeTestApi(test_descriptor.TestApi): """A fake TestApi used to test non-phase helper functions.""" def __init__(self): @@ -325,19 +355,23 @@ def _initialize_plugs(self, plug_types): plug_cls for plug_cls in plug_types if plug_cls not in self.mock_plugs) for plug_type, plug_value in six.iteritems(self.mock_plugs): self.plug_manager.update_plug(plug_type, plug_value) + for plug_type in plug_types: + self.test_case.plugs[plug_type] = ( + self.plug_manager.get_plug_by_class_path( + self.plug_manager.get_plug_name(plug_type))) def _handle_phase(self, phase_desc): """Handle execution of a single test phase.""" - diagnoses_lib.check_for_duplicate_results(iter([phase_desc]), []) + phase_descriptor.check_for_duplicate_results(iter([phase_desc]), []) logs.configure_logging() self._initialize_plugs(phase_plug.cls for phase_plug in phase_desc.plugs) # Cobble together a fake TestState to pass to the test phase. test_options = test_descriptor.TestOptions() - with mock.patch( - 'openhtf.plugs.PlugManager', new=lambda _, __: self.plug_manager): + with mock.patch.object( + plugs, 'PlugManager', new=lambda _, __: self.plug_manager): test_state_ = test_state.TestState( - openhtf.TestDescriptor( + test_descriptor.TestDescriptor( phase_collections.PhaseSequence((phase_desc,)), phase_desc.code_info, {}), 'Unittest:StubTest:UID', test_options) test_state_.mark_test_started() @@ -373,9 +407,6 @@ def _handle_phase(self, phase_desc): def _handle_test(self, test): self._initialize_plugs(test.descriptor.plug_types) - # Make sure we inject our mock plug instances. - for plug_type, plug_value in six.iteritems(self.mock_plugs): - self.plug_manager.update_plug(plug_type, plug_value) # We'll need a place to stash the resulting TestRecord. record_saver = util.NonLocalResult() @@ -383,8 +414,8 @@ def _handle_test(self, test): lambda record: setattr(record_saver, 'result', record)) # Mock the PlugManager to use ours instead, and execute the test. - with mock.patch( - 'openhtf.plugs.PlugManager', new=lambda _, __: self.plug_manager): + with mock.patch.object( + plugs, 'PlugManager', new=lambda _, __: self.plug_manager): test.execute(test_start=self.test_case.test_start_function) test_record_ = record_saver.result @@ -400,7 +431,7 @@ def _handle_test(self, test): def __next__(self): phase_or_test = self.iterator.send(self.last_result) - if isinstance(phase_or_test, openhtf.Test): + if isinstance(phase_or_test, test_descriptor.Test): self.last_result, failure_message = self._handle_test(phase_or_test) elif not isinstance(phase_or_test, collections_abc.Callable): raise InvalidTestError( @@ -413,7 +444,7 @@ def __next__(self): def next(self): phase_or_test = self.iterator.send(self.last_result) - if isinstance(phase_or_test, openhtf.Test): + if isinstance(phase_or_test, test_descriptor.Test): self.last_result, failure_message = self._handle_test(phase_or_test) elif not isinstance(phase_or_test, collections_abc.Callable): raise InvalidTestError( @@ -538,8 +569,10 @@ def wrapped_test(self): TestCase, msg='Must derive from openhtf.util.test.TestCase ' 'to use yields_phases/patch_plugs.') + plug_mocks = dict(self.plugs) + plug_mocks.update(plug_typemap) for phase_or_test, result, failure_message in PhaseOrTestIterator( - self, test_func(self, **plug_kwargs), plug_typemap, + self, test_func(self, **plug_kwargs), plug_mocks, phase_user_defined_state, phase_diagnoses): logging.info('Ran %s, result: %s', phase_or_test, result) if failure_message: @@ -608,21 +641,110 @@ def setUp(self): # When a test is yielded, this function is provided to as the test_start # argument to test.execute. self.test_start_function = lambda: 'TestDutId' + # Dictionary mapping plug class (type, not instance) to plug instance. + # Prior to executing a phase or test, plug instances can be added here. + # When a OpenHTF phase or test is run in this suite, any instantiated plugs + # will be available here. + # "Any" hint below needed because pytype doesn't like heterogeneous values. + self.plugs = {} # type: Any + + def auto_mock_plugs(self, *plug_types: Type[plugs.BasePlug]): + """Specifies plugs that may be automatically mocked if needed. + + Can be called from setUp, or from inside a test case. + + Plug mocks created by this method will not be used if set directly in the + `plug` attribute in this instance. Mocks use autospec and spec_set, and so + this method should not be used for plugs where this isn't desired. + + Args: + *plug_types: Plug classes for which mocks should be used. + """ + for plug_type in plug_types: + if plug_type in self.plugs: + logging.info( + 'Plug "%s" already has mock in self.plugs; skipping ' + 'automatic mock', plug_type.__name__) + continue + self.plugs[plug_type] = mock.create_autospec( + plug_type, spec_set=True, instance=True) + + @typing.overload + def execute_phase_or_test( + self, + phase_or_test: test_descriptor.Test, + phase_user_defined_state: None = None, # Only supported for phases. + phase_diagnoses: None = None, # Only supported for phases. + ) -> test_record.TestRecord: + ... + + @typing.overload + def execute_phase_or_test( + self, + phase_or_test: phase_descriptor.PhaseT, + # Pytype does not correctly support heterogeneous dict values, hence Any. + phase_user_defined_state: Optional[Any] = None, + phase_diagnoses: Optional[Iterable[diagnoses_lib.Diagnosis]] = None, + ) -> test_record.PhaseRecord: + ... + + def execute_phase_or_test(self, + phase_or_test, + phase_user_defined_state=None, + phase_diagnoses=None): + """Executes the provided Test or Phase, returning corresponding record. + + Args: + phase_or_test: The Test or phase to execute. + phase_user_defined_state: If specified, a dictionary that will be added to + the test_state.user_defined_state when handling phases. This is only + supported when executing a phase. + phase_diagnoses: If specified, must be a list of Diagnosis instances; + these are added to the DiagnosesManager when handling phases. + + Returns: + Test or phase record for the execution. See various assert* methods in + this class for possible testing. + """ + + def phase_generator(): + phase_or_test_record = yield phase_or_test + return phase_or_test_record + + for phase_or_test, result, failure_message in PhaseOrTestIterator( + self, phase_generator(), self.plugs, phase_user_defined_state, + phase_diagnoses): + logging.info('Ran %s, result: %s', phase_or_test, result) + if failure_message: + logging.error('Reported error:\n%s', failure_message) + # Pylint cannot determine that the loop above executes for exactly one + # iteration, in any path that would lead here. + return result # pylint: disable=undefined-loop-variable ##### TestRecord Assertions ##### def assertTestPass(self, test_rec): - self.assertEqual(test_record.Outcome.PASS, test_rec.outcome) + self.assertEqual( + test_record.Outcome.PASS, + test_rec.outcome, + msg='\n\n{}'.format( + text.StringFromTestRecord( + test_rec, + only_failures=True, + maximum_num_measurements=_MAXIMUM_NUM_MEASUREMENTS_PER_PHASE))) def assertTestFail(self, test_rec): - self.assertEqual(test_record.Outcome.FAIL, test_rec.outcome) + msg = None + if test_rec.outcome == test_record.Outcome.ERROR: + msg = text.StringFromOutcomeDetails(test_rec.outcome_details) + self.assertEqual(test_record.Outcome.FAIL, test_rec.outcome, msg=msg) def assertTestAborted(self, test_rec): self.assertEqual(test_record.Outcome.ABORTED, test_rec.outcome) def assertTestError(self, test_rec, exc_type=None): self.assertEqual(test_record.Outcome.ERROR, test_rec.outcome) - if exc_type: + if exc_type is not None: self.assertPhaseError(test_rec.phases[-1], exc_type) def assertTestOutcomeCode(self, test_rec, code): @@ -634,25 +756,46 @@ def assertTestOutcomeCode(self, test_rec, code): ##### PhaseRecord Assertions ##### def assertPhaseContinue(self, phase_record): - self.assertIs(openhtf.PhaseResult.CONTINUE, - phase_record.result.phase_result) + self.assertIs( + phase_descriptor.PhaseResult.CONTINUE, + phase_record.result.phase_result, + msg='\n\n{}'.format( + text.StringFromPhaseRecord( + phase_record, + only_failures=True, + maximum_num_measurements=_MAXIMUM_NUM_MEASUREMENTS_PER_PHASE))) def assertPhaseFailAndContinue(self, phase_record): - self.assertIs(openhtf.PhaseResult.FAIL_AND_CONTINUE, - phase_record.result.phase_result) + msg = None + if phase_record.result.raised_exception is not None: + msg = ('The following exception was raised: ' + f'{phase_record.result.phase_result}.') + self.assertIs( + phase_descriptor.PhaseResult.FAIL_AND_CONTINUE, + phase_record.result.phase_result, + msg=msg) def assertPhaseFailSubtest(self, phase_record): - self.assertIs(openhtf.PhaseResult.FAIL_SUBTEST, - phase_record.result.phase_result) + msg = None + if phase_record.result.raised_exception is not None: + msg = (f'The following exception was raised: ' + f'{phase_record.result.phase_result}.') + self.assertIs( + phase_descriptor.PhaseResult.FAIL_SUBTEST, + phase_record.result.phase_result, + msg=msg) def assertPhaseRepeat(self, phase_record): - self.assertIs(openhtf.PhaseResult.REPEAT, phase_record.result.phase_result) + self.assertIs(phase_descriptor.PhaseResult.REPEAT, + phase_record.result.phase_result) def assertPhaseSkip(self, phase_record): - self.assertIs(openhtf.PhaseResult.SKIP, phase_record.result.phase_result) + self.assertIs(phase_descriptor.PhaseResult.SKIP, + phase_record.result.phase_result) def assertPhaseStop(self, phase_record): - self.assertIs(openhtf.PhaseResult.STOP, phase_record.result.phase_result) + self.assertIs(phase_descriptor.PhaseResult.STOP, + phase_record.result.phase_result) def assertPhaseError(self, phase_record, exc_type=None): self.assertTrue(phase_record.result.raised_exception, @@ -667,10 +810,21 @@ def assertPhaseTimeout(self, phase_record): self.assertTrue(phase_record.result.is_timeout) def assertPhaseOutcomePass(self, phase_record): - self.assertIs(test_record.PhaseOutcome.PASS, phase_record.outcome) + self.assertIs( + test_record.PhaseOutcome.PASS, + phase_record.outcome, + msg='\n\n{}'.format( + text.StringFromPhaseRecord( + phase_record, + only_failures=True, + maximum_num_measurements=_MAXIMUM_NUM_MEASUREMENTS_PER_PHASE))) def assertPhaseOutcomeFail(self, phase_record): - self.assertIs(test_record.PhaseOutcome.FAIL, phase_record.outcome) + msg = None + if phase_record.result.raised_exception is not None: + msg = ('The following exception was raised: ' + f'{phase_record.result.phase_result}.') + self.assertIs(test_record.PhaseOutcome.FAIL, phase_record.outcome, msg=msg) def assertPhaseOutcomeSkip(self, phase_record): self.assertIs(test_record.PhaseOutcome.SKIP, phase_record.outcome) @@ -682,7 +836,7 @@ def assertPhasesOutcomeByName(self, expected_outcome: test_record.PhaseOutcome, test_rec: test_record.TestRecord, *phase_names: Text): - errors = [] # type: List[Text] + errors: List[Text] = [] for phase_rec in filter_phases_by_names(test_rec.phases, *phase_names): if phase_rec.outcome is not expected_outcome: errors.append('Phase "{}" outcome: {}'.format(phase_rec.name, @@ -741,6 +895,16 @@ def assertMeasurementFail(self, phase_record, measurement): self.assertIs(measurements.Outcome.FAIL, phase_record.measurements[measurement].outcome) + @_assert_phase_or_test_record + def assertMeasurementMarginal(self, phase_record, measurement): + self.assertMeasured(phase_record, measurement) + self.assertTrue(phase_record.measurements[measurement].marginal) + + @_assert_phase_or_test_record + def assertMeasurementNotMarginal(self, phase_record, measurement): + self.assertMeasured(phase_record, measurement) + self.assertFalse(phase_record.measurements[measurement].marginal) + @_assert_phase_or_test_record def assertAttachment(self, phase_record, diff --git a/openhtf/util/text.py b/openhtf/util/text.py new file mode 100644 index 000000000..941e2913f --- /dev/null +++ b/openhtf/util/text.py @@ -0,0 +1,304 @@ +# Copyright 2021 Google Inc. All Rights Reserved. + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Helper functions to convert OpenHTF objects to text-based outputs. + +Provides a convenient way to convert OpenHTF objects such as phases or test +records to a string. This library has been designed in a way such that the +outputted strings can be styled for a terminal console. + + Typical usage example: + + import openhtf + from openhtf.util import text + + test = openhtf.Test(*test_phases) + + # Logs the test record to the terminal output when the OpenHTF test finishes + # executing. + test.add_output_callbacks(text.PrintTestRecord) + test.configure(**configure_kwargs) + test.execute() +""" + +import enum +import sys +from typing import List, Optional + +import colorama +import openhtf +from openhtf.core import measurements +from openhtf.core import phase_descriptor +from openhtf.core import phase_executor +from openhtf.core import test_record +from openhtf.util import threads + +_ColorFromTestOutcome = enum.Enum( + '_ColorFromTestOutcome', [ + (test_record.Outcome.PASS.name, colorama.Fore.GREEN), + (test_record.Outcome.FAIL.name, colorama.Fore.RED), + (test_record.Outcome.ERROR.name, colorama.Fore.YELLOW), + (test_record.Outcome.TIMEOUT.name, colorama.Fore.CYAN), + (test_record.Outcome.ABORTED.name, colorama.Fore.YELLOW), + ], + module=__name__) + +_HeadlineFromTestOutcome = enum.Enum( + '_HeadlineFromTestOutcome', [ + (test_record.Outcome.PASS.name, + f'Test finished with a {test_record.Outcome.PASS.name}!'), + (test_record.Outcome.FAIL.name, + f'Test finished with a {test_record.Outcome.FAIL.name} :('), + (test_record.Outcome.ERROR.name, + f'Test encountered an {test_record.Outcome.ERROR.name}!!!'), + (test_record.Outcome.TIMEOUT.name, + f'Test hit a {test_record.Outcome.TIMEOUT.name}.'), + (test_record.Outcome.ABORTED.name, + f'Test was {test_record.Outcome.ABORTED.name}.'), + ], + module=__name__) + +_BRIGHT_RED_STYLE = f'{colorama.Style.BRIGHT}{colorama.Fore.RED}' + + +def _ColorText(text: str, ansi_color: str) -> str: + """Colors a text string for a terminal output. + + Note: Coloring will only work when the text is printed to a terminal. + + Args: + text: Text to be colored. + ansi_color: ANSCI escape character sequence for the color. + + Returns: + Colorized text string. + """ + return f'{ansi_color}{text}{colorama.Style.RESET_ALL}' + + +def _GetTestOutcomeHeadline(record: test_record.TestRecord, + colorize_text: bool = False) -> str: + """Returns a headline of the test result. + + Args: + record: OpenHTF test record to get the test result from. + colorize_text: Indicates whether the converted string should be colorized + for a terminal output. + + Returns: + Text headline of the test result. + """ + # TODO(b/70517332): Pytype currently doesn't properly support the functional + # API of enums: https://github.com/google/pytype/issues/459. Remove + # disabling pytype once fixed. + # pytype: disable=unsupported-operands + test_outcome_headline = _HeadlineFromTestOutcome[record.outcome.name].value + color = _ColorFromTestOutcome[record.outcome.name].value + # pytype: enable=unsupported-operands + # Alter headline if the record is marginal. + if record.marginal: + color = str(colorama.Fore.YELLOW) + test_outcome_headline += '(MARGINAL)' + return _ColorText(test_outcome_headline, + color) if colorize_text else test_outcome_headline + + +def StringFromMeasurement(measurement: openhtf.Measurement, + colorize_text: bool = False) -> str: + """Returns a text summary of the measurement. + + Args: + measurement: OpenHTF measurement to be converted to a string. + colorize_text: Indicates whether the converted string should be colorized + for a terminal output. + + Returns: + Text summary of the measurement. + """ + if not measurement.measured_value.is_value_set: + text = f'| {measurement.name} was not set' + return _ColorText(text, _BRIGHT_RED_STYLE) if colorize_text else text + elif measurement.outcome == measurements.Outcome.FAIL: + text = (f'| {measurement.name} failed because ' + f'{measurement.measured_value.value} failed these checks: ' + '{}'.format([str(v) for v in measurement.validators])) + return _ColorText(text, _BRIGHT_RED_STYLE) if colorize_text else text + elif measurement.marginal: + text = (f'| {measurement.name} is marginal because ' + f'{measurement.measured_value.value} is marginal in these checks: ' + '{}'.format([str(v) for v in measurement.validators])) + return (_ColorText(text, str(colorama.Fore.YELLOW)) + if colorize_text else text) + return f'| {measurement.name}: {measurement.measured_value.value}' + + +def StringFromAttachment(attachment: test_record.Attachment, name: str) -> str: + """Returns a text summary of the attachment. + + Args: + attachment: OpenHTF attachment to be converted to a string. + name: Name of the OpenHTF attachment. + + Returns: + Text summary of the measurement. + """ + return f'| attachment: {name} (mimetype={attachment.mimetype})' + + +def StringFromPhaseExecutionOutcome( + execution_outcome: phase_executor.PhaseExecutionOutcome) -> str: + """Returns a text representation of the phase execution outcome. + + Args: + execution_outcome: OpenHTF phase execution outcome. + + Returns: + Text summary of the measurement. + """ + if isinstance(execution_outcome.phase_result, phase_executor.ExceptionInfo): + return execution_outcome.phase_result.exc_type.__name__ + elif isinstance(execution_outcome.phase_result, phase_descriptor.PhaseResult): + return execution_outcome.phase_result.name + elif isinstance(execution_outcome.phase_result, + threads.ThreadTerminationError): + return type(execution_outcome.phase_result).__name__ + elif execution_outcome.phase_result is None: + return '' + raise TypeError( + f'{execution_outcome.phase_result.__name__} cannot be converted to a ' + 'string.') + + +def StringFromPhaseRecord( + phase: test_record.PhaseRecord, + only_failures: bool = False, + colorize_text: bool = False, + maximum_num_measurements: Optional[int] = None) -> str: + """Returns a text summary of the phase record that ran. + + Args: + phase: OpenHTF test record to be converted to a string. + only_failures: Indicated whether only failing measurements should be + converted to the string. + colorize_text: Indicates whether the converted string should be colorized + for a terminal output. + maximum_num_measurements: Maximum number of measurements to be printed. If + None, prints all the measurements. + + Returns: + Text summary of the phase record. + """ + output = [] + + text = 'Phase {}\n+ Outcome: {} Result: {}'.format( + phase.name, phase.outcome.name, + StringFromPhaseExecutionOutcome(phase.result)) + if (phase.outcome != test_record.PhaseOutcome.PASS and + phase.outcome != test_record.PhaseOutcome.SKIP and colorize_text): + text = _ColorText(text, _BRIGHT_RED_STYLE) + output.append(text) + sorted_measurement = sorted( + phase.measurements.values(), + key=lambda measurement: measurement.outcome == measurements.Outcome.PASS) + num_measurements_can_be_printed = maximum_num_measurements + for measurement in sorted_measurement: + if not only_failures or measurement.outcome == measurements.Outcome.FAIL: + if num_measurements_can_be_printed is not None: + num_measurements_can_be_printed -= 1 + if num_measurements_can_be_printed < 0: + if maximum_num_measurements: + output.append('...') + break + output.append( + StringFromMeasurement(measurement, colorize_text=colorize_text)) + + for name, attachment in phase.attachments.items(): + output.append(StringFromAttachment(attachment, name)) + return '\n'.join(output) + + +def StringFromOutcomeDetails( + outcome_details: List[test_record.OutcomeDetails]) -> str: + """Returns a text summary of the outcome details. + + Args: + outcome_details: OpenHTF list of outcome details. + + Returns: + Text summary of the outcome details. + """ + output = [] + plural_this = ('these', 'this')[len(outcome_details) == 1] + output.append(f'The test thinks {plural_this} may be the reason:') + for outcome_detail in outcome_details: + output.append(f'{outcome_detail.code}: {outcome_detail.description}') + return '\n'.join(output) + + +def StringFromTestRecord(record: test_record.TestRecord, + only_failures: bool = False, + colorize_text: bool = False, + maximum_num_measurements: Optional[int] = None) -> str: + """Returns a text summary of the test record that ran. + + Args: + record: OpenHTF test record to be converted to a string. + only_failures: Indicated whether only failing measurements should be + converted to the string. + colorize_text: Indicates whether the converted string should be colorized + for a terminal output. + maximum_num_measurements: Maximum number of measurements per phase to be + printed. If None, prints all the measurements. + + Returns: + Text summary of the test record that ran. + """ + output = [_GetTestOutcomeHeadline(record, colorize_text=colorize_text)] + if record.outcome == test_record.Outcome.PASS: + output.append('Woohoo!') + + for phase in record.phases: + if (not only_failures or (phase.outcome != test_record.PhaseOutcome.PASS and + phase.outcome != test_record.PhaseOutcome.SKIP)): + output.append( + StringFromPhaseRecord( + phase, + only_failures=only_failures, + colorize_text=colorize_text, + maximum_num_measurements=maximum_num_measurements)) + + # Check for top-level exceptions. + if record.outcome_details and record.outcome in { + test_record.Outcome.FAIL, test_record.Outcome.ERROR + }: + output.append(StringFromOutcomeDetails(record.outcome_details)) + + output.append(_GetTestOutcomeHeadline(record, colorize_text=colorize_text)) + # Generates the body itself now. + return '\n'.join(output) + + +def PrintTestRecord(record: test_record.TestRecord) -> None: + """Prints a summary of the test record. + + Args: + record: OpenHTF test record to be logged. + """ + # Checks if the logging will go to a file in which colors are likely to be + # only shown as ASCI characters. + colorize_text = sys.stdout.isatty() + # If the output contains too many characters then the logging module will + # automatically truncate the string when logging as the logging module has a + # maxmimum buffer size. Print instead of log to prevent reaching the logging + # limit. + print(StringFromTestRecord(record, colorize_text=colorize_text)) diff --git a/openhtf/util/units.py b/openhtf/util/units.py index c4bf4216a..0c1cd4bbc 100644 --- a/openhtf/util/units.py +++ b/openhtf/util/units.py @@ -31,7 +31,7 @@ OpenHTF uses UNECE unit codes internally because they are relatively complete and modern, and because they are recognized internationally. For full details -regarding where we get the codes from and which units are avaiable, see the +regarding where we get the codes from and which units are available, see the docstring at the top of openhtf/util/units/bin/units_from_xls.py. THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. @@ -593,13 +593,15 @@ class UnitDescriptor( ALL_UNITS.append(CAPSULE) POWDER_FILLED_VIAL = UnitDescriptor('powder filled vial', 'AW', '''''') ALL_UNITS.append(POWDER_FILLED_VIAL) +AMERICAN_WIRE_GAUGE = UnitDescriptor('american wire gauge', 'AWG', '''AWG''') +ALL_UNITS.append(AMERICAN_WIRE_GAUGE) ASSEMBLY = UnitDescriptor('assembly', 'AY', '''''') ALL_UNITS.append(ASSEMBLY) BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_POUND = UnitDescriptor('British thermal unit (international table) per pound', 'AZ', '''BtuIT/lb''') ALL_UNITS.append(BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_POUND) BTU_PER_CUBIC_FOOT = UnitDescriptor('Btu per cubic foot', 'B0', '''BTU/ft³''') ALL_UNITS.append(BTU_PER_CUBIC_FOOT) -BARREL_US_PER_DAY = UnitDescriptor('barrel (US) per day', 'B1', '''barrel (US)/d''') +BARREL_US_PER_DAY = UnitDescriptor('barrel (US) per day', 'B1', '''barrel (US)/d''') ALL_UNITS.append(BARREL_US_PER_DAY) BIT_PER_SECOND = UnitDescriptor('bit per second', 'B10', '''bit/s''') ALL_UNITS.append(BIT_PER_SECOND) @@ -831,6 +833,8 @@ class UnitDescriptor( ALL_UNITS.append(BOTTLE) HUNDRED_BOARD_FOOT = UnitDescriptor('hundred board foot', 'BP', '''''') ALL_UNITS.append(HUNDRED_BOARD_FOOT) +BEATS_PER_MINUTE = UnitDescriptor('beats per minute', 'BPM', '''BPM''') +ALL_UNITS.append(BEATS_PER_MINUTE) BECQUEREL = UnitDescriptor('becquerel', 'BQL', '''Bq''') ALL_UNITS.append(BECQUEREL) BAR_UNIT_OF_PACKAGING = UnitDescriptor('bar [unit of packaging]', 'BR', '''''') @@ -1121,7 +1125,7 @@ class UnitDescriptor( ALL_UNITS.append(COMBO) KILOWATT_HOUR_PER_HOUR = UnitDescriptor('kilowatt hour per hour', 'D03', '''kW·h/h''') ALL_UNITS.append(KILOWATT_HOUR_PER_HOUR) -LOT_UNIT_OF_WEIGHT = UnitDescriptor('lot [unit of weight]', 'D04', '''''') +LOT_UNIT_OF_WEIGHT = UnitDescriptor('lot [unit of weight]', 'D04', '''''') ALL_UNITS.append(LOT_UNIT_OF_WEIGHT) RECIPROCAL_SECOND_PER_STERADIAN = UnitDescriptor('reciprocal second per steradian', 'D1', '''s⁻¹/sr''') ALL_UNITS.append(RECIPROCAL_SECOND_PER_STERADIAN) @@ -1253,8 +1257,8 @@ class UnitDescriptor( ALL_UNITS.append(INCH_TO_THE_FOURTH_POWER) SANDWICH = UnitDescriptor('sandwich', 'D7', '''''') ALL_UNITS.append(SANDWICH) -CALORIE_INTERNATIONAL_TABLE_ = UnitDescriptor('calorie (international table) ', 'D70', '''calIT''') -ALL_UNITS.append(CALORIE_INTERNATIONAL_TABLE_) +CALORIE_INTERNATIONAL_TABLE = UnitDescriptor('calorie (international table)', 'D70', '''calIT''') +ALL_UNITS.append(CALORIE_INTERNATIONAL_TABLE) CALORIE_INTERNATIONAL_TABLE_PER_SECOND_CENTIMETRE_KELVIN = UnitDescriptor('calorie (international table) per second centimetre kelvin', 'D71', '''calIT/(s·cm·K)''') ALL_UNITS.append(CALORIE_INTERNATIONAL_TABLE_PER_SECOND_CENTIMETRE_KELVIN) CALORIE_INTERNATIONAL_TABLE_PER_SECOND_SQUARE_CENTIMETRE_KELVIN = UnitDescriptor('calorie (international table) per second square centimetre kelvin', 'D72', '''calIT/(s·cm²·K)''') @@ -2377,6 +2381,8 @@ class UnitDescriptor( ALL_UNITS.append(COUNT_PER_CENTIMETRE) INCH_PER_SECOND = UnitDescriptor('inch per second', 'IU', '''in/s''') ALL_UNITS.append(INCH_PER_SECOND) +INTERNATIONAL_UNIT_PER_GRAM = UnitDescriptor('international unit per gram', 'IUG', '''''') +ALL_UNITS.append(INTERNATIONAL_UNIT_PER_GRAM) INCH_PER_SECOND_SQUARED = UnitDescriptor('inch per second squared', 'IV', '''in/s²''') ALL_UNITS.append(INCH_PER_SECOND_SQUARED) PERCENT_PER_MILLIMETRE = UnitDescriptor('percent per millimetre', 'J10', '''%/mm''') @@ -2437,11 +2443,11 @@ class UnitDescriptor( ALL_UNITS.append(BAUD) BRITISH_THERMAL_UNIT_MEAN = UnitDescriptor('British thermal unit (mean)', 'J39', '''Btu''') ALL_UNITS.append(BRITISH_THERMAL_UNIT_MEAN) -BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_FOOT_PER_HOUR_SQUARE_FOOT_DEGREE_FAHRENHEIT = UnitDescriptor('British thermal unit (international table) foot per hour square foot degree Fahrenheit', 'J40', '''BtuIT·ft/(h·ft²·°F)''') +BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_FOOT_PER_HOUR_SQUARE_FOOT_DEGREE_FAHRENHEIT = UnitDescriptor('British thermal unit (international table) foot per hour square foot degree Fahrenheit', 'J40', '''BtuIT·ft/(h·ft²·°F)''') ALL_UNITS.append(BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_FOOT_PER_HOUR_SQUARE_FOOT_DEGREE_FAHRENHEIT) -BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_INCH_PER_HOUR_SQUARE_FOOT_DEGREE_FAHRENHEIT = UnitDescriptor('British thermal unit (international table) inch per hour square foot degree Fahrenheit', 'J41', '''BtuIT·in/(h·ft²·°F)''') +BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_INCH_PER_HOUR_SQUARE_FOOT_DEGREE_FAHRENHEIT = UnitDescriptor('British thermal unit (international table) inch per hour square foot degree Fahrenheit', 'J41', '''BtuIT·in/(h·ft²·°F)''') ALL_UNITS.append(BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_INCH_PER_HOUR_SQUARE_FOOT_DEGREE_FAHRENHEIT) -BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_INCH_PER_SECOND_SQUARE_FOOT_DEGREE_FAHRENHEIT = UnitDescriptor('British thermal unit (international table) inch per second square foot degree Fahrenheit', 'J42', '''BtuIT·in/(s·ft²·°F)''') +BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_INCH_PER_SECOND_SQUARE_FOOT_DEGREE_FAHRENHEIT = UnitDescriptor('British thermal unit (international table) inch per second square foot degree Fahrenheit', 'J42', '''BtuIT·in/(s·ft²·°F)''') ALL_UNITS.append(BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_INCH_PER_SECOND_SQUARE_FOOT_DEGREE_FAHRENHEIT) BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_POUND_DEGREE_FAHRENHEIT = UnitDescriptor('British thermal unit (international table) per pound degree Fahrenheit', 'J43', '''BtuIT/(lb·°F)''') ALL_UNITS.append(BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_POUND_DEGREE_FAHRENHEIT) @@ -2449,13 +2455,13 @@ class UnitDescriptor( ALL_UNITS.append(BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_MINUTE) BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_SECOND = UnitDescriptor('British thermal unit (international table) per second', 'J45', '''BtuIT/s''') ALL_UNITS.append(BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_SECOND) -BRITISH_THERMAL_UNIT_THERMOCHEMICAL_FOOT_PER_HOUR_SQUARE_FOOT_DEGREE_FAHRENHEIT = UnitDescriptor('British thermal unit (thermochemical) foot per hour square foot degree Fahrenheit', 'J46', '''Btuth·ft/(h·ft²·°F)''') +BRITISH_THERMAL_UNIT_THERMOCHEMICAL_FOOT_PER_HOUR_SQUARE_FOOT_DEGREE_FAHRENHEIT = UnitDescriptor('British thermal unit (thermochemical) foot per hour square foot degree Fahrenheit', 'J46', '''Btuth·ft/(h·ft²·°F)''') ALL_UNITS.append(BRITISH_THERMAL_UNIT_THERMOCHEMICAL_FOOT_PER_HOUR_SQUARE_FOOT_DEGREE_FAHRENHEIT) BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_HOUR = UnitDescriptor('British thermal unit (thermochemical) per hour', 'J47', '''Btuth/h''') ALL_UNITS.append(BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_HOUR) -BRITISH_THERMAL_UNIT_THERMOCHEMICAL_INCH_PER_HOUR_SQUARE_FOOT_DEGREE_FAHRENHEIT = UnitDescriptor('British thermal unit (thermochemical) inch per hour square foot degree Fahrenheit', 'J48', '''Btuth·in/(h·ft²·°F)''') +BRITISH_THERMAL_UNIT_THERMOCHEMICAL_INCH_PER_HOUR_SQUARE_FOOT_DEGREE_FAHRENHEIT = UnitDescriptor('British thermal unit (thermochemical) inch per hour square foot degree Fahrenheit', 'J48', '''Btuth·in/(h·ft²·°F)''') ALL_UNITS.append(BRITISH_THERMAL_UNIT_THERMOCHEMICAL_INCH_PER_HOUR_SQUARE_FOOT_DEGREE_FAHRENHEIT) -BRITISH_THERMAL_UNIT_THERMOCHEMICAL_INCH_PER_SECOND_SQUARE_FOOT_DEGREE_FAHRENHEIT = UnitDescriptor('British thermal unit (thermochemical) inch per second square foot degree Fahrenheit', 'J49', '''Btuth·in/(s·ft²·°F)''') +BRITISH_THERMAL_UNIT_THERMOCHEMICAL_INCH_PER_SECOND_SQUARE_FOOT_DEGREE_FAHRENHEIT = UnitDescriptor('British thermal unit (thermochemical) inch per second square foot degree Fahrenheit', 'J49', '''Btuth·in/(s·ft²·°F)''') ALL_UNITS.append(BRITISH_THERMAL_UNIT_THERMOCHEMICAL_INCH_PER_SECOND_SQUARE_FOOT_DEGREE_FAHRENHEIT) BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_POUND_DEGREE_FAHRENHEIT = UnitDescriptor('British thermal unit (thermochemical) per pound degree Fahrenheit', 'J50', '''Btuth/(lb·°F)''') ALL_UNITS.append(BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_POUND_DEGREE_FAHRENHEIT) @@ -2807,6 +2813,8 @@ class UnitDescriptor( ALL_UNITS.append(KILOMETRE) KILOGRAM_OF_NITROGEN = UnitDescriptor('kilogram of nitrogen', 'KNI', '''kg N''') ALL_UNITS.append(KILOGRAM_OF_NITROGEN) +KILONEWTON_PER_SQUARE_METRE = UnitDescriptor('kilonewton per square metre', 'KNM', '''kN/m2''') +ALL_UNITS.append(KILONEWTON_PER_SQUARE_METRE) KILOGRAM_NAMED_SUBSTANCE = UnitDescriptor('kilogram named substance', 'KNS', '''''') ALL_UNITS.append(KILOGRAM_NAMED_SUBSTANCE) KNOT = UnitDescriptor('knot', 'KNT', '''kn''') @@ -2845,8 +2853,14 @@ class UnitDescriptor( ALL_UNITS.append(KILOGRAM_PER_MILLIMETRE) KILOWATT_HOUR = UnitDescriptor('kilowatt hour', 'KWH', '''kW·h''') ALL_UNITS.append(KILOWATT_HOUR) +KILOWATT_YEAR = UnitDescriptor('kilowatt year', 'KWY', '''kW/year''') +ALL_UNITS.append(KILOWATT_YEAR) +KILOWATT_HOUR_PER_NORMALIZED_CUBIC_METRE = UnitDescriptor('Kilowatt hour per normalized cubic metre', 'KWN', '''''') +ALL_UNITS.append(KILOWATT_HOUR_PER_NORMALIZED_CUBIC_METRE) KILOGRAM_OF_TUNGSTEN_TRIOXIDE = UnitDescriptor('kilogram of tungsten trioxide', 'KWO', '''kg WO₃''') ALL_UNITS.append(KILOGRAM_OF_TUNGSTEN_TRIOXIDE) +KILOWATT_HOUR_PER_STANDARD_CUBIC_METRE = UnitDescriptor('Kilowatt hour per standard cubic metre', 'KWS', '''''') +ALL_UNITS.append(KILOWATT_HOUR_PER_STANDARD_CUBIC_METRE) KILOWATT = UnitDescriptor('kilowatt', 'KWT', '''kW''') ALL_UNITS.append(KILOWATT) MILLILITRE_PER_KILOGRAM = UnitDescriptor('millilitre per kilogram', 'KX', '''ml/kg''') @@ -3059,7 +3073,7 @@ class UnitDescriptor( ALL_UNITS.append(LINEAR_METRE) LENGTH = UnitDescriptor('length', 'LN', '''''') ALL_UNITS.append(LENGTH) -LOT_UNIT_OF_PROCUREMENT = UnitDescriptor('lot [unit of procurement]', 'LO', '''''') +LOT_UNIT_OF_PROCUREMENT = UnitDescriptor('lot [unit of procurement]', 'LO', '''''') ALL_UNITS.append(LOT_UNIT_OF_PROCUREMENT) LIQUID_POUND = UnitDescriptor('liquid pound', 'LP', '''''') ALL_UNITS.append(LIQUID_POUND) @@ -3159,40 +3173,40 @@ class UnitDescriptor( ALL_UNITS.append(REVOLUTION) DEGREE_UNIT_OF_ANGLE_PER_SECOND_SQUARED = UnitDescriptor('degree [unit of angle] per second squared', 'M45', '''°/s²''') ALL_UNITS.append(DEGREE_UNIT_OF_ANGLE_PER_SECOND_SQUARED) -REVOLUTION_PER_MINUTE_ = UnitDescriptor('revolution per minute ', 'M46', '''r/min''') -ALL_UNITS.append(REVOLUTION_PER_MINUTE_) -CIRCULAR_MIL_ = UnitDescriptor('circular mil ', 'M47', '''cmil''') -ALL_UNITS.append(CIRCULAR_MIL_) -SQUARE_MILE_BASED_ON_U_S_SURVEY_FOOT_ = UnitDescriptor('square mile (based on U.S. survey foot) ', 'M48', '''mi² (US survey)''') -ALL_UNITS.append(SQUARE_MILE_BASED_ON_U_S_SURVEY_FOOT_) +REVOLUTION_PER_MINUTE = UnitDescriptor('revolution per minute', 'M46', '''r/min''') +ALL_UNITS.append(REVOLUTION_PER_MINUTE) +CIRCULAR_MIL = UnitDescriptor('circular mil', 'M47', '''cmil''') +ALL_UNITS.append(CIRCULAR_MIL) +SQUARE_MILE_BASED_ON_U_S_SURVEY_FOOT = UnitDescriptor('square mile (based on U.S. survey foot)', 'M48', '''mi² (US survey)''') +ALL_UNITS.append(SQUARE_MILE_BASED_ON_U_S_SURVEY_FOOT) CHAIN_BASED_ON_U_S_SURVEY_FOOT = UnitDescriptor('chain (based on U.S. survey foot)', 'M49', '''ch (US survey) ''') ALL_UNITS.append(CHAIN_BASED_ON_U_S_SURVEY_FOOT) MICROCURIE = UnitDescriptor('microcurie', 'M5', '''µCi''') ALL_UNITS.append(MICROCURIE) FURLONG = UnitDescriptor('furlong', 'M50', '''fur''') ALL_UNITS.append(FURLONG) -FOOT_U_S_SURVEY_ = UnitDescriptor('foot (U.S. survey) ', 'M51', '''ft (US survey) ''') -ALL_UNITS.append(FOOT_U_S_SURVEY_) -MILE_BASED_ON_U_S_SURVEY_FOOT_ = UnitDescriptor('mile (based on U.S. survey foot) ', 'M52', '''mi (US survey) ''') -ALL_UNITS.append(MILE_BASED_ON_U_S_SURVEY_FOOT_) +FOOT_U_S_SURVEY = UnitDescriptor('foot (U.S. survey)', 'M51', '''ft (US survey) ''') +ALL_UNITS.append(FOOT_U_S_SURVEY) +MILE_BASED_ON_U_S_SURVEY_FOOT = UnitDescriptor('mile (based on U.S. survey foot)', 'M52', '''mi (US survey) ''') +ALL_UNITS.append(MILE_BASED_ON_U_S_SURVEY_FOOT) METRE_PER_PASCAL = UnitDescriptor('metre per pascal', 'M53', '''m/Pa''') ALL_UNITS.append(METRE_PER_PASCAL) METRE_PER_RADIANT = UnitDescriptor('metre per radiant', 'M55', '''m/rad''') ALL_UNITS.append(METRE_PER_RADIANT) SHAKE = UnitDescriptor('shake', 'M56', '''shake''') ALL_UNITS.append(SHAKE) -MILE_PER_MINUTE_ = UnitDescriptor('mile per minute ', 'M57', '''mi/min''') -ALL_UNITS.append(MILE_PER_MINUTE_) -MILE_PER_SECOND_ = UnitDescriptor('mile per second ', 'M58', '''mi/s''') -ALL_UNITS.append(MILE_PER_SECOND_) +MILE_PER_MINUTE = UnitDescriptor('mile per minute', 'M57', '''mi/min''') +ALL_UNITS.append(MILE_PER_MINUTE) +MILE_PER_SECOND = UnitDescriptor('mile per second', 'M58', '''mi/s''') +ALL_UNITS.append(MILE_PER_SECOND) METRE_PER_SECOND_PASCAL = UnitDescriptor('metre per second pascal', 'M59', '''(m/s)/Pa''') ALL_UNITS.append(METRE_PER_SECOND_PASCAL) METRE_PER_HOUR = UnitDescriptor('metre per hour', 'M60', '''m/h''') ALL_UNITS.append(METRE_PER_HOUR) INCH_PER_YEAR = UnitDescriptor('inch per year', 'M61', '''in/y''') ALL_UNITS.append(INCH_PER_YEAR) -KILOMETRE_PER_SECOND_ = UnitDescriptor('kilometre per second ', 'M62', '''km/s''') -ALL_UNITS.append(KILOMETRE_PER_SECOND_) +KILOMETRE_PER_SECOND = UnitDescriptor('kilometre per second', 'M62', '''km/s''') +ALL_UNITS.append(KILOMETRE_PER_SECOND) YARD_PER_SECOND = UnitDescriptor('yard per second', 'M64', '''yd/s''') ALL_UNITS.append(YARD_PER_SECOND) YARD_PER_MINUTE = UnitDescriptor('yard per minute', 'M65', '''yd/min''') @@ -3207,8 +3221,8 @@ class UnitDescriptor( ALL_UNITS.append(CUBIC_MILE_UK_STATUTE) MICRO_INCH = UnitDescriptor('micro-inch', 'M7', '''µin''') ALL_UNITS.append(MICRO_INCH) -TON_REGISTER_ = UnitDescriptor('ton, register ', 'M70', '''RT''') -ALL_UNITS.append(TON_REGISTER_) +TON_REGISTER = UnitDescriptor('ton, register', 'M70', '''RT''') +ALL_UNITS.append(TON_REGISTER) CUBIC_METRE_PER_PASCAL = UnitDescriptor('cubic metre per pascal', 'M71', '''m³/Pa''') ALL_UNITS.append(CUBIC_METRE_PER_PASCAL) BEL = UnitDescriptor('bel', 'M72', '''B''') @@ -3225,18 +3239,16 @@ class UnitDescriptor( ALL_UNITS.append(KILOGRAM_METRE_PER_SECOND_SQUARED) POND = UnitDescriptor('pond', 'M78', '''p''') ALL_UNITS.append(POND) -SQUARE_FOOT_PER_HOUR_ = UnitDescriptor('square foot per hour ', 'M79', '''ft²/h''') -ALL_UNITS.append(SQUARE_FOOT_PER_HOUR_) +SQUARE_FOOT_PER_HOUR = UnitDescriptor('square foot per hour', 'M79', '''ft²/h''') +ALL_UNITS.append(SQUARE_FOOT_PER_HOUR) STOKES_PER_PASCAL = UnitDescriptor('stokes per pascal', 'M80', '''St/Pa''') ALL_UNITS.append(STOKES_PER_PASCAL) SQUARE_CENTIMETRE_PER_SECOND = UnitDescriptor('square centimetre per second', 'M81', '''cm²/s''') ALL_UNITS.append(SQUARE_CENTIMETRE_PER_SECOND) SQUARE_METRE_PER_SECOND_PASCAL = UnitDescriptor('square metre per second pascal', 'M82', '''(m²/s)/Pa''') ALL_UNITS.append(SQUARE_METRE_PER_SECOND_PASCAL) -DENIER_ = UnitDescriptor('denier ', 'M83', '''den''') -ALL_UNITS.append(DENIER_) -POUND_PER_YARD_ = UnitDescriptor('pound per yard ', 'M84', '''lb/yd''') -ALL_UNITS.append(POUND_PER_YARD_) +POUND_PER_YARD = UnitDescriptor('pound per yard', 'M84', '''lb/yd''') +ALL_UNITS.append(POUND_PER_YARD) TON_ASSAY = UnitDescriptor('ton, assay', 'M85', '''''') ALL_UNITS.append(TON_ASSAY) PFUND = UnitDescriptor('pfund', 'M86', '''pfd''') @@ -3349,7 +3361,7 @@ class UnitDescriptor( ALL_UNITS.append(NUMBER_OF_MULTS) MEGAVOLT_AMPERE = UnitDescriptor('megavolt - ampere', 'MVA', '''MV·A''') ALL_UNITS.append(MEGAVOLT_AMPERE) -MEGAWATT_HOUR_1000_KW_H = UnitDescriptor('megawatt hour (1000 kW.h)', 'MWH', '''MW·h''') +MEGAWATT_HOUR_1000_KW_H = UnitDescriptor('megawatt hour (1000 kW.h)', 'MWH', '''MW·h''') ALL_UNITS.append(MEGAWATT_HOUR_1000_KW_H) PEN_CALORIE = UnitDescriptor('pen calorie', 'N1', '''''') ALL_UNITS.append(PEN_CALORIE) @@ -3377,10 +3389,10 @@ class UnitDescriptor( ALL_UNITS.append(NUMBER_OF_LINES) KIP_PER_SQUARE_INCH = UnitDescriptor('kip per square inch', 'N20', '''ksi''') ALL_UNITS.append(KIP_PER_SQUARE_INCH) -POUNDAL_PER_SQUARE_FOOT_ = UnitDescriptor('poundal per square foot ', 'N21', '''pdl/ft²''') -ALL_UNITS.append(POUNDAL_PER_SQUARE_FOOT_) -OUNCE_AVOIRDUPOIS_PER_SQUARE_INCH_ = UnitDescriptor('ounce (avoirdupois) per square inch ', 'N22', '''oz/in²''') -ALL_UNITS.append(OUNCE_AVOIRDUPOIS_PER_SQUARE_INCH_) +POUNDAL_PER_SQUARE_FOOT = UnitDescriptor('poundal per square foot', 'N21', '''pdl/ft²''') +ALL_UNITS.append(POUNDAL_PER_SQUARE_FOOT) +OUNCE_AVOIRDUPOIS_PER_SQUARE_INCH = UnitDescriptor('ounce (avoirdupois) per square inch', 'N22', '''oz/in²''') +ALL_UNITS.append(OUNCE_AVOIRDUPOIS_PER_SQUARE_INCH) CONVENTIONAL_METRE_OF_WATER = UnitDescriptor('conventional metre of water', 'N23', '''mH₂O''') ALL_UNITS.append(CONVENTIONAL_METRE_OF_WATER) GRAM_PER_SQUARE_MILLIMETRE = UnitDescriptor('gram per square millimetre', 'N24', '''g/mm²''') @@ -3389,8 +3401,8 @@ class UnitDescriptor( ALL_UNITS.append(POUND_PER_SQUARE_YARD) POUNDAL_PER_SQUARE_INCH = UnitDescriptor('poundal per square inch', 'N26', '''pdl/in²''') ALL_UNITS.append(POUNDAL_PER_SQUARE_INCH) -FOOT_TO_THE_FOURTH_POWER_ = UnitDescriptor('foot to the fourth power ', 'N27', '''ft⁴''') -ALL_UNITS.append(FOOT_TO_THE_FOURTH_POWER_) +FOOT_TO_THE_FOURTH_POWER = UnitDescriptor('foot to the fourth power', 'N27', '''ft⁴''') +ALL_UNITS.append(FOOT_TO_THE_FOURTH_POWER) CUBIC_DECIMETRE_PER_KILOGRAM = UnitDescriptor('cubic decimetre per kilogram', 'N28', '''dm³/kg''') ALL_UNITS.append(CUBIC_DECIMETRE_PER_KILOGRAM) CUBIC_FOOT_PER_POUND = UnitDescriptor('cubic foot per pound', 'N29', '''ft³/lb''') @@ -3405,8 +3417,8 @@ class UnitDescriptor( ALL_UNITS.append(POUNDAL_PER_INCH) POUND_FORCE_PER_YARD = UnitDescriptor('pound-force per yard', 'N33', '''lbf/yd''') ALL_UNITS.append(POUND_FORCE_PER_YARD) -POUNDAL_SECOND_PER_SQUARE_FOOT_ = UnitDescriptor('poundal second per square foot ', 'N34', '''(pdl/ft²)·s''') -ALL_UNITS.append(POUNDAL_SECOND_PER_SQUARE_FOOT_) +POUNDAL_SECOND_PER_SQUARE_FOOT = UnitDescriptor('poundal second per square foot', 'N34', '''(pdl/ft²)·s''') +ALL_UNITS.append(POUNDAL_SECOND_PER_SQUARE_FOOT) POISE_PER_PASCAL = UnitDescriptor('poise per pascal', 'N35', '''P/Pa''') ALL_UNITS.append(POISE_PER_PASCAL) NEWTON_SECOND_PER_SQUARE_METRE = UnitDescriptor('newton second per square metre', 'N36', '''(N/m²)·s''') @@ -3433,10 +3445,10 @@ class UnitDescriptor( ALL_UNITS.append(FOOT_POUNDAL) INCH_POUNDAL = UnitDescriptor('inch poundal', 'N47', '''in·pdl''') ALL_UNITS.append(INCH_POUNDAL) -WATT_PER_SQUARE_CENTIMETRE_ = UnitDescriptor('watt per square centimetre ', 'N48', '''W/cm²''') -ALL_UNITS.append(WATT_PER_SQUARE_CENTIMETRE_) -WATT_PER_SQUARE_INCH_ = UnitDescriptor('watt per square inch ', 'N49', '''W/in²''') -ALL_UNITS.append(WATT_PER_SQUARE_INCH_) +WATT_PER_SQUARE_CENTIMETRE = UnitDescriptor('watt per square centimetre', 'N48', '''W/cm²''') +ALL_UNITS.append(WATT_PER_SQUARE_CENTIMETRE) +WATT_PER_SQUARE_INCH = UnitDescriptor('watt per square inch', 'N49', '''W/in²''') +ALL_UNITS.append(WATT_PER_SQUARE_INCH) BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_SQUARE_FOOT_HOUR = UnitDescriptor('British thermal unit (international table) per square foot hour', 'N50', '''BtuIT/(ft²·h)''') ALL_UNITS.append(BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_SQUARE_FOOT_HOUR) BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_SQUARE_FOOT_HOUR = UnitDescriptor('British thermal unit (thermochemical) per square foot hour', 'N51', '''Btuth/(ft²·h)''') @@ -3453,8 +3465,8 @@ class UnitDescriptor( ALL_UNITS.append(CALORIE_THERMOCHEMICAL_PER_SQUARE_CENTIMETRE_MINUTE) CALORIE_THERMOCHEMICAL_PER_SQUARE_CENTIMETRE_SECOND = UnitDescriptor('calorie (thermochemical) per square centimetre second', 'N57', '''calth/(cm²·s)''') ALL_UNITS.append(CALORIE_THERMOCHEMICAL_PER_SQUARE_CENTIMETRE_SECOND) -BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_CUBIC_FOOT_ = UnitDescriptor('British thermal unit (international table) per cubic foot ', 'N58', '''BtuIT/ft³''') -ALL_UNITS.append(BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_CUBIC_FOOT_) +BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_CUBIC_FOOT = UnitDescriptor('British thermal unit (international table) per cubic foot', 'N58', '''BtuIT/ft³''') +ALL_UNITS.append(BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_CUBIC_FOOT) BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_CUBIC_FOOT = UnitDescriptor('British thermal unit (thermochemical) per cubic foot', 'N59', '''Btuth/ft³''') ALL_UNITS.append(BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_CUBIC_FOOT) BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_DEGREE_FAHRENHEIT = UnitDescriptor('British thermal unit (international table) per degree Fahrenheit', 'N60', '''BtuIT/ºF''') @@ -3469,14 +3481,14 @@ class UnitDescriptor( ALL_UNITS.append(BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_POUND_DEGREE_RANKINE) KILOCALORIE_INTERNATIONAL_TABLE_PER_GRAM_KELVIN = UnitDescriptor('kilocalorie (international table) per gram kelvin', 'N65', '''(kcalIT/K)/g''') ALL_UNITS.append(KILOCALORIE_INTERNATIONAL_TABLE_PER_GRAM_KELVIN) -BRITISH_THERMAL_UNIT_39_DEG_F_ = UnitDescriptor('British thermal unit (39 ºF) ', 'N66', '''Btu (39 ºF) ''') -ALL_UNITS.append(BRITISH_THERMAL_UNIT_39_DEG_F_) +BRITISH_THERMAL_UNIT_39_DEG_F = UnitDescriptor('British thermal unit (39 ºF)', 'N66', '''Btu (39 ºF) ''') +ALL_UNITS.append(BRITISH_THERMAL_UNIT_39_DEG_F) BRITISH_THERMAL_UNIT_59_DEG_F = UnitDescriptor('British thermal unit (59 ºF)', 'N67', '''Btu (59 ºF)''') ALL_UNITS.append(BRITISH_THERMAL_UNIT_59_DEG_F) -BRITISH_THERMAL_UNIT_60_DEG_F_ = UnitDescriptor('British thermal unit (60 ºF) ', 'N68', '''Btu (60 ºF) ''') -ALL_UNITS.append(BRITISH_THERMAL_UNIT_60_DEG_F_) -CALORIE_20_DEG_C_ = UnitDescriptor('calorie (20 ºC) ', 'N69', '''cal₂₀''') -ALL_UNITS.append(CALORIE_20_DEG_C_) +BRITISH_THERMAL_UNIT_60_DEG_F = UnitDescriptor('British thermal unit (60 ºF)', 'N68', '''Btu (60 ºF) ''') +ALL_UNITS.append(BRITISH_THERMAL_UNIT_60_DEG_F) +CALORIE_20_DEG_C = UnitDescriptor('calorie (20 ºC)', 'N69', '''cal₂₀''') +ALL_UNITS.append(CALORIE_20_DEG_C) QUAD_10FIFTEEN_BTUIT = UnitDescriptor('quad (1015 BtuIT)', 'N70', '''quad''') ALL_UNITS.append(QUAD_10FIFTEEN_BTUIT) THERM_EC = UnitDescriptor('therm (EC)', 'N71', '''thm (EC)''') @@ -3571,6 +3583,8 @@ class UnitDescriptor( ALL_UNITS.append(NUMBER_OF_SCREENS) LOAD = UnitDescriptor('load', 'NL', '''''') ALL_UNITS.append(LOAD) +NORMALISED_CUBIC_METRE = UnitDescriptor('Normalised cubic metre', 'NM3', '''''') +ALL_UNITS.append(NORMALISED_CUBIC_METRE) NAUTICAL_MILE = UnitDescriptor('nautical mile', 'NMI', '''n mile''') ALL_UNITS.append(NAUTICAL_MILE) NUMBER_OF_PACKS = UnitDescriptor('number of packs', 'NMP', '''''') @@ -3605,6 +3619,12 @@ class UnitDescriptor( ALL_UNITS.append(PANEL) OZONE_DEPLETION_EQUIVALENT = UnitDescriptor('ozone depletion equivalent', 'ODE', '''''') ALL_UNITS.append(OZONE_DEPLETION_EQUIVALENT) +ODS_GRAMS = UnitDescriptor('ODS Grams', 'ODG', '''''') +ALL_UNITS.append(ODS_GRAMS) +ODS_KILOGRAMS = UnitDescriptor('ODS Kilograms', 'ODK', '''''') +ALL_UNITS.append(ODS_KILOGRAMS) +ODS_MILLIGRAMS = UnitDescriptor('ODS Milligrams', 'ODM', '''''') +ALL_UNITS.append(ODS_MILLIGRAMS) OHM = UnitDescriptor('ohm', 'OHM', '''Ω''') ALL_UNITS.append(OHM) OUNCE_PER_SQUARE_YARD = UnitDescriptor('ounce per square yard', 'ON', '''oz/yd²''') @@ -3613,6 +3633,8 @@ class UnitDescriptor( ALL_UNITS.append(OUNCE_AVOIRDUPOIS) TWO_PACK = UnitDescriptor('two pack', 'OP', '''''') ALL_UNITS.append(TWO_PACK) +OSCILLATIONS_PER_MINUTE = UnitDescriptor('oscillations per minute', 'OPM', '''o/min''') +ALL_UNITS.append(OSCILLATIONS_PER_MINUTE) OVERTIME_HOUR = UnitDescriptor('overtime hour', 'OT', '''''') ALL_UNITS.append(OVERTIME_HOUR) OUNCE_AV = UnitDescriptor('ounce av', 'OZ', '''''') @@ -3655,18 +3677,18 @@ class UnitDescriptor( ALL_UNITS.append(KILOJOULE_PER_DAY) NANOOHM = UnitDescriptor('nanoohm', 'P22', '''nΩ''') ALL_UNITS.append(NANOOHM) -OHM_CIRCULAR_MIL_PER_FOOT_ = UnitDescriptor('ohm circular-mil per foot ', 'P23', '''Ω·cmil/ft ''') -ALL_UNITS.append(OHM_CIRCULAR_MIL_PER_FOOT_) +OHM_CIRCULAR_MIL_PER_FOOT = UnitDescriptor('ohm circular-mil per foot', 'P23', '''Ω·cmil/ft ''') +ALL_UNITS.append(OHM_CIRCULAR_MIL_PER_FOOT) KILOHENRY = UnitDescriptor('kilohenry', 'P24', '''kH''') ALL_UNITS.append(KILOHENRY) -LUMEN_PER_SQUARE_FOOT_ = UnitDescriptor('lumen per square foot ', 'P25', '''lm/ft²''') -ALL_UNITS.append(LUMEN_PER_SQUARE_FOOT_) +LUMEN_PER_SQUARE_FOOT = UnitDescriptor('lumen per square foot', 'P25', '''lm/ft²''') +ALL_UNITS.append(LUMEN_PER_SQUARE_FOOT) PHOT = UnitDescriptor('phot', 'P26', '''ph''') ALL_UNITS.append(PHOT) FOOTCANDLE = UnitDescriptor('footcandle', 'P27', '''ftc''') ALL_UNITS.append(FOOTCANDLE) -CANDELA_PER_SQUARE_INCH_ = UnitDescriptor('candela per square inch ', 'P28', '''cd/in²''') -ALL_UNITS.append(CANDELA_PER_SQUARE_INCH_) +CANDELA_PER_SQUARE_INCH = UnitDescriptor('candela per square inch', 'P28', '''cd/in²''') +ALL_UNITS.append(CANDELA_PER_SQUARE_INCH) FOOTLAMBERT = UnitDescriptor('footlambert', 'P29', '''ftL''') ALL_UNITS.append(FOOTLAMBERT) THREE_PACK = UnitDescriptor('three pack', 'P3', '''''') @@ -3683,14 +3705,14 @@ class UnitDescriptor( ALL_UNITS.append(MILLICANDELA) HEFNER_KERZE = UnitDescriptor('Hefner-Kerze', 'P35', '''HK''') ALL_UNITS.append(HEFNER_KERZE) -INTERNATIONAL_CANDLE_ = UnitDescriptor('international candle ', 'P36', '''IK''') -ALL_UNITS.append(INTERNATIONAL_CANDLE_) +INTERNATIONAL_CANDLE = UnitDescriptor('international candle', 'P36', '''IK''') +ALL_UNITS.append(INTERNATIONAL_CANDLE) BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_SQUARE_FOOT = UnitDescriptor('British thermal unit (international table) per square foot', 'P37', '''BtuIT/ft²''') ALL_UNITS.append(BRITISH_THERMAL_UNIT_INTERNATIONAL_TABLE_PER_SQUARE_FOOT) BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_SQUARE_FOOT = UnitDescriptor('British thermal unit (thermochemical) per square foot', 'P38', '''Btuth/ft²''') ALL_UNITS.append(BRITISH_THERMAL_UNIT_THERMOCHEMICAL_PER_SQUARE_FOOT) -CALORIE_THERMOCHEMICAL_PER_SQUARE_CENTIMETRE_ = UnitDescriptor('calorie (thermochemical) per square centimetre ', 'P39', '''calth/cm²''') -ALL_UNITS.append(CALORIE_THERMOCHEMICAL_PER_SQUARE_CENTIMETRE_) +CALORIE_THERMOCHEMICAL_PER_SQUARE_CENTIMETRE = UnitDescriptor('calorie (thermochemical) per square centimetre', 'P39', '''calth/cm²''') +ALL_UNITS.append(CALORIE_THERMOCHEMICAL_PER_SQUARE_CENTIMETRE) FOUR_PACK = UnitDescriptor('four pack', 'P4', '''''') ALL_UNITS.append(FOUR_PACK) LANGLEY = UnitDescriptor('langley', 'P40', '''Ly''') @@ -3721,8 +3743,8 @@ class UnitDescriptor( ALL_UNITS.append(MOL_PER_KILOGRAM_PASCAL) MOL_PER_CUBIC_METRE_PASCAL = UnitDescriptor('mol per cubic metre pascal', 'P52', '''(mol/m³)/Pa''') ALL_UNITS.append(MOL_PER_CUBIC_METRE_PASCAL) -UNIT_POLE_ = UnitDescriptor('unit pole ', 'P53', '''unit pole ''') -ALL_UNITS.append(UNIT_POLE_) +UNIT_POLE = UnitDescriptor('unit pole', 'P53', '''unit pole ''') +ALL_UNITS.append(UNIT_POLE) MILLIGRAY_PER_SECOND = UnitDescriptor('milligray per second', 'P54', '''mGy/s''') ALL_UNITS.append(MILLIGRAY_PER_SECOND) MICROGRAY_PER_SECOND = UnitDescriptor('microgray per second', 'P55', '''µGy/s''') @@ -3803,12 +3825,12 @@ class UnitDescriptor( ALL_UNITS.append(POUND_FORCE_FOOT_PER_INCH) NINE_PACK = UnitDescriptor('nine pack', 'P9', '''''') ALL_UNITS.append(NINE_PACK) -POUND_FORCE_INCH_PER_INCH_ = UnitDescriptor('pound-force inch per inch ', 'P90', '''lbf·in/in''') -ALL_UNITS.append(POUND_FORCE_INCH_PER_INCH_) -PERM_0_DEG_C_ = UnitDescriptor('perm (0 ºC) ', 'P91', '''perm (0 ºC) ''') -ALL_UNITS.append(PERM_0_DEG_C_) -PERM_23_DEG_C_ = UnitDescriptor('perm (23 ºC) ', 'P92', '''perm (23 ºC) ''') -ALL_UNITS.append(PERM_23_DEG_C_) +POUND_FORCE_INCH_PER_INCH = UnitDescriptor('pound-force inch per inch', 'P90', '''lbf·in/in''') +ALL_UNITS.append(POUND_FORCE_INCH_PER_INCH) +PERM_0_DEG_C = UnitDescriptor('perm (0 ºC)', 'P91', '''perm (0 ºC) ''') +ALL_UNITS.append(PERM_0_DEG_C) +PERM_23_DEG_C = UnitDescriptor('perm (23 ºC)', 'P92', '''perm (23 ºC) ''') +ALL_UNITS.append(PERM_23_DEG_C) BYTE_PER_SECOND = UnitDescriptor('byte per second', 'P93', '''byte/s''') ALL_UNITS.append(BYTE_PER_SECOND) KILOBYTE_PER_SECOND = UnitDescriptor('kilobyte per second', 'P94', '''kbyte/s''') @@ -3869,6 +3891,8 @@ class UnitDescriptor( ALL_UNITS.append(PINT_UK) LIQUID_PINT_US = UnitDescriptor('liquid pint (US)', 'PTL', '''liq pt (US)''') ALL_UNITS.append(LIQUID_PINT_US) +PORTION = UnitDescriptor('portion', 'PTN', '''PTN''') +ALL_UNITS.append(PORTION) TRAY_PER_TRAY_PACK = UnitDescriptor('tray / tray pack', 'PU', '''''') ALL_UNITS.append(TRAY_PER_TRAY_PACK) HALF_PINT_US = UnitDescriptor('half pint (US)', 'PV', '''''') @@ -3923,6 +3947,28 @@ class UnitDescriptor( ALL_UNITS.append(PH_POTENTIAL_OF_HYDROGEN) KILOJOULE_PER_GRAM = UnitDescriptor('kilojoule per gram', 'Q31', '''kJ/g''') ALL_UNITS.append(KILOJOULE_PER_GRAM) +FEMTOLITRE = UnitDescriptor('femtolitre', 'Q32', '''fl''') +ALL_UNITS.append(FEMTOLITRE) +PICOLITRE = UnitDescriptor('picolitre', 'Q33', '''pl''') +ALL_UNITS.append(PICOLITRE) +NANOLITRE = UnitDescriptor('nanolitre', 'Q34', '''nl''') +ALL_UNITS.append(NANOLITRE) +MEGAWATTS_PER_MINUTE = UnitDescriptor('megawatts per minute', 'Q35', '''MW/min''') +ALL_UNITS.append(MEGAWATTS_PER_MINUTE) +SQUARE_METRE_PER_CUBIC_METRE = UnitDescriptor('square metre per cubic metre', 'Q36', '''m2/m3''') +ALL_UNITS.append(SQUARE_METRE_PER_CUBIC_METRE) +STANDARD_CUBIC_METRE_PER_DAY = UnitDescriptor('Standard cubic metre per day', 'Q37', '''''') +ALL_UNITS.append(STANDARD_CUBIC_METRE_PER_DAY) +STANDARD_CUBIC_METRE_PER_HOUR = UnitDescriptor('Standard cubic metre per hour', 'Q38', '''''') +ALL_UNITS.append(STANDARD_CUBIC_METRE_PER_HOUR) +NORMALIZED_CUBIC_METRE_PER_DAY = UnitDescriptor('Normalized cubic metre per day', 'Q39', '''''') +ALL_UNITS.append(NORMALIZED_CUBIC_METRE_PER_DAY) +NORMALIZED_CUBIC_METRE_PER_HOUR = UnitDescriptor('Normalized cubic metre per hour', 'Q40', '''''') +ALL_UNITS.append(NORMALIZED_CUBIC_METRE_PER_HOUR) +JOULE_PER_NORMALISED_CUBIC_METRE = UnitDescriptor('Joule per normalised cubic metre', 'Q41', '''''') +ALL_UNITS.append(JOULE_PER_NORMALISED_CUBIC_METRE) +JOULE_PER_STANDARD_CUBIC_METRE = UnitDescriptor('Joule per standard cubic metre', 'Q42', '''''') +ALL_UNITS.append(JOULE_PER_STANDARD_CUBIC_METRE) MEAL = UnitDescriptor('meal', 'Q3', '''''') ALL_UNITS.append(MEAL) PAGE_FACSIMILE = UnitDescriptor('page - facsimile', 'QA', '''''') @@ -4025,6 +4071,8 @@ class UnitDescriptor( ALL_UNITS.append(SPLIT_TANK_TRUCK) SLIPSHEET = UnitDescriptor('slipsheet', 'SL', '''''') ALL_UNITS.append(SLIPSHEET) +STANDARD_CUBIC_METRE = UnitDescriptor('Standard cubic metre', 'SM3', '''''') +ALL_UNITS.append(STANDARD_CUBIC_METRE) MILE_STATUTE_MILE = UnitDescriptor('mile (statute mile)', 'SMI', '''mile''') ALL_UNITS.append(MILE_STATUTE_MILE) SQUARE_ROD = UnitDescriptor('square rod', 'SN', '''rd²''') @@ -4117,6 +4165,8 @@ class UnitDescriptor( ALL_UNITS.append(TONNE_METRIC_TON) TEN_PACK = UnitDescriptor('ten pack', 'TP', '''''') ALL_UNITS.append(TEN_PACK) +TEETH_PER_INCH = UnitDescriptor('teeth per inch', 'TPI', '''TPI''') +ALL_UNITS.append(TEETH_PER_INCH) TEN_PAIR = UnitDescriptor('ten pair', 'TPR', '''''') ALL_UNITS.append(TEN_PAIR) THOUSAND_FOOT = UnitDescriptor('thousand foot', 'TQ', '''''') @@ -4245,6 +4295,38 @@ class UnitDescriptor( ALL_UNITS.append(PAGE) MUTUALLY_DEFINED = UnitDescriptor('mutually defined', 'ZZ', '''''') ALL_UNITS.append(MUTUALLY_DEFINED) +METRE_WEEK = UnitDescriptor('Metre Week', 'MRW', '''m·wk''') +ALL_UNITS.append(METRE_WEEK) +SQUARE_METRE_WEEK = UnitDescriptor('Square Metre Week', 'MKW', '''m²· wk''') +ALL_UNITS.append(SQUARE_METRE_WEEK) +CUBIC_METRE_WEEK = UnitDescriptor('Cubic Metre Week', 'MQW', '''m³·wk''') +ALL_UNITS.append(CUBIC_METRE_WEEK) +PIECE_WEEK = UnitDescriptor('Piece Week', 'HWE', '''piece·k''') +ALL_UNITS.append(PIECE_WEEK) +METRE_DAY = UnitDescriptor('Metre Day', 'MRD', '''m·day''') +ALL_UNITS.append(METRE_DAY) +SQUARE_METRE_DAY = UnitDescriptor('Square Metre Day', 'MKD', '''m²·d''') +ALL_UNITS.append(SQUARE_METRE_DAY) +CUBIC_METRE_DAY = UnitDescriptor('Cubic Metre Day', 'MQD', '''m³·d''') +ALL_UNITS.append(CUBIC_METRE_DAY) +PIECE_DAY = UnitDescriptor('Piece Day', 'HAD', '''piece·d''') +ALL_UNITS.append(PIECE_DAY) +METRE_MONTH = UnitDescriptor('Metre Month', 'MRM', '''m·mo''') +ALL_UNITS.append(METRE_MONTH) +SQUARE_METRE_MONTH = UnitDescriptor('Square Metre Month', 'MKM', '''m²·mo''') +ALL_UNITS.append(SQUARE_METRE_MONTH) +CUBIC_METRE_MONTH = UnitDescriptor('Cubic Metre Month', 'MQM', '''m³·mo''') +ALL_UNITS.append(CUBIC_METRE_MONTH) +PIECE_MONTH = UnitDescriptor('Piece Month', 'HMO', '''piece·mo''') +ALL_UNITS.append(PIECE_MONTH) +DECIBEL_WATT = UnitDescriptor('Decibel watt', 'DBW', '''dBW''') +ALL_UNITS.append(DECIBEL_WATT) +DECIBEL_MILLIWATTS = UnitDescriptor('Decibel-milliwatts', 'DBM', '''dBm''') +ALL_UNITS.append(DECIBEL_MILLIWATTS) +FORMAZIN_NEPHELOMETRIC_UNIT = UnitDescriptor('Formazin nephelometric unit', 'FNU', '''FNU''') +ALL_UNITS.append(FORMAZIN_NEPHELOMETRIC_UNIT) +NEPHELOMETRIC_TURBIDITY_UNIT = UnitDescriptor('Nephelometric turbidity unit', 'NTU', '''NTU''') +ALL_UNITS.append(NEPHELOMETRIC_TURBIDITY_UNIT) # Convenience aliases. MINUTE = MINUTE_UNIT_OF_TIME diff --git a/openhtf/util/validators.py b/openhtf/util/validators.py index 7b43fe187..5e6121a97 100644 --- a/openhtf/util/validators.py +++ b/openhtf/util/validators.py @@ -101,46 +101,181 @@ def minimum(self): def maximum(self): """Should return the maximum, inclusive value of the range.""" + @abc.abstractproperty + def marginal_minimum(self): + """Should return the marginal minimum, inclusive value of the range.""" -# Built-in validators below this line -class AllInRangeValidator(ValidatorBase): + @abc.abstractproperty + def marginal_maximum(self): + """Should return the marginal maximum, inclusive value of the range.""" + + @abc.abstractmethod + def is_marginal(self, value) -> bool: + """Validates the value using the marginal limits.""" - def __init__(self, min_value, max_value): + +# Built-in validators below this line +class AllInRangeValidator(RangeValidatorBase): + """Validator to verify a list of values are with in a range.""" + + def __init__(self, + minimum, + maximum, + marginal_minimum=None, + marginal_maximum=None): super(AllInRangeValidator, self).__init__() - self.min_value = min_value - self.max_value = max_value + if minimum is None and maximum is None: + raise ValueError('Must specify minimum, maximum, or both') + if (minimum is not None and maximum is not None and + isinstance(minimum, numbers.Number) and + isinstance(maximum, numbers.Number) and minimum > maximum): + raise ValueError('Minimum cannot be greater than maximum') + if marginal_minimum is not None and minimum is None: + raise ValueError('Marginal minimum was specified without a minimum') + if marginal_maximum is not None and maximum is None: + raise ValueError('Marginal maximum was specified without a maximum') + if (marginal_minimum is not None and isinstance(minimum, numbers.Number) and + isinstance(marginal_minimum, numbers.Number) and + minimum > marginal_minimum): + raise ValueError('Marginal minimum cannot be less than the minimum') + if (marginal_maximum is not None and isinstance(maximum, numbers.Number) and + isinstance(marginal_maximum, numbers.Number) and + maximum < marginal_maximum): + raise ValueError('Marginal maximum cannot be greater than the maximum') + if (marginal_minimum is not None and marginal_maximum is not None and + isinstance(marginal_minimum, numbers.Number) and + isinstance(marginal_maximum, numbers.Number) and + marginal_minimum > marginal_maximum): + raise ValueError( + 'Marginal minimum cannot be greater than the marginal maximum') + + self._minimum = minimum + self._maximum = maximum + self._marginal_minimum = marginal_minimum + self._marginal_maximum = marginal_maximum + + @property + def minimum(self): + return self._minimum + + @property + def maximum(self): + return self._maximum + + @property + def marginal_minimum(self): + return self._marginal_minimum + + @property + def marginal_maximum(self): + return self._marginal_maximum def __call__(self, values): - return all([self.min_value <= value <= self.max_value for value in values]) + within_maximum = self._maximum is None or all( + value <= self.maximum for value in values) + within_minimum = self._minimum is None or all( + value >= self.minimum for value in values) + return within_minimum and within_maximum + + def is_marginal(self, values) -> bool: + is_maximally_marginal = self._marginal_maximum is not None and any( + [self._marginal_maximum <= value <= self._maximum for value in values]) + is_minimally_marginal = self._marginal_minimum is not None and any( + [self._minimum <= value <= self._marginal_minimum for value in values]) + return is_maximally_marginal or is_minimally_marginal + + def __str__(self): + assert self._minimum is not None or self._maximum is not None + if (self._minimum is not None and self._maximum is not None and + self._minimum == self._maximum): + return 'x == {}'.format(self._minimum) + + string_repr = '' + if self._minimum is not None: + string_repr += '{} <= '.format(self._minimum) + if self._marginal_minimum is not None: + string_repr += 'Marginal:{} <= '.format(self._marginal_minimum) + string_repr += 'x' + if self._marginal_maximum is not None: + string_repr += ' <= Marginal:{}'.format(self._marginal_maximum) + if self._maximum is not None: + string_repr += ' <= {}'.format(self._maximum) + return string_repr class AllEqualsValidator(ValidatorBase): + """Validator to verify a list of values are equal to the expected value.""" def __init__(self, spec): super(AllEqualsValidator, self).__init__() - self.spec = spec + self._spec = spec + + @property + def spec(self): + return self._spec def __call__(self, values): return all([value == self.spec for value in values]) + def __str__(self): + return "'x' is equal to '%s'" % self._spec + register(AllInRangeValidator, name='all_in_range') -register(AllEqualsValidator, name='all_equals') + + +@register +def all_equals(value, type=None): # pylint: disable=redefined-builtin + if isinstance(value, numbers.Number): + return AllInRangeValidator(minimum=value, maximum=value) + elif isinstance(value, six.string_types): + assert type is None or issubclass(type, six.string_types), ( + 'Cannot use a non-string type when matching a string') + return matches_regex('^{}$'.format(re.escape(value))) + else: + return AllEqualsValidator(value) class InRange(RangeValidatorBase): """Validator to verify a numeric value is within a range.""" - def __init__(self, minimum=None, maximum=None, type=None): # pylint: disable=redefined-builtin + def __init__(self, + minimum=None, + maximum=None, + marginal_minimum=None, + marginal_maximum=None, + type=None): # pylint: disable=redefined-builtin super(InRange, self).__init__() + if minimum is None and maximum is None: raise ValueError('Must specify minimum, maximum, or both') if (minimum is not None and maximum is not None and isinstance(minimum, numbers.Number) and isinstance(maximum, numbers.Number) and minimum > maximum): raise ValueError('Minimum cannot be greater than maximum') + if marginal_minimum is not None and minimum is None: + raise ValueError('Marginal minimum was specified without a minimum') + if marginal_maximum is not None and maximum is None: + raise ValueError('Marginal maximum was specified without a maximum') + if (marginal_minimum is not None and isinstance(minimum, numbers.Number) and + isinstance(marginal_minimum, numbers.Number) and + minimum > marginal_minimum): + raise ValueError('Marginal minimum cannot be less than the minimum') + if (marginal_maximum is not None and isinstance(maximum, numbers.Number) and + isinstance(marginal_maximum, numbers.Number) and + maximum < marginal_maximum): + raise ValueError('Marginal maximum cannot be greater than the maximum') + if (marginal_minimum is not None and marginal_maximum is not None and + isinstance(marginal_minimum, numbers.Number) and + isinstance(marginal_maximum, numbers.Number) and + marginal_minimum > marginal_maximum): + raise ValueError( + 'Marginal minimum cannot be greater than the marginal maximum') + self._minimum = minimum self._maximum = maximum + self._marginal_minimum = marginal_minimum + self._marginal_maximum = marginal_maximum self._type = type @property @@ -153,10 +288,22 @@ def maximum(self): converter = self._type if self._type is not None else _identity return converter(self._maximum) + @property + def marginal_minimum(self): + converter = self._type if self._type is not None else _identity + return converter(self._marginal_minimum) + + @property + def marginal_maximum(self): + converter = self._type if self._type is not None else _identity + return converter(self._marginal_maximum) + def with_args(self, **kwargs): return type(self)( minimum=util.format_string(self._minimum, kwargs), maximum=util.format_string(self._maximum, kwargs), + marginal_minimum=util.format_string(self._marginal_minimum, kwargs), + marginal_maximum=util.format_string(self._marginal_maximum, kwargs), type=self._type, ) @@ -171,20 +318,42 @@ def __call__(self, value): return False return True + def is_marginal(self, value) -> bool: + if value is None: + return False + if math.isnan(value): + return False + if (self._marginal_minimum is not None and + self.minimum <= value <= self.marginal_minimum): + return True + if (self._marginal_maximum is not None and + self.maximum >= value >= self.marginal_maximum): + return True + return False + def __str__(self): assert self._minimum is not None or self._maximum is not None - if self._minimum is not None and self._maximum is not None: - if self._minimum == self._maximum: - return 'x == %s' % self._minimum - return '%s <= x <= %s' % (self._minimum, self._maximum) + if (self._minimum is not None and self._maximum is not None and + self._minimum == self._maximum): + return 'x == {}'.format(self._minimum) + + string_repr = '' if self._minimum is not None: - return '%s <= x' % self._minimum + string_repr += '{} <= '.format(self._minimum) + if self._marginal_minimum is not None: + string_repr += 'Marginal:{} <= '.format(self._marginal_minimum) + string_repr += 'x' + if self._marginal_maximum is not None: + string_repr += ' <= Marginal:{}'.format(self._marginal_maximum) if self._maximum is not None: - return 'x <= %s' % self._maximum + string_repr += ' <= {}'.format(self._maximum) + return string_repr def __eq__(self, other): return (isinstance(other, type(self)) and self.minimum == other.minimum and - self.maximum == other.maximum) + self.maximum == other.maximum and + self.marginal_minimum == other.marginal_minimum and + self.marginal_maximum == other.marginal_maximum) def __ne__(self, other): return not self == other @@ -259,17 +428,27 @@ def matches_regex(regex): class WithinPercent(RangeValidatorBase): """Validates that a number is within percent of a value.""" - def __init__(self, expected, percent): + def __init__(self, expected, percent, marginal_percent=None): super(WithinPercent, self).__init__() if percent < 0: raise ValueError('percent argument is {}, must be >0'.format(percent)) + if marginal_percent is not None and marginal_percent < percent: + raise ValueError( + 'marginal_percent argument is {}, must be < percent'.format( + marginal_percent)) self.expected = expected self.percent = percent + self.marginal_percent = marginal_percent @property def _applied_percent(self): return abs(self.expected * self.percent / 100.0) + @property + def _applied_marginal_percent(self): + return (abs(self.expected * self.marginal_percent / + 100.0) if self.marginal_percent else 0) + @property def minimum(self): return self.expected - self._applied_percent @@ -278,15 +457,35 @@ def minimum(self): def maximum(self): return self.expected + self._applied_percent + @property + def marginal_minimum(self): + return (self.expected - + self._applied_marginal_percent if self.marginal_percent else None) + + @property + def marginal_maximum(self): + return (self.expected - + self._applied_marginal_percent if self.marginal_percent else None) + def __call__(self, value): return self.minimum <= value <= self.maximum + def is_marginal(self, value) -> bool: + if self.marginal_percent is None: + return False + else: + return (self.minimum < value <= self.marginal_minimum or + self.marginal_maximum <= value < self.maximum) + def __str__(self): - return "'x' is within {}% of {}".format(self.percent, self.expected) + return "'x' is within {}% of {}. Marginal: {}% of {}".format( + self.percent, self.expected, self.marginal_percent, self.expected) def __eq__(self, other): return (isinstance(other, type(self)) and - self.expected == other.expected and self.percent == other.percent) + self.expected == other.expected and + self.percent == other.percent and + self.marginal_percent == other.marginal_percent) def __ne__(self, other): return not self == other diff --git a/test/core/diagnoses_test.py b/test/core/diagnoses_test.py index 76ac585de..fb1549f80 100644 --- a/test/core/diagnoses_test.py +++ b/test/core/diagnoses_test.py @@ -123,119 +123,6 @@ class DupeResultA(htf.DiagResultEnum): DUPE = 'dupe' -class DupeResultB(htf.DiagResultEnum): - DUPE = 'dupe' - - -@htf.PhaseDiagnoser(DupeResultA) -def dupe_a_phase_diag(phase_record): - del phase_record # Unused. - return DupeResultA.DUPE - - -@htf.PhaseDiagnoser(DupeResultA) -def dupe_a2_phase_diag(phase_record): - del phase_record # Unused. - return DupeResultA.DUPE - - -@htf.PhaseDiagnoser(DupeResultB) -def dupe_b_phase_diag(phase_record): - del phase_record # Unused. - return DupeResultB.DUPE - - -@htf.TestDiagnoser(DupeResultA) -def dupe_a_test_diag(test_record_, store): - del test_record_ # Unused. - del store # Unused. - return DupeResultA.DUPE - - -@htf.TestDiagnoser(DupeResultA) -def dupe_a2_test_diag(test_record_, store): - del test_record_ # Unused. - del store # Unused. - return DupeResultA.DUPE - - -@htf.TestDiagnoser(DupeResultB) -def dupe_b_test_diag(test_record_, store): - del test_record_ # Unused. - del store # Unused. - return DupeResultB.DUPE - - -class CheckForDuplicateResultsTest(unittest.TestCase): - - def test_phase_phase_dupe(self): - - @htf.diagnose(dupe_a_phase_diag) - def a1(): - pass - - @htf.diagnose(dupe_b_phase_diag) - def b2(): - pass - - with self.assertRaises(diagnoses_lib.DuplicateResultError): - diagnoses_lib.check_for_duplicate_results(iter([a1, b2]), []) - - def test_phase_phase_same_result(self): - - @htf.diagnose(dupe_a_phase_diag) - def a1(): - pass - - @htf.diagnose(dupe_a2_phase_diag) - def a2(): - pass - - diagnoses_lib.check_for_duplicate_results(iter([a1, a2]), []) - - def test_phase_phase_same_diagnoser(self): - - @htf.diagnose(dupe_a_phase_diag) - def a1(): - pass - - @htf.diagnose(dupe_a_phase_diag) - def a2(): - pass - - diagnoses_lib.check_for_duplicate_results(iter([a1, a2]), []) - - def test_phase_test_dupe(self): - - @htf.diagnose(dupe_a_phase_diag) - def a1(): - pass - - with self.assertRaises(diagnoses_lib.DuplicateResultError): - diagnoses_lib.check_for_duplicate_results(iter([a1]), [dupe_b_test_diag]) - - def test_phase_test_same_result(self): - - @htf.diagnose(dupe_a_phase_diag) - def a1(): - pass - - diagnoses_lib.check_for_duplicate_results(iter([a1]), [dupe_a2_test_diag]) - - def test_test_test_dupe(self): - with self.assertRaises(diagnoses_lib.DuplicateResultError): - diagnoses_lib.check_for_duplicate_results( - iter([]), [dupe_a_test_diag, dupe_b_test_diag]) - - def test_test_test_same_result(self): - diagnoses_lib.check_for_duplicate_results( - iter([]), [dupe_a_test_diag, dupe_a2_test_diag]) - - def test_test_test_same_diagnoser(self): - diagnoses_lib.check_for_duplicate_results( - iter([]), [dupe_a_test_diag, dupe_a_test_diag]) - - class CheckDiagnosersTest(unittest.TestCase): def test_invalid_class(self): diff --git a/test/core/measurements_test.py b/test/core/measurements_test.py index b9b0a7588..8cc1df087 100644 --- a/test/core/measurements_test.py +++ b/test/core/measurements_test.py @@ -175,6 +175,24 @@ def test_validator_replacement(self): self.assertMeasurementFail(record, 'replaced_max_only') self.assertMeasurementFail(record, 'replaced_min_max') + @htf_test.yields_phases + def test_validator_replacement_marginal(self): + record = yield all_the_things.measures_with_marginal_args.with_args( + marginal_minimum=4, marginal_maximum=6) + self.assertMeasurementMarginal(record, 'replaced_marginal_min_only') + self.assertMeasurementNotMarginal(record, 'replaced_marginal_max_only') + self.assertMeasurementMarginal(record, 'replaced_marginal_min_max') + record = yield all_the_things.measures_with_marginal_args.with_args( + marginal_minimum=1, marginal_maximum=2) + self.assertMeasurementNotMarginal(record, 'replaced_marginal_min_only') + self.assertMeasurementMarginal(record, 'replaced_marginal_max_only') + self.assertMeasurementMarginal(record, 'replaced_marginal_min_max') + record = yield all_the_things.measures_with_marginal_args.with_args( + marginal_minimum=2, marginal_maximum=4) + self.assertMeasurementNotMarginal(record, 'replaced_marginal_min_only') + self.assertMeasurementNotMarginal(record, 'replaced_marginal_max_only') + self.assertMeasurementNotMarginal(record, 'replaced_marginal_min_max') + @htf_test.yields_phases def test_measurement_order(self): record = yield all_the_things.dimensions diff --git a/test/output/callbacks/mfg_event_converter_test.py b/test/output/callbacks/mfg_event_converter_test.py index d16224fa0..5166c23a3 100644 --- a/test/output/callbacks/mfg_event_converter_test.py +++ b/test/output/callbacks/mfg_event_converter_test.py @@ -39,7 +39,7 @@ def test_mfg_event_from_test_record(self): end_time_millis=1, station_id='localhost', outcome=test_record.Outcome.PASS, - ) + marginal=False) record.outcome = test_record.Outcome.PASS record.metadata = { 'assembly_events': [assembly_event_pb2.AssemblyEvent()] * 2, @@ -54,6 +54,7 @@ def test_mfg_event_from_test_record(self): descriptor_id=idx, codeinfo=test_record.CodeInfo.uncaptured(), result=None, + marginal=False, attachments={}, start_time_millis=1, end_time_millis=1) for idx in range(1, 5) @@ -131,6 +132,7 @@ def test_populate_basic_data(self): start_time_millis=100, end_time_millis=500, outcome=test_record.Outcome.PASS, + marginal=True, outcome_details=[outcome_details], metadata={ 'test_name': 'mock-test-name', @@ -152,7 +154,7 @@ def test_populate_basic_data(self): self.assertEqual(mfg_event.test_name, 'mock-test-name') self.assertEqual(mfg_event.test_version, '1.0') self.assertEqual(mfg_event.test_description, 'mock-test-description') - self.assertEqual(mfg_event.test_status, test_runs_pb2.PASS) + self.assertEqual(mfg_event.test_status, test_runs_pb2.MARGINAL_PASS) # Phases. self.assertEqual(mfg_event.phases[0].name, 'mock-phase-name') @@ -186,9 +188,7 @@ def test_attach_record_as_json(self): def test_convert_object_to_json_with_bytes(self): input_object = {'foo': b'bar'} output_json = mfg_event_converter._convert_object_to_json(input_object) - expected_json = (b'{\n' - b' "foo": "bar"\n' - b'}') + expected_json = (b'{\n' b' "foo": "bar"\n' b'}') self.assertEqual(output_json, expected_json) def test_attach_config(self): @@ -218,7 +218,11 @@ def test_copy_measurements_from_phase(self): self._create_and_set_measurement( 'in-range', 5).doc('mock measurement in range docstring').with_units( - units.Unit('radian')).in_range(1, 10)) + units.Unit('radian')).in_range( + minimum=1, + maximum=10, + marginal_minimum=3, + marginal_maximum=7)) measurement_within_percent = ( self._create_and_set_measurement( @@ -285,8 +289,14 @@ def test_copy_measurements_from_phase(self): # Measurement validators. self.assertEqual(mock_measurement_in_range.numeric_minimum, 1.0) self.assertEqual(mock_measurement_in_range.numeric_maximum, 10.0) + self.assertEqual(mock_measurement_in_range.numeric_marginal_minimum, 3.0) + self.assertEqual(mock_measurement_in_range.numeric_marginal_maximum, 7.0) self.assertEqual(mock_measurement_within_percent.numeric_minimum, 8.0) self.assertEqual(mock_measurement_within_percent.numeric_maximum, 12.0) + self.assertEqual(mock_measurement_within_percent.numeric_marginal_minimum, + 0) + self.assertEqual(mock_measurement_within_percent.numeric_marginal_maximum, + 0) def testCopyAttachmentsFromPhase(self): attachment = test_record.Attachment(b'mock-data', 'text/plain') diff --git a/test/phase_descriptor_test.py b/test/phase_descriptor_test.py index ec545f5cf..ffdcf4933 100644 --- a/test/phase_descriptor_test.py +++ b/test/phase_descriptor_test.py @@ -14,12 +14,17 @@ import unittest -import attr -import mock +from absl import logging +import attr import openhtf from openhtf import plugs from openhtf.core import base_plugs +from openhtf.core import phase_collections +from openhtf.core import phase_descriptor +from openhtf.core import test_descriptor +from openhtf.core import test_record +from openhtf.core import test_state def plain_func(): @@ -87,8 +92,13 @@ class TestPhaseDescriptor(unittest.TestCase): def setUp(self): super(TestPhaseDescriptor, self).setUp() - self._phase_data = mock.Mock( - plug_manager=plugs.PlugManager(), execution_uid='01234567890') + self._test_state = test_state.TestState( + test_descriptor.TestDescriptor( + phase_sequence=phase_collections.PhaseSequence(), + code_info=test_record.CodeInfo.uncaptured(), + metadata={}), + execution_uid='', + test_options=test_descriptor.TestOptions()) def test_basics(self): phase = openhtf.PhaseDescriptor.wrap_or_copy(plain_func) @@ -96,11 +106,11 @@ def test_basics(self): self.assertEqual(0, len(phase.plugs)) self.assertEqual('plain_func', phase.name) self.assertEqual('Plain Docstring.', phase.doc) - phase(self._phase_data) + phase(self._test_state) test_phase = openhtf.PhaseDescriptor.wrap_or_copy(normal_test_phase) self.assertEqual('normal_test_phase', test_phase.name) - self.assertEqual('return value', test_phase(self._phase_data)) + self.assertEqual('return value', test_phase(self._test_state)) def test_multiple_phases(self): phase = openhtf.PhaseDescriptor.wrap_or_copy(plain_func) @@ -127,8 +137,8 @@ def custom_phase(one=None, two=None): def test_with_args(self): phase = extra_arg_func.with_args(input_value='input arg') - result = phase(self._phase_data) - first_result = phase(self._phase_data) + result = phase(self._test_state) + first_result = phase(self._test_state) self.assertIs(phase.func, extra_arg_func.func) self.assertEqual('input arg', result) self.assertEqual('func-name(i)', phase.name) @@ -137,7 +147,7 @@ def test_with_args(self): # Must do with_args() on the original phase, otherwise it has already been # formatted and the format-arg information is lost. second_phase = extra_arg_func.with_args(input_value='second input') - second_result = second_phase(self._phase_data) + second_result = second_phase(self._test_state) self.assertEqual('second input', second_result) self.assertEqual('func-name(s)', second_phase.name) @@ -154,15 +164,77 @@ def phase(test_api, **kwargs): updated = phase.with_args(arg_does_not_exist=1) self.assertEqual({'arg_does_not_exist': 1}, updated.extra_kwargs) + def test_call_test_api_with_default_args(self): + expected_arg_two = 3 + + @phase_descriptor.PhaseOptions() + def phase(test_api, arg_one=1, arg_two=2): + self.assertIsInstance(test_api, test_descriptor.TestApi) + self.assertEqual(arg_one, 1) + # We are changing the arg with the with_args statement when called. + self.assertEqual(arg_two, expected_arg_two) + + self._test_state.running_phase_state = ( + test_state.PhaseState.from_descriptor(phase, self._test_state, + logging.get_absl_logger())) + phase.with_args(arg_two=expected_arg_two)(self._test_state) + + def test_call_only_default_args(self): + expected_arg_two = 3 + + @phase_descriptor.PhaseOptions() + def phase(arg_one=1, arg_two=2): + self.assertEqual(arg_one, 1) + # We are changing the arg with the with_args statement when called. + self.assertEqual(arg_two, expected_arg_two) + + self._test_state.running_phase_state = ( + test_state.PhaseState.from_descriptor(phase, self._test_state, + logging.get_absl_logger())) + phase.with_args(arg_two=expected_arg_two)(self._test_state) + + def test_call_test_api_default_args_and_plug(self): + expected_arg_one = 5 + self._test_state.plug_manager.initialize_plugs([ExtraPlug]) + + @plugs.plug(custom_plug=ExtraPlug) + def phase(test_api, custom_plug, arg_one=1, arg_two=2): + self.assertIsInstance(test_api, test_descriptor.TestApi) + self.assertIsInstance(custom_plug, ExtraPlug) + # We are changing the arg with the with_args statement when called. + self.assertEqual(arg_one, expected_arg_one) + self.assertEqual(arg_two, 2) + + self._test_state.running_phase_state = ( + test_state.PhaseState.from_descriptor(phase, self._test_state, + logging.get_absl_logger())) + phase.with_args(arg_one=expected_arg_one)(self._test_state) + + def test_call_only_default_args_and_plug(self): + expected_arg_one = 5 + self._test_state.plug_manager.initialize_plugs([ExtraPlug]) + + @plugs.plug(custom_plug=ExtraPlug) + def phase(custom_plug, arg_one=1, arg_two=2): + self.assertIsInstance(custom_plug, ExtraPlug) + # We are changing the arg with the with_args statement when called. + self.assertEqual(arg_one, expected_arg_one) + self.assertEqual(arg_two, 2) + + self._test_state.running_phase_state = ( + test_state.PhaseState.from_descriptor(phase, self._test_state, + logging.get_absl_logger())) + phase.with_args(arg_one=expected_arg_one)(self._test_state) + def test_with_plugs(self): - self._phase_data.plug_manager.initialize_plugs([ExtraPlug]) + self._test_state.plug_manager.initialize_plugs([ExtraPlug]) phase = extra_plug_func.with_plugs(plug=ExtraPlug).with_args(phrase='hello') self.assertIs(phase.func, extra_plug_func.func) self.assertEqual(1, len(phase.plugs)) self.assertEqual('extra_plug_func[extra_plug_0][hello]', phase.options.name) self.assertEqual('extra_plug_func[extra_plug_0][hello]', phase.name) - result = phase(self._phase_data) + result = phase(self._test_state) self.assertEqual('extra_plug_0 says hello', result) def test_with_plugs_unknown_plug_name_ignored(self): @@ -187,3 +259,122 @@ def test_with_plugs_custom_placeholder_is_base_plug(self): self.assertIs(phase.func, custom_placeholder_phase.func) self.assertEqual([base_plugs.PhasePlug('custom', PlugVersionOfNonPlug)], phase.plugs) + + +class DupeResultA(openhtf.DiagResultEnum): + DUPE = 'dupe' + + +class DupeResultB(openhtf.DiagResultEnum): + DUPE = 'dupe' + + +@openhtf.PhaseDiagnoser(DupeResultA) +def dupe_a_phase_diag(phase_record): + del phase_record # Unused. + return DupeResultA.DUPE + + +@openhtf.PhaseDiagnoser(DupeResultA) +def dupe_a2_phase_diag(phase_record): + del phase_record # Unused. + return DupeResultA.DUPE + + +@openhtf.PhaseDiagnoser(DupeResultB) +def dupe_b_phase_diag(phase_record): + del phase_record # Unused. + return DupeResultB.DUPE + + +@openhtf.TestDiagnoser(DupeResultA) +def dupe_a_test_diag(test_record_, store): + del test_record_ # Unused. + del store # Unused. + return DupeResultA.DUPE + + +@openhtf.TestDiagnoser(DupeResultA) +def dupe_a2_test_diag(test_record_, store): + del test_record_ # Unused. + del store # Unused. + return DupeResultA.DUPE + + +@openhtf.TestDiagnoser(DupeResultB) +def dupe_b_test_diag(test_record_, store): + del test_record_ # Unused. + del store # Unused. + return DupeResultB.DUPE + + +class CheckForDuplicateResultsTest(unittest.TestCase): + + def test_phase_phase_dupe(self): + + @openhtf.diagnose(dupe_a_phase_diag) + def a1(): + pass + + @openhtf.diagnose(dupe_b_phase_diag) + def b2(): + pass + + with self.assertRaises(phase_descriptor.DuplicateResultError): + phase_descriptor.check_for_duplicate_results(iter([a1, b2]), []) + + def test_phase_phase_same_result(self): + + @openhtf.diagnose(dupe_a_phase_diag) + def a1(): + pass + + @openhtf.diagnose(dupe_a2_phase_diag) + def a2(): + pass + + phase_descriptor.check_for_duplicate_results(iter([a1, a2]), []) + + def test_phase_phase_same_diagnoser(self): + + @openhtf.diagnose(dupe_a_phase_diag) + def a1(): + pass + + @openhtf.diagnose(dupe_a_phase_diag) + def a2(): + pass + + phase_descriptor.check_for_duplicate_results(iter([a1, a2]), []) + + def test_phase_test_dupe(self): + + @openhtf.diagnose(dupe_a_phase_diag) + def a1(): + pass + + with self.assertRaises(phase_descriptor.DuplicateResultError): + phase_descriptor.check_for_duplicate_results( + iter([a1]), [dupe_b_test_diag]) + + def test_phase_test_same_result(self): + + @openhtf.diagnose(dupe_a_phase_diag) + def a1(): + pass + + phase_descriptor.check_for_duplicate_results( + iter([a1]), [dupe_a2_test_diag]) + + def test_test_test_dupe(self): + with self.assertRaises(phase_descriptor.DuplicateResultError): + phase_descriptor.check_for_duplicate_results( + iter([]), [dupe_a_test_diag, dupe_b_test_diag]) + + def test_test_test_same_result(self): + phase_descriptor.check_for_duplicate_results( + iter([]), [dupe_a_test_diag, dupe_a2_test_diag]) + + def test_test_test_same_diagnoser(self): + phase_descriptor.check_for_duplicate_results( + iter([]), [dupe_a_test_diag, dupe_a_test_diag]) diff --git a/test/test_state_test.py b/test/test_state_test.py index f03a21f38..74c858b9a 100644 --- a/test/test_state_test.py +++ b/test/test_state_test.py @@ -14,17 +14,21 @@ import copy import logging +import sys import tempfile import unittest +from absl.testing import parameterized import mock - import openhtf from openhtf.core import phase_collections +from openhtf.core import phase_descriptor +from openhtf.core import phase_executor from openhtf.core import test_descriptor from openhtf.core import test_record from openhtf.core import test_state from openhtf.util import conf +from openhtf.util import threads @openhtf.measures('test_measurement') @@ -60,6 +64,7 @@ def test_phase(): 'start_time_millis': 0, 'end_time_millis': None, 'outcome': None, + 'marginal': None, 'result': None, 'diagnosers': [], 'diagnosis_results': [], @@ -80,6 +85,7 @@ def test_phase(): 'end_time_millis': None, 'outcome': None, 'outcome_details': [], + 'marginal': None, 'metadata': { 'config': {} }, @@ -98,7 +104,7 @@ def test_phase(): } -class TestTestApi(unittest.TestCase): +class TestTestApi(parameterized.TestCase): def setUp(self): super(TestTestApi, self).setUp() @@ -131,6 +137,11 @@ def test_get_attachment(self): self.assertEqual(input_contents, output_attachment.data) self.assertEqual(mimetype, output_attachment.mimetype) + def test_get_attachment_strict(self): + attachment_name = 'attachment.txt' + with self.assertRaises(test_descriptor.AttachmentNotFoundError): + self.test_api.get_attachment_strict(attachment_name) + def test_get_measurement(self): measurement_val = [1, 2, 3] self.test_api.measurements['test_measurement'] = measurement_val @@ -216,3 +227,25 @@ def test_test_state_cache(self): self.assertEqual(expected_after_phase_record_basetypes, basetypes2['test_record']['phases'][0]) self.assertIsNone(basetypes2['running_phase_state']) + + @parameterized.parameters( + (phase_executor.PhaseExecutionOutcome(None), test_record.Outcome.TIMEOUT), + (phase_executor.PhaseExecutionOutcome( + phase_descriptor.PhaseResult.STOP), test_record.Outcome.FAIL), + (phase_executor.PhaseExecutionOutcome( + threads.ThreadTerminationError()), test_record.Outcome.ERROR)) + def test_test_state_finalize_from_phase_outcome( + self, phase_exe_outcome: phase_executor.PhaseExecutionOutcome, + test_record_outcome: test_record.Outcome): + self.test_state.finalize_from_phase_outcome(phase_exe_outcome) + self.assertEqual(self.test_state.test_record.outcome, test_record_outcome) + + def test_test_state_finalize_from_phase_outcome_exception_info(self): + try: + raise ValueError('Exception for unit testing.') + except ValueError: + phase_exe_outcome = phase_executor.PhaseExecutionOutcome( + phase_executor.ExceptionInfo(*sys.exc_info())) + self.test_state.finalize_from_phase_outcome(phase_exe_outcome) + self.assertEqual(self.test_state.test_record.outcome, + test_record.Outcome.ERROR) diff --git a/test/util/test_test.py b/test/util/test_test.py index a49a54459..39c42a688 100644 --- a/test/util/test_test.py +++ b/test/util/test_test.py @@ -12,13 +12,14 @@ # See the License for the specific language governing permissions and # limitations under the License. +import logging import unittest +from unittest import mock import openhtf from openhtf import plugs from openhtf.core import base_plugs -from openhtf.core import measurements from openhtf.util import test from openhtf.util import validators @@ -37,12 +38,35 @@ def do_stuff(self, unused): raise NotImplementedError('MyPlug not mocked correctly') -@plugs.plug(my_plug=MyPlug) -@measurements.measures('test_measurement', 'othr_measurement') -@measurements.measures('passes', validators=[validators.in_range(1, 10)]) -@measurements.measures('fails', validators=[validators.in_range(1, 10)]) -@measurements.measures('unset_measurement') -def test_phase(phase_data, my_plug): +class ShamelessPlug(base_plugs.BasePlug): + """Shamelessly plugs itself.""" + + def plug_away(self): + logging.info('%s is best plug.', self.__class__.__name__) + + +class ShamelessPlugStub(base_plugs.BasePlug): + """Stub/fake implementation for ShamelessPlug.""" + plug_away_call_counts: int + + def __init__(self): + super().__init__() + self.plug_away_call_counts = 0 + + def plug_away(self): + self.plug_away_call_counts += 1 + + +_DO_STUFF_RETVAL = 0xBEEF + + +@plugs.plug(my_plug=MyPlug, shameless_plug=ShamelessPlug) +@openhtf.measures('test_measurement', 'othr_measurement') +@openhtf.measures('passes', validators=[validators.in_range(1, 10)]) +@openhtf.measures('fails', validators=[validators.in_range(1, 10)]) +@openhtf.measures('unset_measurement') +def test_phase(phase_data, my_plug, shameless_plug: ShamelessPlug): + shameless_plug.plug_away() phase_data.logger.error('in phase_data %s', id(phase_data)) phase_data.logger.error('in measurements %s', id(phase_data.measurements)) phase_data.measurements.test_measurement = my_plug.do_stuff('stuff_args') @@ -52,6 +76,12 @@ def test_phase(phase_data, my_plug): phase_data.test_record.add_outcome_details(0xBED) +@plugs.plug(shameless_plug=ShamelessPlug) +def test_phase_with_shameless_plug(phase_data, shameless_plug: ShamelessPlug): + shameless_plug.plug_away() + phase_data.logger.info('Done using plug') + + def raising_phase(): raise DummyError('This Phase raises!') @@ -82,6 +112,61 @@ def test_bad(self): class TestTest(test.TestCase): + def test_execute_phase_or_test_phase_with_no_patched_plugs(self): + phase_record = self.execute_phase_or_test(test_phase_with_shameless_plug) + self.assertPhaseContinue(phase_record) + + def test_execute_phase_or_test_test_with_no_patched_plugs(self): + test_record = self.execute_phase_or_test( + openhtf.Test(test_phase_with_shameless_plug)) + self.assertTestPass(test_record) + + def test_execute_phase_or_test_phase_with_patched_plugs(self): + """Example of partial patching of plugs.""" + self.auto_mock_plugs(MyPlug) + shameless_plug = ShamelessPlug() + self.plugs[ShamelessPlug] = shameless_plug + with mock.patch.object( + shameless_plug, shameless_plug.plug_away.__name__, + autospec=True) as mocked_plug_away: + phase_record = self.execute_phase_or_test(test_phase) + mocked_plug_away.assert_called_once_with() + self.assertPhaseContinue(phase_record) + + def test_execute_phase_or_test_phase_with_stub_plugs(self): + """Example using stubs/fakes for plugs.""" + self.auto_mock_plugs(MyPlug) + # Tells the test executor to substitute ShamelessPlugStub for any phases + # using ShamelessPlug. + self.plugs[ShamelessPlug] = ShamelessPlugStub() + phase_record = self.execute_phase_or_test(test_phase) + self.assertEqual(self.plugs[ShamelessPlug].plug_away_call_counts, 1) + self.assertPhaseContinue(phase_record) + + def _run_my_phase_in_test_asserts(self, mock_my_plug, test_record): + mock_my_plug.do_stuff.assert_called_with('stuff_args') + # The test fails because the 'fails' measurement fails. + self.assertTestFail(test_record) + self.assertTestOutcomeCode(test_record, 0xBED) + self.assertNotMeasured(test_record, 'unset_measurement') + self.assertNotMeasured(test_record.phases[-1], 'unset_measurement') + self.assertMeasured(test_record, 'test_measurement', _DO_STUFF_RETVAL) + self.assertMeasured(test_record, 'othr_measurement', 0xDEAD) + self.assertMeasurementPass(test_record, 'passes') + self.assertMeasurementFail(test_record, 'fails') + + def test_execute_phase_or_test_test_with_patched_plugs(self): + self.auto_mock_plugs(MyPlug) + self.plugs[MyPlug].do_stuff.return_value = _DO_STUFF_RETVAL + shameless_plug = ShamelessPlug() + self.plugs[ShamelessPlug] = shameless_plug + with mock.patch.object( + shameless_plug, shameless_plug.plug_away.__name__, + autospec=True) as mocked_plug_away: + test_record = self.execute_phase_or_test(openhtf.Test(test_phase)) + mocked_plug_away.assert_called_once_with() + self._run_my_phase_in_test_asserts(self.plugs[MyPlug], test_record) + @test.yields_phases def test_phase_retvals(self): phase_record = yield phase_retval(openhtf.PhaseResult.CONTINUE) @@ -93,33 +178,26 @@ def test_phase_retvals(self): @test.patch_plugs(mock_plug='.'.join((MyPlug.__module__, MyPlug.__name__))) def test_patch_plugs_phase(self, mock_plug): - mock_plug.do_stuff.return_value = 0xBEEF + mock_plug.do_stuff.return_value = _DO_STUFF_RETVAL phase_record = yield test_phase mock_plug.do_stuff.assert_called_with('stuff_args') + self.assertIs(self.plugs[MyPlug], mock_plug) + self.assertIsInstance(self.plugs[ShamelessPlug], ShamelessPlug) self.assertPhaseContinue(phase_record) self.assertEqual('test_phase', phase_record.name) - self.assertMeasured(phase_record, 'test_measurement', 0xBEEF) + self.assertMeasured(phase_record, 'test_measurement', _DO_STUFF_RETVAL) self.assertMeasured(phase_record, 'othr_measurement', 0xDEAD) self.assertMeasurementPass(phase_record, 'passes') self.assertMeasurementFail(phase_record, 'fails') @test.patch_plugs(mock_plug='.'.join((MyPlug.__module__, MyPlug.__name__))) def test_patch_plugs_test(self, mock_plug): - mock_plug.do_stuff.return_value = 0xBEEF + mock_plug.do_stuff.return_value = _DO_STUFF_RETVAL test_record = yield openhtf.Test(phase_retval(None), test_phase) - mock_plug.do_stuff.assert_called_with('stuff_args') - # The test fails because the 'fails' measurement fails. - self.assertTestFail(test_record) - self.assertTestOutcomeCode(test_record, 0xBED) - self.assertNotMeasured(test_record, 'unset_measurement') - self.assertNotMeasured(test_record.phases[-1], 'unset_measurement') - self.assertMeasured(test_record, 'test_measurement', 0xBEEF) - self.assertMeasured(test_record, 'othr_measurement', 0xDEAD) - self.assertMeasurementPass(test_record, 'passes') - self.assertMeasurementFail(test_record, 'fails') + self._run_my_phase_in_test_asserts(mock_plug, test_record) @unittest.expectedFailure @test.yields_phases diff --git a/test/util/text_test.py b/test/util/text_test.py new file mode 100644 index 000000000..00f301ff5 --- /dev/null +++ b/test/util/text_test.py @@ -0,0 +1,397 @@ +# Copyright 2021 Google Inc. All Rights Reserved. + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Unit tests for the text module.""" + +import io +import sys +import types +import typing +import unittest +from unittest import mock + +from absl.testing import parameterized +import colorama +import openhtf +from openhtf.core import measurements +from openhtf.core import phase_descriptor +from openhtf.core import phase_executor +from openhtf.core import test_record +from openhtf.util import test +from openhtf.util import text +from openhtf.util import threads + +# colorama makes these strings at runtime but pytype cannot infer this. +_RED = typing.cast(str, colorama.Fore.RED) +_GREEN = typing.cast(str, colorama.Fore.GREEN) + + +@openhtf.measures( + openhtf.Measurement('text_measurement_a').equals('a'), + openhtf.Measurement('text_measurement_b').equals('b'), + openhtf.Measurement('text_measurement_c').equals('c')) +def PhaseWithFailure(test_api): + """Phase with measurement failures.""" + test_api.measurements.text_measurement_a = 'intentionally wrong measurement' + # text_measurement_b is intentionally not set. + test_api.measurements.text_measurement_c = 'c' + + +@openhtf.PhaseOptions() +def PhaseWithSkip(): + """Phase that is skipped.""" + return openhtf.PhaseResult.SKIP + + +@openhtf.measures( + openhtf.Measurement('text_measurement_a').equals('a'), + openhtf.Measurement('text_measurement_b').equals('b')) +def PhaseWithError(): + """Phase raising an error.""" + raise Exception('Intentional exception from test case.') + + +@openhtf.measures( + openhtf.Measurement('text_measurement_a').equals('a'), + openhtf.Measurement('text_measurement_b').equals('b')) +def PhaseThatSucceeds(test_api): + """Phase with passing measurements and attachments.""" + test_api.measurements.text_measurement_a = 'a' + test_api.measurements.text_measurement_b = 'b' + test_api.attach('attachment_a.txt', 'sample_attachment_a') + test_api.attach('attachment_b.json', '{}', mimetype='application/json') + + +class TextTest(test.TestCase, parameterized.TestCase): + + def testColorFromTestOutcome_HasCorrespondingTestOutcomeName(self): + """Catches OpenHTF test outcome not added in _ColorFromTestOutcome.""" + for member in test_record.Outcome.__members__: + self.assertIn(member, text._ColorFromTestOutcome.__members__) + + def testHeadlineFromTestOutcome_HasCorrespondingTestOutcomeName(self): + """Catches OpenHTF test outcome not added in _HeadlineFromTestOutcome.""" + for member in test_record.Outcome.__members__: + self.assertIn(member, text._HeadlineFromTestOutcome.__members__) + + def testColorText_GetsColorSuccessfully(self): + text_to_colorize = 'Foo Bar' + self.assertEqual( + text._ColorText(text_to_colorize, _GREEN), + f'{_GREEN}{text_to_colorize}{colorama.Style.RESET_ALL}') + + # TODO(b/70517332): Pytype currently doesn't properly support the functional + # API of enums: https://github.com/google/pytype/issues/459. Remove + # disabling pytype once fixed. + @parameterized.named_parameters( + (headline_member.name, headline_member.name, headline_member.value) + for headline_member in text._HeadlineFromTestOutcome.__iter__()) # pytype: disable=attribute-error + def testGetTestOutcomeHeadline_TestNotColorized(self, outcome, headline): + record = test_record.TestRecord( + dut_id='TestDutId', + station_id='test_station', + outcome=test_record.Outcome[outcome]) + self.assertEqual(text._GetTestOutcomeHeadline(record), headline) + + # TODO(b/70517332): Pytype currently doesn't properly support the functional + # API of enums: https://github.com/google/pytype/issues/459. Remove + # disabling pytype once fixed. + @parameterized.named_parameters( + (headline_member.name, headline_member.name, headline_member.value) + for headline_member in text._HeadlineFromTestOutcome.__iter__()) # pytype: disable=attribute-error + def testGetTestOutcomeHeadline_TestColorized(self, outcome, headline): + record = test_record.TestRecord( + dut_id='TestDutId', + station_id='test_station', + outcome=test_record.Outcome[outcome]) + # TODO(b/70517332): Pytype currently doesn't properly support the functional + # API of enums: https://github.com/google/pytype/issues/459. Remove + # disabling pytype once fixed. + self.assertEqual( + text._GetTestOutcomeHeadline(record, colorize_text=True), + f'{text._ColorFromTestOutcome[outcome].value}{headline}' # pytype: disable=unsupported-operands + f'{colorama.Style.RESET_ALL}') + + def testStringFromMeasurement_SuccessfullyConvertsUnsetMeasurement(self): + self.assertEqual( + text.StringFromMeasurement(openhtf.Measurement('text_measurement_a')), + '| text_measurement_a was not set') + + def testStringFromMeasurement_SuccessfullyConvertsPassMeasurement(self): + measurement = openhtf.Measurement('text_measurement_a') + measurement._measured_value = measurements.MeasuredValue( + 'text_measurement_a') + measurement._measured_value.set(10) + measurement.notify_value_set() + self.assertEqual( + text.StringFromMeasurement(measurement), '| text_measurement_a: 10') + + def testStringFromMeasurement_SuccessfullyConvertsFailMeasurement(self): + measurement = openhtf.Measurement('text_measurement_a').in_range(maximum=3) + measurement._measured_value = measurements.MeasuredValue( + 'text_measurement_a') + measurement._measured_value.set(5) + measurement.notify_value_set() + output = text.StringFromMeasurement(measurement) + self.assertEqual( + output, + "| text_measurement_a failed because 5 failed these checks: ['x <= 3']") + self.assertNotIn(text._BRIGHT_RED_STYLE, output) + + def testStringFromMeasurement_SuccessfullyConvertsFailMeasurementColorized( + self): + measurement = openhtf.Measurement('text_measurement_a').in_range(maximum=3) + measurement._measured_value = measurements.MeasuredValue( + 'text_measurement_a') + measurement._measured_value.set(5) + measurement.notify_value_set() + self.assertEqual( + text.StringFromMeasurement(measurement, colorize_text=True).count( + text._BRIGHT_RED_STYLE), 1) + + def testStringFromAttachment_SuccessfullyConvertsPassMeasurement(self): + attachment = test_record.Attachment('content', 'text/plain') + self.assertEqual( + text.StringFromAttachment(attachment, 'attachment_a.txt'), + '| attachment: attachment_a.txt (mimetype=text/plain)') + + @parameterized.named_parameters([ + { + 'testcase_name': 'None', + 'phase_result': None, + 'expected_str': '' + }, + { + 'testcase_name': 'PhaseResult', + 'phase_result': phase_descriptor.PhaseResult.CONTINUE, + 'expected_str': 'CONTINUE' + }, + { + 'testcase_name': + 'ExceptionInfo', + 'phase_result': + phase_executor.ExceptionInfo( + ValueError, ValueError('Invalid Value'), + mock.create_autospec(types.TracebackType, spec_set=True)), + 'expected_str': + 'ValueError' + }, + { + 'testcase_name': 'ThreadTerminationError', + 'phase_result': threads.ThreadTerminationError(), + 'expected_str': 'ThreadTerminationError' + }, + ]) + def testStringFromPhaseExecutionOutcome_SuccessfullyConvertsOutcome( + self, phase_result, expected_str): + self.assertEqual( + text.StringFromPhaseExecutionOutcome( + phase_executor.PhaseExecutionOutcome(phase_result)), expected_str) + + def testStringFromPhaseRecord_SuccessfullyConvertsPhaseRecordPassPhase(self): + record = self.execute_phase_or_test(PhaseThatSucceeds) + output = text.StringFromPhaseRecord(record) + self.assertEqual( + output, 'Phase PhaseThatSucceeds\n' + '+ Outcome: PASS Result: CONTINUE\n' + '| text_measurement_a: a\n' + '| text_measurement_b: b\n' + '| attachment: attachment_a.txt (mimetype=text/plain)\n' + '| attachment: attachment_b.json (mimetype=application/json)') + self.assertNotIn(text._BRIGHT_RED_STYLE, output) + + def testStringFromPhaseRecord_SuccessfullyConvertsPhaseRecordFailPhase(self): + record = self.execute_phase_or_test(PhaseWithFailure) + output = text.StringFromPhaseRecord(record) + self.assertEqual( + output, 'Phase PhaseWithFailure\n' + '+ Outcome: FAIL Result: CONTINUE\n' + '| text_measurement_a failed because intentionally wrong measurement ' + 'failed these checks: ["\'x\' matches /^a$/"]\n' + '| text_measurement_b was not set\n' + '| text_measurement_c: c') + + def testStringFromPhaseRecord_SuccessfullyConvertsPhaseFailLimitPhase(self): + record = self.execute_phase_or_test(PhaseWithFailure) + output = text.StringFromPhaseRecord(record, maximum_num_measurements=2) + self.assertEqual( + output, 'Phase PhaseWithFailure\n' + '+ Outcome: FAIL Result: CONTINUE\n' + '| text_measurement_a failed because intentionally wrong measurement ' + 'failed these checks: ["\'x\' matches /^a$/"]\n' + '| text_measurement_b was not set\n' + '...') + + def testStringFromPhaseRecord_SuccessfullyConvertsPhaseRecordOnlyFailPhase( + self): + record = self.execute_phase_or_test(PhaseWithFailure) + output = text.StringFromPhaseRecord(record, only_failures=True) + self.assertEqual( + output, 'Phase PhaseWithFailure\n' + '+ Outcome: FAIL Result: CONTINUE\n' + '| text_measurement_a failed because intentionally wrong measurement ' + 'failed these checks: ["\'x\' matches /^a$/"]') + + def testStringFromPhaseRecord_SuccessfullyConvertsPhaseRecordFailPhaseColored( + self): + record = self.execute_phase_or_test(PhaseWithFailure) + self.assertEqual( + text.StringFromPhaseRecord(record, colorize_text=True).count(_RED), 3) + + def testStringFromPhaseRecord_SuccessfullyConvertsPhaseRecordSkipPhaseColored( + self): + record = self.execute_phase_or_test(PhaseWithSkip) + self.assertNotIn(text._BRIGHT_RED_STYLE, + text.StringFromPhaseRecord(record, colorize_text=True)) + + @parameterized.named_parameters([ + { + 'testcase_name': + 'OneOutcome', + 'outcome_details': [ + test_record.OutcomeDetails( + code=1, description='Unknown exception.') + ], + 'expected_str': ('The test thinks this may be the reason:\n' + '1: Unknown exception.'), + }, + { + 'testcase_name': + 'TwoOutcomes', + 'outcome_details': [ + test_record.OutcomeDetails( + code=1, description='Unknown exception.'), + test_record.OutcomeDetails( + code='FooError', description='Foo exception.') + ], + 'expected_str': ('The test thinks these may be the reason:\n' + '1: Unknown exception.\n' + 'FooError: Foo exception.'), + }, + ]) + def testStringFromOutcomeDetails_SuccessfullyConvertsOutcomeDetails( + self, outcome_details, expected_str): + self.assertEqual( + text.StringFromOutcomeDetails(outcome_details), expected_str) + + def testStringFromTestRecord_SuccessfullyConvertsTestRecordSinglePassPhase( + self): + record = self.execute_phase_or_test(openhtf.Test(PhaseThatSucceeds)) + self.assertEqual( + text.StringFromTestRecord(record), 'Test finished with a PASS!\n' + 'Woohoo!\n' + 'Phase trigger_phase\n' + '+ Outcome: PASS Result: CONTINUE\n' + 'Phase PhaseThatSucceeds\n' + '+ Outcome: PASS Result: CONTINUE\n' + '| text_measurement_a: a\n' + '| text_measurement_b: b\n' + '| attachment: attachment_a.txt (mimetype=text/plain)\n' + '| attachment: attachment_b.json (mimetype=application/json)\n' + 'Test finished with a PASS!') + + def testStringFromTestRecord_SuccessfullyConvertsTestErrorPhase(self): + record = self.execute_phase_or_test(openhtf.Test(PhaseWithError)) + self.assertEqual( + text.StringFromTestRecord(record), 'Test encountered an ERROR!!!\n' + 'Phase trigger_phase\n' + '+ Outcome: PASS Result: CONTINUE\n' + 'Phase PhaseWithError\n' + '+ Outcome: ERROR Result: Exception\n' + '| text_measurement_a was not set\n' + '| text_measurement_b was not set\n' + 'The test thinks this may be the reason:\n' + 'Exception: Intentional exception from test case.\n' + 'Test encountered an ERROR!!!') + + def testStringFromTestRecord_SuccessfullyConvertsTestFailurePhase(self): + record = self.execute_phase_or_test(openhtf.Test(PhaseWithFailure)) + output = text.StringFromTestRecord(record) + self.assertEqual( + output, 'Test finished with a FAIL :(\n' + 'Phase trigger_phase\n' + '+ Outcome: PASS Result: CONTINUE\n' + 'Phase PhaseWithFailure\n' + '+ Outcome: FAIL Result: CONTINUE\n' + '| text_measurement_a failed because intentionally wrong measurement ' + 'failed these checks: ["\'x\' matches /^a$/"]\n' + '| text_measurement_b was not set\n' + '| text_measurement_c: c\n' + 'Test finished with a FAIL :(') + self.assertNotIn(text._BRIGHT_RED_STYLE, output) + + def testStringFromTestRecord_SuccessfullyConvertsTestOnlyFailurePhase(self): + record = self.execute_phase_or_test( + openhtf.Test(PhaseThatSucceeds, PhaseWithFailure)) + output = text.StringFromTestRecord(record, only_failures=True) + self.assertEqual( + output, 'Test finished with a FAIL :(\n' + 'Phase PhaseWithFailure\n' + '+ Outcome: FAIL Result: CONTINUE\n' + '| text_measurement_a failed because intentionally wrong measurement ' + 'failed these checks: ["\'x\' matches /^a$/"]\n' + 'Test finished with a FAIL :(') + self.assertNotIn(text._BRIGHT_RED_STYLE, output) + + def testStringFromTestRecord_SuccessfullyConvertsTestFailurePhaseColored( + self): + record = self.execute_phase_or_test(openhtf.Test(PhaseWithFailure)) + self.assertEqual( + text.StringFromTestRecord(record, colorize_text=True).count(_RED), 5) + + def testStringFromTestRecord_SuccessfullyConvertsTestFailureMultiplePhases( + self): + record = self.execute_phase_or_test( + openhtf.Test(PhaseThatSucceeds, PhaseWithFailure)) + self.assertEqual( + text.StringFromTestRecord(record), 'Test finished with a FAIL :(\n' + 'Phase trigger_phase\n' + '+ Outcome: PASS Result: CONTINUE\n' + 'Phase PhaseThatSucceeds\n' + '+ Outcome: PASS Result: CONTINUE\n' + '| text_measurement_a: a\n' + '| text_measurement_b: b\n' + '| attachment: attachment_a.txt (mimetype=text/plain)\n' + '| attachment: attachment_b.json (mimetype=application/json)\n' + 'Phase PhaseWithFailure\n' + '+ Outcome: FAIL Result: CONTINUE\n' + '| text_measurement_a failed because intentionally wrong measurement ' + 'failed these checks: ["\'x\' matches /^a$/"]\n' + '| text_measurement_b was not set\n' + '| text_measurement_c: c\n' + 'Test finished with a FAIL :(') + + def testPrintTestRecord_SuccessfullyLogsNotColored(self): + record = self.execute_phase_or_test(openhtf.Test(PhaseThatSucceeds)) + with mock.patch.object(sys, 'stdout', new_callable=io.StringIO) as cm: + with mock.patch.object( + sys.stdout, + sys.stdout.isatty.__name__, + autospec=True, + spec_set=True, + return_value=False): + text.PrintTestRecord(record) + self.assertTrue(cm.getvalue()) + self.assertNotIn(_GREEN, cm.getvalue()) + + def testPrintTestRecord_SuccessfullyLogsColored(self): + record = self.execute_phase_or_test(openhtf.Test(PhaseThatSucceeds)) + with mock.patch.object(sys, 'stdout', new_callable=io.StringIO) as cm: + with mock.patch.object( + sys.stdout, + sys.stdout.isatty.__name__, + autospec=True, + spec_set=True, + return_value=True): + text.PrintTestRecord(record) + self.assertIn(_GREEN, cm.getvalue()) diff --git a/test/util/validators_test.py b/test/util/validators_test.py index ccba2a59f..890a9b700 100644 --- a/test/util/validators_test.py +++ b/test/util/validators_test.py @@ -66,6 +66,128 @@ def test_with_custom_type(self): self.assertEqual(test_validator.maximum, 0x12) +class TestAllInRange(unittest.TestCase): + + def setUp(self): + super().setUp() + self.minimum = -20.5 + self.maximum = 0.3 + self.marginal_minimum = -10.1 + self.marginal_maximum = -8.2 + self.validator = validators.AllInRangeValidator(self.minimum, self.maximum, + self.marginal_minimum, + self.marginal_maximum) + + def test_properties(self): + with self.subTest('minimum'): + self.assertAlmostEqual(self.validator.minimum, self.minimum) + with self.subTest('maximum'): + self.assertAlmostEqual(self.validator.maximum, self.maximum) + with self.subTest('marginal_minimum'): + self.assertAlmostEqual(self.validator.marginal_minimum, + self.marginal_minimum) + with self.subTest('marginal_maximum'): + self.assertAlmostEqual(self.validator.marginal_maximum, + self.marginal_maximum) + + def test_returns_false_for_out_of_range_values(self): + with self.subTest('beyond_minimum'): + self.assertFalse(self.validator([self.minimum - 1, self.maximum])) + with self.subTest('beyond_maximum'): + self.assertFalse(self.validator([self.minimum, self.maximum + 1])) + + def test_returns_true_within_bounds(self): + with self.subTest('with_all_values_set'): + self.assertTrue(self.validator([self.minimum, self.maximum])) + + def test_returns_true_within_bounds_without_maximum(self): + validator = validators.AllInRangeValidator(self.minimum, None) + self.assertTrue(validator([self.minimum, self.maximum])) + + def test_returns_true_within_bounds_without_minimum(self): + validator = validators.AllInRangeValidator(None, self.maximum) + self.assertTrue(validator([self.minimum, self.maximum])) + + def test_is_marginal_is_marginal_returns_true_for_out_of_range_values(self): + with self.subTest('beyond_marginal_minimum'): + self.assertTrue( + self.validator.is_marginal([self.minimum, self.marginal_maximum - 1])) + with self.subTest('beyond_marginal_maximum'): + self.assertTrue( + self.validator.is_marginal([self.marginal_minimum + 1, self.maximum])) + + def test_is_marginal_false_within_bounds(self): + self.assertFalse( + self.validator.is_marginal( + [self.marginal_minimum + 1, self.marginal_maximum - 1])) + + def test_is_marginal_false_fully_out_of_range(self): + self.assertFalse( + self.validator.is_marginal( + [self.minimum - 1, self.maximum + 1])) + + def test_is_marginal_false_without_marginal_bounds(self): + validator = validators.AllInRangeValidator(self.minimum, self.minimum) + self.assertFalse(validator.is_marginal([self.minimum, self.maximum])) + + def test_raises_for_unset_minimum_and_maximum(self): + with self.assertRaises(ValueError) as raises_context: + validators.AllInRangeValidator(None, None) + self.assertIn('Must specify minimum, maximum, or both', + str(raises_context.exception)) + + def test_raises_for_minimum_above_maximum(self): + with self.assertRaises(ValueError) as raises_context: + validators.AllInRangeValidator(minimum=self.maximum, maximum=self.minimum) + self.assertIn('Minimum cannot be greater than maximum', + str(raises_context.exception)) + + def test_raises_for_marginal_minimum_without_minimum(self): + with self.assertRaises(ValueError) as raises_context: + validators.AllInRangeValidator(None, self.maximum, self.marginal_minimum, + self.marginal_maximum) + self.assertIn('Marginal minimum was specified without a minimum', + str(raises_context.exception)) + + def test_raises_for_marginal_maximum_without_maximum(self): + with self.assertRaises(ValueError) as raises_context: + validators.AllInRangeValidator(self.minimum, None, self.marginal_minimum, + self.marginal_maximum) + self.assertIn('Marginal maximum was specified without a maximum', + str(raises_context.exception)) + + def test_raises_for_marginal_minimum_below_minimum(self): + with self.assertRaises(ValueError) as raises_context: + validators.AllInRangeValidator( + minimum=self.marginal_minimum, + maximum=None, + marginal_minimum=self.minimum, + marginal_maximum=None) + self.assertIn('Marginal minimum cannot be less than the minimum', + str(raises_context.exception)) + + def test_raises_for_marginal_maximum_below_maximum(self): + with self.assertRaises(ValueError) as raises_context: + validators.AllInRangeValidator( + minimum=None, + maximum=self.marginal_maximum, + marginal_minimum=None, + marginal_maximum=self.maximum) + self.assertIn('Marginal maximum cannot be greater than the maximum', + str(raises_context.exception)) + + def test_raises_for_marginal_minimum_above_marginal_maximum(self): + with self.assertRaises(ValueError) as raises_context: + validators.AllInRangeValidator( + self.minimum, + self.maximum, + marginal_minimum=self.marginal_maximum, + marginal_maximum=self.marginal_minimum) + self.assertIn( + 'Marginal minimum cannot be greater than the marginal maximum', + str(raises_context.exception)) + + class TestEqualsValidator(unittest.TestCase): def test_with_built_in_pods(self): From 0edf6c9b5b54c8b36348ddfb1dcc258a9d58634f Mon Sep 17 00:00:00 2001 From: Gauthier Dieppedalle Date: Fri, 20 May 2022 11:33:58 -0700 Subject: [PATCH 002/129] Moved over continuous integration and deployment from travis-ci.org to GitHub Actions (#1003) * Added support for marginal test results to the protos. * Added continuous integration and deployment via GitHub Action instead of travis-ci.org --- .github/workflows/build_and_deploy.yml | 46 ++++++++++++++++++++++++++ .travis.yml | 37 --------------------- README.md | 2 +- openhtf/output/proto/mfg_event.proto | 8 ++++- openhtf/output/proto/test_runs.proto | 9 ++++- tox.ini | 5 +++ 6 files changed, 67 insertions(+), 40 deletions(-) create mode 100644 .github/workflows/build_and_deploy.yml delete mode 100644 .travis.yml diff --git a/.github/workflows/build_and_deploy.yml b/.github/workflows/build_and_deploy.yml new file mode 100644 index 000000000..264b33381 --- /dev/null +++ b/.github/workflows/build_and_deploy.yml @@ -0,0 +1,46 @@ +name: Continuous Integration + +on: + - push + - pull_request + +permissions: + contents: read + +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ['3.6', '3.7'] + + steps: + - uses: actions/checkout@v3 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v3 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + python -m pip install --upgrade pip + python -m pip install tox tox-gh-actions + pip install coveralls + wget https://github.com/protocolbuffers/protobuf/releases/download/v3.6.1/protoc-3.6.1-linux-x86_64.zip + unzip protoc-3.6.1-linux-x86_64.zip + sudo cp bin/protoc /usr/bin/protoc && sudo chmod 777 /usr/bin/protoc + sudo cp -r include/. /usr/include && sudo chmod -R +r /usr/include/google + protoc --version + sudo apt-get install -y libusb-1.0-0-dev libprotobuf-dev swig + - name: Test with tox + run: tox + - name: Publish to coveralls.io + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + run: coveralls --service=github + - name: Publish to PyPI + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') + uses: pypa/gh-action-pypi-publish@release/v1 + with: + user: __token__ + password: gWriMCwCITTFTXKl4k7/eVYpx07N/z2zUGxZ3lme/pl6mRfJvj8QbpvnJAQGNn5VEZfWuuKveCoAySfrLcojV8RJuaRLcAnIuJInZt/Cf8QXmHLm7LK9xAnKofi++RRqk0B81CwbKjq3/JhMmygvSjSR5vRDogo3KB2GHRnE3HQUSy3IlBeZDDDpr7LcNcNVSr/z9TXC1/UA05erhUvRWuMiDI9AKqvPZ80K+GlzWEPSxkeFotC/i7PyrZfJWEzVPrgt1iFOK9lNmh5lKyQ4do0nuVHAZFcxsMb+6uBek7WNgmUOUAhOTHa/AM//b8qIhVzSPFc8tQlqdyN6lH8l0SbbzX7BkKNqS1hL5XzLJ+/VZgBbSUDWSDq08Dmu4snRvxPZc6RzfmQKQ0H0esOKzBwS8dIAQDEVwj13WuCnV7G0yHD2yRXmyWbLcbhDW7rNwC7VsyenPA9SwJ9vrCRoCuB3+zKERAya47dgflFHtxITHVdDR/tJ7h83YiEuVp/GkdOOet2gHMO5HyqoipaXryg7fu7JAhZ727l9t8PGWWKwKE0GBL7/IgrAIhR3GuYK33fInB2SpSoAmoxipfU31TpO1Xb+WT+yQwXft+wFYK6DH65yhaedHqKnxu7ph2ZE36XB4qY84sbvE/GgWF6KJjXoA1RTxmohI97i2dmTQJI= + skip_existing: true diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 8df6732a6..000000000 --- a/.travis.yml +++ /dev/null @@ -1,37 +0,0 @@ -language: python -matrix: - include: - - python: 3.6 - env: TOXENV=py36 -addons: - apt: - packages: - - python3 - - python3-pip - - swig - - libusb-1.0-0-dev - - libprotobuf-dev -cache: - pip: true - apt: true - directories: - - "$HOME/.cache/pip" -install: -- pip install tox coveralls -- pip install -e . -- wget https://github.com/protocolbuffers/protobuf/releases/download/v3.6.1/protoc-3.6.1-linux-x86_64.zip -- unzip protoc-3.6.1-linux-x86_64.zip -- sudo cp bin/protoc /usr/bin/protoc && sudo chmod 777 /usr/bin/protoc -- sudo cp -r include/. /usr/include && sudo chmod -R +r /usr/include/google -- protoc --version -script: tox -after_success: -- coveralls -deploy: - provider: pypi - user: "__token__" - on: - tags: true - password: - secure: gWriMCwCITTFTXKl4k7/eVYpx07N/z2zUGxZ3lme/pl6mRfJvj8QbpvnJAQGNn5VEZfWuuKveCoAySfrLcojV8RJuaRLcAnIuJInZt/Cf8QXmHLm7LK9xAnKofi++RRqk0B81CwbKjq3/JhMmygvSjSR5vRDogo3KB2GHRnE3HQUSy3IlBeZDDDpr7LcNcNVSr/z9TXC1/UA05erhUvRWuMiDI9AKqvPZ80K+GlzWEPSxkeFotC/i7PyrZfJWEzVPrgt1iFOK9lNmh5lKyQ4do0nuVHAZFcxsMb+6uBek7WNgmUOUAhOTHa/AM//b8qIhVzSPFc8tQlqdyN6lH8l0SbbzX7BkKNqS1hL5XzLJ+/VZgBbSUDWSDq08Dmu4snRvxPZc6RzfmQKQ0H0esOKzBwS8dIAQDEVwj13WuCnV7G0yHD2yRXmyWbLcbhDW7rNwC7VsyenPA9SwJ9vrCRoCuB3+zKERAya47dgflFHtxITHVdDR/tJ7h83YiEuVp/GkdOOet2gHMO5HyqoipaXryg7fu7JAhZ727l9t8PGWWKwKE0GBL7/IgrAIhR3GuYK33fInB2SpSoAmoxipfU31TpO1Xb+WT+yQwXft+wFYK6DH65yhaedHqKnxu7ph2ZE36XB4qY84sbvE/GgWF6KJjXoA1RTxmohI97i2dmTQJI= - skip_existing: true diff --git a/README.md b/README.md index 166644b27..5ecce907f 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ # OpenHTF The open-source hardware testing framework. -[![Build Status](https://travis-ci.org/google/openhtf.svg?branch=master)](https://travis-ci.org/google/openhtf) +[![Build Status](https://github.com/google/openhtf/actions/workflows/build_and_deploy.yml/badge.svg?branch=master)](https://github.com/google/openhtf/actions?branch=master) [![Coverage Status](https://coveralls.io/repos/google/openhtf/badge.svg?branch=master&service=github)](https://coveralls.io/github/google/openhtf?branch=master) [Issue Stats](http://issuestats.com/github/google/openhtf) diff --git a/openhtf/output/proto/mfg_event.proto b/openhtf/output/proto/mfg_event.proto index f0e31fd5e..f3dc5c156 100644 --- a/openhtf/output/proto/mfg_event.proto +++ b/openhtf/output/proto/mfg_event.proto @@ -85,6 +85,10 @@ message Measurement { optional double numeric_minimum = 12; optional double numeric_maximum = 13; + // Fields to determine numeric marginality which are used in RangeValidators. + optional double numeric_marginal_minimum = 25; + optional double numeric_marginal_maximum = 26; + // If this parameter is text then fill in these fields optional string text_value = 14; // This field may be a regular expression describing the expected value @@ -100,9 +104,11 @@ message Measurement { // Created for visualization by UIs that don't support certain fancy // parameters. UIs that do support them should hide these parameters. optional string associated_attachment = 21; - // Next tag = 24 + // Next tag = 27 extensions 5000 to 5199; + + reserved 24; } // A parameter which is extra information from a test run. These values are not diff --git a/openhtf/output/proto/test_runs.proto b/openhtf/output/proto/test_runs.proto index 036723ac7..6f7828252 100644 --- a/openhtf/output/proto/test_runs.proto +++ b/openhtf/output/proto/test_runs.proto @@ -75,6 +75,7 @@ enum Status { REWORK = 12; SCRAP = 13; DEBUG = 14; + MARGINAL_PASS = 15; } @@ -127,6 +128,10 @@ message TestParameter { optional double numeric_minimum = 12; optional double numeric_maximum = 13; + // Fields to determine numeric marginality which are used in RangeValidators. + optional double numeric_marginal_minimum = 26; + optional double numeric_marginal_maximum = 27; + // If this parameter is text then fill in these fields optional string text_value = 14; // This field may be a regular expression describing the expected value @@ -139,9 +144,11 @@ message TestParameter { // Created for visualization by UIs that don't support certain fancy // parameters. UIs that do support them should hide these parameters. optional string associated_attachment = 21; - // Next tag = 22 + // Next tag = 28 extensions 5000 to 5199; + + reserved 25; } diff --git a/tox.ini b/tox.ini index 2f7f667ca..9e08057d5 100644 --- a/tox.ini +++ b/tox.ini @@ -1,6 +1,11 @@ [tox] envlist = py36,py37 +[gh-actions] +python = + 3.6: py36 + 3.7: py37 + [testenv] deps = -r{toxinidir}/test_reqs.txt commands = {envbindir}/python setup.py build_proto From 120690ade906e29505fa26fec76d36ae47e434bb Mon Sep 17 00:00:00 2001 From: Gauthier Dieppedalle Date: Fri, 20 May 2022 11:35:30 -0700 Subject: [PATCH 003/129] Added support for marginal test results to the protos. (#1002) From c7ab5080ed64c9b81721eb4de72bba2bdf6b83cc Mon Sep 17 00:00:00 2001 From: Gauthier Dieppedalle Date: Wed, 25 May 2022 12:39:11 -0700 Subject: [PATCH 004/129] Internal change (#1004) [OpenHTF] Ignore the GitHub Actions config file in *.. [OpenHTF] Add util function for getting the phases from a list of phase nodes and phase node collections. Cleanup (3p) LSC: Remove `Lint as` gpylint comment directives. Cleanup (3p) LSC: Remove `Lint as` gpylint comment directives. Support test-stopping failures with a phase-scoped option. Add an explicit Literal annotation to test_state.INFER_MIMETYPE. Add get_test_measurement_strict() into test api. Cleanup Fix or silence upcoming type errors in Python 3.9. Cleanup LSC: Remove `//net/proto2/python/public:use_pure_python` dep, migrate to protobuf Cleanup Silence type errors generated by enabling a new pytype feature. Cleanup Migrate away from Angular's deprecated `async` symbol to use `waitForAsync` Cleanup Fix or ignore type errors generated by the next release of pytype. Iteratively upload attachments in when partial uploads are in use Give mfg_event_converter access to the existing blobref cache Add a size attribute for Attachments Cleanup Remove all usages of //third_party/py/enum library. Cleanup Silence type errors generated by enabling a new pytype feature. Migrate partial upload code from MfgInspector to * Add a mechanism to profile unit tests. Add case formatting options for phase names in OpenHTF Phase Options. Cleanup Remove unused python binaries + libraries from //third_party/py (as reported dead by sensenmann) Cleanup Fix or ignore type errors generated by the next release of pytype. make the mfg_event_converter to handle datetime objects in JSON conversion. (see cl/396863619 for some context) Cleanup Infer `__init__.py` attributes for Python strict deps. validators.py: Use f-string to format Equals str representation. Enable partial upload of attachments from in progress phases Detect changed attachments (and skip cache) to support OpenHTF_record.json Rollback of changelist 392091102. Reason: Rollforward of cl/391826358: Reuse existing blob refs in partial_upload by caching protos Rollback of changelist 391826358. Reason: Seems that these blobrefs are not the correct values to be using at the moment or at least there are occasional issues. See b/197352227 for details. Reuse existing blob refs in partial_upload by caching protos Add alternative for conf.inject_positional_args. Cleanup Fix or ignore type errors generated by the newest pytype release. Move Configuration (openhtf.conf) class attributes to module attributes Treat openhtf.util.conf as an object instead of a module Move Configuration to its own module instead of living in conf Update typescript web_gui files to remove deprecated bypassSecurityTrustHtml Remove __init__.py file that was left behind in an otherwise empty package. Add a protocol and implementation for conf.declare return value. Cleanup Fix or ignore type errors generated by the next release of pytype. PiperOrigin-RevId: 450548096 --- contrib/plugs/__init__.py | 0 examples/all_the_things.py | 4 +- examples/example_plugs.py | 24 +- examples/frontend_example.py | 6 +- examples/stop_on_first_failure.py | 8 +- openhtf/__init__.py | 6 +- openhtf/core/base_plugs.py | 45 +- openhtf/core/diagnoses_lib.py | 1 - openhtf/core/measurements.py | 2 +- openhtf/core/phase_branches.py | 1 - openhtf/core/phase_collections.py | 1 - openhtf/core/phase_descriptor.py | 45 +- openhtf/core/phase_nodes.py | 1 - openhtf/core/test_descriptor.py | 43 +- openhtf/core/test_executor.py | 12 +- openhtf/core/test_record.py | 13 +- openhtf/core/test_state.py | 16 +- openhtf/output/callbacks/mfg_inspector.py | 103 +-- openhtf/output/proto/mfg_event.proto | 21 +- openhtf/output/proto/mfg_event_converter.py | 90 +- openhtf/output/proto/test_runs_converter.py | 2 +- openhtf/output/servers/station_server.py | 26 +- .../app/plugs/user-input-plug.component.ts | 41 +- .../station/station.component.spec.ts | 4 +- openhtf/plugs/__init__.py | 16 +- openhtf/plugs/generic/serial_collection.py | 10 +- openhtf/plugs/usb/__init__.py | 18 +- openhtf/util/conf.py | 647 +-------------- openhtf/util/configuration.py | 766 ++++++++++++++++++ openhtf/util/test.py | 100 ++- openhtf/util/timeouts.py | 2 +- openhtf/util/validators.py | 2 +- setup.py | 2 + test/core/diagnoses_test.py | 1 - test/core/exe_test.py | 10 +- test/core/test_descriptor_test.py | 1 - test/core/test_record_test.py | 10 +- .../callbacks/mfg_event_converter_test.py | 106 ++- test/output/callbacks/mfg_inspector_test.py | 16 +- test/phase_descriptor_test.py | 53 +- test/test_state_test.py | 10 +- test/util/conf_test.py | 233 ++++-- test/util/test_test.py | 65 ++ 43 files changed, 1595 insertions(+), 988 deletions(-) delete mode 100644 contrib/plugs/__init__.py create mode 100644 openhtf/util/configuration.py diff --git a/contrib/plugs/__init__.py b/contrib/plugs/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/examples/all_the_things.py b/examples/all_the_things.py index 9485cd921..5109a8bed 100644 --- a/examples/all_the_things.py +++ b/examples/all_the_things.py @@ -32,7 +32,7 @@ from six.moves import zip -@htf.plug(example=example_plugs.ExamplePlug) +@htf.plug(example=example_plugs.example_plug_configured) @htf.plug(frontend_aware=example_plugs.ExampleFrontendAwarePlug) def example_monitor(example, frontend_aware): time.sleep(.2) @@ -50,7 +50,7 @@ def example_monitor(example, frontend_aware): docstring='Helpful docstring', units=units.HERTZ, validators=[util.validators.matches_regex('Measurement')]) -@htf.plug(example=example_plugs.ExamplePlug) +@htf.plug(example=example_plugs.example_plug_configured) @htf.plug(prompts=user_input.UserInput) def hello_world(test, example, prompts): """A hello world test phase.""" diff --git a/examples/example_plugs.py b/examples/example_plugs.py index afc0e728f..7e08459c4 100644 --- a/examples/example_plugs.py +++ b/examples/example_plugs.py @@ -14,30 +14,27 @@ """Example plugs for OpenHTF.""" from openhtf.core import base_plugs -from openhtf.util import conf +from openhtf.util import configuration -conf.declare( +CONF = configuration.CONF + +EXAMPLE_PLUG_INCREMENT_SIZE = CONF.declare( 'example_plug_increment_size', default_value=1, description='increment constant for example plug.') -class ExamplePlug(base_plugs.BasePlug): # pylint: disable=no-init +class ExamplePlug(base_plugs.BasePlug): """Example of a simple plug. This plug simply keeps a value and increments it each time increment() is called. You'll notice a few paradigms here: - - @conf.inject_positional_args + - configuration.bind_init_args This is generally a good way to pass in any configuration that your plug needs, such as an IP address or serial port to connect to. If - You want to use your plug outside of the OpenHTF framework, you can - still manually instantiate it, but you must pass the arguments by - keyword (as a side effect of the way inject_positional_args is - implemented). - - For example, if you had no openhtf.conf loaded, you could do this: - my_plug = ExamplePlug(example_plug_increment_size=4) + you want to use your plug outside of the OpenHTF framework, you can + still manually instantiate it. - tearDown() This method will be called automatically by the OpenHTF framework at @@ -61,7 +58,6 @@ class ExamplePlug(base_plugs.BasePlug): # pylint: disable=no-init a with: block at the beginning of every phase where it is used. """ - @conf.inject_positional_args def __init__(self, example_plug_increment_size): self.increment_size = example_plug_increment_size self.value = 0 @@ -79,6 +75,10 @@ def increment(self): return self.value - self.increment_size +example_plug_configured = configuration.bind_init_args( + ExamplePlug, EXAMPLE_PLUG_INCREMENT_SIZE) + + class ExampleFrontendAwarePlug(base_plugs.FrontendAwareBasePlug): """Example of a simple frontend-aware plug. diff --git a/examples/frontend_example.py b/examples/frontend_example.py index fdd7ac457..14824c966 100644 --- a/examples/frontend_example.py +++ b/examples/frontend_example.py @@ -17,7 +17,9 @@ from openhtf.output.servers import station_server from openhtf.output.web_gui import web_launcher from openhtf.plugs import user_input -from openhtf.util import conf +from openhtf.util import configuration + +CONF = configuration.CONF @htf.measures(htf.Measurement('hello_world_measurement')) @@ -27,7 +29,7 @@ def hello_world(test): def main(): - conf.load(station_server_port='4444') + CONF.load(station_server_port='4444') with station_server.StationServer() as server: web_launcher.launch('http://localhost:4444') for _ in range(5): diff --git a/examples/stop_on_first_failure.py b/examples/stop_on_first_failure.py index 2628b2961..6b981bd75 100644 --- a/examples/stop_on_first_failure.py +++ b/examples/stop_on_first_failure.py @@ -22,15 +22,17 @@ test.configure(stop_on_first_failure=True) 2. Using config item. This option lets you toggle this feature dynamically. -conf.load(stop_on_first_failure=True) +CONF.load(stop_on_first_failure=True) """ import openhtf as htf from openhtf.output.callbacks import console_summary from openhtf.plugs import user_input -from openhtf.util import conf # pylint: disable=unused-import +from openhtf.util import configuration from openhtf.util import validators +CONF = configuration.CONF + @htf.measures('number_sum', validators=[validators.in_range(0, 5)]) def add_numbers_fails(test): @@ -58,7 +60,7 @@ def main(): # Option 2 : You can disable option 1 and enable below line # to get same result - # conf.load(stop_on_first_failure=True) + # CONF.load(stop_on_first_failure=True) test.execute(test_start=user_input.prompt_for_test_start()) diff --git a/openhtf/__init__.py b/openhtf/__init__.py index 0e8d96271..8fba946c2 100644 --- a/openhtf/__init__.py +++ b/openhtf/__init__.py @@ -40,6 +40,7 @@ from openhtf.core.phase_descriptor import diagnose from openhtf.core.phase_descriptor import measures from openhtf.core.phase_descriptor import PhaseDescriptor +from openhtf.core.phase_descriptor import PhaseNameCase from openhtf.core.phase_descriptor import PhaseOptions from openhtf.core.phase_descriptor import PhaseResult from openhtf.core.phase_group import PhaseGroup @@ -50,7 +51,7 @@ from openhtf.core.test_record import PhaseRecord from openhtf.core.test_record import TestRecord from openhtf.plugs import plug -from openhtf.util import conf +from openhtf.util import configuration from openhtf.util import console_output from openhtf.util import data from openhtf.util import functions @@ -58,8 +59,7 @@ from openhtf.util import units import pkg_resources -if typing.TYPE_CHECKING: - conf: conf.Configuration # Configuration is only available here in typing. +conf = configuration.CONF def get_version(): diff --git a/openhtf/core/base_plugs.py b/openhtf/core/base_plugs.py index d1d47cd15..dbfdd55a0 100644 --- a/openhtf/core/base_plugs.py +++ b/openhtf/core/base_plugs.py @@ -60,30 +60,37 @@ def TestPhase(test, example): Tearing down ExamplePlug! Plugs will often need to use configuration values. The recommended way -of doing this is with the conf.inject_positional_args decorator: +of doing this is with the configuration.inject_positional_args decorator: from openhtf import plugs - from openhtf.util import conf + from openhtf.util import configuration - conf.declare('my_config_key', default_value='my_config_value') + CONF = configuration.CONF + MY_CONFIG_KEY = CONF.declare('my_config_key', default_value='my_config_value') + + CONF.declare('my_config_key', default_value='my_config_value') class ExamplePlug(base_plugs.BasePlug): '''A plug that requires some configuration.''' - @conf.inject_positional_args def __init__(self, my_config_key) self._my_config = my_config_key -Note that Plug constructors shouldn't take any other arguments; the -framework won't pass any, so you'll get a TypeError. Any values that are only -known at run time must be either passed into other methods or set via explicit -setter methods. See openhtf/conf.py for details, but with the above -example, you would also need a configuration .yaml file with something like: + example_plug_configured = configuration.bind_init_args( + ExamplePlug, MY_CONFIG_KEY) + +Here, example_plug_configured is a subclass of ExamplePlug with bound args for +the initializer, and it can be passed to phases like any other plug. See +openhtf/conf.py for details, but with the above example, you would also need a +configuration .yaml file with something like: my_config_key: my_config_value -This will result in the ExamplePlug being constructed with +This will result in the example_plug_configured being constructed with self._my_config having a value of 'my_config_value'. + +Note that Plug constructors shouldn't take any other arguments; the +framework won't pass any, so you'll get a TypeError. """ import logging @@ -103,6 +110,18 @@ class InvalidPlugError(Exception): class BasePlug(object): """All plug types must subclass this type. + Okay to use with multiple inheritance when subclassing an existing + implementation that you want to convert into a plug. Place BasePlug last in + the parent list. For example: + + class MyExistingDriver: + def do_something(self): + pass + + class MyExistingDriverPlug(MyExistingDriver, BasePlug): + def tearDown(self): + ... # Implement the BasePlug interface as desired. + Attributes: logger: This attribute will be set by the PlugManager (and as such it doesn't appear here), and is the same logger as passed into test phases @@ -147,14 +166,12 @@ def _asdict(self) -> Dict[Text, Any]: def tearDown(self) -> None: """This method is called automatically at the end of each Test execution.""" - pass @classmethod def uses_base_tear_down(cls) -> bool: """Checks whether the tearDown method is the BasePlug implementation.""" - this_tear_down = getattr(cls, 'tearDown') - base_tear_down = getattr(BasePlug, 'tearDown') - return this_tear_down.__code__ is base_tear_down.__code__ + this_tear_down = getattr(cls, BasePlug.tearDown.__name__) + return this_tear_down.__code__ is BasePlug.tearDown.__code__ class FrontendAwareBasePlug(BasePlug, util.SubscribableStateMixin): diff --git a/openhtf/core/diagnoses_lib.py b/openhtf/core/diagnoses_lib.py index 884f9113f..281256a0d 100644 --- a/openhtf/core/diagnoses_lib.py +++ b/openhtf/core/diagnoses_lib.py @@ -12,7 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -# Lint as: python3 """Diagnoses: Measurement and meta interpreters. Diagnoses are higher level signals that result from processing multiple diff --git a/openhtf/core/measurements.py b/openhtf/core/measurements.py index 6774ef1b7..d5c3194e8 100644 --- a/openhtf/core/measurements.py +++ b/openhtf/core/measurements.py @@ -439,7 +439,7 @@ def validate(self) -> 'Measurement': raise finally: if self._cached: - self._cached['outcome'] = self.outcome.name + self._cached['outcome'] = self.outcome.name # pytype: disable=bad-return-type def as_base_types(self) -> Dict[Text, Any]: """Convert this measurement to a dict of basic types.""" diff --git a/openhtf/core/phase_branches.py b/openhtf/core/phase_branches.py index f98333c9f..bfae81ee8 100644 --- a/openhtf/core/phase_branches.py +++ b/openhtf/core/phase_branches.py @@ -12,7 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -# Lint as: python3 """Implements phase node branches. A BranchSequence is a phase node sequence that runs conditiionally based on the diff --git a/openhtf/core/phase_collections.py b/openhtf/core/phase_collections.py index a1b1e79d7..3d5de752d 100644 --- a/openhtf/core/phase_collections.py +++ b/openhtf/core/phase_collections.py @@ -12,7 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -# Lint as: python3 """Implements the basic PhaseNode collections. Phase Sequence are basic collections where each node is sequentially run. These diff --git a/openhtf/core/phase_descriptor.py b/openhtf/core/phase_descriptor.py index 93b3f0575..30ba9a443 100644 --- a/openhtf/core/phase_descriptor.py +++ b/openhtf/core/phase_descriptor.py @@ -25,6 +25,7 @@ from typing import Any, Callable, Dict, Iterator, List, Optional, Sequence, Set, Text, TYPE_CHECKING, Type, Union import attr +import inflection import openhtf from openhtf import util @@ -73,6 +74,15 @@ class PhaseResult(enum.Enum): FAIL_SUBTEST = 'FAIL_SUBTEST' +@enum.unique +class PhaseNameCase(enum.Enum): + """Options for formatting casing for phase names.""" + # Does not modify case for phase name. + KEEP = 'KEEP' + # Changes phase name case to CamelCase. + CAMEL = 'CAMEL' + + PhaseReturnT = Optional[PhaseResult] PhaseCallableT = Callable[..., PhaseReturnT] PhaseCallableOrNodeT = Union[PhaseCallableT, phase_nodes.PhaseNode] @@ -101,6 +111,8 @@ class PhaseOptions(object): run_under_pdb: If True, run the phase under the Python Debugger (pdb). When setting this option, increase the phase timeout as well because the timeout will still apply when under the debugger. + phase_name_case: Case formatting options for phase name. + stop_on_measurement_fail: Whether to stop the test if any measurements fail. Example Usages: @PhaseOptions(timeout_s=1) def PhaseFunc(test): pass @PhaseOptions(name='Phase({port})') def PhaseFunc(test, port, other_info): pass @@ -114,6 +126,8 @@ def PhaseFunc(test, port, other_info): pass repeat_on_timeout = attr.ib(type=bool, default=False) repeat_limit = attr.ib(type=Optional[int], default=None) run_under_pdb = attr.ib(type=bool, default=False) + phase_name_case = attr.ib(type=PhaseNameCase, default=PhaseNameCase.KEEP) + stop_on_measurement_fail = attr.ib(type=bool, default=False) def format_strings(self, **kwargs: Any) -> 'PhaseOptions': """String substitution of name.""" @@ -139,6 +153,11 @@ def __call__(self, phase_func: PhaseT) -> 'PhaseDescriptor': phase.options.repeat_limit = self.repeat_limit if self.run_under_pdb: phase.options.run_under_pdb = self.run_under_pdb + if self.phase_name_case == PhaseNameCase.CAMEL: + name = phase.name if phase.options.name is None else phase.options.name + phase.options.name = inflection.camelize(name) + if self.stop_on_measurement_fail: + phase.options.stop_on_measurement_fail = self.stop_on_measurement_fail return phase @@ -202,7 +221,7 @@ def wrap_or_copy(cls, func: PhaseT, **options: Any) -> 'PhaseDescriptor': return retval def _asdict(self) -> Dict[Text, Any]: - ret = attr.asdict(self, filter=attr.filters.exclude('func')) + ret = attr.asdict(self, filter=attr.filters.exclude('func')) # pytype: disable=wrong-arg-types # attr-stubs ret.update(name=self.name, doc=self.doc) return ret @@ -336,6 +355,7 @@ def __call__(self, kwargs.update( running_test_state.plug_manager.provide_plugs( (plug.name, plug.cls) for plug in self.plugs if plug.update_kwargs)) + # Pass in test_api if the phase takes *args, or **kwargs with at least 1 # positional, or more positional args than we have keyword args. if arg_info.varargs or (keywords and len(arg_info.args) >= 1) or (len( @@ -347,13 +367,26 @@ def __call__(self, args.append(running_test_state.test_api) if self.options.run_under_pdb: - return pdb.runcall(self.func, *args, **kwargs) + phase_result = pdb.runcall(self.func, *args, **kwargs) else: - return self.func(*args, **kwargs) - if self.options.run_under_pdb: - return pdb.runcall(self.func, **kwargs) + phase_result = self.func(*args, **kwargs) + + elif self.options.run_under_pdb: + phase_result = pdb.runcall(self.func, **kwargs) else: - return self.func(**kwargs) + phase_result = self.func(**kwargs) + + # Override the phase result if the user wants to treat ANY failed + # measurement of this phase as a test-stopping failure. + if self.options.stop_on_measurement_fail: + # Note: The measurement definitions do NOT have the outcome populated. + for measurement in self.measurements: + if (running_test_state.test_api.get_measurement( + measurement.name).outcome != core_measurements.Outcome.PASS): + phase_result = PhaseResult.STOP + break + + return phase_result def measures(*measurements: Union[Text, core_measurements.Measurement], diff --git a/openhtf/core/phase_nodes.py b/openhtf/core/phase_nodes.py index b27a982e8..d929bbdfa 100644 --- a/openhtf/core/phase_nodes.py +++ b/openhtf/core/phase_nodes.py @@ -12,7 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -# Lint as: python3 """Contains the abstract interfaces for phase nodes.""" import abc diff --git a/openhtf/core/test_descriptor.py b/openhtf/core/test_descriptor.py index 43e7e3278..3e1e7ef57 100644 --- a/openhtf/core/test_descriptor.py +++ b/openhtf/core/test_descriptor.py @@ -46,15 +46,17 @@ from openhtf.core import test_record as htf_test_record from openhtf.core import test_state -from openhtf.util import conf +from openhtf.util import configuration from openhtf.util import console_output from openhtf.util import logs import six +CONF = configuration.CONF + _LOG = logging.getLogger(__name__) -conf.declare( +CONF.declare( 'capture_source', description=textwrap.dedent( """Whether to capture the source of phases and the test module. This @@ -65,6 +67,10 @@ default_value=False) +class MeasurementNotFoundError(Exception): + """Raised when test measurement not found.""" + + class AttachmentNotFoundError(Exception): """Raised when test attachment not found.""" @@ -100,7 +106,7 @@ def create_arg_parser(add_help: bool = False) -> argparse.ArgumentParser: parser = argparse.ArgumentParser( 'OpenHTF-based testing', parents=[ - conf.ARG_PARSER, + CONF.ARG_PARSER, console_output.ARG_PARSER, logs.ARG_PARSER, phase_executor.ARG_PARSER, @@ -153,7 +159,7 @@ def __init__(self, *nodes: phase_descriptor.PhaseCallableOrNodeT, htf_test_record.CodeInfo.uncaptured(), metadata) - if conf.capture_source: + if CONF.capture_source: # Copy the phases with the real CodeInfo for them. self._test_desc.phase_sequence = ( self._test_desc.phase_sequence.load_code_info()) @@ -238,7 +244,7 @@ def configure(self, **kwargs: Any) -> None: # side effects. known_args, _ = create_arg_parser(add_help=True).parse_known_args() if known_args.config_help: - sys.stdout.write(conf.help_text) + sys.stdout.write(CONF.help_text) sys.exit(0) logs.configure_logging() for key, value in six.iteritems(kwargs): @@ -305,7 +311,7 @@ def execute(self, # Snapshot some things we care about and store them. self._test_desc.metadata['test_name'] = self._test_options.name - self._test_desc.metadata['config'] = conf._asdict() + self._test_desc.metadata['config'] = CONF._asdict() self.last_run_time_millis = util.time_millis() if isinstance(test_start, types.LambdaType): @@ -318,7 +324,7 @@ def trigger_phase(test): else: trigger = test_start - if conf.capture_source: + if CONF.capture_source: trigger.code_info = htf_test_record.CodeInfo.for_function(trigger.func) self._executor = test_executor.TestExecutor( @@ -578,6 +584,29 @@ def get_measurement( """ return self._running_test_state.get_measurement(measurement_name) + def get_measurement_strict( + self, + measurement_name: Text) -> test_state.ImmutableMeasurement: + """Get a copy of the test measurement from current or previous phase. + + Measurement and phase name uniqueness is not enforced, so this method will + return the value of the most recent measurement recorded. + + Args: + measurement_name: str of the measurement name + + Returns: + an ImmutableMeasurement. + + Raises: + MeasurementNotFoundError: Thrown when the test measurement is not found. + """ + measurement = self._running_test_state.get_measurement(measurement_name) + if measurement is None: + raise MeasurementNotFoundError( + f'Failed to find test measurement {measurement_name}') + return measurement + def get_attachment( self, attachment_name: Text) -> Optional[htf_test_record.Attachment]: """Get a copy of an attachment from current or previous phases. diff --git a/openhtf/core/test_executor.py b/openhtf/core/test_executor.py index 2a4ca4b6e..b2f901b25 100644 --- a/openhtf/core/test_executor.py +++ b/openhtf/core/test_executor.py @@ -34,21 +34,23 @@ from openhtf.core import phase_nodes from openhtf.core import test_record from openhtf.core import test_state -from openhtf.util import conf +from openhtf.util import configuration from openhtf.util import threads +CONF = configuration.CONF + if TYPE_CHECKING: from openhtf.core import test_descriptor # pylint: disable=g-import-not-at-top _LOG = logging.getLogger(__name__) -conf.declare( +CONF.declare( 'cancel_timeout_s', default_value=2, description='Timeout (in seconds) when the test has been cancelled' 'to wait for the running phase to exit.') -conf.declare( +CONF.declare( 'stop_on_first_failure', default_value=False, description='Stop current test execution and return Outcome FAIL' @@ -277,7 +279,7 @@ def _stop_phase_executor(self, force: bool = False) -> None: # If locked, teardown phases are running, so do not cancel those. return try: - phase_exec.stop(timeout_s=conf.cancel_timeout_s) + phase_exec.stop(timeout_s=CONF.cancel_timeout_s) # Resetting so phase_exec can run teardown phases. phase_exec.reset_stop() finally: @@ -318,7 +320,7 @@ def _execute_phase(self, phase: phase_descriptor.PhaseDescriptor, self._phase_profile_stats.append(profile_stats) if (self.test_state.test_options.stop_on_first_failure or - conf.stop_on_first_failure): + CONF.stop_on_first_failure): # Stop Test on first measurement failure current_phase_result = self.test_state.test_record.phases[ len(self.test_state.test_record.phases) - 1] diff --git a/openhtf/core/test_record.py b/openhtf/core/test_record.py index 047eede28..56461dcd5 100644 --- a/openhtf/core/test_record.py +++ b/openhtf/core/test_record.py @@ -24,12 +24,14 @@ import enum # pylint: disable=g-bad-import-order from openhtf import util -from openhtf.util import conf +from openhtf.util import configuration from openhtf.util import data from openhtf.util import logs import six +CONF = configuration.CONF + if TYPE_CHECKING: from openhtf.core import diagnoses_lib # pylint: disable=g-import-not-at-top from openhtf.core import measurements as htf_measurements # pylint: disable=g-import-not-at-top @@ -37,7 +39,7 @@ from openhtf.core import phase_executor # pylint: disable=g-import-not-at-top from openhtf.core import phase_branches # pylint: disable=g-import-not-at-top -conf.declare( +CONF.declare( 'attachments_directory', default_value=None, description='Directory where temprorary files can be safely stored.') @@ -72,16 +74,19 @@ class Attachment(object): sha1: str, SHA-1 hash of the data. _file: Temporary File containing the data. data: property that reads the data from the temporary file. + size: Number of bytes of data in the file """ mimetype = attr.ib(type=Text) sha1 = attr.ib(type=Text) _filename = attr.ib(type=Text) + size = attr.ib(type=int) def __init__(self, contents: Union[Text, bytes], mimetype: Text): contents = six.ensure_binary(contents) self.mimetype = mimetype self.sha1 = hashlib.sha1(contents).hexdigest() + self.size = len(contents) self._filename = self._create_temp_file(contents) def __del__(self): @@ -89,7 +94,7 @@ def __del__(self): def _create_temp_file(self, contents: bytes) -> Text: with tempfile.NamedTemporaryFile( - 'w+b', dir=conf.attachments_directory, delete=False) as tf: + 'w+b', dir=CONF.attachments_directory, delete=False) as tf: tf.write(contents) return tf.name @@ -195,7 +200,7 @@ def __attrs_post_init__(self) -> None: # Cache data that does not change during execution. # Cache the metadata config so it does not recursively copied over and over # again. - self._cached_config_from_metadata = self.metadata.get('config') + self._cached_config_from_metadata = self.metadata.get('config') # pytype: disable=annotation-type-mismatch self._cached_record = { 'station_id': data.convert_to_base_types(self.station_id), 'code_info': data.convert_to_base_types(self.code_info), diff --git a/openhtf/core/test_state.py b/openhtf/core/test_state.py index 015dd9bbb..805f87900 100644 --- a/openhtf/core/test_state.py +++ b/openhtf/core/test_state.py @@ -44,7 +44,7 @@ from openhtf.core import phase_descriptor from openhtf.core import phase_executor from openhtf.core import test_record -from openhtf.util import conf +from openhtf.util import configuration from openhtf.util import data from openhtf.util import logs from openhtf.util import units @@ -52,10 +52,12 @@ import six from typing_extensions import Literal +CONF = configuration.CONF + if TYPE_CHECKING: from openhtf.core import test_descriptor # pylint: disable=g-import-not-at-top -conf.declare( +CONF.declare( 'allow_unset_measurements', default_value=False, description='If True, unset measurements do not cause Tests to ' @@ -65,7 +67,7 @@ # conf.load(station_id='My_OpenHTF_Station'), or alongside other configs loaded # with conf.load_from_dict({..., 'station_id': 'My_Station'}). If none of those # are provided then we'll fall back to the machine's hostname. -conf.declare( +CONF.declare( 'station_id', 'The name of this test station', default_value=socket.gethostname()) @@ -76,7 +78,7 @@ class _Infer(enum.Enum): # Sentinel value indicating that the mimetype should be inferred. -INFER_MIMETYPE = _Infer.INFER +INFER_MIMETYPE: Literal[_Infer.INFER] = _Infer.INFER MimetypeT = Union[None, Literal[INFER_MIMETYPE], Text] @@ -170,7 +172,7 @@ def __init__(self, test_desc: 'test_descriptor.TestDescriptor', self.test_record = test_record.TestRecord( dut_id=None, - station_id=conf.station_id, + station_id=CONF.station_id, code_info=test_desc.code_info, start_time_millis=0, # Copy metadata so we don't modify test_desc. @@ -637,7 +639,7 @@ def set_subtest_name(self, subtest_name: Text) -> None: @property def marginal(self) -> Optional[phase_executor.PhaseExecutionOutcome]: - return self.phase_record.marginal + return self.phase_record.marginal # pytype: disable=bad-return-type # bind-properties @marginal.setter def marginal(self, marginal: bool): @@ -740,7 +742,7 @@ def _finalize_measurements(self) -> None: def _measurements_pass(self) -> bool: allowed_outcomes = {measurements.Outcome.PASS} - if conf.allow_unset_measurements: + if CONF.allow_unset_measurements: allowed_outcomes.add(measurements.Outcome.UNSET) return all(meas.outcome in allowed_outcomes diff --git a/openhtf/output/callbacks/mfg_inspector.py b/openhtf/output/callbacks/mfg_inspector.py index 900785961..45c06eda5 100644 --- a/openhtf/output/callbacks/mfg_inspector.py +++ b/openhtf/output/callbacks/mfg_inspector.py @@ -1,22 +1,17 @@ """Output and/or upload a TestRun or MfgEvent proto for mfg-inspector.com. """ -import copy import json import logging import threading import time -from typing import Any, Dict import zlib import httplib2 import oauth2client.client -from openhtf import util -from openhtf.core import test_record from openhtf.output import callbacks from openhtf.output.proto import guzzle_pb2 -from openhtf.output.proto import mfg_event_pb2 from openhtf.output.proto import test_runs_converter import six from six.moves import range @@ -61,7 +56,7 @@ def _send_mfg_inspector_request(envelope_data, credentials, destination_url): def send_mfg_inspector_data(inspector_proto, credentials, destination_url, payload_type): """Upload MfgEvent to steam_engine.""" - envelope = guzzle_pb2.TestRunEnvelope() + envelope = guzzle_pb2.TestRunEnvelope() # pytype: disable=module-attr # gen-stub-imports envelope.payload = zlib.compress(inspector_proto.SerializeToString()) envelope.payload_type = payload_type envelope_data = envelope.SerializeToString() @@ -142,12 +137,6 @@ class MfgInspector(object): # saving to disk via save_to_disk. _default_filename_pattern = None - # Cached last partial upload of the run's MfgEvent. - _cached_partial_proto = None - - # Partial proto fully uploaded. - _partial_proto_upload_complete = False - def __init__(self, user=None, keydata=None, @@ -209,44 +198,6 @@ def _convert(self, test_record_obj): self._cached_params[param] = getattr(test_record_obj, param) return self._cached_proto - def _get_blobref_from_cache(self, attachment_name: str): - """Gets the existing_blobref if attachment was already uploaded.""" - if not self._cached_partial_proto: - return None - - for attachment in self._cached_partial_proto.attachment: - if (attachment.name == attachment_name and - attachment.HasField('existing_blobref')): - return attachment.existing_blobref - - def _get_blobref_from_reply(self, reply: Dict[str, Any], - attachment_name: str): - """Gets the existing_blobref if attachment was already uploaded.""" - for item in reply['extendedParameters']: - if (item['name'] == attachment_name and 'blobRef' in item): - return item['blobRef'] - - def _update_attachments_from_cache(self, proto: mfg_event_pb2.MfgEvent): - """Replaces attachments binary values with blobrefs when applicable.""" - for attachment in proto.attachment: - if attachment.HasField('value_binary'): - blobref = self._get_blobref_from_cache(attachment.name) - if blobref: - attachment.ClearField('value') - attachment.existing_blobref = blobref - - def _update_attachments_from_reply(self, proto: mfg_event_pb2.MfgEvent): - """Replaces attachments binary values with blorrefs when applicable.""" - reply = json.loads(self.upload_result['lite_test_run']) - for attachment in proto.attachment: - if attachment.HasField('value_binary'): - literun_blobref = self._get_blobref_from_reply(reply, attachment.name) - if literun_blobref: - attachment.ClearField('value') - attachment.existing_blobref.blob_id = str.encode( - literun_blobref['BlobID']) - attachment.existing_blobref.size = int(literun_blobref['Size']) - def save_to_disk(self, filename_pattern=None): """Returns a callback to convert test record to proto and save to disk.""" if not self._converter: @@ -286,58 +237,6 @@ def upload_callback(test_record_obj): return upload_callback - def partial_upload(self, payload_type: int = guzzle_pb2.COMPRESSED_TEST_RUN): - """Returns a callback to partially upload a test record as a MfgEvent.""" - if not self._converter: - raise RuntimeError( - 'Must set _converter on subclass or via set_converter before calling ' - 'partial_upload.') - - if not self.credentials: - raise RuntimeError('Must provide credentials to use partial_upload ' - 'callback.') - - def partial_upload_callback(test_record_obj: test_record.TestRecord): - if not test_record_obj.end_time_millis: - # We cannot mutate the test_record_obj, so we copy it to add a - # fake end_time_millis which is needed for MfgEvent construction. - try: - tmp_test_record = copy.deepcopy(test_record_obj) - except TypeError: - # This happens when test has errored but the partial_uploader got a - # hold of the test record before it is finalized. We force an errored - # test to be processed with zero deepcopy thus only after - # end_time_mills is set in the test record. - print('Skipping this upload cycle, waiting for test to be finalized') - return {} - tmp_test_record.end_time_millis = util.time_millis() - # Also fake a PASS outcome for now. - tmp_test_record.outcome = test_record.Outcome.PASS - proto = self._convert(tmp_test_record) - proto.test_run_type = mfg_event_pb2.TEST_RUN_PARTIAL - else: - proto = self._convert(test_record_obj) - proto.test_run_type = mfg_event_pb2.TEST_RUN_COMPLETE - # Replaces the attachment payloads already uploaded with their blob_refs. - if (self._cached_partial_proto and - self._cached_partial_proto.start_time_ms == proto.start_time_ms): - # Reads the attachments in the _cached_partial_proto and merge them into - # the proto. - self._update_attachments_from_cache(proto) - # Avoids timing issue whereby last complete upload performed twice. - # This is only for projects that use a partial uploader to mfg-inspector. - if not self._partial_proto_upload_complete: - self.upload_result = send_mfg_inspector_data( - proto, self.credentials, self.destination_url, payload_type) - # Reads the upload_result (a lite_test_run proto) and update the - # attachments blob_refs. - self._update_attachments_from_reply(proto) - if proto.test_run_type == mfg_event_pb2.TEST_RUN_COMPLETE: - self._partial_proto_upload_complete = True - return self.upload_result - - return partial_upload_callback - def set_converter(self, converter): """Set converter callable to convert a OpenHTF tester_record to a proto. diff --git a/openhtf/output/proto/mfg_event.proto b/openhtf/output/proto/mfg_event.proto index f3dc5c156..90e40d9fa 100644 --- a/openhtf/output/proto/mfg_event.proto +++ b/openhtf/output/proto/mfg_event.proto @@ -114,9 +114,26 @@ message Measurement { // A parameter which is extra information from a test run. These values are not // used to pass or fail a test but may be useful when inspecting data. message EventAttachment { + // A stripped, vendor compatible, BlobRef, we convert this to + // blobstore.Blobref on the backend. + message ExistingBlobRef { + optional bytes blob_id = 1; + optional int64 size = 2; + } + required string name = 1; - optional bytes value_binary = 2; + oneof value { + // The binary value of the attachment. Note that the total maximum size for + // all value_binary attachments is 1.9GB per test run. If you need more, + // upload these in chunks as partial test runs. + bytes value_binary = 2; + + // An existing BlobRef already uploaded into SteamEngine. If you upload a + // partial test run, you should get a BlobRef back that you can use to + // populate this. This does not count against the 1.9GB file limit. + ExistingBlobRef existing_blobref = 9; + } optional string description = 3; optional int64 set_time_millis = 4; @@ -128,5 +145,5 @@ message EventAttachment { string mime_type = 7; } - // next tag = 9 + // next tag = 10 } diff --git a/openhtf/output/proto/mfg_event_converter.py b/openhtf/output/proto/mfg_event_converter.py index 89ce78253..2b3af5549 100644 --- a/openhtf/output/proto/mfg_event_converter.py +++ b/openhtf/output/proto/mfg_event_converter.py @@ -8,13 +8,15 @@ """ import collections +import dataclasses +import datetime import itertools import json import logging import numbers import os import sys -from typing import Tuple +from typing import Mapping, Optional, Tuple from openhtf.core import measurements from openhtf.core import test_record as htf_test_record @@ -49,6 +51,20 @@ 'ERROR': measurements.Outcome.UNSET } +_GIBI_BYTE_TO_BASE = 1 << 30 +MAX_TOTAL_ATTACHMENT_BYTES = int(1.9 * _GIBI_BYTE_TO_BASE) + +_LOGGER = logging.getLogger(__name__) + + +@dataclasses.dataclass(eq=True, frozen=True) # Ensures __hash__ is generated. +class AttachmentCacheKey: + name: str + size: int + + +AttachmentCacheT = Mapping[AttachmentCacheKey, mfg_event_pb2.EventAttachment] + def _measurement_outcome_to_test_run_status_name(outcome: measurements.Outcome, marginal: bool) -> str: @@ -73,7 +89,10 @@ def _lazy_load_units_by_code(): UNITS_BY_CODE[unit.code] = unit -def mfg_event_from_test_record(record): +def mfg_event_from_test_record( + record: htf_test_record.TestRecord, + attachment_cache: Optional[AttachmentCacheT] = None, +) -> mfg_event_pb2.MfgEvent: """Convert an OpenHTF TestRecord to an MfgEvent proto. Most fields are copied over directly and some are pulled out of metadata @@ -92,6 +111,8 @@ def mfg_event_from_test_record(record): Args: record: An OpenHTF TestRecord. + attachment_cache: Provides a lookup to get EventAttachment protos for + already uploaded (or converted) attachments. Returns: An MfgEvent proto representing the given test record. @@ -109,9 +130,10 @@ def mfg_event_from_test_record(record): for assembly_event in record.metadata['assembly_events']: mfg_event.assembly_events.add().CopyFrom(assembly_event) convert_multidim_measurements(record.phases) - phase_copier = PhaseCopier(phase_uniquizer(record.phases)) + phase_copier = PhaseCopier(phase_uniquizer(record.phases), attachment_cache) phase_copier.copy_measurements(mfg_event) - phase_copier.copy_attachments(mfg_event) + if not phase_copier.copy_attachments(mfg_event): + mfg_event.test_run_type = mfg_event_pb2.TEST_RUN_PARTIAL return mfg_event @@ -190,15 +212,20 @@ def _convert_object_to_json(obj): # pylint: disable=missing-function-docstring # measurement or in the logs, we have to be careful and convert everything # to unicode, merge, then encode to UTF-8 to put it into the proto. - def bytes_handler(o): + def unsupported_type_handler(o): # For bytes, JSONEncoder will fallback to this function to convert to str. if six.PY3 and isinstance(o, six.binary_type): return six.ensure_str(o, encoding='utf-8', errors='replace') + elif isinstance(o, (datetime.date, datetime.datetime)): + return o.isoformat() else: raise TypeError(repr(o) + ' is not JSON serializable') json_encoder = json.JSONEncoder( - sort_keys=True, indent=2, ensure_ascii=False, default=bytes_handler) + sort_keys=True, + indent=2, + ensure_ascii=False, + default=unsupported_type_handler) return json_encoder.encode(obj).encode('utf-8', errors='replace') @@ -311,7 +338,7 @@ def multidim_measurement_to_attachment(name, measurement): 'dimensions': dims, 'value': value, }) - attachment = htf_test_record.Attachment(data, test_runs_pb2.MULTIDIM_JSON) + attachment = htf_test_record.Attachment(data, test_runs_pb2.MULTIDIM_JSON) # pytype: disable=wrong-arg-types # gen-stub-imports return attachment @@ -343,8 +370,13 @@ def convert_multidim_measurements(all_phases): class PhaseCopier(object): """Copies measurements and attachments to an MfgEvent.""" - def __init__(self, all_phases): + def __init__(self, + all_phases, + attachment_cache: Optional[AttachmentCacheT] = None): self._phases = all_phases + self._using_partial_uploads = attachment_cache is not None + self._attachment_cache = ( + attachment_cache if self._using_partial_uploads else {}) def copy_measurements(self, mfg_event): for phase in self._phases: @@ -417,11 +449,47 @@ def _copy_unidimensional_measurement(self, phase, name, measurement, else: mfg_measurement.description += '\nValidator: ' + str(validator) - def copy_attachments(self, mfg_event): + def copy_attachments(self, mfg_event: mfg_event_pb2.MfgEvent) -> bool: + """Copies attachments into the MfgEvent from the configured phases. + + If partial uploads are in use (indicated by configuring this class instance + with an Attachments cache), this function will exit early if the total + attachment data size exceeds a reasonable threshold to avoid the 2 GB + serialized proto limit. + + Args: + mfg_event: The MfgEvent to copy into. + + Returns: + True if all attachments are copied and False if only some attachments + were copied (only possible when partial uploads are being used). + """ + value_copied_attachment_sizes = [] + skipped_attachment_names = [] for phase in self._phases: for name, attachment in sorted(phase.attachments.items()): - self._copy_attachment(name, attachment.data, attachment.mimetype, - mfg_event) + size = attachment.size + attachment_cache_key = AttachmentCacheKey(name, size) + if attachment_cache_key in self._attachment_cache: + mfg_event.attachment.append( + self._attachment_cache[attachment_cache_key]) + else: + at_least_one_attachment_for_partial_uploads = ( + self._using_partial_uploads and value_copied_attachment_sizes) + if at_least_one_attachment_for_partial_uploads and ( + sum(value_copied_attachment_sizes) + size > + MAX_TOTAL_ATTACHMENT_BYTES): + skipped_attachment_names.append(name) + else: + value_copied_attachment_sizes.append(size) + self._copy_attachment(name, attachment.data, attachment.mimetype, + mfg_event) + if skipped_attachment_names: + _LOGGER.info( + 'Skipping upload of %r attachments for this cycle. ' + 'To avoid max proto size issues.', skipped_attachment_names) + return False + return True def _copy_attachment(self, name, data, mimetype, mfg_event): """Copies an attachment to mfg_event.""" diff --git a/openhtf/output/proto/test_runs_converter.py b/openhtf/output/proto/test_runs_converter.py index 467985f7d..873b3de8b 100644 --- a/openhtf/output/proto/test_runs_converter.py +++ b/openhtf/output/proto/test_runs_converter.py @@ -331,7 +331,7 @@ def test_run_from_test_record(record): Returns: An instance of the TestRun proto for the given record. """ - testrun = test_runs_pb2.TestRun() + testrun = test_runs_pb2.TestRun() # pytype: disable=module-attr # gen-stub-imports _populate_header(record, testrun) _attach_json(record, testrun) diff --git a/openhtf/output/servers/station_server.py b/openhtf/output/servers/station_server.py index 899cff6a0..9feb4bda7 100644 --- a/openhtf/output/servers/station_server.py +++ b/openhtf/output/servers/station_server.py @@ -19,7 +19,7 @@ import openhtf from openhtf.output.servers import pub_sub from openhtf.output.servers import web_gui_server -from openhtf.util import conf +from openhtf.util import configuration from openhtf.util import data from openhtf.util import functions from openhtf.util import multicast @@ -27,6 +27,8 @@ import six import sockjs.tornado +CONF = configuration.CONF + STATION_SERVER_TYPE = 'station' MULTICAST_QUERY = 'OPENHTF_DISCOVERY' @@ -40,21 +42,21 @@ _WAIT_FOR_ANY_EVENT_POLL_S = 0.05 _WAIT_FOR_EXECUTING_TEST_POLL_S = 0.1 -conf.declare( +CONF.declare( 'frontend_throttle_s', default_value=_DEFAULT_FRONTEND_THROTTLE_S, description=('Min wait time between successive updates to the ' 'frontend.')) -conf.declare( +CONF.declare( 'station_server_port', default_value=0, description=('Port on which to serve the app. If set to zero (the ' 'default) then an arbitrary port will be chosen.')) # These have default values in openhtf.util.multicast.py. -conf.declare('station_discovery_address') -conf.declare('station_discovery_port') -conf.declare('station_discovery_ttl') +CONF.declare('station_discovery_address') +CONF.declare('station_discovery_port') +CONF.declare('station_discovery_ttl') def _get_executing_test(): @@ -171,7 +173,7 @@ def run(self): _LOG.exception('Error in station watcher: %s', error) time.sleep(1) - @functions.call_at_most_every(float(conf.frontend_throttle_s)) + @functions.call_at_most_every(float(CONF.frontend_throttle_s)) def _poll_for_update(self): """Call the callback with the current test state, then wait for a change.""" test, test_state = _get_executing_test() @@ -238,7 +240,7 @@ def _make_message(cls): host_port = '%s:%s' % (host, cls.port) return { host_port: { - 'station_id': conf.station_id, # From openhtf.core.test_state. + 'station_id': CONF.station_id, # From openhtf.core.test_state. 'host': host, 'port': cls.port, 'status': 'ONLINE', @@ -501,9 +503,9 @@ class StationMulticast(multicast.MulticastListener): def __init__(self, station_server_port): # These have default values in openhtf.util.multicast.py. kwargs = { - attr: conf['station_discovery_%s' % attr] + attr: CONF['station_discovery_%s' % attr] for attr in ('address', 'port', 'ttl') - if 'station_discovery_%s' % attr in conf + if 'station_discovery_%s' % attr in CONF } super(StationMulticast, self).__init__(self._make_message, **kwargs) self.station_server_port = station_server_port @@ -530,7 +532,7 @@ def _make_message(self, message): return json.dumps({ 'cell': cell, 'port': self.station_server_port, - 'station_id': conf.station_id, # From openhtf.core.test_state. + 'station_id': CONF.station_id, # From openhtf.core.test_state. 'test_description': test_description, 'test_name': test_name, }) @@ -569,7 +571,7 @@ def __init__(self, history_path=None): tornado_logger.addHandler(logging.NullHandler()) # Bind port early so that the correct port number can be used in the routes. - sockets, port = web_gui_server.bind_port(int(conf.station_server_port)) + sockets, port = web_gui_server.bind_port(int(CONF.station_server_port)) # Set up the station watcher. station_watcher = StationWatcher(StationPubSub.publish_update) diff --git a/openhtf/output/web_gui/src/app/plugs/user-input-plug.component.ts b/openhtf/output/web_gui/src/app/plugs/user-input-plug.component.ts index 81c278432..993376bf2 100644 --- a/openhtf/output/web_gui/src/app/plugs/user-input-plug.component.ts +++ b/openhtf/output/web_gui/src/app/plugs/user-input-plug.component.ts @@ -2,20 +2,26 @@ * Component representing the UserInput plug. */ -import { trigger } from '@angular/animations'; +import {trigger} from '@angular/animations'; +import {Component, ElementRef} from '@angular/core'; +import {Http} from '@angular/http'; -import { Component, ElementRef, SecurityContext } from '@angular/core'; -import { Http } from '@angular/http'; -import { DomSanitizer, SafeHtml } from '@angular/platform-browser'; +import {ConfigService} from '../core/config.service'; +import {FlashMessageService} from '../core/flash-message.service'; +import {washIn} from '../shared/animations'; -import { ConfigService } from '../core/config.service'; -import { FlashMessageService } from '../core/flash-message.service'; -import { washIn } from '../shared/animations'; +import {BasePlug} from './base-plug'; -import { BasePlug } from './base-plug'; - -const plugName = 'openhtf.plugs.user_input.UserInput'; +const PLUG_NAME = 'openhtf.plugs.user_input.UserInput'; +/** + * @param default: the default prompt string for element. + * @param error: the error message for element. + * @param id: the identifier for the element. + * @param message: the message to display to the operator. + * @param text-input: the text input provided by the operator. + * @param image-url: url to embedded image in the element. + */ export declare interface UserInputPlugState { default?: string; // Used by ui_plugs.advanced_user_input.AdvancedUserInput. error?: string; // Used by ui_plugs.advanced_user_input.AdvancedUserInput. @@ -25,6 +31,10 @@ export declare interface UserInputPlugState { 'image-url': string; } +/** + * @param lastPromptId: identifier of last prompt. + * @param lastPromptHtml: html contents of last prompt. + */ @Component({ animations: [trigger('animateIn', washIn)], selector: 'htf-user-input-plug', @@ -37,8 +47,8 @@ export class UserInputPlugComponent extends BasePlug { constructor( config: ConfigService, http: Http, flashMessage: FlashMessageService, - private ref: ElementRef, private sanitizer: DomSanitizer) { - super(plugName, config, http, flashMessage); + private ref: ElementRef) { + super(PLUG_NAME, config, http, flashMessage); } get error() { @@ -50,10 +60,9 @@ export class UserInputPlugComponent extends BasePlug { // Run this when a new prompt is set. if (this.lastPromptId !== state.id) { this.lastPromptId = state.id; - const safeHtml = - this.sanitizer.sanitize(SecurityContext.HTML, state.message) - .replace(/ /g, '
'); // Convert newlines. - this.lastPromptHtml = this.sanitizer.bypassSecurityTrustHtml(safeHtml); + const convertedHtml = + state.message.replace(/ /g, '
'); // Convert newlines. + this.lastPromptHtml = convertedHtml; this.focusSelf(); if (state.default) { this.setResponse(state.default); diff --git a/openhtf/output/web_gui/src/app/stations/station/station.component.spec.ts b/openhtf/output/web_gui/src/app/stations/station/station.component.spec.ts index df569300d..16c747c56 100644 --- a/openhtf/output/web_gui/src/app/stations/station/station.component.spec.ts +++ b/openhtf/output/web_gui/src/app/stations/station/station.component.spec.ts @@ -3,7 +3,7 @@ */ import {Component, DebugElement, Input} from '@angular/core'; -import {async, ComponentFixture, TestBed} from '@angular/core/testing'; +import {ComponentFixture, TestBed, waitForAsync} from '@angular/core/testing'; import {ConfigService} from '../../core/config.service'; import {Station, StationStatus} from '../../shared/models/station.model'; @@ -103,7 +103,7 @@ describe('station component', () => { mockActiveTest = {dutId: 'active-dut-id'}; } - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: (testWidgetStubs as Array<{}>).concat([ HistoryComponentStub, diff --git a/openhtf/plugs/__init__.py b/openhtf/plugs/__init__.py index 81d6ab23e..c071a33f8 100644 --- a/openhtf/plugs/__init__.py +++ b/openhtf/plugs/__init__.py @@ -20,26 +20,24 @@ is-ready check. """ -import collections import logging -from typing import Any, Callable, Dict, Iterable, List, Optional, Sequence, Set, Text, Tuple, Type, TypeVar, Union +from typing import Any, Callable, Dict, Iterable, List, Optional, Set, Text, Tuple, Type, TypeVar, Union import attr -from openhtf import util from openhtf.core import base_plugs from openhtf.core import phase_descriptor -from openhtf.util import classproperty -from openhtf.util import conf +from openhtf.util import configuration from openhtf.util import data -from openhtf.util import logs from openhtf.util import threads import six +CONF = configuration.CONF + _LOG = logging.getLogger(__name__) _BASE_PLUGS_LOG = base_plugs._LOG # pylint: disable=protected-access -conf.declare( +CONF.declare( 'plug_teardown_timeout_s', default_value=0, description='Timeout (in seconds) for each plug tearDown function if > 0; ' @@ -343,8 +341,8 @@ def tear_down_plugs(self) -> None: thread = _PlugTearDownThread(plug_instance, name=name) thread.start() timeout_s = ( - conf.plug_teardown_timeout_s - if conf.plug_teardown_timeout_s else None) + CONF.plug_teardown_timeout_s + if CONF.plug_teardown_timeout_s else None) thread.join(timeout_s) if thread.is_alive(): thread.kill() diff --git a/openhtf/plugs/generic/serial_collection.py b/openhtf/plugs/generic/serial_collection.py index f640a45e0..754709f2a 100644 --- a/openhtf/plugs/generic/serial_collection.py +++ b/openhtf/plugs/generic/serial_collection.py @@ -21,7 +21,9 @@ from typing import Optional from openhtf.core import base_plugs -from openhtf.util import conf +from openhtf.util import configuration + +CONF = configuration.CONF try: # pylint: disable=g-import-not-at-top @@ -33,11 +35,11 @@ 'e.g. via `pip install openhtf[serial_collection_plug]`.') raise -conf.declare( +CONF.declare( 'serial_collection_port', description='Port on which to collect serial data.', default_value='/dev/ttyACM0') -conf.declare( +CONF.declare( 'serial_collection_baud', description='Baud rate for serial data collection.', default_value=115200) @@ -61,7 +63,7 @@ class SerialCollectionPlug(base_plugs.BasePlug): _collect = None # type: bool _collection_thread = None # type: Optional[threading.Thread] - @conf.inject_positional_args + @CONF.inject_positional_args def __init__(self, serial_collection_port, serial_collection_baud): super(SerialCollectionPlug, self).__init__() # Instantiate the port with no name, then add the name, so it won't be diff --git a/openhtf/plugs/usb/__init__.py b/openhtf/plugs/usb/__init__.py index a2fad00bc..7edbb02d2 100644 --- a/openhtf/plugs/usb/__init__.py +++ b/openhtf/plugs/usb/__init__.py @@ -37,14 +37,16 @@ def MyPhase(test, adb): from openhtf.plugs.usb import local_usb from openhtf.plugs.usb import usb_exceptions from openhtf.plugs.user_input import prompt_for_test_start -from openhtf.util import conf +from openhtf.util import configuration from openhtf.util import functions +CONF = configuration.CONF + _LOG = logging.getLogger(__name__) -conf.declare('libusb_rsa_key', 'A private key file for use by libusb auth.') -conf.declare('remote_usb', 'ethersync or other') -conf.declare('ethersync', 'ethersync configuration') +CONF.declare('libusb_rsa_key', 'A private key file for use by libusb auth.') +CONF.declare('remote_usb', 'ethersync or other') +CONF.declare('ethersync', 'ethersync configuration') @functions.call_once @@ -77,10 +79,10 @@ def _open_usb_handle(serial_number=None, **kwargs): Instance of UsbHandle. """ init_dependent_flags() - remote_usb = conf.remote_usb + remote_usb = CONF.remote_usb if remote_usb: if remote_usb.strip() == 'ethersync': - device = conf.ethersync + device = CONF.ethersync try: mac_addr = device['mac_addr'] port = device['plug_port'] @@ -117,8 +119,8 @@ class AdbPlug(base_plugs.BasePlug): serial_number = None def __init__(self): - if conf.libusb_rsa_key: - self._rsa_keys = [adb_device.M2CryptoSigner(conf.libusb_rsa_key)] + if CONF.libusb_rsa_key: + self._rsa_keys = [adb_device.M2CryptoSigner(CONF.libusb_rsa_key)] else: self._rsa_keys = None self._device = None diff --git a/openhtf/util/conf.py b/openhtf/util/conf.py index 61d825064..8baa8c733 100644 --- a/openhtf/util/conf.py +++ b/openhtf/util/conf.py @@ -11,653 +11,20 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -"""Interface to OpenHTF configuration files. +"""Legacy interface to OpenHTF configuration. -As a matter of convention, OpenHTF configuration files should contain values -which are specific to an individual station (not station type). This is -intended to provide a means to decouple deployment of test code from -station-specific configuration or calibration. +Prefer using CONF from openhtf.util.configuration as an object: + from openhtf.util import configuration -Examples of the types of values commonly found in the configuration are -physical port names, IP addresses, calibrated light/sound levels, etc. -Configuration values should not be used to determine test flow, or to control -debug output. + CONF = configuration.CONF -Config keys must be declared as in the following example, where default_value -and description are optional: - - from openhtf.util import conf - - conf.declare('antimatter_intermix_constant', - default_value=3.14159, - description='Intermix constant calibrated for our warp core.') - -Declared keys can be accessed directly as attributes of the conf module. To -avoid naming conflicts, configuration keys must begin with a lowercase letter. -They may also be accessed by treating the conf module as a dictionary, but this -method is discouraged and should only be used in favor of getattr(). - - from openhtf.util import conf - - warp_core.SetIntermixConstant(conf.antimatter_intermix_constant) - - # An example of when you might use dict-like access. - for idx in range(5): - warp_core.SetDilithiumRatio(idx, conf['dilthium_ratio_%s' % idx]) - -Another common mechanism for obtaining configuration values is to use the -conf.inject_positional_args decorator: - - from openhtf.util import conf - - @conf.inject_positional_args - def ModifyThePhaseVariance(antimatter_intermix_constant, phase_variance): - return antimatter_intermix_constant * phase_variance - - # antimatter_intermix_constant will be taken from the configuration value. - x = ModifyThePhaseVariance(phase_variance=2.71828) - -Decorating a function with conf.inject_positional_args forces all other -arguments to be passed by keyword in order to avoid ambiguity in the values of -positional args. Values passed via keyword that also exist in the config will -override config values and log a warning message. Keyword args in the function -declaration will not be overridden (because it would be ambiguous which default -to use), and any overlap in keyword arg names and config keys will result in a -warning message. - -If the configuration key is declared but no default_value is provided and no -value has been loaded, then no value will be passed, and a TypeError will be -raised unless the value is passed via keyword. Essentially, if `keyword_arg in -conf` evaluates to True, then that keyword arg will be provided from the -configuration unless overridden in the kwargs passed to the function. Otherwise -keyword_arg must be passed via kwargs at function invocation time. - -The conf module supports 'in' checks, where `key in conf` will evaluate to True -if conf[key] would successfully provide a value. That is, if either a value -has been loaded or a default_value was declared. - -Configuration values may be loaded directly or from a yaml or json file. If no -configuration is loaded, default values will still be accessible. Loading a -configuration always overrides default values, but only overrides previously -loaded values if _override=True (default) for the load* method used. Some -examples of how to load a configuration: - - from openhtf.util import conf - - conf.declare('antimatter_intermix_constant') - conf.declare('phase_variance') - - conf.load(antimatter_intermix_constant=3.14, - phase_variance=2.718) - conf.load_from_dict({ - 'antimatter_intermix_constant': 3.14, - 'phase_variance': 2.718, - }) - conf.load_from_file('config.json') - conf.load_from_file('config.yaml') - -Note that any of the load* methods here accept an _override keyword argument -that defaults to True, but may be set False to prevent overriding previously -loaded values. Regardless of whether _override is True or False, a message -will be logged indicating how the duplicate value was handled. - -conf.load_from_file() attempts to parse the filename given as JSON and as YAML, -if neither succeeds, an exception will be raised. In either case, the value -parsed must be a dictionary mapping configuration key to value. Complex -configuration values are discouraged; they should be kept to single values or -lists of values when possible. - -Lastly, configuration values may also be provided via the --config-value flag, -but this is discouraged, and should only be used for debugging purposes. - -Configuration values loaded via commandline flags, either --config-file or ---config-value, are not checked against Declarations. This allows for using -configuration files that are supersets of required configuration. Declarations -are *always* checked upon configuration value access, however, so you still -must declare any keys you wish to use. - -Loaded configuration values may be purged via the reset() method, but this -should only be used for testing purposes. This will reset the configuration -state to what it was before any load* methods were called (defaults loaded -and flag values used, either directly or from --config-file). - -A recommended alternative to using reset() is the @save_and_restore decorator, -which allows you to decorate a function or method so that during execution -of the decorated callable, configuration values are altered (and restored -after execution of that callable). For example: - - conf.load(foo='foo') - - @conf.save_and_restore(foo='bar') - def do_stuff(): - print 'foo has value: ', conf.foo - - print 'foo before call: ', conf.foo - do_stuff() - print 'foo after call: ', conf.foo - -This example prints: - - foo before call: foo - foo has value: bar - foo after call: foo - -This is useful primarily for unittest methods (see util/test.py for specific -examples of unittest usages). Note that config overrides may be specified at -decoration time, but do not have to be: - - @conf.save_and_restore - def do_stuff(): - conf.foo = 'bar' - -This is also valid. The entire configuration is restored to the state it had -upon execution of the decorated callable, regardless of which keys are updated -in the decorator or in the decorated callable. + CONF.declare(...) """ # pytype: skip-file - -import argparse -import enum -import functools -import inspect -import logging import sys -import threading -from typing import Any, Optional, Text - -import attr -from openhtf.util import argv -from openhtf.util import threads -import six -import yaml - -# If provided, --config-file will cause the given file to be load()ed when the -# conf module is initially imported. -ARG_PARSER = argv.module_parser() -ARG_PARSER.add_argument( - '--config-file', - type=argparse.FileType('r'), - help='File from which to load configuration values.') - -ARG_PARSER.add_argument( - '--config-value', - action='append', - default=[], - help='Allows specifying a configuration key=value on the command line. ' - 'The format should be --config-value=key=value. This value will override ' - 'any loaded value, and will be a string.') - - -class Configuration(object): # pylint: disable=too-many-instance-attributes - """A singleton class to replace the 'conf' module. - - This class provides the configuration interface described in the module - docstring. All attribuets/methods must not begin with a lowercase letter so - as to avoid naming conflicts with configuration keys. - """ - - class ConfigurationInvalidError(Exception): - """Indicates the configuration format was invalid or couldn't be read.""" - - class KeyAlreadyDeclaredError(Exception): - """Indicates that a configuration key was already declared.""" - - class UndeclaredKeyError(Exception): - """Indicates that a key was required but not predeclared.""" - - class InvalidKeyError(Exception): - """Raised when an invalid key is declared or accessed.""" - - class UnsetKeyError(Exception): - """Raised when a key value is requested but we have no value for it.""" - - @attr.s(slots=True) - class Declaration(object): - """Record type encapsulating information about a config declaration.""" - - class _DefaultSetting(enum.Enum): - NOT_SET = 0 - - name = attr.ib(type=Text) - description = attr.ib(type=Optional[Text], default=None) - default_value = attr.ib(type=Any, default=_DefaultSetting.NOT_SET) - - @property - def has_default(self) -> bool: - return self.default_value is not self._DefaultSetting.NOT_SET - - __slots__ = ('_logger', '_lock', '_modules', '_declarations', '_flag_values', - '_flags', '_loaded_values', 'ARG_PARSER', '__name__') - - def __init__(self, logger, lock, parser, **kwargs): - """Initializes the configuration state. - - We have to pull everything we need from global scope into here because we - will be swapping out the module with this instance and will lose any global - references. - - Args: - logger: Logger to use for logging messages within this class. - lock: Threading.lock to use for locking access to config values. - parser: the arg parser. - **kwargs: Modules we need to access within this class. - """ - self._logger = logger - self._lock = lock - self._modules = kwargs - self._declarations = {} - self.ARG_PARSER = parser # pylint: disable=invalid-name - - # Parse just the flags we care about, since this happens at import time. - self._flags, _ = parser.parse_known_args() - self._flag_values = {} - - # Populate flag_values from flags now. - self.load_flag_values() - - # Initialize self._loaded_values and load from --config-file if it's set. - self.reset() - - def load_flag_values(self, flags=None): - """Load flag values given from command line flags. - - Args: - flags: An argparse Namespace containing the command line flags. - """ - if flags is None: - flags = self._flags - for keyval in flags.config_value: - k, v = keyval.split('=', 1) - v = self._modules['yaml'].safe_load(v) if isinstance(v, str) else v - - # Force any command line keys and values that are bytes to unicode. - k = k.decode() if isinstance(k, bytes) else k - v = v.decode() if isinstance(v, bytes) else v - - self._flag_values.setdefault(k, v) - - @staticmethod - def _is_valid_key(key): - """Return True if key is a valid configuration key.""" - return key and key[0].islower() - - def __setattr__(self, field, value): - """Provide a useful error when attempting to set a value via setattr().""" - if self._is_valid_key(field): - raise AttributeError("Can't set conf values by attribute, use load()") - # __slots__ is defined above, so this will raise an AttributeError if the - # attribute isn't one we expect; this limits the number of ways to abuse the - # conf module singleton instance. Also note that we can't use super() - # normally here because of the sys.modules swap (Configuration is no longer - # defined, and evaluates to None if used here). - # pylint: disable=bad-super-call - super(type(self), self).__setattr__(field, value) - - # Don't use synchronized on this one, because __getitem__ handles it. - def __getattr__(self, field): - """Get a config value via attribute access.""" - if self._is_valid_key(field): - return self[field] - # Config keys all begin with a lowercase letter, so treat this normally. - raise AttributeError("'%s' object has no attribute '%s'" % - (type(self).__name__, field)) - - @threads.synchronized - def __getitem__(self, item): - """Get a config value via item access. - - Order of precedence is: - - Value provided via --config-value flag. - - Value loaded via load*() methods. - - Default value as declared with conf.declare() - - Args: - item: Config key name to get. - - Raises: - UndeclaredKeyError: If the item was not declared. - UnsetKeyError: When hte config value was not set and has no default. - - Returns: - The config value. - """ - if item not in self._declarations: - raise self.UndeclaredKeyError('Configuration key not declared', item) - - if item in self._flag_values: - if item in self._loaded_values: - self._logger.warning( - 'Overriding loaded value for %s (%s) with flag value: %s', item, - self._loaded_values[item], self._flag_values[item]) - return self._flag_values[item] - if item in self._loaded_values: - return self._loaded_values[item] - if self._declarations[item].has_default: - return self._declarations[item].default_value - - raise self.UnsetKeyError('Configuration value not set and has no default', - item) - - @threads.synchronized - def __contains__(self, name): - """True if we have a value for name.""" - return (name in self._declarations and - (self._declarations[name].has_default or - name in self._loaded_values or name in self._flag_values)) - - @threads.synchronized - def declare(self, name, description=None, **kwargs): - """Declare a configuration key with the given name. - - Args: - name: Configuration key to declare, must not have been already declared. - description: If provided, use this as the description for this key. - **kwargs: Other kwargs to pass to the Declaration, only default_value is - currently supported. - - Raises: - InvalidKeyError: When name is not constructed correctly. - KeyAlreadyDeclaredError: When name has already been defined. - """ - if not self._is_valid_key(name): - raise self.InvalidKeyError( - 'Invalid key name, must begin with a lowercase letter', name) - if name in self._declarations: - raise self.KeyAlreadyDeclaredError('Configuration key already declared', - name) - self._declarations[name] = self.Declaration( - name, description=description, **kwargs) - - @threads.synchronized - def reset(self): - """Reset the loaded state of the configuration to what it was at import. - - Note that this does *not* reset values set by commandline flags or loaded - from --config-file (in fact, any values loaded from --config-file that have - been overridden are reset to their value from --config-file). - """ - # Populate loaded_values with values from --config-file, if it was given. - self._loaded_values = {} - if self._flags.config_file is not None: - self.load_from_file(self._flags.config_file, _allow_undeclared=True) - - def load_from_file(self, yamlfile, _override=True, _allow_undeclared=False): # pylint: disable=invalid-name - """Loads the configuration from a file. - - Parsed contents must be a single dict mapping config key to value. - - Args: - yamlfile: The opened file object to load configuration from. See - load_from_dict() for other args' descriptions. - _override: If True, new values will override previous values. - _allow_undeclared: If True, silently load undeclared keys, otherwise warn - and ignore the value. Typically used for loading config files before - declarations have been evaluated. - - Raises: - ConfigurationInvalidError: If configuration file can't be read, or can't - be parsed as either YAML (or JSON, which is a subset of YAML). - """ - self._logger.info('Loading configuration from file: %s', yamlfile) - - try: - parsed_yaml = self._modules['yaml'].safe_load(yamlfile.read()) - except self._modules['yaml'].YAMLError: - self._logger.exception('Problem parsing YAML') - raise self.ConfigurationInvalidError('Failed to load from %s as YAML' % - yamlfile) - - if not isinstance(parsed_yaml, dict): - # Parsed YAML, but it's not a dict. - raise self.ConfigurationInvalidError( - 'YAML parsed, but wrong type, should be dict', parsed_yaml) - - self._logger.debug('Configuration loaded from file: %s', parsed_yaml) - self.load_from_dict( - parsed_yaml, _override=_override, _allow_undeclared=_allow_undeclared) - - def load(self, _override=True, _allow_undeclared=False, **kwargs): # pylint: disable=invalid-name - """load configuration values from kwargs, see load_from_dict().""" - self.load_from_dict( - kwargs, _override=_override, _allow_undeclared=_allow_undeclared) - - @threads.synchronized - def load_from_dict(self, dictionary, _override=True, _allow_undeclared=False): # pylint: disable=invalid-name - """Loads the config with values from a dictionary instead of a file. - - This is meant for testing and bin purposes and shouldn't be used in most - applications. - - Args: - dictionary: The dictionary containing config keys/values to update. - _override: If True, new values will override previous values. - _allow_undeclared: If True, silently load undeclared keys, otherwise warn - and ignore the value. Typically used for loading config files before - declarations have been evaluated. - """ - undeclared_keys = [] - for key, value in self._modules['six'].iteritems(dictionary): - # Warn in this case. We raise if you try to access a config key that - # hasn't been declared, but we don't raise here so that you can use - # configuration files that are supersets of required configuration for - # any particular test station. - if key not in self._declarations and not _allow_undeclared: - undeclared_keys.append(key) - continue - if key in self._loaded_values: - if _override: - self._logger.info( - 'Overriding previously loaded value for %s (%s) with value: %s', - key, self._loaded_values[key], value) - else: - self._logger.info( - 'Ignoring new value (%s), keeping previous value for %s: %s', - value, key, self._loaded_values[key]) - continue - - # Force any keys and values that are bytes to unicode. - key = key.decode() if isinstance(key, bytes) else key - value = value.decode() if isinstance(value, bytes) else value - - self._loaded_values[key] = value - if undeclared_keys: - self._logger.warning('Ignoring undeclared configuration keys: %s', - undeclared_keys) - - @threads.synchronized - def _asdict(self): - """Create a dictionary snapshot of the current config values.""" - # Start with any default values we have, and override with loaded values, - # and then override with flag values. - retval = { - key: self._declarations[key].default_value - for key in self._declarations - if self._declarations[key].has_default - } - retval.update(self._loaded_values) - # Only update keys that are declared so we don't allow injecting - # un-declared keys via commandline flags. - for key, value in self._modules['six'].iteritems(self._flag_values): - if key in self._declarations: - retval[key] = value - return retval - - def __dict__(self): - return self._asdict() - - @property - def help_text(self): - """Return a string with all config keys and their descriptions.""" - result = [] - for name in sorted(self._declarations): - result.append(name) - result.append('-' * len(name)) - decl = self._declarations[name] - if decl.description: - result.append(decl.description.strip()) - else: - result.append('(no description found)') - if decl.has_default: - result.append('') - quotes = '"' if isinstance(decl.default_value, str) else '' - result.append(' default_value={quotes}{val}{quotes}'.format( - quotes=quotes, val=decl.default_value)) - result.append('') - result.append('') - return '\n'.join(result) - - def save_and_restore(self, _func=None, **config_values): # pylint: disable=invalid-name - """Decorator for saving conf state and restoring it after a function. - - This decorator is primarily for use in tests, where conf keys may be updated - for individual test cases, but those values need to be reverted after the - test case is done. - - Examples: - - conf.declare('my_conf_key') - - @conf.save_and_restore - def MyTestFunc(): - conf.load(my_conf_key='baz') - SomeFuncUnderTestThatUsesMyConfKey() - - conf.load(my_conf_key='foo') - MyTestFunc() - print conf.my_conf_key # Prints 'foo', *NOT* 'baz' - - # Without the save_and_restore decorator, MyTestFunc() would have had the - # side effect of altering the conf value of 'my_conf_key' to 'baz'. - - # Config keys can also be initialized for the context inline at decoration - # time. This is the same as setting them at the beginning of the - # function, but is a little clearer syntax if you know ahead of time what - # config keys and values you need to set. - - @conf.save_and_restore(my_conf_key='baz') - def MyOtherTestFunc(): - print conf.my_conf_key # Prints 'baz' - - MyOtherTestFunc() - print conf.my_conf_key # Prints 'foo' again, for the same reason. - - - Args: - _func: The function to wrap. The returned wrapper will invoke the - function and restore the config to the state it was in at invocation. - **config_values: Config keys can be set inline at decoration time, see - examples. Note that config keys can't begin with underscore, so there - can be no name collision with _func. - - Returns: - Wrapper to replace _func, as per Python decorator semantics. - """ - functools = self._modules['functools'] # pylint: disable=redefined-outer-name - - if not _func: - return functools.partial(self.save_and_restore, **config_values) - - @functools.wraps(_func) - def _saving_wrapper(*args, **kwargs): - saved_config = dict(self._loaded_values) - try: - self.load_from_dict(config_values) - return _func(*args, **kwargs) - finally: - self._loaded_values = saved_config # pylint: disable=attribute-defined-outside-init - - return _saving_wrapper - - def inject_positional_args(self, method): - """Decorator for injecting positional arguments from the configuration. - - This decorator wraps the given method, so that any positional arguments are - passed with corresponding values from the configuration. The name of the - positional argument must match the configuration key. - - Keyword arguments are *NEVER* modified, even if their names match - configuration keys. Avoid naming keyword args names that are also - configuration keys to avoid confusion. - - Additional positional arguments may be used that do not appear in the - configuration, but those arguments *MUST* be specified as keyword arguments - upon invocation of the method. This is to avoid ambiguity in which - positional arguments are getting which values. - - Args: - method: The method to wrap. - - Returns: - A wrapper that, when invoked, will call the wrapped method, passing in - configuration values for positional arguments. - """ - inspect = self._modules['inspect'] # pylint: disable=redefined-outer-name - six = self._modules['six'] # pylint: disable=redefined-outer-name - if six.PY3: - argspec = inspect.getfullargspec(method) - else: - argspec = inspect.getargspec(method) # pylint: disable=deprecated-method - - # Index in argspec.args of the first keyword argument. This index is a - # negative number if there are any kwargs, or 0 if there are no kwargs. - keyword_arg_index = -1 * len(argspec.defaults or []) - arg_names = argspec.args[:keyword_arg_index or None] - kwarg_names = argspec.args[len(arg_names):] - functools = self._modules['functools'] # pylint: disable=redefined-outer-name - - # Create the actual method wrapper, all we do is update kwargs. Note we - # don't pass any *args through because there can't be any - we've filled - # them all in with values from the configuration. Any positional args that - # are missing from the configuration *must* be explicitly specified as - # kwargs. - @functools.wraps(method) - def method_wrapper(**kwargs): - """Wrapper that pulls values from openhtf.util.conf.""" - # Check for keyword args with names that are in the config so we can warn. - for kwarg in kwarg_names: - if kwarg in self: - self._logger.warning( - 'Keyword arg %s not set from configuration, but ' - 'is a configuration key', kwarg) - - # Set positional args from configuration values. - final_kwargs = {name: self[name] for name in arg_names if name in self} - - for overridden in set(kwargs) & set(final_kwargs): - self._logger.warning( - 'Overriding configuration value for kwarg %s (%s) ' - 'with provided kwarg value: %s', overridden, self[overridden], - kwargs[overridden]) - - final_kwargs.update(kwargs) - if inspect.ismethod(method): - name = '%s.%s' % (method.__self__.__class__.__name__, method.__name__) - else: - name = method.__name__ - self._logger.debug('Invoking %s with %s', name, final_kwargs) - return method(**final_kwargs) - - # We have to check for a 'self' parameter explicitly because Python doesn't - # pass it as a keyword arg, it passes it as the first positional arg. - if argspec.args[0] == 'self': - - @functools.wraps(method) - def self_wrapper(self, **kwargs): - """Wrapper that pulls values from openhtf.util.conf.""" - kwargs['self'] = self - return method_wrapper(**kwargs) - - return self_wrapper - return method_wrapper +from openhtf.util import configuration # Swap out the module for a singleton instance of Configuration so we can # provide __getattr__ and __getitem__ functionality at the module level. -sys.modules[__name__] = Configuration( - logging.getLogger(__name__), - threading.RLock(), - ARG_PARSER, - functools=functools, - inspect=inspect, - yaml=yaml, - six=six) +sys.modules[__name__] = configuration.CONF diff --git a/openhtf/util/configuration.py b/openhtf/util/configuration.py new file mode 100644 index 000000000..6c700c64c --- /dev/null +++ b/openhtf/util/configuration.py @@ -0,0 +1,766 @@ +# Copyright 2014 Google Inc. All Rights Reserved. + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Interface to OpenHTF configuration files. + +As a matter of convention, OpenHTF configuration files should contain values +which are specific to an individual station (not station type). This is +intended to provide a means to decouple deployment of test code from +station-specific configuration or calibration. + +Examples of the types of values commonly found in the configuration are +physical port names, IP addresses, calibrated light/sound levels, etc. +Configuration values should not be used to determine test flow, or to control +debug output. + +Config keys must be declared as in the following example, where default_value +and description are optional: + + from openhtf.util import configuration + + CONF = configuration.CONF + + ANITIMATTER_INTERMIX_CONSTANT = CONF.declare('antimatter_intermix_constant', + default_value=3.14159, + description='Intermix constant calibrated for our warp core.') + +To avoid naming conflicts, configuration keys should be in snake_case. + +The configuration value may be accessed via the .value attribute on the returned +value holder. In the above example: + + print(ANTIMATTER_INTERMIX_CONSTANT.value) + +The following legacy mechanisms also but should not be used in new code: + + conf.antimatter_intermix_constant # Attribute access on the conf module. + key = 'antimatter_intermix_constant' + conf[key] # Treating the conf module as a dictionary. + getattr(conf, 'key') # Not recommended, use dictionary access instead. + +The conf module supports 'in' checks, where `key in conf` will evaluate to True +if conf[key] would successfully provide a value. That is, if either a value +has been loaded or a default_value was declared. + +Configuration values may be loaded directly or from a yaml or json file. If no +configuration is loaded, default values will still be accessible. Loading a +configuration always overrides default values, but only overrides previously +loaded values if _override=True (default) for the load* method used. Some +examples of how to load a configuration: + + from openhtf.util import configuration + + CONF = configuration.CONF + + CONF.declare('antimatter_intermix_constant') + CONF.declare('phase_variance') + + CONF.load(antimatter_intermix_constant=3.14, + phase_variance=2.718) + CONF.load_from_dict({ + 'antimatter_intermix_constant': 3.14, + 'phase_variance': 2.718, + }) + CONF.load_from_file('config.json') + CONF.load_from_file('config.yaml') + +Note that any of the load* methods here accept an _override keyword argument +that defaults to True, but may be set False to prevent overriding previously +loaded values. Regardless of whether _override is True or False, a message +will be logged indicating how the duplicate value was handled. + +CONF.load_from_file() attempts to parse the filename given as JSON and as YAML, +if neither succeeds, an exception will be raised. In either case, the value +parsed must be a dictionary mapping configuration key to value. Complex +configuration values are discouraged; they should be kept to single values or +lists of values when possible. + +Lastly, configuration values may also be provided via the --config-value flag, +but this is discouraged, and should only be used for debugging purposes. + +Configuration values loaded via commandline flags, either --config-file or +--config-value, are not checked against Declarations. This allows for using +configuration files that are supersets of required configuration. Declarations +are *always* checked upon configuration value access, however, so you still +must declare any keys you wish to use. + +Unit testing notes: + +Loaded configuration values may be purged via the reset() method, but this +should only be used for testing purposes. This will reset the configuration +state to what it was before any load* methods were called (defaults loaded +and flag values used, either directly or from --config-file). + +A recommended alternative to using reset() is the @save_and_restore decorator, +which allows you to decorate a function or method so that during execution +of the decorated callable, configuration values are altered (and restored +after execution of that callable). For example: + + CONF.load(foo='foo') + + @CONF.save_and_restore(foo='bar') + def do_stuff(): + print 'foo has value: ', conf.foo + + print 'foo before call: ', conf.foo + do_stuff() + print 'foo after call: ', conf.foo + +This example prints: + + foo before call: foo + foo has value: bar + foo after call: foo + +This is useful primarily for unittest methods (see util/test.py for specific +examples of unittest usages). Note that config overrides may be specified at +decoration time, but do not have to be: + + @CONF.save_and_restore + def do_stuff(): + conf.foo = 'bar' + +This is also valid. The entire configuration is restored to the state it had +upon execution of the decorated callable, regardless of which keys are updated +in the decorator or in the decorated callable. +""" + +import abc +import argparse +import enum +import functools +import inspect +import logging +import threading +from typing import Any, Optional, Text, Type, TypeVar + +import attr +from openhtf.util import argv +from openhtf.util import threads +import six +from typing_extensions import Protocol +import yaml + +T = TypeVar('T') + +# If provided, --config-file will cause the given file to be load()ed when the +# conf module is initially imported. +ARG_PARSER = argv.module_parser() +ARG_PARSER.add_argument( + '--config-file', + type=argparse.FileType('r'), + help='File from which to load configuration values.') + +ARG_PARSER.add_argument( + '--config-value', + action='append', + default=[], + help='Allows specifying a configuration key=value on the command line. ' + 'The format should be --config-value=key=value. This value will override ' + 'any loaded value, and will be a string.') + + +class ConfigValueHolderType(Protocol): + """Protocol for classes that hold a config value. + + This is used to add cross-compatibility with configs from this module and + Abseil flags. + """ + + def __eq__(self, other): + del other + raise TypeError( + '== comparison not supported for: "{0}". Use "{0}".value'.format( + self.__class__.__name__)) + + def __bool__(self): + raise TypeError('bool() not supported for: "{0}". Use "{0}".value'.format( + self.__class__.__name__)) + + __nonzero__ = __bool__ + + @property + @abc.abstractmethod + def name(self) -> str: + """Returns the name of the config.""" + raise NotImplementedError + + @property + @abc.abstractmethod + def value(self) -> Any: + """Returns the current set value of the config.""" + raise NotImplementedError + + @property + @abc.abstractmethod + def default(self) -> Any: + """Returns the default value of the config.""" + raise NotImplementedError + + +class _ConfigValueHolder(ConfigValueHolderType): + """OpenHTF's implementation of ConfigValueHolderType.""" + + def __init__(self, declaration: 'Declaration', + configuration: '_Configuration'): + super().__init__() + self._declaration = declaration + self._configuration = configuration + + @property + def name(self) -> str: + return self._declaration.name + + @property + def value(self) -> Any: + return self._configuration[self.name] + + @property + def default(self) -> Any: + if self._declaration.has_default: + return self._declaration.default_value + raise DefaultNotDefinedError(f'No default for {self.name}') + + +# Note on type hint: +# Pytype will give missing-parameter for the returned class if initialization is +# attempted, and there doesn't seem to be a way to communicate that "return type +# is a subclass of T but with different __init__ signature". Since users do not +# initialize plugs themselves, and would benefit from being able to type hint +# plugs in their phase definitions, we've decided to keep the type hint below. +def bind_init_args(class_def: Type[T], *args: ConfigValueHolderType, + **kwargs: ConfigValueHolderType) -> Type[T]: + """Binds __init__ args and kwargs with supplied config. + + Example usage: + IP_ADDR_FIRST = conf.declare('ip_addr_first') + IP_ADDR_SECOND = conf.declare('ip_addr_second') + + class MyPlug(base_plug.BasePlug): + def __init__(self, ip_addr: str): + '''Cannot be used as plug; __init__ cannot have non-default args.''' + + my_plug_1 = bind_init_args(MyPlug, IP_ADDR_FIRST) + my_plug_2 = bind_init_args(MyPlug, IP_ADDR_SECOND) + + Typically used with plugs; this allows you to specify that a plug should be + initialized with the specified configs. A new class is created, allowing quick + plug duplication where the only difference is initialization parameters (for + example, if you have two of the same hardware connected with different IPs). + + Args: + class_def: The class definition to subclass and return. + *args: Configurations whose values will be passed as positional arguments to + class_def's __init__. + **kwargs: Configurations whose values will be passed as keyword arguments to + class_def's __init__. + + Returns: + A subclass of class_def with __init__ overridden, passing in configuration + values. + """ + + class NewClass(class_def): + """Derived class from class_def. This doc will be replaced.""" + + def __init__(self) -> None: + arg_values = tuple(arg.value for arg in args) + kwarg_values = {k: v.value for k, v in kwargs.items()} + logger = getattr(self, 'logger', None) + if logger is None: + logger = logging.getLogger(self.__class__.__qualname__) + logger.debug( + 'Initializing %s with args %s and kwargs %s (and any remaining ' + 'default kwargs).', self.__class__.__name__, arg_values, kwarg_values) + super().__init__(*arg_values, **kwarg_values) + + # Distinguish the names, but let the args/kwargs be logged only. + NewClass.__name__ = f'{class_def.__name__}BoundInit' + NewClass.__qualname__ = f'{class_def.__qualname__}BoundInit' + NewClass.__module__ = class_def.__module__ + if class_def.__doc__: + doc_tail = f"\n\n{class_def.__name__}'s doc below:\n\n{class_def.__doc__}" + else: + doc_tail = '' + NewClass.__doc__ = ( + f'Plug class defined at runtime from {class_def.__module__}.' + f'{class_def.__qualname__}.{doc_tail}') + return NewClass + + +class DefaultNotDefinedError(Exception): + """Indicates that a default value is not defined for a declaration.""" + + +class ConfigurationInvalidError(Exception): + """Indicates the configuration format was invalid or couldn't be read.""" + + +class KeyAlreadyDeclaredError(Exception): + """Indicates that a configuration key was already declared.""" + + +class UndeclaredKeyError(Exception): + """Indicates that a key was required but not predeclared.""" + + +class InvalidKeyError(Exception): + """Raised when an invalid key is declared or accessed.""" + + +class UnsetKeyError(Exception): + """Raised when a key value is requested but we have no value for it.""" + + +class _DefaultSetting(enum.Enum): + """NOT_SET is a sentinal for an Declaration with no default set.""" + NOT_SET = 0 + + +@attr.s(slots=True) +class Declaration(object): + """Record type encapsulating information about a config declaration.""" + name = attr.ib(type=Text) + description = attr.ib(type=Optional[Text], default=None) + default_value = attr.ib(type=Any, default=_DefaultSetting.NOT_SET) + + @property + def has_default(self) -> bool: + return self.default_value is not _DefaultSetting.NOT_SET + + +class _Configuration(object): + """Configuration of the test. + + A singleton instance of this class is provided as the public API by this + module and should be used to avoid inconsistencies in configuration state. + + This class provides the configuration interface described in the module + docstring. All attribuets/methods must not begin with a lowercase letter so + as to avoid naming conflicts with configuration keys. + """ + + __slots__ = ('_logger', '_lock', '_declarations', '_flag_values', '_flags', + '_loaded_values', 'ARG_PARSER', '__name__') + + def __init__(self): + """Initializes the configuration state.""" + self._logger = logging.getLogger(__name__) + self._lock = threading.RLock() + # Retained for legacy usage. + self.ARG_PARSER = ARG_PARSER # pylint: disable=invalid-name + self._declarations = {} + + # Parse just the flags we care about, since this happens at import time. + self._flags, _ = ARG_PARSER.parse_known_args() + self._flag_values = {} + + # Populate flag_values from flags now. + self.load_flag_values() + + # Initialize self._loaded_values and load from --config-file if it's set. + self.reset() + + def load_flag_values(self, flags=None): + """Load flag values given from command line flags. + + Args: + flags: An argparse Namespace containing the command line flags. + """ + if flags is None: + flags = self._flags + for keyval in flags.config_value: + k, v = keyval.split('=', 1) + v = yaml.safe_load(v) if isinstance(v, str) else v + + # Force any command line keys and values that are bytes to unicode. + k = k.decode() if isinstance(k, bytes) else k + v = v.decode() if isinstance(v, bytes) else v + + self._flag_values.setdefault(k, v) + + @staticmethod + def _is_valid_key(key): + """Return True if key is a valid configuration key.""" + return key and key[0].islower() + + def __setattr__(self, field, value): + """Provide a useful error when attempting to set a value via setattr().""" + if self._is_valid_key(field): + raise AttributeError("Can't set conf values by attribute, use load()") + # __slots__ is defined above, so this will raise an AttributeError if the + # attribute isn't one we expect; this limits the number of ways to abuse the + # conf module singleton instance. + super().__setattr__(field, value) + + # Don't use synchronized on this one, because __getitem__ handles it. + def __getattr__(self, field): + """Get a config value via attribute access.""" + if self._is_valid_key(field): + return self[field] + # Config keys all begin with a lowercase letter, so treat this normally. + raise AttributeError("'%s' object has no attribute '%s'" % + (type(self).__name__, field)) + + @threads.synchronized + def __getitem__(self, item): + """Get a config value via item access. + + Order of precedence is: + - Value provided via --config-value flag. + - Value loaded via load*() methods. + - Default value as declared with conf.declare() + + Args: + item: Config key name to get. + + Raises: + UndeclaredKeyError: If the item was not declared. + UnsetKeyError: When the config value was not set and has no default. + + Returns: + The config value. + """ + if item not in self._declarations: + raise UndeclaredKeyError('Configuration key not declared', item) + + if item in self._flag_values: + if item in self._loaded_values: + self._logger.warning( + 'Overriding loaded value for %s (%s) with flag value: %s', item, + self._loaded_values[item], self._flag_values[item]) + return self._flag_values[item] + if item in self._loaded_values: + return self._loaded_values[item] + if self._declarations[item].has_default: + return self._declarations[item].default_value + + raise UnsetKeyError('Configuration value not set and has no default', item) + + @threads.synchronized + def __contains__(self, name): + """True if we have a value for name.""" + return (name in self._declarations and + (self._declarations[name].has_default or + name in self._loaded_values or name in self._flag_values)) + + @threads.synchronized + def declare(self, name, description=None, **kwargs) -> ConfigValueHolderType: + """Declare a configuration key with the given name. + + Args: + name: Configuration key to declare, must not have been already declared. + description: If provided, use this as the description for this key. + **kwargs: Other kwargs to pass to the Declaration, only default_value is + currently supported. + + Returns: + An implementation of ConfigValueHolderType, specifically: + _ConfigValueHolder. + + Raises: + InvalidKeyError: When name is not constructed correctly. + KeyAlreadyDeclaredError: When name has already been defined. + """ + if not self._is_valid_key(name): + raise InvalidKeyError( + 'Invalid key name, must begin with a lowercase letter', name) + if name in self._declarations: + raise KeyAlreadyDeclaredError('Configuration key already declared', name) + self._declarations[name] = Declaration( + name, description=description, **kwargs) + return _ConfigValueHolder(self._declarations[name], self) + + @threads.synchronized + def reset(self): + """Reset the loaded state of the configuration to what it was at import. + + Note that this does *not* reset values set by commandline flags or loaded + from --config-file (in fact, any values loaded from --config-file that have + been overridden are reset to their value from --config-file). + """ + # Populate loaded_values with values from --config-file, if it was given. + self._loaded_values = {} + if self._flags.config_file is not None: + self.load_from_file(self._flags.config_file, _allow_undeclared=True) + + def load_from_file(self, yamlfile, _override=True, _allow_undeclared=False): # pylint: disable=invalid-name + """Loads the configuration from a file. + + Parsed contents must be a single dict mapping config key to value. + + Args: + yamlfile: The opened file object to load configuration from. See + load_from_dict() for other args' descriptions. + _override: If True, new values will override previous values. + _allow_undeclared: If True, silently load undeclared keys, otherwise warn + and ignore the value. Typically used for loading config files before + declarations have been evaluated. + + Raises: + ConfigurationInvalidError: If configuration file can't be read, or can't + be parsed as either YAML (or JSON, which is a subset of YAML). + """ + self._logger.info('Loading configuration from file: %s', yamlfile) + + try: + parsed_yaml = yaml.safe_load(yamlfile.read()) + except yaml.YAMLError: + self._logger.exception('Problem parsing YAML') + raise ConfigurationInvalidError('Failed to load from %s as YAML' % + yamlfile) + + if not isinstance(parsed_yaml, dict): + # Parsed YAML, but it's not a dict. + raise ConfigurationInvalidError( + 'YAML parsed, but wrong type, should be dict', parsed_yaml) + + self._logger.debug('Configuration loaded from file: %s', parsed_yaml) + self.load_from_dict( + parsed_yaml, _override=_override, _allow_undeclared=_allow_undeclared) + + def load(self, _override=True, _allow_undeclared=False, **kwargs): # pylint: disable=invalid-name + """load configuration values from kwargs, see load_from_dict().""" + self.load_from_dict( + kwargs, _override=_override, _allow_undeclared=_allow_undeclared) + + @threads.synchronized + def load_from_dict(self, dictionary, _override=True, _allow_undeclared=False): # pylint: disable=invalid-name + """Loads the config with values from a dictionary instead of a file. + + This is meant for testing and bin purposes and shouldn't be used in most + applications. + + Args: + dictionary: The dictionary containing config keys/values to update. + _override: If True, new values will override previous values. + _allow_undeclared: If True, silently load undeclared keys, otherwise warn + and ignore the value. Typically used for loading config files before + declarations have been evaluated. + """ + undeclared_keys = [] + for key, value in six.iteritems(dictionary): + # Warn in this case. We raise if you try to access a config key that + # hasn't been declared, but we don't raise here so that you can use + # configuration files that are supersets of required configuration for + # any particular test station. + if key not in self._declarations and not _allow_undeclared: + undeclared_keys.append(key) + continue + if key in self._loaded_values: + if _override: + self._logger.info( + 'Overriding previously loaded value for %s (%s) with value: %s', + key, self._loaded_values[key], value) + else: + self._logger.info( + 'Ignoring new value (%s), keeping previous value for %s: %s', + value, key, self._loaded_values[key]) + continue + + # Force any keys and values that are bytes to unicode. + key = key.decode() if isinstance(key, bytes) else key + value = value.decode() if isinstance(value, bytes) else value + + self._loaded_values[key] = value + if undeclared_keys: + self._logger.warning('Ignoring undeclared configuration keys: %s', + undeclared_keys) + + @threads.synchronized + def _asdict(self): + """Create a dictionary snapshot of the current config values.""" + # Start with any default values we have, and override with loaded values, + # and then override with flag values. + retval = { + key: self._declarations[key].default_value + for key in self._declarations + if self._declarations[key].has_default + } + retval.update(self._loaded_values) + # Only update keys that are declared so we don't allow injecting + # un-declared keys via commandline flags. + for key, value in six.iteritems(self._flag_values): + if key in self._declarations: + retval[key] = value + return retval + + def __dict__(self): + return self._asdict() + + @property + def help_text(self): + """Return a string with all config keys and their descriptions.""" + result = [] + for name in sorted(self._declarations): + result.append(name) + result.append('-' * len(name)) + decl = self._declarations[name] + if decl.description: + result.append(decl.description.strip()) + else: + result.append('(no description found)') + if decl.has_default: + result.append('') + quotes = '"' if isinstance(decl.default_value, str) else '' + result.append(' default_value={quotes}{val}{quotes}'.format( + quotes=quotes, val=decl.default_value)) + result.append('') + result.append('') + return '\n'.join(result) + + def save_and_restore(self, _func=None, **config_values): # pylint: disable=invalid-name + """Decorator for saving conf state and restoring it after a function. + + This decorator is primarily for use in tests, where conf keys may be updated + for individual test cases, but those values need to be reverted after the + test case is done. + + Examples: + + conf.declare('my_conf_key') + + @conf.save_and_restore + def MyTestFunc(): + conf.load(my_conf_key='baz') + SomeFuncUnderTestThatUsesMyConfKey() + + conf.load(my_conf_key='foo') + MyTestFunc() + print conf.my_conf_key # Prints 'foo', *NOT* 'baz' + + # Without the save_and_restore decorator, MyTestFunc() would have had the + # side effect of altering the conf value of 'my_conf_key' to 'baz'. + + # Config keys can also be initialized for the context inline at decoration + # time. This is the same as setting them at the beginning of the + # function, but is a little clearer syntax if you know ahead of time what + # config keys and values you need to set. + + @conf.save_and_restore(my_conf_key='baz') + def MyOtherTestFunc(): + print conf.my_conf_key # Prints 'baz' + + MyOtherTestFunc() + print conf.my_conf_key # Prints 'foo' again, for the same reason. + + + Args: + _func: The function to wrap. The returned wrapper will invoke the + function and restore the config to the state it was in at invocation. + **config_values: Config keys can be set inline at decoration time, see + examples. Note that config keys can't begin with underscore, so there + can be no name collision with _func. + + Returns: + Wrapper to replace _func, as per Python decorator semantics. + """ + if not _func: + return functools.partial(self.save_and_restore, **config_values) + + @functools.wraps(_func) + def _saving_wrapper(*args, **kwargs): + saved_config = dict(self._loaded_values) + try: + self.load_from_dict(config_values) + return _func(*args, **kwargs) + finally: + self._loaded_values = saved_config # pylint: disable=attribute-defined-outside-init + + return _saving_wrapper + + def inject_positional_args(self, method): + """Decorator for injecting positional arguments from the configuration. + + Legacy mechanism with various restrictions, documented below. In new code, + use bind_init_args instead. + + This decorator wraps the given method, so that any positional arguments are + passed with corresponding values from the configuration. The name of the + positional argument must match the configuration key. + + Keyword arguments are *NEVER* modified, even if their names match + configuration keys. Avoid naming keyword args names that are also + configuration keys to avoid confusion. + + Additional positional arguments may be used that do not appear in the + configuration, but those arguments *MUST* be specified as keyword arguments + upon invocation of the method. This is to avoid ambiguity in which + positional arguments are getting which values. + + Args: + method: The method to wrap. + + Returns: + A wrapper that, when invoked, will call the wrapped method, passing in + configuration values for positional arguments. + """ + if six.PY3: + argspec = inspect.getfullargspec(method) + else: + argspec = inspect.getargspec(method) # pylint: disable=deprecated-method + + # Index in argspec.args of the first keyword argument. This index is a + # negative number if there are any kwargs, or 0 if there are no kwargs. + keyword_arg_index = -1 * len(argspec.defaults or []) + arg_names = argspec.args[:keyword_arg_index or None] + kwarg_names = argspec.args[len(arg_names):] + + # Create the actual method wrapper, all we do is update kwargs. Note we + # don't pass any *args through because there can't be any - we've filled + # them all in with values from the configuration. Any positional args that + # are missing from the configuration *must* be explicitly specified as + # kwargs. + @functools.wraps(method) + def method_wrapper(**kwargs): + """Wrapper that pulls values from openhtf.util.conf.""" + # Check for keyword args with names that are in the config so we can warn. + for kwarg in kwarg_names: + if kwarg in self: + self._logger.warning( + 'Keyword arg %s not set from configuration, but ' + 'is a configuration key', kwarg) + + # Set positional args from configuration values. + final_kwargs = {name: self[name] for name in arg_names if name in self} + + for overridden in set(kwargs) & set(final_kwargs): + self._logger.warning( + 'Overriding configuration value for kwarg %s (%s) ' + 'with provided kwarg value: %s', overridden, self[overridden], + kwargs[overridden]) + + final_kwargs.update(kwargs) + if inspect.ismethod(method): + name = '%s.%s' % (method.__self__.__class__.__name__, method.__name__) + else: + name = method.__name__ + self._logger.debug('Invoking %s with %s', name, final_kwargs) + return method(**final_kwargs) + + # We have to check for a 'self' parameter explicitly because Python doesn't + # pass it as a keyword arg, it passes it as the first positional arg. + if argspec.args[0] == 'self': + + @functools.wraps(method) + def self_wrapper(self, **kwargs): + """Wrapper that pulls values from openhtf.util.conf.""" + kwargs['self'] = self + return method_wrapper(**kwargs) + + return self_wrapper + return method_wrapper + + +# This becomes the public API. +CONF = _Configuration() diff --git a/openhtf/util/test.py b/openhtf/util/test.py index 25d173161..33d63dd46 100644 --- a/openhtf/util/test.py +++ b/openhtf/util/test.py @@ -31,13 +31,15 @@ Lastly, while not implemented here, it's common to need to temporarily alter configuration values for individual tests. This can be accomplished with the -@conf.save_and_restore decorator (see docs in conf.py, examples below). +@CONF.save_and_restore decorator (see docs in configuration.py, examples below). A few isolated examples, also see test/util/test_test.py for some usage: - from openhtf.util import conf + from openhtf.util import configuration from openhtf.util import test + CONF = configuration.CONF + import mytest # Contains phases under test. class PhasesTest(test.TestCase): @@ -56,9 +58,9 @@ def test_using_execute_phase_or_test(self): # assert* methods for checking phase/test records are defined in TestCase. self.assertPhaseContinue(phase_record) - # Decorate with conf.save_and_restore to temporarily set conf values. + # Decorate with CONF.save_and_restore to temporarily set CONF values. # NOTE: This must come before yields_phases. - @conf.save_and_restore(phase_variance='test_phase_variance') + @CONF.save_and_restore(phase_variance='test_phase_variance') # Decorate the test* method with this to be able to yield a phase to run it. @test.yields_phases def test_first_phase(self): @@ -127,7 +129,11 @@ def test_multiple(self, mock_my_plug): import functools import inspect import logging +import os +import pathlib +import pstats import sys +import tempfile import types import typing from typing import ( @@ -137,9 +143,11 @@ def test_multiple(self, mock_my_plug): Iterable, List, Optional, + Sequence, Text, Tuple, Type, + Union, ) import unittest @@ -156,6 +164,7 @@ def test_multiple(self, mock_my_plug): from openhtf.core import phase_executor from openhtf.core import phase_nodes from openhtf.core import test_descriptor +from openhtf.core import test_executor from openhtf.core import test_record from openhtf.core import test_state from openhtf.plugs import device_wrapping @@ -305,6 +314,16 @@ def filter_phases_by_outcome( yield phase_rec +def _merge_stats(stats: pstats.Stats, filepath: pathlib.Path) -> None: + """Merges provides Stats into filepath (created if not present).""" + stats_to_combine = [stats] + try: + stats_to_combine.append(pstats.Stats(str(filepath))) + except FileNotFoundError: + pass + test_executor.combine_profile_stats(stats_to_combine, str(filepath)) + + class PhaseOrTestIterator(collections_abc.Iterator): def __init__(self, test_case, iterator, mock_plugs, phase_user_defined_state, @@ -387,18 +406,22 @@ def _handle_phase(self, phase_desc): # Actually execute the phase, saving the result in our return value. executor = phase_executor.PhaseExecutor(test_state_) + profile_filepath = self.test_case.get_profile_filepath() # Log an exception stack when a Phase errors out. with mock.patch.object( phase_executor.PhaseExecutorThread, '_log_exception', side_effect=logging.exception): # Use _execute_phase_once because we want to expose all possible outcomes. - phase_result, _ = executor._execute_phase_once( + phase_result, profile_stats = executor._execute_phase_once( phase_desc, is_last_repeat=False, - run_with_profiling=False, + run_with_profiling=profile_filepath, subtest_rec=None) + if profile_filepath is not None: + _merge_stats(profile_stats, profile_filepath) + if phase_result.raised_exception: failure_message = phase_result.phase_result.get_traceback_string() else: @@ -413,10 +436,22 @@ def _handle_test(self, test): test.add_output_callbacks( lambda record: setattr(record_saver, 'result', record)) + profile_filepath = self.test_case.get_profile_filepath() + if profile_filepath is None: + profile_tempfile = None + else: + profile_tempfile = tempfile.NamedTemporaryFile() # Mock the PlugManager to use ours instead, and execute the test. with mock.patch.object( plugs, 'PlugManager', new=lambda _, __: self.plug_manager): - test.execute(test_start=self.test_case.test_start_function) + test.execute( + test_start=self.test_case.test_start_function, + profile_filename=(None if profile_tempfile is None else + profile_tempfile.name)) + + if profile_tempfile is not None: + _merge_stats(pstats.Stats(profile_tempfile.name), profile_filepath) + profile_tempfile.close() test_record_ = record_saver.result if test_record_.outcome_details: @@ -624,6 +659,8 @@ def assertion_wrapper(self, phase_or_test_record, *args, **kwargs): class TestCase(unittest.TestCase): + # Configure this via set_profile_dir(). + _profile_output_dir: Optional[pathlib.Path] = None def __init__(self, methodName=None): super(TestCase, self).__init__(methodName=methodName) @@ -922,3 +959,52 @@ def assertAttachment(self, def get_diagnoses_store(self): self.assertIsNotNone(self.last_test_state) return self.last_test_state.diagnoses_manager.store + + @classmethod + def set_profile_dir(cls, profile_dir: pathlib.Path) -> None: + """Sets the output directory for profiling, and enables profiling. + + WARNING: This method is provided for debugging only, and may be removed in + a future update. The test.py module currently runs all tests in a thread, + which cannot be profiled without this feature. + Call this from setUpClass to enable profiling. + + Args: + profile_dir: The directory to place the profile file in. See + get_profile_filepath for details. + """ + cls._profile_output_dir = profile_dir + try: + # Remove file if it already exists. This has to be done in setUpClass + # because we want to clear it before the test case starts, but to be + # updated as individual test* methods are run. + os.remove(cls.get_profile_filepath()) + except FileNotFoundError: + pass + + @classmethod + def get_profile_filepath(cls) -> Optional[pathlib.Path]: + """Returns profile filepath if profile_output_dir is set, else None. + + The output filename is {module}.{test_case}.pstats. + """ + if cls._profile_output_dir is not None: + return pathlib.Path(cls._profile_output_dir, + f'{__name__.split(".")[-1]}.{cls.__name__}.pstats') + return None + + +def get_flattened_phases( + phases_or_phase_groups: Sequence[Union[ + phase_nodes.PhaseNode, phase_collections.PhaseCollectionNode]] +) -> Sequence[phase_nodes.PhaseNode]: + """Flattens a sequence of phase nodes or phase collection nodes into nodes.""" + phases = [] + for phase_or_phase_group in phases_or_phase_groups: + if isinstance(phase_or_phase_group, phase_collections.PhaseCollectionNode): + phases.extend(phase_or_phase_group.all_phases()) + elif isinstance(phase_or_phase_group, phase_nodes.PhaseNode): + phases.append(phase_or_phase_group) + else: + raise TypeError('Not a phase node or a phase collection node.') + return phases diff --git a/openhtf/util/timeouts.py b/openhtf/util/timeouts.py index 930d56c42..d184eb2b1 100644 --- a/openhtf/util/timeouts.py +++ b/openhtf/util/timeouts.py @@ -297,7 +297,7 @@ def stop(self, timeout_s=None): self.stopped.set() if self.thread: self.thread.join(timeout_s) - return not self.thread.isAlive() + return not self.thread.isAlive() # pytype: disable=attribute-error # py39-upgrade else: return True diff --git a/openhtf/util/validators.py b/openhtf/util/validators.py index 5e6121a97..0d19b42d9 100644 --- a/openhtf/util/validators.py +++ b/openhtf/util/validators.py @@ -391,7 +391,7 @@ def __call__(self, value): return value == self.expected def __str__(self): - return "'x' is equal to '%s'" % self._expected + return f"'x' is equal to '{self._expected}'" def __eq__(self, other): return isinstance(other, type(self)) and self.expected == other.expected diff --git a/setup.py b/setup.py index 69429901f..6a4ae0ab8 100644 --- a/setup.py +++ b/setup.py @@ -132,8 +132,10 @@ def run(self): 'attrs>=19.3.0', 'colorama>=0.3.9,<1.0', 'contextlib2>=0.5.1,<1.0', + 'dataclasses;python_version<"3.7"', 'enum34>=1.1.2,<2.0 ; python_version<"3.4"', 'future>=0.16.0', + 'inflection', 'mutablerecords>=0.4.1,<2.0', 'oauth2client>=1.5.2,<2.0', 'protobuf>=3.6.0,<4.0', diff --git a/test/core/diagnoses_test.py b/test/core/diagnoses_test.py index fb1549f80..bdf62cc7d 100644 --- a/test/core/diagnoses_test.py +++ b/test/core/diagnoses_test.py @@ -1,4 +1,3 @@ -# Lint as: python3 """Tests for Diagnoses in OpenHTF.""" import time diff --git a/test/core/exe_test.py b/test/core/exe_test.py index 13be16cdd..613b64355 100644 --- a/test/core/exe_test.py +++ b/test/core/exe_test.py @@ -36,10 +36,12 @@ from openhtf.core import test_record from openhtf.core import test_state -from openhtf.util import conf +from openhtf.util import configuration from openhtf.util import logs from openhtf.util import timeouts +CONF = configuration.CONF + # Default logging to debug level. logs.CLI_LOGGING_VERBOSITY = 2 @@ -266,7 +268,7 @@ def test_class_string(self): if not found: self.assertEqual(0, 1) - @conf.save_and_restore(cancel_timeout_s=1) + @CONF.save_and_restore(cancel_timeout_s=1) def test_cancel_start(self): @openhtf.PhaseOptions() @@ -572,7 +574,7 @@ def set_ev(): self.assertTrue(ev.wait(1)) executor.close() - @conf.save_and_restore + @CONF.save_and_restore def test_conf_stop_on_first_failure_phase(self): ev = threading.Event() @@ -584,7 +586,7 @@ def set_ev(): main=[phase_return_fail_and_continue, phase_one], teardown=[set_ev]) test = openhtf.Test(group) test.configure(default_dut_id='dut',) - conf.load(stop_on_first_failure=True) + CONF.load(stop_on_first_failure=True) executor = test_executor.TestExecutor( test.descriptor, 'uid', diff --git a/test/core/test_descriptor_test.py b/test/core/test_descriptor_test.py index aadd209df..a92a20707 100644 --- a/test/core/test_descriptor_test.py +++ b/test/core/test_descriptor_test.py @@ -1,4 +1,3 @@ -# Lint as: python3 """Unit tests for test_descriptor module.""" import re diff --git a/test/core/test_record_test.py b/test/core/test_record_test.py index 7b10072f7..3a8ead178 100644 --- a/test/core/test_record_test.py +++ b/test/core/test_record_test.py @@ -1,4 +1,3 @@ -# Lint as: python3 """Unit tests for test_record module.""" import sys @@ -23,8 +22,15 @@ def test_attachment_data(self): data = attachment.data self.assertEqual(data, expected_data) + def test_attachment_size(self): + expected_size = 10 + data = b't' * expected_size + attachment = test_record.Attachment(data, 'text') + self.assertEqual(attachment.size, expected_size) + def test_attachment_memory_safety(self): - empty_attachment = test_record.Attachment(b'', 'text') + small_data = b' ' # Use non-empty so Attachment.size (ints) are equal size. + empty_attachment = test_record.Attachment(small_data, 'text') expected_obj_size = _get_obj_size(empty_attachment) large_data = b'test attachment data' * 1000 attachment = test_record.Attachment(large_data, 'text') diff --git a/test/output/callbacks/mfg_event_converter_test.py b/test/output/callbacks/mfg_event_converter_test.py index 5166c23a3..f52e73a47 100644 --- a/test/output/callbacks/mfg_event_converter_test.py +++ b/test/output/callbacks/mfg_event_converter_test.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -"""Tests for google3.third_party.car.hw.testing.output.email.""" +"""Tests for mfg_event_converter.""" import io import json @@ -22,6 +22,13 @@ TEST_MULTIDIM_JSON = f.read() +def _create_hacked_massive_attachment() -> test_record.Attachment: + """Returns an attachment that seems massive by size.""" + attachment = test_record.Attachment(b'dummy', 'text/plain') + attachment.size = mfg_event_converter.MAX_TOTAL_ATTACHMENT_BYTES + return attachment + + class MfgEventConverterTest(unittest.TestCase): def create_codeinfo(self): @@ -298,22 +305,103 @@ def test_copy_measurements_from_phase(self): self.assertEqual(mock_measurement_within_percent.numeric_marginal_maximum, 0) - def testCopyAttachmentsFromPhase(self): - attachment = test_record.Attachment(b'mock-data', 'text/plain') + def test_copy_attachments_from_phase(self): + first_attachment_name = 'first_attachment_name' + first_attachment = _create_hacked_massive_attachment() + expected_first_attachment_proto = mfg_event_pb2.EventAttachment( + name=first_attachment_name, + value_binary=first_attachment.data, + type=test_runs_pb2.TEXT_UTF8) + + other_attachment_name = 'mock-attachment-name1' + other_attachment = _create_hacked_massive_attachment() + expected_other_attachment_proto = mfg_event_pb2.EventAttachment( + name=other_attachment_name, + value_binary=other_attachment.data, + type=test_runs_pb2.TEXT_UTF8) + phase = test_record.PhaseRecord( name='mock-phase-name', descriptor_id=1, codeinfo=self.create_codeinfo(), - attachments={'mock-attachment-name': attachment}, + attachments={ + first_attachment_name: first_attachment, + other_attachment_name: other_attachment, + }, ) mfg_event = mfg_event_pb2.MfgEvent() + # Leave attachment_cache as None so attachment sizes are irrelevant as + # partial uploads are considered unavailable. copier = mfg_event_converter.PhaseCopier([phase]) copier.copy_attachments(mfg_event) - self.assertEqual(mfg_event.attachment[0].name, 'mock-attachment-name') - self.assertEqual(mfg_event.attachment[0].value_binary, b'mock-data') - self.assertEqual(mfg_event.attachment[0].type, test_runs_pb2.TEXT_UTF8) + self.assertCountEqual( + tuple(mfg_event.attachment), + (expected_first_attachment_proto, expected_other_attachment_proto)) + + def test_copy_attachments_skips_if_too_much_data_and_returns_false(self): + attachment_names = ('mock-attachment-name0', 'mock-attachment-name1') + + phase = test_record.PhaseRecord( + name='mock-phase-name', + descriptor_id=1, + codeinfo=self.create_codeinfo(), + attachments={ + name: _create_hacked_massive_attachment() + for name in attachment_names + }, + ) + + mfg_event = mfg_event_pb2.MfgEvent() + copier = mfg_event_converter.PhaseCopier( + [phase], + attachment_cache={}, # Indicates partial uploads are available. + ) + self.assertFalse(copier.copy_attachments(mfg_event)) + + self.assertEqual(len(mfg_event.attachment), 1) + + def test_copy_attachments_uses_attachment_cache_and_overcomes_size_limits( + self): + cached_attachment_name = 'cached_attachment_name' + cached_attachment = _create_hacked_massive_attachment() + + cached_attachment_proto = mfg_event_pb2.EventAttachment( + name='incorrect_name_to_ensure_cache_is_used', + existing_blobref=mfg_event_pb2.EventAttachment.ExistingBlobRef( + blob_id=b'dummy_id', size=cached_attachment.size)) + + other_attachment_name = 'mock-attachment-name1' + other_attachment = _create_hacked_massive_attachment() + expected_other_attachment_proto = mfg_event_pb2.EventAttachment( + name=other_attachment_name, + value_binary=other_attachment.data, + type=test_runs_pb2.TEXT_UTF8) + + phase = test_record.PhaseRecord( + name='mock-phase-name', + descriptor_id=1, + codeinfo=self.create_codeinfo(), + attachments={ + cached_attachment_name: cached_attachment, + other_attachment_name: other_attachment, + }, + ) + + mfg_event = mfg_event_pb2.MfgEvent() + copier = mfg_event_converter.PhaseCopier( + [phase], + attachment_cache={ + mfg_event_converter.AttachmentCacheKey( + name=cached_attachment_name, size=cached_attachment.size): + cached_attachment_proto + }) + self.assertTrue(copier.copy_attachments(mfg_event)) + + self.assertCountEqual( + tuple(mfg_event.attachment), + (cached_attachment_proto, expected_other_attachment_proto)) class MultiDimConversionTest(unittest.TestCase): @@ -348,7 +436,7 @@ def test_attachment_to_multidim_measurement(self): expected = self.create_multi_dim_measurement() attachment = test_record.Attachment(TEST_MULTIDIM_JSON, - test_runs_pb2.MULTIDIM_JSON) + test_runs_pb2.MULTIDIM_JSON) # pytype: disable=wrong-arg-types # gen-stub-imports measurement = mfg_event_converter.attachment_to_multidim_measurement( attachment) @@ -384,7 +472,7 @@ def test_reversibleish_leagcy_status_int(self): data_dict = json.loads(attachment.data) data_dict['outcome'] = test_runs_pb2.Status.Value(data_dict['outcome']) attachment = test_record.Attachment( - json.dumps(data_dict).encode('utf-8'), test_runs_pb2.MULTIDIM_JSON) + json.dumps(data_dict).encode('utf-8'), test_runs_pb2.MULTIDIM_JSON) # pytype: disable=wrong-arg-types # gen-stub-imports reversed_mdim = mfg_event_converter.attachment_to_multidim_measurement( attachment) diff --git a/test/output/callbacks/mfg_inspector_test.py b/test/output/callbacks/mfg_inspector_test.py index 8d33b229d..4fc9c9c81 100644 --- a/test/output/callbacks/mfg_inspector_test.py +++ b/test/output/callbacks/mfg_inspector_test.py @@ -17,12 +17,10 @@ is sane. It might be worth expanding the tests to also check for things we actually care for. """ - import collections import io import unittest - -import mock +from unittest import mock import openhtf as htf from openhtf import util @@ -33,11 +31,11 @@ from openhtf.output.proto import test_runs_pb2 from openhtf.util import test -MOCK_TEST_RUN_PROTO = test_runs_pb2.TestRun( +MOCK_TEST_RUN_PROTO = test_runs_pb2.TestRun( # pytype: disable=module-attr # gen-stub-imports tester_name='mock_test_run', dut_serial='UNITTEST1234', test_status=test_runs_pb2.PASS, - test_info=test_runs_pb2.TestInfo(name='unit_test')) + test_info=test_runs_pb2.TestInfo(name='unit_test')) # pytype: disable=module-attr # gen-stub-imports MOCK_TEST_RUN = collections.namedtuple('Testrun', mfg_inspector.MfgInspector.PARAMS)(None, @@ -67,8 +65,8 @@ def setUpClass(cls): # Create input record. result = util.NonLocalResult() - def _save_result(test_record): - result.result = test_record + def _save_result(test_rec): + result.result = test_rec cls._test = htf.Test( all_the_things.hello_world, @@ -94,7 +92,7 @@ def test_save_only(self, user_mock): # Parse what was written to BytesIO back into a proto and compare testrun_output.seek(0) - testrun = test_runs_pb2.TestRun() + testrun = test_runs_pb2.TestRun() # pytype: disable=module-attr # gen-stub-imports testrun.ParseFromString(testrun_output.read()) expected_test_run_proto = test_runs_converter.test_run_from_test_record( @@ -128,7 +126,7 @@ def test_save_and_upload(self): # Parse what was written to BytesIO back into a proto and compare testrun_output.seek(0) - testrun = test_runs_pb2.TestRun() + testrun = test_runs_pb2.TestRun() # pytype: disable=module-attr # gen-stub-imports testrun.ParseFromString(testrun_output.read()) self.assertEqual(MOCK_TEST_RUN_PROTO, testrun) diff --git a/test/phase_descriptor_test.py b/test/phase_descriptor_test.py index ffdcf4933..1fdd92dca 100644 --- a/test/phase_descriptor_test.py +++ b/test/phase_descriptor_test.py @@ -25,6 +25,7 @@ from openhtf.core import test_descriptor from openhtf.core import test_record from openhtf.core import test_state +from openhtf.util import test as htf_test def plain_func(): @@ -88,7 +89,23 @@ def custom_placeholder_phase(custom): del custom # Unused. -class TestPhaseDescriptor(unittest.TestCase): +@openhtf.PhaseOptions() +def passing_phase(): + return openhtf.PhaseResult.CONTINUE + + +@openhtf.measures( + openhtf.Measurement('a_measurement').equals(True), + openhtf.Measurement('another_measurement').equals(True), + openhtf.Measurement('yet_another_measurement').equals(True), +) +def partially_passing_phase(test: openhtf.TestApi): + test.measurements.a_measurement = True + test.measurements.another_measurement = False + test.measurements.yet_another_measurement = True + + +class TestPhaseDescriptor(htf_test.TestCase): def setUp(self): super(TestPhaseDescriptor, self).setUp() @@ -226,6 +243,24 @@ def phase(custom_plug, arg_one=1, arg_two=2): logging.get_absl_logger())) phase.with_args(arg_one=expected_arg_one)(self._test_state) + def test_call_overrides_phase_result(self): + phase = openhtf.PhaseOptions(stop_on_measurement_fail=True)( + partially_passing_phase) + record = self.execute_phase_or_test( + openhtf.Test(passing_phase, phase, passing_phase)) + self.assertEqual(record.outcome, test_record.Outcome.FAIL) + self.assertEqual(record.phases[-1].name, phase.name) + self.assertEqual(record.phases[-1].result.phase_result, + openhtf.PhaseResult.STOP) + + def test_call_skips_phase_result_override(self): + phase = openhtf.PhaseOptions(stop_on_measurement_fail=False)( + partially_passing_phase) + record = self.execute_phase_or_test( + openhtf.Test(phase, passing_phase)) + self.assertEqual(record.outcome, test_record.Outcome.FAIL) + self.assertEqual(record.phases[-1].name, passing_phase.name) + def test_with_plugs(self): self._test_state.plug_manager.initialize_plugs([ExtraPlug]) phase = extra_plug_func.with_plugs(plug=ExtraPlug).with_args(phrase='hello') @@ -260,6 +295,22 @@ def test_with_plugs_custom_placeholder_is_base_plug(self): self.assertEqual([base_plugs.PhasePlug('custom', PlugVersionOfNonPlug)], phase.plugs) + def test_camel_phase_name_casing_formats_name(self): + + @phase_descriptor.PhaseOptions(phase_name_case=openhtf.PhaseNameCase.CAMEL) + def snake_cased_phase(): + """Empty function to generate phase descriptor.""" + + self.assertEqual(snake_cased_phase.name, 'SnakeCasedPhase') + + def test_keep_phase_name_casing_does_not_change_name(self): + + @phase_descriptor.PhaseOptions(phase_name_case=openhtf.PhaseNameCase.KEEP) + def keep_case_phase(): + """Empty function to generate phase descriptor.""" + + self.assertEqual(keep_case_phase.name, 'keep_case_phase') + class DupeResultA(openhtf.DiagResultEnum): DUPE = 'dupe' diff --git a/test/test_state_test.py b/test/test_state_test.py index 74c858b9a..d4acc3332 100644 --- a/test/test_state_test.py +++ b/test/test_state_test.py @@ -27,9 +27,11 @@ from openhtf.core import test_descriptor from openhtf.core import test_record from openhtf.core import test_state -from openhtf.util import conf +from openhtf.util import configuration from openhtf.util import threads +CONF = configuration.CONF + @openhtf.measures('test_measurement') @openhtf.PhaseOptions(name='test_phase') @@ -74,7 +76,7 @@ def test_phase(): TEST_STATE_BASE_TYPE_INITIAL = { 'status': 'WAITING_FOR_TEST_START', 'test_record': { - 'station_id': conf.station_id, + 'station_id': CONF.station_id, 'code_info': { 'docstring': None, 'name': '', @@ -153,6 +155,10 @@ def test_get_measurement(self): self.assertEqual(measurement_val, measurement.value) self.assertEqual('test_measurement', measurement.name) + def test_get_measurement_strict(self): + with self.assertRaises(test_descriptor.MeasurementNotFoundError): + self.test_api.get_measurement_strict('no_such_test_measurement') + def test_get_measurement_immutable(self): measurement_val = [1, 2, 3] self.test_api.measurements['test_measurement'] = measurement_val diff --git a/test/util/conf_test.py b/test/util/conf_test.py index fa6076a8c..669106348 100644 --- a/test/util/conf_test.py +++ b/test/util/conf_test.py @@ -16,9 +16,11 @@ import os.path import unittest -from openhtf.util import conf +from openhtf.util import configuration import six +CONF = configuration.CONF + args = [ '--config-value=flag_key=flag_value', '--config-value', @@ -31,76 +33,80 @@ 'num_value=100', ] -conf.declare('flag_key') -conf.declare('other_flag') -conf.declare('true_value') -conf.declare('num_value') -conf.declare('json_test_key') -conf.declare('yaml_test_key') -conf.declare('overridden_key') -conf.declare('none_default', default_value=None) -conf.declare('string_default', default_value='default') -conf.declare('no_default') +FLAG_KEY = CONF.declare('flag_key') +OTHER_FLAG = CONF.declare('other_flag') +TRUE_VALUE = CONF.declare('true_value') +NUM_VALUE = CONF.declare('num_value') +JSON_TEST_KEY = CONF.declare('json_test_key') +YAML_TEST_KEY = CONF.declare('yaml_test_key') +OVERRIDDEN_KEY = CONF.declare('overridden_key') +NONE_DEFAULT = CONF.declare('none_default', default_value=None) +STRING_DEFAULT = CONF.declare('string_default', default_value='default') +NO_DEFAULT = CONF.declare('no_default') -class TestConf(unittest.TestCase): +class TestConfBase(unittest.TestCase): + """Base test fixture for testing the conf module.""" YAML_FILENAME = os.path.join(os.path.dirname(__file__), 'test_config.yaml') BAD_FORMAT = os.path.join(os.path.dirname(__file__), 'bad_config.txt') NOT_A_DICT = os.path.join(os.path.dirname(__file__), 'bad_config.yaml') def setUp(self): - super(TestConf, self).setUp() - flags, _ = conf.ARG_PARSER.parse_known_args(args) - conf.load_flag_values(flags) + super().setUp() + flags, _ = CONF.ARG_PARSER.parse_known_args(args) + CONF.load_flag_values(flags) def tearDown(self): - conf._flags.config_file = None - conf.reset() - super(TestConf, self).tearDown() + CONF._flags.config_file = None + CONF.reset() + super().tearDown() + + +class TestConf(TestConfBase): def test_yaml_config(self): with io.open(self.YAML_FILENAME, encoding='utf-8') as yamlfile: - conf._flags.config_file = yamlfile - conf.reset() - self.assertEqual('yaml_test_value', conf.yaml_test_key) + CONF._flags.config_file = yamlfile + CONF.reset() + self.assertEqual('yaml_test_value', CONF.yaml_test_key) def test_load_override(self): - conf.load(overridden_key='overridden_value') - conf.load(overridden_key='new_value') - self.assertEqual('new_value', conf.overridden_key) + CONF.load(overridden_key='overridden_value') + CONF.load(overridden_key='new_value') + self.assertEqual('new_value', CONF.overridden_key) def test_load_no_override(self): - conf.load(overridden_key='overridden_value') - conf.load(overridden_key='new_value', _override=False) - self.assertEqual('overridden_value', conf.overridden_key) + CONF.load(overridden_key='overridden_value') + CONF.load(overridden_key='new_value', _override=False) + self.assertEqual('overridden_value', CONF.overridden_key) def test_load_from_dict(self): - conf.load_from_dict({'overridden_key': 'new_value'}) - self.assertEqual('new_value', conf.overridden_key) + CONF.load_from_dict({'overridden_key': 'new_value'}) + self.assertEqual('new_value', CONF.overridden_key) def test_defaults(self): - self.assertEqual('default', conf.string_default) - self.assertIsNone(conf.none_default) - with self.assertRaises(conf.UnsetKeyError): - conf.no_default # pylint: disable=pointless-statement + self.assertEqual('default', CONF.string_default) + self.assertIsNone(CONF.none_default) + with self.assertRaises(configuration.UnsetKeyError): + CONF.no_default # pylint: disable=pointless-statement def test_flag_values(self): - self.assertEqual('flag_value', conf.flag_key) - self.assertEqual('other_value', conf.other_flag) + self.assertEqual('flag_value', CONF.flag_key) + self.assertEqual('other_value', CONF.other_flag) # Make sure flag value takes precedence, even if a value is loaded. - conf.load(flag_key='loaded_value') - self.assertEqual('flag_value', conf.flag_key) + CONF.load(flag_key='loaded_value') + self.assertEqual('flag_value', CONF.flag_key) def test_non_str_flag_values(self): - self.assertEqual(True, conf.true_value) - self.assertEqual(100, conf.num_value) + self.assertEqual(True, CONF.true_value) + self.assertEqual(100, CONF.num_value) # Make sure flag value takes precedence, even if a value is loaded. - conf.load(flag_key='loaded_value') - self.assertEqual(True, conf.true_value) + CONF.load(flag_key='loaded_value') + self.assertEqual(True, CONF.true_value) def test_as_dict(self): - conf_dict = conf._asdict() + conf_dict = CONF._asdict() expected_dict = { 'flag_key': 'flag_value', 'other_flag': 'other_value', @@ -113,65 +119,65 @@ def test_as_dict(self): self.assertLessEqual(six.viewitems(expected_dict), six.viewitems(conf_dict)) def test_undeclared(self): - with self.assertRaises(conf.UndeclaredKeyError): - conf.undeclared # pylint: disable=pointless-statement + with self.assertRaises(configuration.UndeclaredKeyError): + CONF.undeclared # pylint: disable=pointless-statement - def test_weird_attribute(self): + def test_unset_protected_attribute(self): with self.assertRaises(AttributeError): - conf._dont_do_this # pylint: disable=pointless-statement + CONF._dont_do_this # pylint: disable=pointless-statement with self.assertRaises(AttributeError): - conf._dont_do_this_either = None + CONF._dont_do_this_either = None def test_cant_set_via_attribute(self): with self.assertRaises(AttributeError): - conf.overridden_key = None + CONF.overridden_key = None def test_multiple_declaration(self): - conf.declare('multiple') - with self.assertRaises(conf.KeyAlreadyDeclaredError): - conf.declare('multiple') + CONF.declare('multiple') + with self.assertRaises(configuration.KeyAlreadyDeclaredError): + CONF.declare('multiple') def test_invalid_key(self): - with self.assertRaises(conf.InvalidKeyError): - conf.declare('_invalid') - with self.assertRaises(conf.InvalidKeyError): - conf.declare('Invalid') + with self.assertRaises(configuration.InvalidKeyError): + CONF.declare('_invalid') + with self.assertRaises(configuration.InvalidKeyError): + CONF.declare('Invalid') def test_bad_config_file(self): with io.open(self.NOT_A_DICT, encoding='utf-8') as yamlfile: - conf._flags.config_file = yamlfile - with self.assertRaises(conf.ConfigurationInvalidError): - conf.reset() + CONF._flags.config_file = yamlfile + with self.assertRaises(configuration.ConfigurationInvalidError): + CONF.reset() with io.open(self.BAD_FORMAT, encoding='utf-8') as yamlfile: - conf._flags.config_file = yamlfile - with self.assertRaises(conf.ConfigurationInvalidError): - conf.reset() + CONF._flags.config_file = yamlfile + with self.assertRaises(configuration.ConfigurationInvalidError): + CONF.reset() def test_save_and_restore(self): - @conf.save_and_restore + @CONF.save_and_restore def modifies_conf(): - conf.load(string_default='modified') - self.assertEqual('modified', conf.string_default) + CONF.load(string_default='modified') + self.assertEqual('modified', CONF.string_default) - self.assertEqual('default', conf.string_default) + self.assertEqual('default', CONF.string_default) modifies_conf() - self.assertEqual('default', conf.string_default) + self.assertEqual('default', CONF.string_default) def test_save_and_restore_kwargs(self): - @conf.save_and_restore(string_default='modified') + @CONF.save_and_restore(string_default='modified') def modifies_conf(): - self.assertEqual('modified', conf.string_default) + self.assertEqual('modified', CONF.string_default) - self.assertEqual('default', conf.string_default) + self.assertEqual('default', CONF.string_default) modifies_conf() - self.assertEqual('default', conf.string_default) + self.assertEqual('default', CONF.string_default) def test_inject_positional_args(self): - @conf.inject_positional_args + @CONF.inject_positional_args def test_function(string_default, no_default, not_declared): self.assertEqual('default', string_default) self.assertEqual('passed_value', no_default) @@ -181,7 +187,7 @@ def test_function(string_default, no_default, not_declared): def test_inject_positional_args_overrides(self): - @conf.inject_positional_args + @CONF.inject_positional_args def test_function(string_default, none_default='new_default'): # Make sure when we pass a kwarg, it overrides the config value. self.assertEqual('overridden', string_default) @@ -194,9 +200,90 @@ def test_inject_positional_args_class(self): class TestClass(object): - @conf.inject_positional_args + @CONF.inject_positional_args def __init__(self, string_default): self.string_default = string_default instance = TestClass() # pylint: disable=no-value-for-parameter self.assertEqual('default', instance.string_default) # pytype: disable=attribute-error + + +class ConfigValueHolderTest(TestConfBase): + + def test_raises_if_equals_attempted_on_holder(self): + with self.assertRaises(TypeError): + print(NUM_VALUE == 100) + + def test_raises_if_bool_attempted_on_holder(self): + with self.assertRaises(TypeError): + if NUM_VALUE: + print('This should not print') + + def test_name_property_access(self): + self.assertEqual(FLAG_KEY.name, 'flag_key') + self.assertEqual(JSON_TEST_KEY.name, 'json_test_key') + self.assertEqual(NONE_DEFAULT.name, 'none_default') + + def test_default_property_access(self): + self.assertIsNone(NONE_DEFAULT.default) + self.assertEqual(STRING_DEFAULT.default, 'default') + with self.assertRaises(configuration.DefaultNotDefinedError): + print(JSON_TEST_KEY.default) + + def test_value_access_on_unset_config_raises(self): + with self.assertRaises(configuration.UnsetKeyError): + print(NO_DEFAULT.value) + + def test_value_access_on_unset_config_with_default_returns_default(self): + self.assertEqual(STRING_DEFAULT.value, 'default') + self.assertEqual(STRING_DEFAULT.value, getattr(CONF, STRING_DEFAULT.name)) + self.assertEqual(STRING_DEFAULT.value, STRING_DEFAULT.default) + + def test_set_config_property_access_success(self): + self.assertEqual(FLAG_KEY.value, 'flag_value') + with io.open(self.YAML_FILENAME, encoding='utf-8') as yaml_file: + CONF._flags.config_file = yaml_file + CONF.reset() + self.assertEqual(CONF.yaml_test_key, 'yaml_test_value') + self.assertEqual(YAML_TEST_KEY.value, CONF.yaml_test_key) + + +class AModuleLevelClass: + """Classdef for testing bind_init_args.""" + + def __init__(self, arg1, arg2, default_arg=None): + self.arg1 = arg1 + self.arg2 = arg2 + self.default_arg = default_arg + + +class BindInitArgsTest(TestConfBase): + + class ANestedClass: + """Classdef for testing bind_init_args.""" + + def __init__(self, arg1, arg2, default_arg=None): + self.arg1 = arg1 + self.arg2 = arg2 + self.default_arg = default_arg + + def _run_test_with_classdef(self, class_def): + new_def = configuration.bind_init_args( + class_def, FLAG_KEY, arg2=NONE_DEFAULT) + new_def_instance = new_def() # pytype: disable=missing-parameter + self.assertIsInstance(new_def_instance, class_def) + self.assertEqual(new_def_instance.arg1, FLAG_KEY.value) # pytype: disable=attribute-error # kwargs-checking + self.assertEqual(new_def_instance.arg2, NONE_DEFAULT.value) # pytype: disable=attribute-error # kwargs-checking + self.assertIsNone(new_def_instance.default_arg) # pytype: disable=attribute-error # kwargs-checking + self.assertIn(class_def.__doc__, new_def_instance.__class__.__doc__) + self.assertEqual(new_def_instance.__class__.__module__, + class_def.__module__) + self.assertIn(class_def.__name__, new_def_instance.__class__.__name__) + self.assertIn(class_def.__qualname__, + new_def_instance.__class__.__qualname__) + + def test_with_module_level_class_success(self): + self._run_test_with_classdef(AModuleLevelClass) + + def test_with_nested_class_success(self): + self._run_test_with_classdef(self.ANestedClass) diff --git a/test/util/test_test.py b/test/util/test_test.py index 39c42a688..af139999a 100644 --- a/test/util/test_test.py +++ b/test/util/test_test.py @@ -12,7 +12,12 @@ # See the License for the specific language governing permissions and # limitations under the License. +import io import logging +import os +import pathlib +import pstats +import tempfile import unittest from unittest import mock @@ -272,3 +277,63 @@ def bad_test(cls_self): # pylint: disable=unused-argument # wrapping the yield statement in the assertRaises context. with self.assertRaises(test.InvalidTestError): test.yields_phases(bad_test)(self) + + +class PhaseProfilingTest(test.TestCase): + """Test profiling an OpenHTF phase in unit testing. + + Do this in its own fixture to avoid noise from other test methods. + """ + + @classmethod + def setUpClass(cls): + super().setUpClass() + cls._profile_tempdir = tempfile.TemporaryDirectory() + cls.set_profile_dir(pathlib.Path(cls._profile_tempdir.name)) + + @classmethod + def tearDownClass(cls): + super().tearDownClass() + cls._profile_tempdir.cleanup() + + def test_profile_phase(self): + self.execute_phase_or_test(test_phase_with_shameless_plug) + with io.StringIO() as output_stream: + stats = pstats.Stats( + str(self.get_profile_filepath()), stream=output_stream) + stats.print_stats(test_phase_with_shameless_plug.name) + output_stream.seek(0) + output = output_stream.read() + self.assertIn( + test_phase_with_shameless_plug.func.__module__.replace( + '.', os.path.sep), output) + + +class TestProfilingTest(test.TestCase): + """Test profiling an OpenHTF test in unit testing. + + Do this in its own fixture to avoid noise from other test methods. + """ + + @classmethod + def setUpClass(cls): + super().setUpClass() + cls._profile_tempdir = tempfile.TemporaryDirectory() + cls.set_profile_dir(pathlib.Path(cls._profile_tempdir.name)) + + @classmethod + def tearDownClass(cls): + super().tearDownClass() + cls._profile_tempdir.cleanup() + + def test_profile_test(self): + self.execute_phase_or_test(openhtf.Test(test_phase_with_shameless_plug)) + with io.StringIO() as output_stream: + stats = pstats.Stats( + str(self.get_profile_filepath()), stream=output_stream) + stats.print_stats(test_phase_with_shameless_plug.name) + output_stream.seek(0) + output = output_stream.read() + self.assertIn( + test_phase_with_shameless_plug.func.__module__.replace( + '.', os.path.sep), output) From 08e1d0d42d2521c1c21ec04f4525ffb4ea14f20a Mon Sep 17 00:00:00 2001 From: Gauthier Dieppedalle Date: Wed, 25 May 2022 12:39:36 -0700 Subject: [PATCH 005/129] Added support for Python version 3.9. (#1005) --- .github/workflows/build_and_deploy.yml | 2 +- setup.py | 5 ++--- tox.ini | 3 ++- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build_and_deploy.yml b/.github/workflows/build_and_deploy.yml index 264b33381..9baad8282 100644 --- a/.github/workflows/build_and_deploy.yml +++ b/.github/workflows/build_and_deploy.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ['3.6', '3.7'] + python-version: ['3.6', '3.7', '3.9'] steps: - uses: actions/checkout@v3 diff --git a/setup.py b/setup.py index 6a4ae0ab8..66a105559 100644 --- a/setup.py +++ b/setup.py @@ -218,9 +218,8 @@ def run_tests(self): tests_require=[ 'absl-py>=0.10.0', 'mock>=2.0.0', - # Remove max version here after we drop Python 2 support. - 'pandas>=0.22.0,<0.25.0', - 'numpy<1.17.0', + 'pandas>=0.22.0', + 'numpy', 'pytest>=2.9.2', 'pytest-cov>=2.2.1', ], diff --git a/tox.ini b/tox.ini index 9e08057d5..60a43780e 100644 --- a/tox.ini +++ b/tox.ini @@ -1,10 +1,11 @@ [tox] -envlist = py36,py37 +envlist = py36,py37,py39 [gh-actions] python = 3.6: py36 3.7: py37 + 3.9: py39 [testenv] deps = -r{toxinidir}/test_reqs.txt From c85fb069a1ce407e82bb47a8fb1b64220e974c5f Mon Sep 17 00:00:00 2001 From: Gauthier Dieppedalle Date: Thu, 26 May 2022 18:31:12 -0700 Subject: [PATCH 006/129] Removed support for PY2. (#1009) * Removed support for PY2. * Resolving imports from collections.abc module. * Use abc.ABC instead of abc.ABCMeta. * Adding back the line that converts bytes to strings. --- bin/units_from_xls.py | 13 ++++---- examples/all_the_things.py | 2 -- openhtf/core/diagnoses_lib.py | 13 ++++---- openhtf/core/measurements.py | 13 ++++---- openhtf/core/monitors.py | 11 ++----- openhtf/core/phase_branches.py | 5 ++- openhtf/core/phase_collections.py | 8 ++--- openhtf/core/phase_descriptor.py | 26 +++++----------- openhtf/core/phase_nodes.py | 3 +- openhtf/core/test_descriptor.py | 4 +-- openhtf/core/test_executor.py | 11 ++++--- openhtf/core/test_record.py | 7 ++--- openhtf/core/test_state.py | 9 ++---- openhtf/output/callbacks/__init__.py | 17 +++++------ openhtf/output/callbacks/console_summary.py | 3 +- openhtf/output/callbacks/json_factory.py | 3 +- openhtf/output/callbacks/mfg_inspector.py | 4 +-- openhtf/output/proto/mfg_event_converter.py | 15 +++------ openhtf/output/proto/test_runs_converter.py | 11 +++---- openhtf/output/servers/dashboard_server.py | 3 +- openhtf/output/servers/station_server.py | 3 +- openhtf/plugs/__init__.py | 11 +++---- openhtf/plugs/device_wrapping.py | 3 +- openhtf/plugs/usb/adb_device.py | 8 ++--- openhtf/plugs/usb/adb_message.py | 3 +- openhtf/plugs/usb/adb_protocol.py | 11 +++---- openhtf/plugs/usb/fastboot_protocol.py | 10 +++--- openhtf/plugs/usb/filesync_service.py | 3 +- openhtf/plugs/usb/local_usb.py | 5 ++- openhtf/plugs/usb/shell_service.py | 5 ++- openhtf/plugs/usb/usb_handle.py | 3 +- openhtf/plugs/user_input.py | 1 - openhtf/util/__init__.py | 6 ++-- openhtf/util/configuration.py | 10 ++---- openhtf/util/data.py | 31 ++++++++----------- openhtf/util/functions.py | 16 +++------- openhtf/util/logs.py | 5 ++- openhtf/util/multicast.py | 3 +- openhtf/util/test.py | 34 +++++++++------------ openhtf/util/threads.py | 11 +++---- openhtf/util/validators.py | 14 ++++----- openhtf/util/xmlrpcutil.py | 20 +++--------- setup.py | 4 --- test/core/diagnoses_test.py | 13 ++++---- test/core/exe_test.py | 2 +- test/core/measurements_test.py | 2 +- test/core/monitors_test.py | 4 +-- test/core/phase_branches_test.py | 3 +- test/core/phase_collections_test.py | 2 +- test/core/phase_group_test.py | 2 +- test/core/test_descriptor_test.py | 2 +- test/test_state_test.py | 2 +- test/util/conf_test.py | 3 +- test/util/data_test.py | 5 --- test/util/functions_test.py | 2 +- test/util/logs_test.py | 2 +- test/util/util_test.py | 2 +- test/util/validators_test.py | 7 ++--- test_reqs.txt | 1 - 59 files changed, 172 insertions(+), 283 deletions(-) diff --git a/bin/units_from_xls.py b/bin/units_from_xls.py index 36bc70188..824f180c0 100644 --- a/bin/units_from_xls.py +++ b/bin/units_from_xls.py @@ -44,7 +44,6 @@ import sys import tempfile -import six import xlrd # Column names for the columns we care about. This list must be populated in @@ -163,10 +162,10 @@ def __call__(self, name_or_suffix): '15': 'FIFTEEN', '30': 'THIRTY', '\\': '_', - six.unichr(160): '_', # NO-BREAK SPACE - six.unichr(176): 'DEG_', # DEGREE SIGN - six.unichr(186): 'DEG_', # MASCULINE ORDINAL INDICATOR - six.unichr(8211): '_', # EN DASH + chr(160): '_', # NO-BREAK SPACE + chr(176): 'DEG_', # DEGREE SIGN + chr(186): 'DEG_', # MASCULINE ORDINAL INDICATOR + chr(8211): '_', # EN DASH } @@ -222,7 +221,7 @@ def unit_defs_from_sheet(sheet, column_names): rows = sheet.get_rows() # Find the indices for the columns we care about. - for idx, cell in enumerate(six.next(rows)): + for idx, cell in enumerate(next(rows)): if cell.value in column_names: col_indices[cell.value] = idx @@ -250,7 +249,7 @@ def unit_key_from_name(name): """Return a legal python name for the given name for use as a unit key.""" result = name - for old, new in six.iteritems(UNIT_KEY_REPLACEMENTS): + for old, new in UNIT_KEY_REPLACEMENTS.items(): result = result.replace(old, new) # Collapse redundant underscores and convert to uppercase. diff --git a/examples/all_the_things.py b/examples/all_the_things.py index 5109a8bed..199bb5a9a 100644 --- a/examples/all_the_things.py +++ b/examples/all_the_things.py @@ -28,8 +28,6 @@ from openhtf.output.callbacks import json_factory from openhtf.plugs import user_input from openhtf.util import units -from six.moves import range -from six.moves import zip @htf.plug(example=example_plugs.example_plug_configured) diff --git a/openhtf/core/diagnoses_lib.py b/openhtf/core/diagnoses_lib.py index 281256a0d..e8eeed51a 100644 --- a/openhtf/core/diagnoses_lib.py +++ b/openhtf/core/diagnoses_lib.py @@ -122,15 +122,14 @@ def main(): """ import abc +from collections.abc import Iterable as CollectionsIterable +import enum import logging from typing import Any, Callable, Dict, Iterable, List, Optional, Sequence, Text, Type, TYPE_CHECKING, Union import attr -import enum # pylint: disable=g-bad-import-order from openhtf.core import test_record from openhtf.util import data -import six -from six.moves import collections_abc if TYPE_CHECKING: from openhtf.core import test_state # pylint: disable=g-import-not-at-top @@ -204,8 +203,8 @@ def _convert_result(self, return elif isinstance(diagnosis_or_diagnoses, Diagnosis): yield self._verify_and_fix_diagnosis(diagnosis_or_diagnoses, diagnoser) - elif (isinstance(diagnosis_or_diagnoses, six.string_types) or - not isinstance(diagnosis_or_diagnoses, collections_abc.Iterable)): + elif (isinstance(diagnosis_or_diagnoses, str) or + not isinstance(diagnosis_or_diagnoses, CollectionsIterable)): raise InvalidDiagnosisError( 'Diagnoser {} must return a single Diagnosis or an iterable ' 'of them.'.format(diagnoser.name)) @@ -328,7 +327,7 @@ def _check_definition(self) -> None: pass -class BasePhaseDiagnoser(six.with_metaclass(abc.ABCMeta, _BaseDiagnoser)): +class BasePhaseDiagnoser(_BaseDiagnoser, abc.ABC): """Base class for using an object to define a Phase diagnoser.""" __slots__ = () @@ -377,7 +376,7 @@ def _check_definition(self) -> None: 'PhaseDiagnoser run function not defined for {}'.format(self.name)) -class BaseTestDiagnoser(six.with_metaclass(abc.ABCMeta, _BaseDiagnoser)): +class BaseTestDiagnoser(_BaseDiagnoser, abc.ABC): """Base class for using an object to define a Test diagnoser.""" __slots__ = () diff --git a/openhtf/core/measurements.py b/openhtf/core/measurements.py index d5c3194e8..1c0ab344e 100644 --- a/openhtf/core/measurements.py +++ b/openhtf/core/measurements.py @@ -71,7 +71,6 @@ def WidgetTestPhase(test): from openhtf.util import data from openhtf.util import units as util_units from openhtf.util import validators -import six if typing.TYPE_CHECKING: from openhtf.core import diagnoses_lib @@ -147,7 +146,7 @@ def _coordinates_len(coordinates: Any) -> int: coordinates: any type, measurement coordinates for multidimensional measurements. """ - if isinstance(coordinates, six.string_types): + if isinstance(coordinates, str): return 1 if hasattr(coordinates, '__len__'): return len(coordinates) @@ -361,7 +360,7 @@ def validate_on( Returns: This measurement, used for chaining operations. """ - for result, validator in six.iteritems(result_to_validator_mapping): + for result, validator in result_to_validator_mapping.items(): if not callable(validator): raise ValueError('Validator must be callable', validator) self.conditional_validators.append( @@ -658,7 +657,7 @@ def is_value_set(self) -> bool: def __iter__(self) -> Iterator[Any]: """Iterate over items, allows easy conversion to a dict.""" - return iter(six.iteritems(self.value_dict)) + return iter(self.value_dict.items()) def __setitem__(self, coordinates: Any, value: Any) -> None: coordinates_len = _coordinates_len(coordinates) @@ -717,14 +716,14 @@ def value(self) -> List[Any]: raise MeasurementNotSetError('Measurement not yet set', self.name) return [ dimensions + (value,) - for dimensions, value in six.iteritems(self.value_dict) + for dimensions, value in self.value_dict.items() ] def basetype_value(self) -> List[Any]: if self._cached_basetype_values is None: self._cached_basetype_values = list( data.convert_to_base_types(coordinates + (value,)) - for coordinates, value in six.iteritems(self.value_dict)) + for coordinates, value in self.value_dict.items()) return self._cached_basetype_values def to_dataframe(self, columns: Any = None) -> Any: @@ -791,7 +790,7 @@ def _assert_valid_key(self, name: Text) -> None: def __iter__(self) -> Iterator[Tuple[Text, Any]]: """Extract each MeasurementValue's value.""" return ((key, meas.measured_value.value) - for key, meas in six.iteritems(self._measurements)) + for key, meas in self._measurements.items()) def _custom_setattr(self, name: Text, value: Any) -> None: if name == '_measurements': diff --git a/openhtf/core/monitors.py b/openhtf/core/monitors.py index a9a7ff256..02cc60d1a 100644 --- a/openhtf/core/monitors.py +++ b/openhtf/core/monitors.py @@ -76,14 +76,9 @@ def __init__(self, measurement_name: Text, self.extra_kwargs = extra_kwargs def get_value(self) -> Any: - if six.PY3: - argspec = inspect.getfullargspec(self.monitor_desc.func) - argspec_args = argspec.args - argspec_keywords = argspec.varkw - else: - argspec = inspect.getargspec(self.monitor_desc.func) # pylint: disable=deprecated-method - argspec_args = argspec.args - argspec_keywords = argspec.keywords + argspec = inspect.getfullargspec(self.monitor_desc.func) + argspec_args = argspec.args + argspec_keywords = argspec.varkw if argspec_keywords: # Monitor phase takes **kwargs, so just pass everything in. kwargs = self.extra_kwargs diff --git a/openhtf/core/phase_branches.py b/openhtf/core/phase_branches.py index bfae81ee8..e5fef7739 100644 --- a/openhtf/core/phase_branches.py +++ b/openhtf/core/phase_branches.py @@ -19,10 +19,10 @@ """ import abc +import enum from typing import Any, Callable, Dict, Iterator, Text, Tuple, TYPE_CHECKING, Union import attr -import enum # pylint: disable=g-bad-import-order from openhtf import util from openhtf.core import diagnoses_lib from openhtf.core import phase_collections @@ -30,7 +30,6 @@ from openhtf.core import phase_nodes from openhtf.core import test_record from openhtf.util import data -import six if TYPE_CHECKING: from openhtf.core import test_state # pylint: disable=g-import-not-at-top @@ -142,7 +141,7 @@ def should_run(self, diag_store: diagnoses_lib.DiagnosesStore) -> bool: @attr.s(slots=True, frozen=True) -class Checkpoint(six.with_metaclass(abc.ABCMeta, phase_nodes.PhaseNode)): +class Checkpoint(phase_nodes.PhaseNode, abc.ABC): """Nodes that check for phase failures or if diagnoses were triggered. When the condition for a checkpoint is triggered, a STOP or FAIL_SUBTEST diff --git a/openhtf/core/phase_collections.py b/openhtf/core/phase_collections.py index 3d5de752d..97a3ade36 100644 --- a/openhtf/core/phase_collections.py +++ b/openhtf/core/phase_collections.py @@ -22,6 +22,7 @@ import abc import collections +from collections.abc import Iterable as CollectionsIterable from typing import Any, Callable, DefaultDict, Dict, Iterable, Iterator, List, Optional, Text, Tuple, Type, TypeVar, Union import attr @@ -29,8 +30,6 @@ from openhtf.core import base_plugs from openhtf.core import phase_descriptor from openhtf.core import phase_nodes -import six -from six.moves import collections_abc NodeType = TypeVar('NodeType', bound=phase_nodes.PhaseNode) SequenceClassT = TypeVar('SequenceClassT', bound='PhaseSequence') @@ -45,7 +44,7 @@ class DuplicateSubtestNamesError(Exception): def _recursive_flatten(n: Any) -> Iterator[phase_nodes.PhaseNode]: """Yields flattened phase nodes.""" - if isinstance(n, collections_abc.Iterable): + if isinstance(n, CollectionsIterable): for it in n: for node in _recursive_flatten(it): yield node @@ -62,8 +61,7 @@ def flatten(n: Any) -> List[phase_nodes.PhaseNode]: return list(_recursive_flatten(n)) -class PhaseCollectionNode( - six.with_metaclass(abc.ABCMeta, phase_nodes.PhaseNode)): +class PhaseCollectionNode(phase_nodes.PhaseNode, abc.ABC): """Base class for a node that contains multiple other phase nodes.""" __slots__ = () diff --git a/openhtf/core/phase_descriptor.py b/openhtf/core/phase_descriptor.py index 30ba9a443..be2f72802 100644 --- a/openhtf/core/phase_descriptor.py +++ b/openhtf/core/phase_descriptor.py @@ -37,8 +37,6 @@ import openhtf.plugs from openhtf.util import data -import six - if TYPE_CHECKING: from openhtf.core import test_state # pylint: disable=g-import-not-at-top @@ -134,7 +132,7 @@ def format_strings(self, **kwargs: Any) -> 'PhaseOptions': return data.attr_copy(self, name=util.format_string(self.name, kwargs)) def update(self, **kwargs: Any) -> None: - for key, value in six.iteritems(kwargs): + for key, value in kwargs.items(): setattr(self, key, value) def __call__(self, phase_func: PhaseT) -> 'PhaseDescriptor': @@ -245,14 +243,10 @@ def with_args(self, **kwargs: Any) -> 'PhaseDescriptor': Returns: Updated PhaseDescriptor. """ - if six.PY3: - argspec = inspect.getfullargspec(self.func) - argspec_keywords = argspec.varkw - else: - argspec = inspect.getargspec(self.func) # pylint: disable=deprecated-method - argspec_keywords = argspec.keywords + argspec = inspect.getfullargspec(self.func) + argspec_keywords = argspec.varkw known_arguments = {} - for key, arg in six.iteritems(kwargs): + for key, arg in kwargs.items(): if key in argspec.args or argspec_keywords: known_arguments[key] = arg @@ -283,7 +277,7 @@ def with_plugs(self, plugs_by_name = {plug.name: plug for plug in self.plugs} new_plugs = {} - for name, sub_class in six.iteritems(subplugs): + for name, sub_class in subplugs.items(): original_plug = plugs_by_name.get(name) accept_substitute = True if original_plug is None: @@ -341,12 +335,8 @@ def __call__(self, The return value from calling the underlying function. """ kwargs = {} - if six.PY3: - arg_info = inspect.getfullargspec(self.func) - keywords = arg_info.varkw - else: - arg_info = inspect.getargspec(self.func) # pylint: disable=deprecated-method - keywords = arg_info.keywords + arg_info = inspect.getfullargspec(self.func) + keywords = arg_info.varkw if arg_info.defaults is not None: for arg_name, arg_value in zip(arg_info.args[-len(arg_info.defaults):], arg_info.defaults): @@ -419,7 +409,7 @@ def _maybe_make( """Turn strings into Measurement objects if necessary.""" if isinstance(meas, core_measurements.Measurement): return meas - elif isinstance(meas, six.string_types): + elif isinstance(meas, str): return core_measurements.Measurement(meas, **kwargs) raise core_measurements.InvalidMeasurementTypeError( 'Expected Measurement or string', meas) diff --git a/openhtf/core/phase_nodes.py b/openhtf/core/phase_nodes.py index d929bbdfa..01d023cae 100644 --- a/openhtf/core/phase_nodes.py +++ b/openhtf/core/phase_nodes.py @@ -19,7 +19,6 @@ from openhtf.core import base_plugs from openhtf.util import data -import six if TYPE_CHECKING: from openhtf.core import phase_descriptor # pylint: disable=g-import-not-at-top @@ -28,7 +27,7 @@ ApplyAllNodesT = TypeVar('ApplyAllNodesT', bound='PhaseNode') -class PhaseNode(six.with_metaclass(abc.ABCMeta, object)): +class PhaseNode(abc.ABC): """Base class for all executable nodes in OpenHTF.""" __slots__ = () diff --git a/openhtf/core/test_descriptor.py b/openhtf/core/test_descriptor.py index 3e1e7ef57..cb5a62f7f 100644 --- a/openhtf/core/test_descriptor.py +++ b/openhtf/core/test_descriptor.py @@ -50,8 +50,6 @@ from openhtf.util import console_output from openhtf.util import logs -import six - CONF = configuration.CONF _LOG = logging.getLogger(__name__) @@ -247,7 +245,7 @@ def configure(self, **kwargs: Any) -> None: sys.stdout.write(CONF.help_text) sys.exit(0) logs.configure_logging() - for key, value in six.iteritems(kwargs): + for key, value in kwargs.items(): setattr(self._test_options, key, value) @classmethod diff --git a/openhtf/core/test_executor.py b/openhtf/core/test_executor.py index b2f901b25..fba61b2c4 100644 --- a/openhtf/core/test_executor.py +++ b/openhtf/core/test_executor.py @@ -175,11 +175,12 @@ def wait(self) -> None: """Waits until death.""" # Must use a timeout here in case this is called from the main thread. # Otherwise, the SIGINT abort logic in test_descriptor will not get called. - timeout = 31557600 # Seconds in a year. - if sys.version_info >= (3, 2): - # TIMEOUT_MAX can be too large and cause overflows on 32-bit OSes, so take - # whichever timeout is shorter. - timeout = min(threading.TIMEOUT_MAX, timeout) # pytype: disable=module-attr + # TIMEOUT_MAX can be too large and cause overflows on 32-bit OSes, so take + # whichever timeout is shorter. + timeout = min( + threading.TIMEOUT_MAX, + 31557600, # Seconds in a year. + ) self.join(timeout) def _thread_proc(self) -> None: diff --git a/openhtf/core/test_record.py b/openhtf/core/test_record.py index 56461dcd5..bddce0357 100644 --- a/openhtf/core/test_record.py +++ b/openhtf/core/test_record.py @@ -13,6 +13,7 @@ # limitations under the License. """OpenHTF module responsible for managing records of tests.""" +import enum import hashlib import inspect import logging @@ -21,15 +22,12 @@ from typing import Any, Dict, List, Optional, Text, TYPE_CHECKING, Union import attr -import enum # pylint: disable=g-bad-import-order from openhtf import util from openhtf.util import configuration from openhtf.util import data from openhtf.util import logs -import six - CONF = configuration.CONF if TYPE_CHECKING: @@ -83,7 +81,8 @@ class Attachment(object): size = attr.ib(type=int) def __init__(self, contents: Union[Text, bytes], mimetype: Text): - contents = six.ensure_binary(contents) + if isinstance(contents, str): + contents = contents.encode() self.mimetype = mimetype self.sha1 = hashlib.sha1(contents).hexdigest() self.size = len(contents) diff --git a/openhtf/core/test_state.py b/openhtf/core/test_state.py index 805f87900..6325c92ca 100644 --- a/openhtf/core/test_state.py +++ b/openhtf/core/test_state.py @@ -48,8 +48,6 @@ from openhtf.util import data from openhtf.util import logs from openhtf.util import units -from past.builtins import long -import six from typing_extensions import Literal CONF = configuration.CONF @@ -559,7 +557,7 @@ class PhaseState(object): _update_measurements = attr.ib(type=Set[Text], factory=set) def __attrs_post_init__(self): - for m in six.itervalues(self.measurements): + for m in self.measurements.values(): # Using functools.partial to capture the value of the loop variable. m.set_notification_callback(functools.partial(self._notify, m.name)) self._cached = { @@ -573,11 +571,10 @@ def __attrs_post_init__(self): 'options': None, 'measurements': { - k: m.as_base_types() for k, m in six.iteritems(self.measurements) + k: m.as_base_types() for k, m in self.measurements.items() }, 'attachments': {}, - 'start_time_millis': - long(self.phase_record.record_start_time()), + 'start_time_millis': self.phase_record.record_start_time(), 'subtest_name': None, } diff --git a/openhtf/output/callbacks/__init__.py b/openhtf/output/callbacks/__init__.py index 0002a9ac6..b4c683fc2 100644 --- a/openhtf/output/callbacks/__init__.py +++ b/openhtf/output/callbacks/__init__.py @@ -19,7 +19,9 @@ examples. """ +from collections.abc import Iterable import contextlib +import pickle import shutil import tempfile import typing @@ -28,9 +30,6 @@ from openhtf import util from openhtf.core import test_record from openhtf.util import data -import six -from six.moves import collections_abc -from six.moves import cPickle as pickle SerializedTestRecord = Union[Text, bytes, Iterator[Union[Text, bytes]]] @@ -56,7 +55,7 @@ class CloseAttachments(object): def __call__(self, test_rec: test_record.TestRecord) -> None: for phase_rec in test_rec.phases: - for attachment in six.itervalues(phase_rec.attachments): + for attachment in phase_rec.attachments.values(): attachment.close() @@ -81,7 +80,7 @@ def __init__(self, filename_pattern_or_file: Union[Text, Callable[..., Text], BinaryIO]): self.filename_pattern = None # type: Optional[Union[Text, Callable[..., Text]]] self.output_file = None # type: Optional[BinaryIO] - if (isinstance(filename_pattern_or_file, six.string_types) or + if (isinstance(filename_pattern_or_file, str) or callable(filename_pattern_or_file)): self.filename_pattern = filename_pattern_or_file # pytype: disable=annotation-type-mismatch else: @@ -130,11 +129,11 @@ def open_output_file( def __call__(self, test_rec: test_record.TestRecord) -> None: with self.open_output_file(test_rec) as outfile: serialized_record = self.serialize_test_record(test_rec) - if isinstance(serialized_record, six.string_types): - outfile.write(six.ensure_binary(serialized_record)) - elif isinstance(serialized_record, collections_abc.Iterable): + if isinstance(serialized_record, str): + outfile.write(serialized_record.encode()) + elif isinstance(serialized_record, Iterable): for chunk in serialized_record: - outfile.write(six.ensure_binary(chunk)) + outfile.write(chunk.encode()) else: raise TypeError('Expected string or iterable but got {}.'.format( type(serialized_record))) diff --git a/openhtf/output/callbacks/console_summary.py b/openhtf/output/callbacks/console_summary.py index e351dcb74..9a261cf1a 100644 --- a/openhtf/output/callbacks/console_summary.py +++ b/openhtf/output/callbacks/console_summary.py @@ -5,7 +5,6 @@ from openhtf.core import measurements from openhtf.core import test_record -import six class ConsoleSummary(): @@ -48,7 +47,7 @@ def __call__(self, record): new_phase = True phase_time_sec = (float(phase.end_time_millis) - float(phase.start_time_millis)) / 1000.0 - for name, measurement in six.iteritems(phase.measurements): + for name, measurement in phase.measurements.items(): if measurement.outcome != measurements.Outcome.PASS: if new_phase: output_lines.append('failed phase: %s [ran for %.2f sec]' % diff --git a/openhtf/output/callbacks/json_factory.py b/openhtf/output/callbacks/json_factory.py index e410f24ab..71efdd935 100644 --- a/openhtf/output/callbacks/json_factory.py +++ b/openhtf/output/callbacks/json_factory.py @@ -7,7 +7,6 @@ from openhtf.core import test_record from openhtf.output import callbacks from openhtf.util import data -import six class TestRecordEncoder(json.JSONEncoder): @@ -40,7 +39,7 @@ def convert_test_record_to_json( as_dict = data.convert_to_base_types(test_rec, json_safe=(not allow_nan)) if inline_attachments: for phase, original_phase in zip(as_dict['phases'], test_rec.phases): - for name, attachment in six.iteritems(original_phase.attachments): + for name, attachment in original_phase.attachments.items(): phase['attachments'][name] = attachment return as_dict diff --git a/openhtf/output/callbacks/mfg_inspector.py b/openhtf/output/callbacks/mfg_inspector.py index 45c06eda5..5c2e69da2 100644 --- a/openhtf/output/callbacks/mfg_inspector.py +++ b/openhtf/output/callbacks/mfg_inspector.py @@ -13,8 +13,6 @@ from openhtf.output import callbacks from openhtf.output.proto import guzzle_pb2 from openhtf.output.proto import test_runs_converter -import six -from six.moves import range class UploadFailedError(Exception): @@ -150,7 +148,7 @@ def __init__(self, if user and keydata: self.credentials = oauth2client.client.SignedJwtAssertionCredentials( service_account_name=self.user, - private_key=six.ensure_binary(self.keydata), + private_key=self.keydata.encode(), scope=self.SCOPE_CODE_URI, user_agent='OpenHTF Guzzle Upload Client', token_uri=self.token_uri) diff --git a/openhtf/output/proto/mfg_event_converter.py b/openhtf/output/proto/mfg_event_converter.py index 2b3af5549..273b8fa53 100644 --- a/openhtf/output/proto/mfg_event_converter.py +++ b/openhtf/output/proto/mfg_event_converter.py @@ -26,8 +26,6 @@ from openhtf.util import data as htf_data from openhtf.util import units from openhtf.util import validators -from past.builtins import unicode -import six TEST_RECORD_ATTACHMENT_NAME = 'OpenHTF_record.json' @@ -214,8 +212,8 @@ def _convert_object_to_json(obj): # pylint: disable=missing-function-docstring def unsupported_type_handler(o): # For bytes, JSONEncoder will fallback to this function to convert to str. - if six.PY3 and isinstance(o, six.binary_type): - return six.ensure_str(o, encoding='utf-8', errors='replace') + if isinstance(o, bytes): + return o.decode(encoding='utf-8', errors='replace') elif isinstance(o, (datetime.date, datetime.datetime)): return o.isoformat() else: @@ -319,7 +317,7 @@ def multidim_measurement_to_attachment(name, measurement): if d.suffix is None: suffix = u'' else: - suffix = six.ensure_text(d.suffix) + suffix = d.suffix dims.append({ 'uom_suffix': suffix, 'uom_code': d.code, @@ -421,12 +419,7 @@ def _copy_unidimensional_measurement(self, phase, name, measurement, if isinstance(value, numbers.Number): mfg_measurement.numeric_value = float(value) elif isinstance(value, bytes): - # text_value expects unicode or ascii-compatible strings, so we must - # 'decode' it, even if it's actually just garbage bytestring data. - mfg_measurement.text_value = unicode(value, errors='replace') # pytype: disable=wrong-keyword-args - elif isinstance(value, unicode): - # Don't waste time and potential errors decoding unicode. - mfg_measurement.text_value = value + mfg_measurement.text_value = value.decode(errors='replace') else: # Coercing to string. mfg_measurement.text_value = str(value) diff --git a/openhtf/output/proto/test_runs_converter.py b/openhtf/output/proto/test_runs_converter.py index 873b3de8b..73a07d763 100644 --- a/openhtf/output/proto/test_runs_converter.py +++ b/openhtf/output/proto/test_runs_converter.py @@ -36,7 +36,6 @@ from openhtf.output.callbacks import json_factory from openhtf.output.proto import test_runs_pb2 from openhtf.util import validators -import six # pylint: disable=g-complex-comprehension @@ -60,8 +59,8 @@ UOM_CODE_MAP = { u.GetOptions().Extensions[ test_runs_pb2.uom_code]: num - for num, u in six.iteritems( - test_runs_pb2.Units.UnitCode.DESCRIPTOR.values_by_number) + for num, u in + test_runs_pb2.Units.UnitCode.DESCRIPTOR.values_by_number.items() } # pylint: enable=no-member @@ -147,7 +146,7 @@ def _attach_json(record, testrun): def _extract_attachments(phase, testrun, used_parameter_names): """Extract attachments, just copy them over.""" - for name, attachment in sorted(six.iteritems(phase.attachments)): + for name, attachment in sorted(phase.attachments.items()): attachment_data, mimetype = attachment.data, attachment.mimetype name = _ensure_unique_parameter_name(name, used_parameter_names) testrun_param = testrun.info_parameters.add() @@ -207,7 +206,7 @@ def _extract_parameters(record, testrun, used_parameter_names): mangled_parameters = {} for phase in record.phases: _extract_attachments(phase, testrun, used_parameter_names) - for name, measurement in sorted(six.iteritems(phase.measurements)): + for name, measurement in sorted(phase.measurements.items()): tr_name = _ensure_unique_parameter_name(name, used_parameter_names) testrun_param = testrun.test_parameters.add() testrun_param.name = tr_name @@ -279,7 +278,7 @@ def _extract_parameters(record, testrun, used_parameter_names): def _add_mangled_parameters(testrun, mangled_parameters, used_parameter_names): """Add any mangled parameters we generated from multidim measurements.""" - for mangled_name, mangled_param in sorted(six.iteritems(mangled_parameters)): + for mangled_name, mangled_param in sorted(mangled_parameters.items()): if mangled_name != _ensure_unique_parameter_name(mangled_name, used_parameter_names): logging.warning('Mangled name %s in use by non-mangled parameter', diff --git a/openhtf/output/servers/dashboard_server.py b/openhtf/output/servers/dashboard_server.py index 76db03c97..21fb22200 100644 --- a/openhtf/output/servers/dashboard_server.py +++ b/openhtf/output/servers/dashboard_server.py @@ -18,7 +18,6 @@ from openhtf.output.web_gui import web_launcher from openhtf.util import data from openhtf.util import multicast -import six import sockjs.tornado import tornado.web @@ -90,7 +89,7 @@ def update_stations(cls, station_info_list): with cls.station_map_lock: # By default, assume old stations are unreachable. - for host_port, station_info in six.iteritems(cls.station_map): + for host_port, station_info in cls.station_map.items(): cls.station_map[host_port] = station_info._replace(status='UNREACHABLE') for station_info in station_info_list: diff --git a/openhtf/output/servers/station_server.py b/openhtf/output/servers/station_server.py index 9feb4bda7..a35598bc5 100644 --- a/openhtf/output/servers/station_server.py +++ b/openhtf/output/servers/station_server.py @@ -24,7 +24,6 @@ from openhtf.util import functions from openhtf.util import multicast from openhtf.util import timeouts -import six import sockjs.tornado CONF = configuration.CONF @@ -72,7 +71,7 @@ def _get_executing_test(): test: The test that was executing when this function was called, or None. test_state: The state of the executing test, or None. """ - tests = list(six.itervalues(openhtf.Test.TEST_INSTANCES)) + tests = list(openhtf.Test.TEST_INSTANCES.values()) if not tests: return None, None diff --git a/openhtf/plugs/__init__.py b/openhtf/plugs/__init__.py index c071a33f8..f3dfbc0be 100644 --- a/openhtf/plugs/__init__.py +++ b/openhtf/plugs/__init__.py @@ -30,7 +30,6 @@ from openhtf.util import configuration from openhtf.util import data from openhtf.util import threads -import six CONF = configuration.CONF @@ -116,7 +115,7 @@ def result( phase.plugs.extend([ base_plugs.PhasePlug(name, a_plug, update_kwargs=update_kwargs) - for name, a_plug in six.iteritems(plugs_map) + for name, a_plug in plugs_map.items() ]) return phase @@ -183,11 +182,11 @@ def as_base_types(self) -> Dict[Text, Any]: return { 'plug_descriptors': { name: attr.asdict(descriptor) - for name, descriptor in six.iteritems(self._plug_descriptors) + for name, descriptor in self._plug_descriptors.items() }, 'plug_states': { name: data.convert_to_base_types(plug) - for name, plug in six.iteritems(self._plugs_by_name) + for name, plug in self._plugs_by_name.items() }, } @@ -333,7 +332,7 @@ def tear_down_plugs(self) -> None: by this method. """ _LOG.debug('Tearing down all plugs.') - for plug_type, plug_instance in six.iteritems(self._plugs_by_type): + for plug_type, plug_instance in self._plugs_by_type.items(): if plug_instance.uses_base_tear_down(): name = '' % plug_type else: @@ -389,6 +388,6 @@ def wait_for_plug_update( def get_frontend_aware_plug_names(self) -> List[Text]: """Returns the names of frontend-aware plugs.""" return [ - name for name, plug in six.iteritems(self._plugs_by_name) + name for name, plug in self._plugs_by_name.items() if isinstance(plug, base_plugs.FrontendAwareBasePlug) ] diff --git a/openhtf/plugs/device_wrapping.py b/openhtf/plugs/device_wrapping.py index 91cb0a9aa..5283fdc6b 100644 --- a/openhtf/plugs/device_wrapping.py +++ b/openhtf/plugs/device_wrapping.py @@ -22,7 +22,6 @@ import types from openhtf.core import base_plugs -import six def short_repr(obj, max_len=40): @@ -117,7 +116,7 @@ def logging_wrapper(*args, **kwargs): """Wraps a callable with a logging statement.""" args_strings = tuple(short_repr(arg) for arg in args) kwargs_strings = tuple(('%s=%s' % (key, short_repr(val)) - for key, val in six.iteritems(kwargs))) + for key, val in kwargs.items())) log_line = '%s calling "%s" on device.' % (type(self).__name__, attr) if args_strings or kwargs_strings: log_line += ' Args: \n %s' % (', '.join(args_strings + kwargs_strings)) diff --git a/openhtf/plugs/usb/adb_device.py b/openhtf/plugs/usb/adb_device.py index ede2c104b..19eb5f49b 100644 --- a/openhtf/plugs/usb/adb_device.py +++ b/openhtf/plugs/usb/adb_device.py @@ -30,6 +30,7 @@ # pytype: skip-file +import io import logging import os.path @@ -38,7 +39,6 @@ from openhtf.plugs.usb import shell_service from openhtf.plugs.usb import usb_exceptions from openhtf.util import timeouts -import six try: from M2Crypto import RSA # pylint: disable=g-import-not-at-top @@ -141,7 +141,7 @@ def push(self, source_file, device_filename, timeout_ms=None): timeout_ms: Expected timeout for any part of the push. """ mtime = 0 - if isinstance(source_file, six.string_types): + if isinstance(source_file, str): mtime = os.path.getmtime(source_file) source_file = open(source_file) @@ -163,10 +163,10 @@ def pull(self, device_filename, dest_file=None, timeout_ms=None): The file data if dest_file is not set, None otherwise. """ should_return_data = dest_file is None - if isinstance(dest_file, six.string_types): + if isinstance(dest_file, str): dest_file = open(dest_file, 'w') elif dest_file is None: - dest_file = six.StringIO() + dest_file = io.StringIO() self.filesync_service.recv(device_filename, dest_file, timeouts.PolledTimeout.from_millis(timeout_ms)) if should_return_data: diff --git a/openhtf/plugs/usb/adb_message.py b/openhtf/plugs/usb/adb_message.py index 117e4b5a5..ea737bbc0 100644 --- a/openhtf/plugs/usb/adb_message.py +++ b/openhtf/plugs/usb/adb_message.py @@ -48,7 +48,6 @@ from openhtf.plugs.usb import usb_exceptions from openhtf.util import timeouts -import six _LOG = logging.getLogger(__name__) @@ -58,7 +57,7 @@ def make_wire_commands(*ids): cmd_to_wire = { cmd: sum(ord(c) << (i * 8) for i, c in enumerate(cmd)) for cmd in ids } - wire_to_cmd = {wire: cmd for cmd, wire in six.iteritems(cmd_to_wire)} + wire_to_cmd = {wire: cmd for cmd, wire in cmd_to_wire.items()} return cmd_to_wire, wire_to_cmd diff --git a/openhtf/plugs/usb/adb_protocol.py b/openhtf/plugs/usb/adb_protocol.py index f2359070c..5ebbf7668 100644 --- a/openhtf/plugs/usb/adb_protocol.py +++ b/openhtf/plugs/usb/adb_protocol.py @@ -78,6 +78,7 @@ import enum import itertools import logging +import queue import sys import threading @@ -85,8 +86,6 @@ from openhtf.plugs.usb import usb_exceptions from openhtf.util import argv from openhtf.util import timeouts -import six -from six.moves import queue ADB_MESSAGE_LOG = False @@ -913,11 +912,9 @@ def connect(cls, ('CNXN',), timeouts.PolledTimeout.from_millis(auth_timeout_ms)) except usb_exceptions.UsbReadFailedError as exception: if exception.is_timeout(): - six.reraise( - usb_exceptions.DeviceAuthError, - usb_exceptions.DeviceAuthError( - message='Accept auth key on device, then retry.'), - sys.exc_info()[2]) + raise usb_exceptions.DeviceAuthError( + message='Accept auth key on device, then retry.').with_traceback( + sys.exc_info()[2]) raise # The read didn't time-out, so we got a CNXN response. diff --git a/openhtf/plugs/usb/fastboot_protocol.py b/openhtf/plugs/usb/fastboot_protocol.py index 547456914..7507acb4a 100644 --- a/openhtf/plugs/usb/fastboot_protocol.py +++ b/openhtf/plugs/usb/fastboot_protocol.py @@ -15,13 +15,13 @@ import binascii import collections +import io import logging import os import struct from . import usb_exceptions from openhtf.util import argv -import six FASTBOOT_DOWNLOAD_CHUNK_SIZE_KB = 1024 @@ -73,7 +73,7 @@ def send_command(self, command, arg=None): """ if arg is not None: command = '%s:%s' % (command, arg) - self._write(six.StringIO(command), len(command)) + self._write(io.StringIO(command), len(command)) def handle_simple_responses(self, timeout_ms=None, @@ -184,7 +184,7 @@ def _write(self, data, length, progress_callback=None): """Sends the data to the device, tracking progress with the callback.""" if progress_callback: progress = self._handle_progress(length, progress_callback) # pylint: disable=assignment-from-no-return - six.next(progress) + next(progress) while length: tmp = data.read(FASTBOOT_DOWNLOAD_CHUNK_SIZE_KB * 1024) length -= len(tmp) @@ -276,14 +276,14 @@ def download(self, Returns: Response to a download request, normally nothing. """ - if isinstance(source_file, six.string_types): + if isinstance(source_file, str): source_len = os.stat(source_file).st_size source_file = open(source_file) if source_len == 0: # Fall back to storing it all in memory :( data = source_file.read() - source_file = six.StringIO(data) + source_file = io.StringIO(data) source_len = len(data) self._protocol.send_command('download', '%08x' % source_len) diff --git a/openhtf/plugs/usb/filesync_service.py b/openhtf/plugs/usb/filesync_service.py index 5d0b6a97e..dfb5aa012 100644 --- a/openhtf/plugs/usb/filesync_service.py +++ b/openhtf/plugs/usb/filesync_service.py @@ -111,7 +111,6 @@ import sys import time -from future.utils import raise_with_traceback from openhtf.plugs.usb import adb_message from openhtf.plugs.usb import usb_exceptions @@ -231,7 +230,7 @@ def _check_for_fail_message(self, transport, exc_info, timeout): # pylint: disa if sys.exc_info()[0] is usb_exceptions.AdbRemoteError: raise # Otherwise reraise the original exception. - raise_with_traceback(exc_info[0](exc_info[1]), traceback=exc_info[2]) + raise exc_info[0](exc_info[1]).with_traceback(exc_info[2]) # pylint: disable=too-many-arguments def send(self, diff --git a/openhtf/plugs/usb/local_usb.py b/openhtf/plugs/usb/local_usb.py index 49cfa89b0..ee7b895d9 100644 --- a/openhtf/plugs/usb/local_usb.py +++ b/openhtf/plugs/usb/local_usb.py @@ -24,7 +24,6 @@ from openhtf.plugs.usb import usb_exceptions from openhtf.plugs.usb import usb_handle -import six try: # pylint: disable=g-import-not-at-top @@ -164,14 +163,14 @@ def open(cls, **kwargs): handle_iter = cls.iter_open(**kwargs) try: - handle = six.next(handle_iter) + handle = next(handle_iter) except StopIteration: # No matching interface, raise. raise usb_exceptions.DeviceNotFoundError('Open failed with args: %s' % kwargs) try: - multiple_handle = six.next(handle_iter) + multiple_handle = next(handle_iter) except StopIteration: # Exactly one matching device, return it. return handle diff --git a/openhtf/plugs/usb/shell_service.py b/openhtf/plugs/usb/shell_service.py index 809262f5e..4944e14f2 100644 --- a/openhtf/plugs/usb/shell_service.py +++ b/openhtf/plugs/usb/shell_service.py @@ -66,14 +66,13 @@ # output.getvalue() now contains the output of the arecord command. """ +import io import threading import time from openhtf.plugs.usb import adb_protocol from openhtf.plugs.usb import usb_exceptions - from openhtf.util import timeouts -import six class AsyncCommandHandle(object): @@ -110,7 +109,7 @@ def __init__(self, stream, stdin, stdout, timeout, is_raw): # pylint: disable=t """ self.stream = stream self.stdin = stdin - self.stdout = stdout or six.StringIO() + self.stdout = stdout or io.StringIO() self.force_closed_or_timeout = False self.reader_thread = threading.Thread( diff --git a/openhtf/plugs/usb/usb_handle.py b/openhtf/plugs/usb/usb_handle.py index c4d80f115..a3be8b119 100644 --- a/openhtf/plugs/usb/usb_handle.py +++ b/openhtf/plugs/usb/usb_handle.py @@ -23,7 +23,6 @@ import functools import logging -from future.utils import with_metaclass from openhtf.plugs.usb import usb_exceptions DEFAULT_TIMEOUT_MS = 5000 @@ -60,7 +59,7 @@ def wrapper_requiring_open_handle(self, *args, **kwargs): return wrapper_requiring_open_handle -class UsbHandle(with_metaclass(abc.ABCMeta, object)): +class UsbHandle(abc.ABC): """UsbHandle objects provide read/write access to USB Interfaces. Subclasses must implement this interface to provide actual Read/Write/Close diff --git a/openhtf/plugs/user_input.py b/openhtf/plugs/user_input.py index 905d8b9a2..37a21e32d 100644 --- a/openhtf/plugs/user_input.py +++ b/openhtf/plugs/user_input.py @@ -32,7 +32,6 @@ from openhtf import plugs from openhtf.core import base_plugs from openhtf.util import console_output -from six.moves import input if platform.system() != 'Windows': import termios # pylint: disable=g-import-not-at-top diff --git a/openhtf/util/__init__.py b/openhtf/util/__init__.py index c8ae629c5..4f735e33f 100644 --- a/openhtf/util/__init__.py +++ b/openhtf/util/__init__.py @@ -23,8 +23,6 @@ import attr -import six - def _log_every_n_to_logger(n: int, logger: Optional[logging.Logger], level: int, message: Text, *args: Any) -> Callable[[], bool]: @@ -50,7 +48,7 @@ def _gen() -> Iterator[bool]: # pylint: disable=missing-docstring yield True gen = _gen() - return lambda: six.next(gen) + return lambda: next(gen) def log_every_n(n: int, level: int, message: Text, @@ -169,7 +167,7 @@ def format_string(target, kwargs): return None if callable(target): return target(**kwargs) - if not isinstance(target, six.string_types): + if not isinstance(target, str): return target if '{' in target: return partial_format(target, **kwargs) diff --git a/openhtf/util/configuration.py b/openhtf/util/configuration.py index 6c700c64c..9174444dc 100644 --- a/openhtf/util/configuration.py +++ b/openhtf/util/configuration.py @@ -147,7 +147,6 @@ def do_stuff(): import attr from openhtf.util import argv from openhtf.util import threads -import six from typing_extensions import Protocol import yaml @@ -549,7 +548,7 @@ def load_from_dict(self, dictionary, _override=True, _allow_undeclared=False): declarations have been evaluated. """ undeclared_keys = [] - for key, value in six.iteritems(dictionary): + for key, value in dictionary.items(): # Warn in this case. We raise if you try to access a config key that # hasn't been declared, but we don't raise here so that you can use # configuration files that are supersets of required configuration for @@ -590,7 +589,7 @@ def _asdict(self): retval.update(self._loaded_values) # Only update keys that are declared so we don't allow injecting # un-declared keys via commandline flags. - for key, value in six.iteritems(self._flag_values): + for key, value in self._flag_values.items(): if key in self._declarations: retval[key] = value return retval @@ -705,10 +704,7 @@ def inject_positional_args(self, method): A wrapper that, when invoked, will call the wrapped method, passing in configuration values for positional arguments. """ - if six.PY3: - argspec = inspect.getfullargspec(method) - else: - argspec = inspect.getargspec(method) # pylint: disable=deprecated-method + argspec = inspect.getfullargspec(method) # Index in argspec.args of the first keyword argument. This index is a # negative number if there are any kwargs, or 0 if there are no kwargs. diff --git a/openhtf/util/data.py b/openhtf/util/data.py index e49c08339..e3a3a6fe3 100644 --- a/openhtf/util/data.py +++ b/openhtf/util/data.py @@ -17,6 +17,7 @@ little easier to work with them. """ +from collections.abc import Iterable import copy import difflib import enum @@ -31,15 +32,9 @@ import attr from mutablerecords import records -from past.builtins import long -from past.builtins import unicode - -import six -from six.moves import collections_abc -from six.moves import zip # Used by convert_to_base_types(). -PASSTHROUGH_TYPES = {bool, bytes, int, long, type(None), unicode} +PASSTHROUGH_TYPES = {bool, bytes, int, type(None), str} def pprint_diff(first, second, first_name='first', second_name='second'): @@ -141,14 +136,14 @@ def convert_to_base_types(obj, skipped. - Enum instances are converted to strings via their .name attribute. - Real and integral numbers are converted to built-in types. - - Byte and unicode strings are left alone (instances of six.string_types). + - Byte and strings are left alone. - Other non-None values are converted to strings via str(). The return value contains only the Python built-in types: dict, list, tuple, - str, unicode, int, float, long, bool, and NoneType (unless tuple_type is set - to something else). If tuples should be converted to lists (e.g. for an - encoding that does not differentiate between the two), pass 'tuple_type=list' - as an argument. + str, int, float, bool, and NoneType (unless tuple_type is set to something + else). If tuples should be converted to lists (e.g. for an encoding that + does not differentiate between the two), pass 'tuple_type=list' as an + argument. Args: obj: object to recursively convert to base types. @@ -164,7 +159,7 @@ def convert_to_base_types(obj, Version of the object composed of base types. """ # Because it's *really* annoying to pass a single string accidentally. - assert not isinstance(ignore_keys, six.string_types), 'Pass a real iterable!' + assert not isinstance(ignore_keys, str), 'Pass a real iterable!' if hasattr(obj, 'as_base_types'): return obj.as_base_types() @@ -195,7 +190,7 @@ def convert_to_base_types(obj, return { # pylint: disable=g-complex-comprehension convert_to_base_types(k, ignore_keys, tuple_type): convert_to_base_types(v, ignore_keys, tuple_type) - for k, v in six.iteritems(obj) + for k, v in obj.items() if k not in ignore_keys } elif isinstance(obj, list): @@ -210,7 +205,7 @@ def convert_to_base_types(obj, # Convert numeric types (e.g. numpy ints and floats) into built-in types. elif isinstance(obj, numbers.Integral): - return long(obj) + return int(obj) elif isinstance(obj, numbers.Real): as_float = float(obj) if json_safe and (math.isinf(as_float) or math.isnan(as_float)): @@ -247,9 +242,9 @@ def _sizeof(current_obj): if isinstance(current_obj, dict): size += sum( map(sizeof, - itertools.chain.from_iterable(six.iteritems(current_obj)))) - elif (isinstance(current_obj, collections_abc.Iterable) and - not isinstance(current_obj, six.string_types)): + itertools.chain.from_iterable(current_obj.items()))) + elif (isinstance(current_obj, Iterable) and + not isinstance(current_obj, str)): size += sum(sizeof(item) for item in current_obj) elif isinstance(current_obj, records.RecordClass): size += sum( diff --git a/openhtf/util/functions.py b/openhtf/util/functions.py index 603357c39..d2acfc9e5 100644 --- a/openhtf/util/functions.py +++ b/openhtf/util/functions.py @@ -18,8 +18,6 @@ import inspect import time -import six - def call_once(func): """Decorate a function to only allow it to be called once. @@ -34,16 +32,10 @@ def call_once(func): Returns: The decorated function. """ - if six.PY3: - argspec = inspect.getfullargspec(func) - argspec_args = argspec.args - argspec_varargs = argspec.varargs - argspec_keywords = argspec.varkw - else: - argspec = inspect.getargspec(func) # pylint: disable=deprecated-method - argspec_args = argspec.args - argspec_varargs = argspec.varargs - argspec_keywords = argspec.keywords + argspec = inspect.getfullargspec(func) + argspec_args = argspec.args + argspec_varargs = argspec.varargs + argspec_keywords = argspec.varkw if argspec_args or argspec_varargs or argspec_keywords: raise ValueError('Can only decorate functions with no args', func, argspec) diff --git a/openhtf/util/logs.py b/openhtf/util/logs.py index 0ac4b37be..99390af46 100644 --- a/openhtf/util/logs.py +++ b/openhtf/util/logs.py @@ -111,7 +111,6 @@ def MyPhase(test, helper): from openhtf.util import console_output from openhtf.util import functions from openhtf.util import threads -import six # The number of v's provided as command line arguments to control verbosity. # Will be overridden if the ARG_PARSER below parses the -v argument. @@ -219,11 +218,11 @@ class MacAddressLogFilter(logging.Filter): def filter(self, record): if self.MAC_REPLACE_RE.search(record.getMessage()): # Update all the things to have no mac address in them - if isinstance(record.msg, six.string_types): + if isinstance(record.msg, str): record.msg = self.MAC_REPLACE_RE.sub(self.MAC_REPLACEMENT, record.msg) record.args = tuple([ self.MAC_REPLACE_RE.sub(self.MAC_REPLACEMENT, str(arg)) - if isinstance(arg, six.string_types) else arg for arg in record.args + if isinstance(arg, str) else arg for arg in record.args ]) else: record.msg = self.MAC_REPLACE_RE.sub(self.MAC_REPLACEMENT, diff --git a/openhtf/util/multicast.py b/openhtf/util/multicast.py index 7b4c0b84a..964a8178c 100644 --- a/openhtf/util/multicast.py +++ b/openhtf/util/multicast.py @@ -19,14 +19,13 @@ """ import logging +import queue import socket import struct import sys import threading import time -from six.moves import queue - _LOG = logging.getLogger(__name__) # The multicast logs can occur frequently, e.g. every couple seconds. Prevent diff --git a/openhtf/util/test.py b/openhtf/util/test.py index 33d63dd46..4f8825800 100644 --- a/openhtf/util/test.py +++ b/openhtf/util/test.py @@ -126,6 +126,8 @@ def test_multiple(self, mock_my_plug): assertMeasurementFail(phase_or_test_rec, measurement) """ +import collections +from collections.abc import Callable as CollectionsCallable, Iterator import functools import inspect import logging @@ -150,10 +152,9 @@ def test_multiple(self, mock_my_plug): Union, ) import unittest +from unittest import mock import attr -import mock - from openhtf import plugs from openhtf import util from openhtf.core import base_plugs @@ -170,8 +171,6 @@ def test_multiple(self, mock_my_plug): from openhtf.plugs import device_wrapping from openhtf.util import logs from openhtf.util import text -import six -from six.moves import collections_abc logs.CLI_LOGGING_VERBOSITY = 2 @@ -324,7 +323,7 @@ def _merge_stats(stats: pstats.Stats, filepath: pathlib.Path) -> None: test_executor.combine_profile_stats(stats_to_combine, str(filepath)) -class PhaseOrTestIterator(collections_abc.Iterator): +class PhaseOrTestIterator(Iterator): def __init__(self, test_case, iterator, mock_plugs, phase_user_defined_state, phase_diagnoses): @@ -372,7 +371,7 @@ def _initialize_plugs(self, plug_types): plug_types = list(plug_types) self.plug_manager.initialize_plugs( plug_cls for plug_cls in plug_types if plug_cls not in self.mock_plugs) - for plug_type, plug_value in six.iteritems(self.mock_plugs): + for plug_type, plug_value in self.mock_plugs.items(): self.plug_manager.update_plug(plug_type, plug_value) for plug_type in plug_types: self.test_case.plugs[plug_type] = ( @@ -468,7 +467,7 @@ def __next__(self): phase_or_test = self.iterator.send(self.last_result) if isinstance(phase_or_test, test_descriptor.Test): self.last_result, failure_message = self._handle_test(phase_or_test) - elif not isinstance(phase_or_test, collections_abc.Callable): + elif not isinstance(phase_or_test, CollectionsCallable): raise InvalidTestError( 'methods decorated with patch_plugs must yield Test instances or ' 'individual test phases', phase_or_test) @@ -481,7 +480,7 @@ def next(self): phase_or_test = self.iterator.send(self.last_result) if isinstance(phase_or_test, test_descriptor.Test): self.last_result, failure_message = self._handle_test(phase_or_test) - elif not isinstance(phase_or_test, collections_abc.Callable): + elif not isinstance(phase_or_test, CollectionsCallable): raise InvalidTestError( 'methods decorated with patch_plugs must yield Test instances or ' 'individual test phases', phase_or_test) @@ -549,10 +548,7 @@ def test_my_phase_again(self, my_plug_mock): assert isinstance(diag, diagnoses_lib.Diagnosis) def test_wrapper(test_func): - if six.PY3: - plug_argspec = inspect.getfullargspec(test_func) - else: - plug_argspec = inspect.getargspec(test_func) # pylint: disable=deprecated-method + plug_argspec = inspect.getfullargspec(test_func) num_defaults = len(plug_argspec.defaults or ()) plug_args = set(plug_argspec.args[1:-num_defaults or None]) @@ -571,8 +567,8 @@ def test_wrapper(test_func): # Make MagicMock instances for the plugs. plug_kwargs = {} # kwargs to pass to test func. plug_typemap = {} # typemap for PlugManager, maps type to instance. - for plug_arg_name, plug_fullname in six.iteritems(mock_plugs): - if isinstance(plug_fullname, six.string_types): + for plug_arg_name, plug_fullname in mock_plugs.items(): + if isinstance(plug_fullname, str): try: plug_module, plug_typename = plug_fullname.rsplit('.', 1) plug_type = getattr(sys.modules[plug_module], plug_typename) @@ -640,16 +636,16 @@ def _assert_phase_or_test_record(func): @functools.wraps(func) def assertion_wrapper(self, phase_or_test_record, *args, **kwargs): if isinstance(phase_or_test_record, test_record.TestRecord): - exc_info = None + original_exception = None for phase_record in phase_or_test_record.phases: try: func(self, phase_record, *args, **kwargs) break - except Exception: # pylint: disable=broad-except - exc_info = sys.exc_info() + except Exception as e: # pylint: disable=broad-except + original_exception = e else: - if exc_info: - six.reraise(*exc_info) + if original_exception is not None: + raise original_exception elif isinstance(phase_or_test_record, test_record.PhaseRecord): func(self, phase_or_test_record, *args, **kwargs) else: diff --git a/openhtf/util/threads.py b/openhtf/util/threads.py index 38feddb72..d2ee57ef1 100644 --- a/openhtf/util/threads.py +++ b/openhtf/util/threads.py @@ -22,11 +22,10 @@ import sys import threading -import six try: - from six.moves import _thread # pylint: disable=g-import-not-at-top + import _thread # pylint: disable=g-import-not-at-top except ImportError: - from six.moves import _dummy_thread as _thread # pylint: disable=g-import-not-at-top + import _dummy_thread as _thread # pylint: disable=g-import-not-at-top _LOG = logging.getLogger(__name__) @@ -40,15 +39,13 @@ class InvalidUsageError(Exception): def safe_lock_release_context(rlock): - if six.PY2: - return _safe_lock_release_py2(rlock) # Python3 has a C-implementation of RLock, which doesn't have the thread # termination issues. - return _placeholder_release_py3() + return _placeholder_release() @contextlib.contextmanager -def _placeholder_release_py3(): +def _placeholder_release(): yield diff --git a/openhtf/util/validators.py b/openhtf/util/validators.py index 0d19b42d9..71eb13432 100644 --- a/openhtf/util/validators.py +++ b/openhtf/util/validators.py @@ -58,9 +58,7 @@ def MyPhase(test): import math import numbers import re -from future.utils import with_metaclass from openhtf import util -import six _VALIDATORS = {} @@ -84,14 +82,14 @@ def create_validator(name, *args, **kwargs): _identity = lambda x: x -class ValidatorBase(with_metaclass(abc.ABCMeta, object)): +class ValidatorBase(abc.ABC): @abc.abstractmethod def __call__(self, value): """Should validate value, returning a boolean result.""" -class RangeValidatorBase(with_metaclass(abc.ABCMeta, ValidatorBase)): +class RangeValidatorBase(ValidatorBase, abc.ABC): @abc.abstractproperty def minimum(self): @@ -228,8 +226,8 @@ def __str__(self): def all_equals(value, type=None): # pylint: disable=redefined-builtin if isinstance(value, numbers.Number): return AllInRangeValidator(minimum=value, maximum=value) - elif isinstance(value, six.string_types): - assert type is None or issubclass(type, six.string_types), ( + elif isinstance(value, str): + assert type is None or issubclass(type, str), ( 'Cannot use a non-string type when matching a string') return matches_regex('^{}$'.format(re.escape(value))) else: @@ -367,8 +365,8 @@ def __ne__(self, other): def equals(value, type=None): # pylint: disable=redefined-builtin if isinstance(value, numbers.Number): return InRange(minimum=value, maximum=value, type=type) - elif isinstance(value, six.string_types): - assert type is None or issubclass(type, six.string_types), ( + elif isinstance(value, str): + assert type is None or issubclass(type, str), ( 'Cannot use a non-string type when matching a string') return matches_regex('^{}$'.format(re.escape(value))) else: diff --git a/openhtf/util/xmlrpcutil.py b/openhtf/util/xmlrpcutil.py index 7e9f81bb9..1f6b689c1 100644 --- a/openhtf/util/xmlrpcutil.py +++ b/openhtf/util/xmlrpcutil.py @@ -13,26 +13,17 @@ # limitations under the License. """Utility helpers for xmlrpclib.""" +from collections.abc import Callable import http.client import socketserver import sys import threading import xmlrpc.client import xmlrpc.server - -import six -from six.moves import collections_abc +from xmlrpc.server import SimpleXMLRPCServer DEFAULT_PROXY_TIMEOUT_S = 3 -# https://github.com/PythonCharmers/python-future/issues/280 -# pylint: disable=g-import-not-at-top,g-importing-member -if sys.version_info[0] < 3: - from SimpleXMLRPCServer import SimpleXMLRPCServer # pytype: disable=import-error -else: - from xmlrpc.server import SimpleXMLRPCServer # pytype: disable=import-error -# pylint: enable=g-import-not-at-top,g-importing-member - class TimeoutHTTPConnection(http.client.HTTPConnection): # pylint: disable=missing-class-docstring @@ -81,10 +72,7 @@ def __init__(self, *args, **kwargs): super(TimeoutProxyMixin, self).__init__(*args, **kwargs) def __settimeout(self, timeout_s): - if six.PY3: - self._transport.settimeout(timeout_s) # pytype: disable=attribute-error - else: - self.__transport.settimeout(timeout_s) # pytype: disable=attribute-error + self._transport.settimeout(timeout_s) # pytype: disable=attribute-error class TimeoutProxyServer(TimeoutProxyMixin, BaseServerProxy): @@ -100,7 +88,7 @@ def __init__(self, *args, **kwargs): def __getattr__(self, attr): method = super(LockedProxyMixin, self).__getattr__(attr) # pytype: disable=attribute-error - if isinstance(method, collections_abc.Callable): + if isinstance(method, Callable): # xmlrpc doesn't support **kwargs, so only accept *args. def _wrapper(*args): with self._lock: diff --git a/setup.py b/setup.py index 66a105559..79448a5d9 100644 --- a/setup.py +++ b/setup.py @@ -133,8 +133,6 @@ def run(self): 'colorama>=0.3.9,<1.0', 'contextlib2>=0.5.1,<1.0', 'dataclasses;python_version<"3.7"', - 'enum34>=1.1.2,<2.0 ; python_version<"3.4"', - 'future>=0.16.0', 'inflection', 'mutablerecords>=0.4.1,<2.0', 'oauth2client>=1.5.2,<2.0', @@ -143,7 +141,6 @@ def run(self): 'pyOpenSSL>=17.1.0,<18.0', 'sockjs-tornado>=1.0.3,<2.0', 'tornado>=4.3,<5.0', - 'six>=1.13.0', 'typing-extensions', ] @@ -217,7 +214,6 @@ def run_tests(self): }, tests_require=[ 'absl-py>=0.10.0', - 'mock>=2.0.0', 'pandas>=0.22.0', 'numpy', 'pytest>=2.9.2', diff --git a/test/core/diagnoses_test.py b/test/core/diagnoses_test.py index bdf62cc7d..f2b07bc04 100644 --- a/test/core/diagnoses_test.py +++ b/test/core/diagnoses_test.py @@ -1,17 +1,16 @@ """Tests for Diagnoses in OpenHTF.""" +import enum import time import unittest +from unittest import mock -import enum # pylint: disable=g-bad-import-order -import mock import openhtf as htf from openhtf.core import diagnoses_lib from openhtf.core import measurements from openhtf.core import test_record from openhtf.util import data from openhtf.util import test as htf_test -import six class DiagPhaseError(Exception): @@ -1078,14 +1077,14 @@ def internal_diag(phase_record): def test_phase_diagnoser_serialization(self): converted = data.convert_to_base_types(basic_wrapper_phase_diagnoser) self.assertEqual('basic_wrapper_phase_diagnoser', converted['name']) - six.assertCountEqual(self, ['okay', 'fine', 'great', 'test_ok'], - converted['possible_results']) + self.assertCountEqual(['okay', 'fine', 'great', 'test_ok'], + converted['possible_results']) def test_test_diagnoser_serialization(self): converted = data.convert_to_base_types(basic_wrapper_test_diagnoser) self.assertEqual('basic_wrapper_test_diagnoser', converted['name']) - six.assertCountEqual(self, ['okay', 'fine', 'great', 'test_ok'], - converted['possible_results']) + self.assertCountEqual(['okay', 'fine', 'great', 'test_ok'], + converted['possible_results']) @htf_test.yields_phases def test_test_record_diagnosis_serialization(self): diff --git a/test/core/exe_test.py b/test/core/exe_test.py index 613b64355..988719d9e 100644 --- a/test/core/exe_test.py +++ b/test/core/exe_test.py @@ -17,9 +17,9 @@ import threading import time import unittest +from unittest import mock from absl.testing import parameterized -import mock import openhtf from openhtf import plugs diff --git a/test/core/measurements_test.py b/test/core/measurements_test.py index 8cc1df087..e6f7d0b73 100644 --- a/test/core/measurements_test.py +++ b/test/core/measurements_test.py @@ -20,8 +20,8 @@ import collections import unittest +from unittest import mock -import mock import openhtf as htf from openhtf.core import measurements from examples import all_the_things diff --git a/test/core/monitors_test.py b/test/core/monitors_test.py index ecc67f13d..a439d5a49 100644 --- a/test/core/monitors_test.py +++ b/test/core/monitors_test.py @@ -12,14 +12,14 @@ # See the License for the specific language governing permissions and # limitations under the License. +import queue import time import unittest +from unittest import mock -import mock from openhtf import plugs from openhtf.core import base_plugs from openhtf.core import monitors -from six.moves import queue class EmptyPlug(base_plugs.BasePlug): diff --git a/test/core/phase_branches_test.py b/test/core/phase_branches_test.py index da461dce6..0d316f96d 100644 --- a/test/core/phase_branches_test.py +++ b/test/core/phase_branches_test.py @@ -1,8 +1,7 @@ """Tests for google3.third_party.py.openhtf.test.core.phase_branches.""" import unittest - -import mock +from unittest import mock import openhtf as htf from openhtf.core import phase_branches diff --git a/test/core/phase_collections_test.py b/test/core/phase_collections_test.py index b7f6f7d91..38fea3612 100644 --- a/test/core/phase_collections_test.py +++ b/test/core/phase_collections_test.py @@ -1,8 +1,8 @@ """Unit tests for the phase collections library.""" import unittest +from unittest import mock -import mock import openhtf as htf from openhtf import plugs from openhtf.core import base_plugs diff --git a/test/core/phase_group_test.py b/test/core/phase_group_test.py index 7ceb28874..a8572e854 100644 --- a/test/core/phase_group_test.py +++ b/test/core/phase_group_test.py @@ -2,8 +2,8 @@ import threading import unittest +from unittest import mock -import mock import openhtf as htf from openhtf import plugs from openhtf.core import base_plugs diff --git a/test/core/test_descriptor_test.py b/test/core/test_descriptor_test.py index a92a20707..8d09334d3 100644 --- a/test/core/test_descriptor_test.py +++ b/test/core/test_descriptor_test.py @@ -2,8 +2,8 @@ import re import unittest +from unittest import mock -import mock from openhtf.core import test_descriptor diff --git a/test/test_state_test.py b/test/test_state_test.py index d4acc3332..bd916a5fd 100644 --- a/test/test_state_test.py +++ b/test/test_state_test.py @@ -17,9 +17,9 @@ import sys import tempfile import unittest +from unittest import mock from absl.testing import parameterized -import mock import openhtf from openhtf.core import phase_collections from openhtf.core import phase_descriptor diff --git a/test/util/conf_test.py b/test/util/conf_test.py index 669106348..8a0c79a66 100644 --- a/test/util/conf_test.py +++ b/test/util/conf_test.py @@ -17,7 +17,6 @@ import unittest from openhtf.util import configuration -import six CONF = configuration.CONF @@ -116,7 +115,7 @@ def test_as_dict(self): 'string_default': 'default', } # assert first dict is a subset of second dict - self.assertLessEqual(six.viewitems(expected_dict), six.viewitems(conf_dict)) + self.assertLessEqual(expected_dict.items(), conf_dict.items()) def test_undeclared(self): with self.assertRaises(configuration.UndeclaredKeyError): diff --git a/test/util/data_test.py b/test/util/data_test.py index 02938cc73..89dedf374 100644 --- a/test/util/data_test.py +++ b/test/util/data_test.py @@ -17,7 +17,6 @@ import attr from openhtf.util import data -import past.builtins class TestData(unittest.TestCase): @@ -60,10 +59,8 @@ class AnotherAttr(object): 'list': [10], 'tuple': (10,), 'str': '10', - 'unicode': '10', 'int': 2**40, 'float': 10.0, - 'long': 2**80, 'bool': True, 'none': None, 'complex': 10j, @@ -82,10 +79,8 @@ class AnotherAttr(object): self.assertIsInstance(converted['list'], list) self.assertIsInstance(converted['tuple'], tuple) self.assertIsInstance(converted['str'], str) - self.assertIsInstance(converted['unicode'], str) self.assertIsInstance(converted['int'], int) self.assertIsInstance(converted['float'], float) - self.assertIsInstance(converted['long'], past.builtins.long) self.assertIsInstance(converted['bool'], bool) self.assertIsNone(converted['none']) self.assertIsInstance(converted['complex'], str) diff --git a/test/util/functions_test.py b/test/util/functions_test.py index 44f222408..0aa204023 100644 --- a/test/util/functions_test.py +++ b/test/util/functions_test.py @@ -13,7 +13,7 @@ # limitations under the License. import unittest -import mock +from unittest import mock from openhtf.util import functions diff --git a/test/util/logs_test.py b/test/util/logs_test.py index e7baa253e..423c98a29 100644 --- a/test/util/logs_test.py +++ b/test/util/logs_test.py @@ -14,7 +14,7 @@ # limitations under the License. import unittest -import mock +from unittest import mock from openhtf.util import logs diff --git a/test/util/util_test.py b/test/util/util_test.py index 5e0ffc83d..76b7da8b4 100644 --- a/test/util/util_test.py +++ b/test/util/util_test.py @@ -15,8 +15,8 @@ import copy import time import unittest +from unittest import mock -import mock from openhtf import util from openhtf.util import timeouts diff --git a/test/util/validators_test.py b/test/util/validators_test.py index 890a9b700..651597ade 100644 --- a/test/util/validators_test.py +++ b/test/util/validators_test.py @@ -7,15 +7,14 @@ import openhtf as htf from openhtf.util import test as htf_test from openhtf.util import validators -import six class TestInRange(unittest.TestCase): def test_raises_if_invalid_arguments(self): - with six.assertRaisesRegex(self, ValueError, 'Must specify minimum'): + with self.assertRaisesRegex(ValueError, 'Must specify minimum'): validators.InRange() - with six.assertRaisesRegex(self, ValueError, 'Minimum cannot be greater'): + with self.assertRaisesRegex(ValueError, 'Minimum cannot be greater'): validators.InRange(minimum=10, maximum=0) def test_invalidates_non_numbers(self): @@ -250,7 +249,7 @@ class MyType(object): class TestWithinPercent(unittest.TestCase): def test_raises_for_negative_percentage(self): - with six.assertRaisesRegex(self, ValueError, 'percent argument is'): + with self.assertRaisesRegex(ValueError, 'percent argument is'): validators.WithinPercent(expected=100, percent=-1) def test_within_percent_less_than_one_hundred(self): diff --git a/test_reqs.txt b/test_reqs.txt index ec8a2fb55..61daac604 100644 --- a/test_reqs.txt +++ b/test_reqs.txt @@ -1,6 +1,5 @@ pytest pytest-cov -mock # We also want everything as specified by setup.py -e . From 3e5a7f2bc4f37743ab1a7ee3babe26dfb42bd1c0 Mon Sep 17 00:00:00 2001 From: glados-verma Date: Thu, 26 May 2022 18:55:50 -0700 Subject: [PATCH 007/129] Update build_and_deploy.yml (#1010) The actual change is a secret --- .github/workflows/build_and_deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_and_deploy.yml b/.github/workflows/build_and_deploy.yml index 9baad8282..9592b769f 100644 --- a/.github/workflows/build_and_deploy.yml +++ b/.github/workflows/build_and_deploy.yml @@ -42,5 +42,5 @@ jobs: uses: pypa/gh-action-pypi-publish@release/v1 with: user: __token__ - password: gWriMCwCITTFTXKl4k7/eVYpx07N/z2zUGxZ3lme/pl6mRfJvj8QbpvnJAQGNn5VEZfWuuKveCoAySfrLcojV8RJuaRLcAnIuJInZt/Cf8QXmHLm7LK9xAnKofi++RRqk0B81CwbKjq3/JhMmygvSjSR5vRDogo3KB2GHRnE3HQUSy3IlBeZDDDpr7LcNcNVSr/z9TXC1/UA05erhUvRWuMiDI9AKqvPZ80K+GlzWEPSxkeFotC/i7PyrZfJWEzVPrgt1iFOK9lNmh5lKyQ4do0nuVHAZFcxsMb+6uBek7WNgmUOUAhOTHa/AM//b8qIhVzSPFc8tQlqdyN6lH8l0SbbzX7BkKNqS1hL5XzLJ+/VZgBbSUDWSDq08Dmu4snRvxPZc6RzfmQKQ0H0esOKzBwS8dIAQDEVwj13WuCnV7G0yHD2yRXmyWbLcbhDW7rNwC7VsyenPA9SwJ9vrCRoCuB3+zKERAya47dgflFHtxITHVdDR/tJ7h83YiEuVp/GkdOOet2gHMO5HyqoipaXryg7fu7JAhZ727l9t8PGWWKwKE0GBL7/IgrAIhR3GuYK33fInB2SpSoAmoxipfU31TpO1Xb+WT+yQwXft+wFYK6DH65yhaedHqKnxu7ph2ZE36XB4qY84sbvE/GgWF6KJjXoA1RTxmohI97i2dmTQJI= + password: ${{ secrets.PYPI_PUBLISH_PASSWORD }} skip_existing: true From 8bb6356ec1199db1bd1652b7ad2fba85bf48eb13 Mon Sep 17 00:00:00 2001 From: Gauthier Dieppedalle Date: Fri, 27 May 2022 11:07:50 -0700 Subject: [PATCH 008/129] Fix regressions occuring during PY2 deprecation. (#1011) * Fix regressions occuring during PY2 deprecation. * Added parenthesis for readability. --- openhtf/output/callbacks/__init__.py | 6 ++++-- openhtf/output/callbacks/mfg_inspector.py | 3 ++- openhtf/util/threads.py | 6 +----- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/openhtf/output/callbacks/__init__.py b/openhtf/output/callbacks/__init__.py index b4c683fc2..467d42ebf 100644 --- a/openhtf/output/callbacks/__init__.py +++ b/openhtf/output/callbacks/__init__.py @@ -43,7 +43,9 @@ def __init__(self, filename: Text): self.temp = tempfile.NamedTemporaryFile(delete=False) def write(self, write_data: Union[Text, bytes]) -> int: - return self.temp.write(six.ensure_binary(write_data)) + if isinstance(write_data, str): + write_data = write_data.encode() + return self.temp.write(write_data) def close(self) -> None: self.temp.close() @@ -133,7 +135,7 @@ def __call__(self, test_rec: test_record.TestRecord) -> None: outfile.write(serialized_record.encode()) elif isinstance(serialized_record, Iterable): for chunk in serialized_record: - outfile.write(chunk.encode()) + outfile.write(chunk.encode() if isinstance(chunk, str) else chunk) else: raise TypeError('Expected string or iterable but got {}.'.format( type(serialized_record))) diff --git a/openhtf/output/callbacks/mfg_inspector.py b/openhtf/output/callbacks/mfg_inspector.py index 5c2e69da2..a89df8471 100644 --- a/openhtf/output/callbacks/mfg_inspector.py +++ b/openhtf/output/callbacks/mfg_inspector.py @@ -148,7 +148,8 @@ def __init__(self, if user and keydata: self.credentials = oauth2client.client.SignedJwtAssertionCredentials( service_account_name=self.user, - private_key=self.keydata.encode(), + private_key=(self.keydata.encode() + if isinstance(self.keydata, str) else self.keydata), scope=self.SCOPE_CODE_URI, user_agent='OpenHTF Guzzle Upload Client', token_uri=self.token_uri) diff --git a/openhtf/util/threads.py b/openhtf/util/threads.py index d2ee57ef1..89c617a31 100644 --- a/openhtf/util/threads.py +++ b/openhtf/util/threads.py @@ -13,6 +13,7 @@ # limitations under the License. """Thread library defining a few helpers.""" +import _thread import contextlib import cProfile import ctypes @@ -22,11 +23,6 @@ import sys import threading -try: - import _thread # pylint: disable=g-import-not-at-top -except ImportError: - import _dummy_thread as _thread # pylint: disable=g-import-not-at-top - _LOG = logging.getLogger(__name__) From 7a95aeba0251fcd90a8c9caad6881a50e9cfdbca Mon Sep 17 00:00:00 2001 From: Gauthier Dieppedalle Date: Tue, 31 May 2022 09:33:50 -0700 Subject: [PATCH 009/129] Remove extra space. (#1012) --- openhtf/output/proto/test_runs_converter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openhtf/output/proto/test_runs_converter.py b/openhtf/output/proto/test_runs_converter.py index 73a07d763..5d90e67f7 100644 --- a/openhtf/output/proto/test_runs_converter.py +++ b/openhtf/output/proto/test_runs_converter.py @@ -59,7 +59,7 @@ UOM_CODE_MAP = { u.GetOptions().Extensions[ test_runs_pb2.uom_code]: num - for num, u in + for num, u in test_runs_pb2.Units.UnitCode.DESCRIPTOR.values_by_number.items() } # pylint: enable=no-member From 341aa8610e94899fc651d7c781772487a0c504e8 Mon Sep 17 00:00:00 2001 From: Gauthier Dieppedalle Date: Tue, 31 May 2022 11:39:43 -0700 Subject: [PATCH 010/129] Removing PY2 lock handler. (#1013) --- openhtf/util/logs.py | 19 +------------ openhtf/util/threads.py | 62 ----------------------------------------- 2 files changed, 1 insertion(+), 80 deletions(-) diff --git a/openhtf/util/logs.py b/openhtf/util/logs.py index 99390af46..6b8370258 100644 --- a/openhtf/util/logs.py +++ b/openhtf/util/logs.py @@ -252,16 +252,6 @@ def filter(self, record): return match.group('test_uid') == self.test_uid -class KillableThreadSafeStreamHandler(logging.StreamHandler): - - def handle(self, record): - # logging.Handler objects have an internal lock attribute that is a - # threading.RLock instance; it can cause deadlocks in Python 2.7 when a - # KillableThread is killed while its release method is running. - with threads.safe_lock_release_context(self.lock): - return super(KillableThreadSafeStreamHandler, self).handle(record) - - class RecordHandler(logging.Handler): """A handler to save logs to an HTF TestRecord.""" @@ -273,13 +263,6 @@ def __init__(self, test_uid, test_record, notify_update): self.addFilter(MAC_FILTER) self.addFilter(TestUidFilter(test_uid)) - def handle(self, record): - # logging.Handler objects have an internal lock attribute that is a - # threading.RLock instance; it can cause deadlocks in Python 2.7 when a - # KillableThread is killed while its release method is running. - with threads.safe_lock_release_context(self.lock): - return super(RecordHandler, self).handle(record) - def emit(self, record): """Save a logging.LogRecord to our test record. @@ -350,7 +333,7 @@ def configure_logging(): logging_level = logging.DEBUG # Configure a handler to print to the CLI. - cli_handler = KillableThreadSafeStreamHandler(stream=sys.stdout) + cli_handler = logging.StreamHandler(stream=sys.stdout) cli_handler.setFormatter(CliFormatter()) cli_handler.setLevel(logging_level) cli_handler.addFilter(MAC_FILTER) diff --git a/openhtf/util/threads.py b/openhtf/util/threads.py index 89c617a31..d0bc9b167 100644 --- a/openhtf/util/threads.py +++ b/openhtf/util/threads.py @@ -34,68 +34,6 @@ class InvalidUsageError(Exception): """Raised when an API is used in an invalid or unsupported manner.""" -def safe_lock_release_context(rlock): - # Python3 has a C-implementation of RLock, which doesn't have the thread - # termination issues. - return _placeholder_release() - - -@contextlib.contextmanager -def _placeholder_release(): - yield - - -# pylint: disable=protected-access -@contextlib.contextmanager -def _safe_lock_release_py2(rlock): - """Ensure that a threading.RLock is fully released for Python 2. - - The RLock release code is: - https://github.com/python/cpython/blob/2.7/Lib/threading.py#L187 - - The RLock object's release method does not release all of its state if an - exception is raised in the middle of its operation. There are three pieces of - internal state that must be cleaned up: - - owning thread ident, an integer. - - entry count, an integer that counts how many times the current owner has - locked the RLock. - - internal lock, a threading.Lock instance that handles blocking. - - Args: - rlock: threading.RLock, lock to fully release. - - Yields: - None. - """ - assert isinstance(rlock, threading._RLock) - ident = _thread.get_ident() - expected_count = 0 - if rlock._RLock__owner == ident: - expected_count = rlock._RLock__count - try: - yield - except ThreadTerminationError: - # Check if the current thread still owns the lock by checking if we can - # acquire the underlying lock. - if rlock._RLock__block.acquire(0): - # Lock is clean, so unlock and we are done. - rlock._RLock__block.release() - elif rlock._RLock__owner == ident and expected_count > 0: - # The lock is still held up the stack, so make sure the count is accurate. - if rlock._RLock__count != expected_count: - rlock._RLock__count = expected_count - elif rlock._RLock__owner == ident or rlock._RLock__owner is None: - # The internal lock is still acquired, but either this thread or no thread - # owns it, which means it needs to be hard reset. - rlock._RLock__owner = None - rlock._RLock__count = 0 - rlock._RLock__block.release() - raise - - -# pylint: enable=protected-access - - def loop(_=None, force=False): """Causes a function to loop indefinitely.""" if not force: From 486ac88ca9498d32b48fb7d7f8129d08f7933ec5 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Thu, 8 Sep 2022 19:16:11 +0200 Subject: [PATCH 011/129] Correct type hint on Test.execute() (#975) The function docstring says `test_start` can be "Either a trigger phase for starting the test, or a function that returns a DUT ID.` Unfortunately, when you provide the latter, Mypy is unhappy: ``` Argument "test_start" to "execute" of "Test" has incompatible type "Callable[[], str]"; expected "Union[PhaseDescriptor, Callable[..., Optional[PhaseResult]], None]" [arg-type] ``` This commit updates the type hint of the parameter to be a Union that reflects the docstring. --- openhtf/core/test_descriptor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openhtf/core/test_descriptor.py b/openhtf/core/test_descriptor.py index cb5a62f7f..8759374af 100644 --- a/openhtf/core/test_descriptor.py +++ b/openhtf/core/test_descriptor.py @@ -275,7 +275,7 @@ def abort_from_sig_int(self) -> None: self._executor.abort() def execute(self, - test_start: Optional[phase_descriptor.PhaseT] = None, + test_start: Optional[Union[phase_descriptor.PhaseT, Callable[[], str]]] = None, profile_filename: Optional[Text] = None) -> bool: """Starts the framework and executes the given test. From e9d7365ea01aa85842d3d920edce1628e4e2071d Mon Sep 17 00:00:00 2001 From: Laurenz Date: Thu, 8 Sep 2022 19:17:45 +0200 Subject: [PATCH 012/129] Handle skipped phases in ConsoleSummary (#990) Fixes https://github.com/google/openhtf/issues/982 --- openhtf/output/callbacks/console_summary.py | 3 ++- test/output/callbacks/callbacks_test.py | 23 +++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/openhtf/output/callbacks/console_summary.py b/openhtf/output/callbacks/console_summary.py index 9a261cf1a..21f18f81f 100644 --- a/openhtf/output/callbacks/console_summary.py +++ b/openhtf/output/callbacks/console_summary.py @@ -67,7 +67,8 @@ def __call__(self, record): if not phase_result: # Timeout. output_lines.append('timeout phase: %s [ran for %.2f sec]' % (phase.name, phase_time_sec)) - elif 'CONTINUE' not in str(phase_result): # Exception. + elif 'CONTINUE' not in str(phase_result) and record.outcome_details: + # Exception. output_lines.append('%sexception type: %s' % (self.indent, record.outcome_details[0].code)) diff --git a/test/output/callbacks/callbacks_test.py b/test/output/callbacks/callbacks_test.py index e5c19d51a..f9563e381 100644 --- a/test/output/callbacks/callbacks_test.py +++ b/test/output/callbacks/callbacks_test.py @@ -25,6 +25,7 @@ import openhtf as htf from openhtf import util from examples import all_the_things +from openhtf.core import phase_branches, phase_descriptor, phase_collections, phase_group from openhtf.output.callbacks import console_summary from openhtf.output.callbacks import json_factory from openhtf.output.proto import mfg_event_converter @@ -176,3 +177,25 @@ def test_outcome_colors(self): instance = console_summary.ConsoleSummary() for outcome in htf.test_record.Outcome: self.assertIn(outcome, instance.color_table) + + def test_empty_outcome(self): + """Console Summary must not crash if phases have been skipped.""" + checkpoint = phase_branches.PhaseFailureCheckpoint.all_previous( + "cp", action=phase_descriptor.PhaseResult.FAIL_SUBTEST) + phasegroup = phase_group.PhaseGroup( + lambda: htf.PhaseResult.FAIL_AND_CONTINUE, + lambda: htf.PhaseResult.SKIP, + checkpoint, + ) + subtest = phase_collections.Subtest("st", phasegroup) + test = htf.Test(subtest) + + result_store = util.NonLocalResult() + def _save_result(test_record): + result_store.result = test_record + test.add_output_callbacks( + console_summary.ConsoleSummary(), _save_result) + + test.execute() + assert not any("Traceback" in record.message + for record in result_store.result.log_records) From beadfe58b8ff0c93b446045bc6167430ea223dc7 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Thu, 8 Sep 2022 19:18:34 +0200 Subject: [PATCH 013/129] Don't complain about uninitialized plugs in StationServer logs (#991) StationServer seems to be trying to represent (as base type) phase sequences that don't yet have their plugs initialized. This causes a warning to be logged like ``` WARNING:root:Object is not initialized, got error _asdict() missing 1 required positional argument: 'self' ``` But has no other effect. The call stack when that warning is reached is ``` convert_to_base_types (data.py:176) (data.py:199) convert_to_base_types (data.py:201) (data.py:204) convert_to_base_types (data.py:206) (data.py:199) convert_to_base_types (data.py:201) (station_server.py:364) get (station_server.py:364) _execute (web.py:1702) _run (events.py:145) _run_once (base_events.py:1451) run_forever (base_events.py:438) start (asyncio.py:199) run (web_gui_server.py:157) run (station_server.py:626) _bootstrap_inner (threading.py:916) _bootstrap (threading.py:884) ``` This PR removes that warning, behaviour remains the same. --- openhtf/util/data.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/openhtf/util/data.py b/openhtf/util/data.py index e3a3a6fe3..a1cb29f1a 100644 --- a/openhtf/util/data.py +++ b/openhtf/util/data.py @@ -22,6 +22,7 @@ import difflib import enum import itertools +import inspect import logging import math import numbers @@ -163,13 +164,8 @@ def convert_to_base_types(obj, if hasattr(obj, 'as_base_types'): return obj.as_base_types() - if hasattr(obj, '_asdict'): - try: - obj = obj._asdict() - except TypeError as e: - # This happens if the object is an uninitialized class. - logging.warning( - 'Object %s is not initialized, got error %s', obj, e) + if hasattr(obj, '_asdict') and not inspect.isclass(obj): + obj = obj._asdict() elif isinstance(obj, records.RecordClass): new_obj = {} for a in type(obj).all_attribute_names: From 7cef208c0786eacfbd845651fe703789115e867e Mon Sep 17 00:00:00 2001 From: Dushyant Bhatnagar Date: Thu, 8 Sep 2022 14:10:32 -0700 Subject: [PATCH 014/129] pyOpenSSL version update to unbreak build The build is currently broken due to some incompatibilities in pyOpenSSL versions. This attempts to bump the version. --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 79448a5d9..89eb6d567 100644 --- a/setup.py +++ b/setup.py @@ -138,7 +138,7 @@ def run(self): 'oauth2client>=1.5.2,<2.0', 'protobuf>=3.6.0,<4.0', 'PyYAML>=3.13', - 'pyOpenSSL>=17.1.0,<18.0', + 'pyOpenSSL>=17.1.0,<22.1', 'sockjs-tornado>=1.0.3,<2.0', 'tornado>=4.3,<5.0', 'typing-extensions', From dcaef4df28df51c8852a6468b1d89ece8a8cc010 Mon Sep 17 00:00:00 2001 From: Jonas Claes Date: Wed, 14 Sep 2022 22:45:38 +0200 Subject: [PATCH 015/129] Drop Python 3.6 support and update some dependencies (#1027) * Drop Python 3.6 support * Removed dependency on pre 3.7 dataclasses library * Add Python 3.10 support; * Added Python 3.10 to the CI * Revert upgrade of tornado * Delete 1.hello_world.json * Reverted Python 3.10 support due to Tornado dependency. --- .github/workflows/build_and_deploy.yml | 2 +- setup.py | 3 +-- tox.ini | 4 ++-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build_and_deploy.yml b/.github/workflows/build_and_deploy.yml index 9592b769f..db8799d21 100644 --- a/.github/workflows/build_and_deploy.yml +++ b/.github/workflows/build_and_deploy.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ['3.6', '3.7', '3.9'] + python-version: ['3.7', '3.8', '3.9'] steps: - uses: actions/checkout@v3 diff --git a/setup.py b/setup.py index 89eb6d567..18965d150 100644 --- a/setup.py +++ b/setup.py @@ -132,13 +132,12 @@ def run(self): 'attrs>=19.3.0', 'colorama>=0.3.9,<1.0', 'contextlib2>=0.5.1,<1.0', - 'dataclasses;python_version<"3.7"', 'inflection', 'mutablerecords>=0.4.1,<2.0', 'oauth2client>=1.5.2,<2.0', 'protobuf>=3.6.0,<4.0', 'PyYAML>=3.13', - 'pyOpenSSL>=17.1.0,<22.1', + 'pyOpenSSL>=17.1.0,<23', 'sockjs-tornado>=1.0.3,<2.0', 'tornado>=4.3,<5.0', 'typing-extensions', diff --git a/tox.ini b/tox.ini index 60a43780e..691476e0c 100644 --- a/tox.ini +++ b/tox.ini @@ -1,10 +1,10 @@ [tox] -envlist = py36,py37,py39 +envlist = py37,py38,py39 [gh-actions] python = - 3.6: py36 3.7: py37 + 3.8: py38 3.9: py39 [testenv] From 95bd3b2f11eba4421d27db6e47632a4f1512925e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Sep 2022 14:46:10 -0700 Subject: [PATCH 016/129] Bump shelljs from 0.7.8 to 0.8.5 in /openhtf/output/web_gui (#996) Bumps [shelljs](https://github.com/shelljs/shelljs) from 0.7.8 to 0.8.5. - [Release notes](https://github.com/shelljs/shelljs/releases) - [Changelog](https://github.com/shelljs/shelljs/blob/master/CHANGELOG.md) - [Commits](https://github.com/shelljs/shelljs/compare/v0.7.8...v0.8.5) --- updated-dependencies: - dependency-name: shelljs dependency-type: direct:development ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: cpaulin --- openhtf/output/web_gui/package-lock.json | 112 +++++++++++++++++------ openhtf/output/web_gui/package.json | 2 +- 2 files changed, 84 insertions(+), 30 deletions(-) diff --git a/openhtf/output/web_gui/package-lock.json b/openhtf/output/web_gui/package-lock.json index 7f02c70c2..ed3463b7d 100644 --- a/openhtf/output/web_gui/package-lock.json +++ b/openhtf/output/web_gui/package-lock.json @@ -3546,7 +3546,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.1.1", @@ -3597,7 +3598,8 @@ "balanced-match": { "version": "0.4.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "bcrypt-pbkdf": { "version": "1.0.1", @@ -3612,6 +3614,7 @@ "version": "0.0.9", "bundled": true, "dev": true, + "optional": true, "requires": { "inherits": "2.0.3" } @@ -3620,6 +3623,7 @@ "version": "2.10.1", "bundled": true, "dev": true, + "optional": true, "requires": { "hoek": "2.16.3" } @@ -3628,6 +3632,7 @@ "version": "1.1.7", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "0.4.2", "concat-map": "0.0.1" @@ -3636,7 +3641,8 @@ "buffer-shims": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "caseless": { "version": "0.12.0", @@ -3653,12 +3659,14 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "combined-stream": { "version": "1.0.5", "bundled": true, "dev": true, + "optional": true, "requires": { "delayed-stream": "1.0.0" } @@ -3666,22 +3674,26 @@ "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "cryptiles": { "version": "2.0.5", "bundled": true, "dev": true, + "optional": true, "requires": { "boom": "2.10.1" } @@ -3721,7 +3733,8 @@ "delayed-stream": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "delegates": { "version": "1.0.0", @@ -3753,7 +3766,8 @@ "extsprintf": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "forever-agent": { "version": "0.6.1", @@ -3775,12 +3789,14 @@ "fs.realpath": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "fstream": { "version": "1.0.11", "bundled": true, "dev": true, + "optional": true, "requires": { "graceful-fs": "4.1.11", "inherits": "2.0.3", @@ -3836,6 +3852,7 @@ "version": "7.1.2", "bundled": true, "dev": true, + "optional": true, "requires": { "fs.realpath": "1.0.0", "inflight": "1.0.6", @@ -3848,7 +3865,8 @@ "graceful-fs": { "version": "4.1.11", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "har-schema": { "version": "1.0.5", @@ -3876,6 +3894,7 @@ "version": "3.1.3", "bundled": true, "dev": true, + "optional": true, "requires": { "boom": "2.10.1", "cryptiles": "2.0.5", @@ -3886,7 +3905,8 @@ "hoek": { "version": "2.16.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "http-signature": { "version": "1.1.1", @@ -3903,6 +3923,7 @@ "version": "1.0.6", "bundled": true, "dev": true, + "optional": true, "requires": { "once": "1.4.0", "wrappy": "1.0.2" @@ -3911,7 +3932,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.4", @@ -3923,6 +3945,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "1.0.1" } @@ -3936,7 +3959,8 @@ "isarray": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "isstream": { "version": "0.1.2", @@ -4009,12 +4033,14 @@ "mime-db": { "version": "1.27.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "mime-types": { "version": "2.1.15", "bundled": true, "dev": true, + "optional": true, "requires": { "mime-db": "1.27.0" } @@ -4023,6 +4049,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "1.1.7" } @@ -4030,12 +4057,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "mkdirp": { "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -4090,7 +4119,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "oauth-sign": { "version": "0.8.2", @@ -4108,6 +4138,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1.0.2" } @@ -4137,7 +4168,8 @@ "path-is-absolute": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "performance-now": { "version": "0.2.0", @@ -4148,7 +4180,8 @@ "process-nextick-args": { "version": "1.0.7", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "punycode": { "version": "1.4.1", @@ -4186,6 +4219,7 @@ "version": "2.2.9", "bundled": true, "dev": true, + "optional": true, "requires": { "buffer-shims": "1.0.0", "core-util-is": "1.0.2", @@ -4230,6 +4264,7 @@ "version": "2.6.1", "bundled": true, "dev": true, + "optional": true, "requires": { "glob": "7.1.2" } @@ -4237,7 +4272,8 @@ "safe-buffer": { "version": "5.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "semver": { "version": "5.3.0", @@ -4261,6 +4297,7 @@ "version": "1.0.9", "bundled": true, "dev": true, + "optional": true, "requires": { "hoek": "2.16.3" } @@ -4294,6 +4331,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "1.1.0", "is-fullwidth-code-point": "1.0.0", @@ -4304,6 +4342,7 @@ "version": "1.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "5.0.1" } @@ -4318,6 +4357,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "2.1.1" } @@ -4332,6 +4372,7 @@ "version": "2.2.1", "bundled": true, "dev": true, + "optional": true, "requires": { "block-stream": "0.0.9", "fstream": "1.0.11", @@ -4387,7 +4428,8 @@ "util-deprecate": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "uuid": { "version": "3.0.1", @@ -4416,7 +4458,8 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, @@ -8683,7 +8726,7 @@ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dev": true, "requires": { - "resolve": "1.1.7" + "resolve": "^1.1.6" } }, "redent": { @@ -9421,14 +9464,14 @@ "dev": true }, "shelljs": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", - "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", "dev": true, "requires": { - "glob": "7.1.2", - "interpret": "1.1.0", - "rechoir": "0.6.2" + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" } }, "sigmund": { @@ -10398,6 +10441,17 @@ "uglify-js": "2.8.29" } }, + "shelljs": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", + "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, "source-map": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", diff --git a/openhtf/output/web_gui/package.json b/openhtf/output/web_gui/package.json index 7f6c8af86..9953750b7 100644 --- a/openhtf/output/web_gui/package.json +++ b/openhtf/output/web_gui/package.json @@ -78,7 +78,7 @@ "remap-istanbul": "^0.6.4", "rimraf": "^2.5.1", "sass-loader": "^6.0.7", - "shelljs": "^0.7.0", + "shelljs": "^0.8.5", "style-loader": "^0.13.0", "ts-helpers": "^1.1.1", "tslint": "^4.3.1", From e9c7681a00ea08f860e140a56c71cb5db945c499 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Sep 2022 15:19:03 -0700 Subject: [PATCH 017/129] Bump @angular/core from 4.4.6 to 11.0.5 in /openhtf/output/web_gui (#1014) Bumps [@angular/core](https://github.com/angular/angular/tree/HEAD/packages/core) from 4.4.6 to 11.0.5. - [Release notes](https://github.com/angular/angular/releases) - [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md) - [Commits](https://github.com/angular/angular/commits/11.0.5/packages/core) --- updated-dependencies: - dependency-name: "@angular/core" dependency-type: direct:production ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- openhtf/output/web_gui/package-lock.json | 15 +++++++++++---- openhtf/output/web_gui/package.json | 2 +- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/openhtf/output/web_gui/package-lock.json b/openhtf/output/web_gui/package-lock.json index ed3463b7d..4d2914d06 100644 --- a/openhtf/output/web_gui/package-lock.json +++ b/openhtf/output/web_gui/package-lock.json @@ -29,11 +29,18 @@ } }, "@angular/core": { - "version": "4.4.6", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-4.4.6.tgz", - "integrity": "sha1-EwMf0Q3P5DiHVBmzjyESCVi8I1Q=", + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-11.0.5.tgz", + "integrity": "sha512-XAXWQi7R3ucZXQwx9QK5jSKJeQyRJ53u2dQDpr7R5stzeCy1a5hrNOkZLg9zOTTPcth/6+FrOrRZP9SMdxtw3w==", "requires": { - "tslib": "1.9.0" + "tslib": "^2.0.0" + }, + "dependencies": { + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + } } }, "@angular/forms": { diff --git a/openhtf/output/web_gui/package.json b/openhtf/output/web_gui/package.json index 9953750b7..d5baa36cd 100644 --- a/openhtf/output/web_gui/package.json +++ b/openhtf/output/web_gui/package.json @@ -27,7 +27,7 @@ "@angular/animations": "^4.4.6", "@angular/common": "^4.4.6", "@angular/compiler": "^4.4.6", - "@angular/core": "^4.4.6", + "@angular/core": "^11.0.5", "@angular/forms": "^4.4.6", "@angular/http": "^4.4.6", "@angular/platform-browser": "^4.4.6", From 151e5c369f1a9965769c1e446c8da8fe032cde71 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Sep 2022 15:47:07 -0700 Subject: [PATCH 018/129] Bump engine.io and karma in /openhtf/output/web_gui (#1025) Bumps [engine.io](https://github.com/socketio/engine.io) and [karma](https://github.com/karma-runner/karma). These dependencies needed to be updated together. Updates `engine.io` from 1.8.2 to 6.2.0 - [Release notes](https://github.com/socketio/engine.io/releases) - [Changelog](https://github.com/socketio/engine.io/blob/main/CHANGELOG.md) - [Commits](https://github.com/socketio/engine.io/compare/1.8.2...6.2.0) Updates `karma` from 1.4.1 to 6.4.0 - [Release notes](https://github.com/karma-runner/karma/releases) - [Changelog](https://github.com/karma-runner/karma/blob/master/CHANGELOG.md) - [Commits](https://github.com/karma-runner/karma/compare/v1.4.1...v6.4.0) --- updated-dependencies: - dependency-name: engine.io dependency-type: indirect - dependency-name: karma dependency-type: direct:development ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- openhtf/output/web_gui/package-lock.json | 1458 ++++++++++++++-------- openhtf/output/web_gui/package.json | 2 +- 2 files changed, 933 insertions(+), 527 deletions(-) diff --git a/openhtf/output/web_gui/package-lock.json b/openhtf/output/web_gui/package-lock.json index 4d2914d06..a5db29ba5 100644 --- a/openhtf/output/web_gui/package-lock.json +++ b/openhtf/output/web_gui/package-lock.json @@ -98,6 +98,30 @@ "loader-utils": "1.1.0" } }, + "@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true + }, + "@socket.io/component-emitter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", + "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", + "dev": true + }, + "@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true + }, + "@types/cors": { + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", + "dev": true + }, "@types/fs-extra": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-0.0.33.tgz", @@ -290,13 +314,36 @@ "dev": true }, "accepts": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", - "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "requires": { - "mime-types": "2.1.17", - "negotiator": "0.6.1" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "dependencies": { + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + } } }, "acorn": { @@ -320,12 +367,6 @@ "integrity": "sha1-hgbCy/HEJs6MjsABdER/1Jtur8E=", "dev": true }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", - "dev": true - }, "agent-base": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz", @@ -670,12 +711,6 @@ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", "dev": true }, - "array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", - "dev": true - }, "array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", @@ -697,12 +732,6 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, - "arraybuffer.slice": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", - "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=", - "dev": true - }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -890,12 +919,6 @@ "js-tokens": "3.0.2" } }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true - }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -957,12 +980,6 @@ } } }, - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", - "dev": true - }, "base64-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", @@ -970,9 +987,9 @@ "dev": true }, "base64id": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", - "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", "dev": true }, "batch": { @@ -997,15 +1014,6 @@ "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", "dev": true }, - "better-assert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "dev": true, - "requires": { - "callsite": "1.0.0" - } - }, "big.js": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", @@ -1018,12 +1026,6 @@ "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", "dev": true }, - "blob": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", - "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", - "dev": true - }, "block-stream": { "version": "0.0.9", "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", @@ -1379,11 +1381,15 @@ "unset-value": "1.0.0" } }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", - "dev": true + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } }, "camel-case": { "version": "3.0.0", @@ -1741,15 +1747,6 @@ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", "dev": true }, - "combine-lists": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", - "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", - "dev": true, - "requires": { - "lodash": "4.17.5" - } - }, "combined-stream": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", @@ -1771,24 +1768,12 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", - "dev": true - }, "component-emitter": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", "dev": true }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", - "dev": true - }, "compressible": { "version": "2.0.12", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.12.tgz", @@ -1858,15 +1843,23 @@ } }, "connect": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.5.tgz", - "integrity": "sha1-+43ee6B2OHfQ7J352sC0tA5yx9o=", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, "requires": { "debug": "2.6.9", - "finalhandler": "1.0.6", - "parseurl": "1.3.2", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", "utils-merge": "1.0.1" + }, + "dependencies": { + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + } } }, "connect-history-api-fallback": { @@ -1967,6 +1960,16 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, "cosmiconfig": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", @@ -2213,7 +2216,7 @@ "custom-event": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", "dev": true }, "cyclist": { @@ -2239,6 +2242,12 @@ } } }, + "date-format": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.13.tgz", + "integrity": "sha512-bnYCwf8Emc3pTD8pXnre+wfnjGtfi5ncMDKy7+cWZXbmRAsdWkOQHrfC1yz/KiwP5thDp2kCHWYWKBX4HP1hoQ==", + "dev": true + }, "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", @@ -2414,7 +2423,7 @@ "di": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", "dev": true }, "diff": { @@ -2464,13 +2473,13 @@ "dom-serialize": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", "dev": true, "requires": { - "custom-event": "1.0.1", - "ent": "2.2.0", - "extend": "3.0.1", - "void-elements": "2.0.1" + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" } }, "dom-serializer": { @@ -2621,6 +2630,12 @@ "minimalistic-crypto-utils": "1.0.1" } }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, "emojis-list": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", @@ -2643,86 +2658,63 @@ } }, "engine.io": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.2.tgz", - "integrity": "sha1-a1m+cws0jAElsKRYneHDVavPen4=", - "dev": true, - "requires": { - "accepts": "1.3.3", - "base64id": "1.0.0", - "cookie": "0.3.1", - "debug": "2.3.3", - "engine.io-parser": "1.3.2", - "ws": "1.1.1" - }, - "dependencies": { - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0.tgz", + "integrity": "sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg==", + "dev": true, + "requires": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.2.3" + }, + "dependencies": { + "@types/node": { + "version": "18.7.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.18.tgz", + "integrity": "sha512-m+6nTEOadJZuTPkKR/SYK3A2d7FZrgElol9UP1Kae90VVU4a6mxnPuLiIW1m4Cq4gZ/nWb9GrdVXJCoCazDAbg==", + "dev": true }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", "dev": true - } - } - }, - "engine.io-client": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.2.tgz", - "integrity": "sha1-w4dnVH8qfRhPV1L28K1QEAZwN2Y=", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "2.3.3", - "engine.io-parser": "1.3.2", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parsejson": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "1.1.1", - "xmlhttprequest-ssl": "1.5.3", - "yeast": "0.1.2" - }, - "dependencies": { + }, "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { - "ms": "0.7.2" + "ms": "2.1.2" } }, "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", "dev": true } } }, "engine.io-parser": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", - "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", - "dev": true, - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "0.0.6", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.4", - "has-binary": "0.1.7", - "wtf-8": "1.0.0" - } + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz", + "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==", + "dev": true }, "enhanced-resolve": { "version": "3.3.0", @@ -2739,7 +2731,7 @@ "ent": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==", "dev": true }, "entities": { @@ -2776,6 +2768,12 @@ "through": "2.3.8" } }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -2901,56 +2899,6 @@ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true }, - "expand-braces": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", - "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", - "dev": true, - "requires": { - "array-slice": "0.2.3", - "array-unique": "0.2.1", - "braces": "0.1.5" - }, - "dependencies": { - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "braces": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", - "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", - "dev": true, - "requires": { - "expand-range": "0.1.1" - } - }, - "expand-range": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", - "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", - "dev": true, - "requires": { - "is-number": "0.1.1", - "repeat-string": "0.2.2" - } - }, - "is-number": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", - "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", - "dev": true - }, - "repeat-string": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", - "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", - "dev": true - } - } - }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -3341,24 +3289,30 @@ } }, "finalhandler": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz", - "integrity": "sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, "requires": { "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.3.1", - "unpipe": "1.0.0" - }, - "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true } } @@ -3407,6 +3361,12 @@ } } }, + "flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, "flatten": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", @@ -3423,6 +3383,12 @@ "readable-stream": "2.3.3" } }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "dev": true + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -4534,6 +4500,28 @@ "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", "dev": true }, + "get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "dependencies": { + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + } + } + }, "get-stdin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", @@ -4839,29 +4827,6 @@ "ansi-regex": "2.1.1" } }, - "has-binary": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", - "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", - "dev": true, - "requires": { - "isarray": "0.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - } - } - }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", - "dev": true - }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", @@ -4877,6 +4842,12 @@ "sparkles": "1.0.0" } }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", @@ -5806,9 +5777,9 @@ "dev": true }, "isbinaryfile": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz", - "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", "dev": true }, "isexe": { @@ -6084,78 +6055,523 @@ } }, "karma": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/karma/-/karma-1.4.1.tgz", - "integrity": "sha1-QZgacdVCN2BrCj6oxYyQdz9BZQ4=", - "dev": true, - "requires": { - "bluebird": "3.5.1", - "body-parser": "1.18.2", - "chokidar": "1.7.0", - "colors": "1.1.2", - "combine-lists": "1.0.1", - "connect": "3.6.5", - "core-js": "2.5.5", - "di": "0.0.1", - "dom-serialize": "2.2.1", - "expand-braces": "0.1.2", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "http-proxy": "1.16.2", - "isbinaryfile": "3.0.2", - "lodash": "3.10.1", - "log4js": "0.6.38", - "mime": "1.6.0", - "minimatch": "3.0.4", - "optimist": "0.6.1", - "qjobs": "1.1.5", - "range-parser": "1.2.0", - "rimraf": "2.6.2", - "safe-buffer": "5.1.1", - "socket.io": "1.7.2", - "source-map": "0.5.7", - "tmp": "0.0.28", - "useragent": "2.3.0" - }, - "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - } - } - }, - "karma-chrome-launcher": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", - "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", - "dev": true, - "requires": { - "fs-access": "1.0.1", - "which": "1.3.0" - } - }, - "karma-coverage": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-1.1.1.tgz", - "integrity": "sha1-Wv+LOc9plNwi3kyENix2ABtjfPY=", - "dev": true, - "requires": { - "dateformat": "1.0.12", - "istanbul": "0.4.5", - "lodash": "3.10.1", - "minimatch": "3.0.4", - "source-map": "0.5.7" + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.0.tgz", + "integrity": "sha512-s8m7z0IF5g/bS5ONT7wsOavhW4i4aFkzD4u4wgzAQWT4HGUeWI3i21cK2Yz6jndMAeHETp5XuNsRoyGJZXVd4w==", + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.4.1", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" }, "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true - } - } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "body-parser": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + } + } + }, + "karma-chrome-launcher": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", + "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", + "dev": true, + "requires": { + "fs-access": "1.0.1", + "which": "1.3.0" + } + }, + "karma-coverage": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-1.1.1.tgz", + "integrity": "sha1-Wv+LOc9plNwi3kyENix2ABtjfPY=", + "dev": true, + "requires": { + "dateformat": "1.0.12", + "istanbul": "0.4.5", + "lodash": "3.10.1", + "minimatch": "3.0.4", + "source-map": "0.5.7" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } }, "karma-jasmine": { "version": "1.1.1", @@ -6589,37 +7005,31 @@ } }, "log4js": { - "version": "0.6.38", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", - "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.6.1.tgz", + "integrity": "sha512-J8VYFH2UQq/xucdNu71io4Fo+purYYudyErgBbswWKO0MC6QVOERRomt5su/z6d3RJSmLyTGmXl3Q/XjKCf+/A==", "dev": true, "requires": { - "readable-stream": "1.0.34", - "semver": "4.3.6" + "date-format": "^4.0.13", + "debug": "^4.3.4", + "flatted": "^3.2.6", + "rfdc": "^1.3.0", + "streamroller": "^3.1.2" }, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" + "ms": "2.1.2" } }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true } } @@ -7230,12 +7640,6 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, - "object-component": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", - "dev": true - }, "object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", @@ -7267,6 +7671,12 @@ } } }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true + }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", @@ -7556,33 +7966,6 @@ "error-ex": "1.3.1" } }, - "parsejson": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", - "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", - "dev": true, - "requires": { - "better-assert": "1.0.2" - } - }, - "parseqs": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", - "dev": true, - "requires": { - "better-assert": "1.0.2" - } - }, - "parseuri": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", - "dev": true, - "requires": { - "better-assert": "1.0.2" - } - }, "parseurl": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", @@ -7653,6 +8036,12 @@ "sha.js": "2.4.10" } }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", @@ -8497,9 +8886,9 @@ "dev": true }, "qjobs": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.1.5.tgz", - "integrity": "sha1-ZZ3p8s+NzCehSBJ28gU3cnI4LnM=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", "dev": true }, "qs": { @@ -9073,6 +9462,12 @@ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true }, + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, "right-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", @@ -9133,6 +9528,12 @@ "ret": "0.1.15" } }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, "sass-graph": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", @@ -9481,6 +9882,17 @@ "rechoir": "^0.6.2" } }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, "sigmund": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", @@ -9616,143 +10028,65 @@ } }, "socket.io": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.2.tgz", - "integrity": "sha1-g7u98ueSY7N4kA2kA+eEPgXcO3E=", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.2.tgz", + "integrity": "sha512-6fCnk4ARMPZN448+SQcnn1u8OHUC72puJcNtSgg2xS34Cu7br1gQ09YKkO1PFfDn/wyUE9ZgMAwosJed003+NQ==", "dev": true, "requires": { - "debug": "2.3.3", - "engine.io": "1.8.2", - "has-binary": "0.1.7", - "object-assign": "4.1.0", - "socket.io-adapter": "0.5.0", - "socket.io-client": "1.7.2", - "socket.io-parser": "2.3.1" + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.2.0", + "socket.io-adapter": "~2.4.0", + "socket.io-parser": "~4.2.0" }, "dependencies": { "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { - "ms": "0.7.2" + "ms": "2.1.2" } }, "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - }, - "object-assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", - "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true } } }, "socket.io-adapter": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", - "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", - "dev": true, - "requires": { - "debug": "2.3.3", - "socket.io-parser": "2.3.1" - }, - "dependencies": { - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - } - } - }, - "socket.io-client": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.2.tgz", - "integrity": "sha1-Of2ww91FDjIbfkDP2DYS7FM91kQ=", - "dev": true, - "requires": { - "backo2": "1.0.2", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "2.3.3", - "engine.io-client": "1.8.2", - "has-binary": "0.1.7", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseuri": "0.0.5", - "socket.io-parser": "2.3.1", - "to-array": "0.1.4" - }, - "dependencies": { - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - } - } + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz", + "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==", + "dev": true }, "socket.io-parser": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", - "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.1.tgz", + "integrity": "sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g==", "dev": true, "requires": { - "component-emitter": "1.1.2", - "debug": "2.2.0", - "isarray": "0.0.1", - "json3": "3.3.2" + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" }, "dependencies": { - "component-emitter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", - "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", - "dev": true - }, "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { - "ms": "0.7.1" + "ms": "2.1.2" } }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true } } @@ -10026,6 +10360,60 @@ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", "dev": true }, + "streamroller": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.2.tgz", + "integrity": "sha512-wZswqzbgGGsXYIrBYhOE0yP+nQ6XRk7xDcYwuQAGTYXdyAUmvgVFE0YU1g5pvQT0m7GBaQfYcSnlHbapuK0H0A==", + "dev": true, + "requires": { + "date-format": "^4.0.13", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, "strict-uri-encode": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", @@ -10199,20 +10587,48 @@ } }, "tmp": { - "version": "0.0.28", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.28.tgz", - "integrity": "sha1-Fyc1t/YU6nrzlmT6hM8N5OUV0SA=", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, "requires": { - "os-tmpdir": "1.0.2" + "rimraf": "^3.0.0" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } } }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", - "dev": true - }, "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", @@ -10261,6 +10677,12 @@ "repeat-string": "1.6.1" } }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, "toposort": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.6.tgz", @@ -10509,6 +10931,12 @@ "integrity": "sha512-Ao/f6d/4EPLq0YwzsQz8iXflezpTkQzqAyenTiw4kCUGr1uPiFLC3+fZ+gMZz6eeI/qdRUqvC+HxIJzUAzEFdg==", "dev": true }, + "ua-parser-js": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", + "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==", + "dev": true + }, "uglify-js": { "version": "3.3.9", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.9.tgz", @@ -10629,6 +11057,12 @@ "crypto-random-string": "1.0.0" } }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -10817,16 +11251,6 @@ "kind-of": "6.0.2" } }, - "useragent": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", - "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", - "dev": true, - "requires": { - "lru-cache": "4.1.1", - "tmp": "0.0.28" - } - }, "util": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", @@ -10932,7 +11356,7 @@ "void-elements": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", "dev": true }, "watchpack": { @@ -11376,12 +11800,6 @@ "ultron": "1.0.2" } }, - "wtf-8": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", - "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=", - "dev": true - }, "xdg-basedir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", @@ -11418,12 +11836,6 @@ "integrity": "sha1-UZy0ymhtAFqEINNJbz8MruzKWA8=", "dev": true }, - "xmlhttprequest-ssl": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", - "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=", - "dev": true - }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", @@ -11472,12 +11884,6 @@ } } }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", - "dev": true - }, "zone.js": { "version": "0.8.26", "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.8.26.tgz", diff --git a/openhtf/output/web_gui/package.json b/openhtf/output/web_gui/package.json index d5baa36cd..a67ca7159 100644 --- a/openhtf/output/web_gui/package.json +++ b/openhtf/output/web_gui/package.json @@ -62,7 +62,7 @@ "jasmine-core": "^2.99.1", "jasmine-spec-reporter": "^3.2.0", "json-loader": "^0.5.3", - "karma": "1.4.1", + "karma": "6.4.0", "karma-chrome-launcher": "^2.0.0", "karma-coverage": "^1.0.0", "karma-jasmine": "^1.0.2", From 78113cf6502915408e59baa3baec454e033163ab Mon Sep 17 00:00:00 2001 From: Laurenz Date: Fri, 16 Sep 2022 19:30:50 +0200 Subject: [PATCH 019/129] Show failed measurement-less phases as failed (#1020) By adding `skip`, `error` states and using PhaseRecord.outcome instead of checking measurement.status. Co-authored-by: cpaulin --- .../web_gui/src/app/shared/models/phase.model.ts | 2 ++ .../src/app/shared/models/station.model.ts | 2 +- .../src/app/shared/models/test-state.model.ts | 2 +- .../web_gui/src/app/shared/status-pipes.ts | 4 ++++ .../src/app/stations/station/station-data.ts | 16 +++++++++------- 5 files changed, 17 insertions(+), 9 deletions(-) diff --git a/openhtf/output/web_gui/src/app/shared/models/phase.model.ts b/openhtf/output/web_gui/src/app/shared/models/phase.model.ts index cf418d91d..31bca9e3f 100644 --- a/openhtf/output/web_gui/src/app/shared/models/phase.model.ts +++ b/openhtf/output/web_gui/src/app/shared/models/phase.model.ts @@ -14,6 +14,8 @@ export enum PhaseStatus { running, pass, fail, + skip, + error, } export class Phase { diff --git a/openhtf/output/web_gui/src/app/shared/models/station.model.ts b/openhtf/output/web_gui/src/app/shared/models/station.model.ts index 8d0f4f753..031ce7346 100644 --- a/openhtf/output/web_gui/src/app/shared/models/station.model.ts +++ b/openhtf/output/web_gui/src/app/shared/models/station.model.ts @@ -3,7 +3,7 @@ */ export enum StationStatus { - online = 7, + online = 9, unreachable, } diff --git a/openhtf/output/web_gui/src/app/shared/models/test-state.model.ts b/openhtf/output/web_gui/src/app/shared/models/test-state.model.ts index 78e5c6735..5cfae2b61 100644 --- a/openhtf/output/web_gui/src/app/shared/models/test-state.model.ts +++ b/openhtf/output/web_gui/src/app/shared/models/test-state.model.ts @@ -10,7 +10,7 @@ import { Station } from './station.model'; // Enum values must not overlap between any of the status enums. // See status-pipes.ts. export enum TestStatus { - waiting = 9, // Corresponds to WAITING_FOR_TEST_START. + waiting = 11, // Corresponds to WAITING_FOR_TEST_START. running, pass, fail, diff --git a/openhtf/output/web_gui/src/app/shared/status-pipes.ts b/openhtf/output/web_gui/src/app/shared/status-pipes.ts index b3af2511f..62a9a221f 100644 --- a/openhtf/output/web_gui/src/app/shared/status-pipes.ts +++ b/openhtf/output/web_gui/src/app/shared/status-pipes.ts @@ -43,6 +43,8 @@ const statusToCategory = { [PhaseStatus.running]: StatusCategory.running, [PhaseStatus.pass]: StatusCategory.pass, [PhaseStatus.fail]: StatusCategory.fail, + [PhaseStatus.skip]: StatusCategory.unreachable, + [PhaseStatus.error]: StatusCategory.warning, [StationStatus.online]: StatusCategory.online, [StationStatus.unreachable]: StatusCategory.unreachable, [TestStatus.waiting]: StatusCategory.pending, @@ -63,6 +65,8 @@ const statusToText = { [PhaseStatus.running]: 'Running', [PhaseStatus.pass]: 'Pass', [PhaseStatus.fail]: 'Fail', + [PhaseStatus.skip]: 'Skip', + [PhaseStatus.error]: 'Error', [StationStatus.online]: 'Online', [StationStatus.unreachable]: 'Unreachable', [TestStatus.waiting]: 'Waiting', diff --git a/openhtf/output/web_gui/src/app/stations/station/station-data.ts b/openhtf/output/web_gui/src/app/stations/station/station-data.ts index 2a176ca22..d13dbdf12 100644 --- a/openhtf/output/web_gui/src/app/stations/station/station-data.ts +++ b/openhtf/output/web_gui/src/app/stations/station/station-data.ts @@ -33,6 +33,13 @@ const measurementStatusMap = { 'PARTIALLY_SET': MeasurementStatus.unset, }; +const phaseRecordOutcomeMap = { + 'PASS': PhaseStatus.pass, + 'FAIL': PhaseStatus.fail, + 'SKIP': PhaseStatus.skip, + 'ERROR': PhaseStatus.error, +}; + export interface RawTestState { plugs: RawPlugsInfo; running_phase_state: RawPhase|null; @@ -78,6 +85,7 @@ export interface RawPhase { name: string; result?: {}; // Not present on running phase state. start_time_millis: number; + outcome: string; } export interface RawAttachment { @@ -201,13 +209,7 @@ function makePhase(phase: RawPhase, running: boolean) { if (running) { status = PhaseStatus.running; } else { - status = PhaseStatus.pass; - for (const measurement of measurements) { - if (measurement.status !== MeasurementStatus.pass) { - status = PhaseStatus.fail; - break; - } - } + status = phaseRecordOutcomeMap[phase.outcome]; } return new Phase({ attachments, From a60148d0e69fa32247c3c8a8fb2c4163ff6c2808 Mon Sep 17 00:00:00 2001 From: tan01 Date: Fri, 16 Sep 2022 11:43:49 -0700 Subject: [PATCH 020/129] Internal change (#1037) PiperOrigin-RevId: 474850134 --- openhtf/core/phase_executor.py | 52 ++++++++++++------------- openhtf/core/test_descriptor.py | 10 ++--- openhtf/util/configuration.py | 2 +- openhtf/util/text.py | 11 +++--- openhtf/util/threads.py | 18 +++++---- test/core/exe_test.py | 1 + test/output/callbacks/callbacks_test.py | 22 ++++++----- test/util/text_test.py | 42 ++++++++++++++++++++ 8 files changed, 101 insertions(+), 57 deletions(-) diff --git a/openhtf/core/phase_executor.py b/openhtf/core/phase_executor.py index 766e4e10a..eb47fc957 100644 --- a/openhtf/core/phase_executor.py +++ b/openhtf/core/phase_executor.py @@ -30,7 +30,6 @@ framework. """ -import logging import pstats import sys import threading @@ -63,9 +62,6 @@ target='%s.DEFAULT_PHASE_TIMEOUT_S' % __name__, help='Test phase timeout in seconds') -# TODO(arsharma): Use the test state logger. -_LOG = logging.getLogger(__name__) - @attr.s(slots=True, frozen=True) class ExceptionInfo(object): @@ -170,7 +166,8 @@ def __init__(self, phase_desc: phase_descriptor.PhaseDescriptor, subtest_rec: Optional[test_record.SubtestRecord]): super(PhaseExecutorThread, self).__init__( name='', - run_with_profiling=run_with_profiling) + run_with_profiling=run_with_profiling, + logger=test_state.state_logger.getChild('phase_executor_thread')) self._phase_desc = phase_desc self._test_state = test_state self._subtest_rec = subtest_rec @@ -238,6 +235,7 @@ class PhaseExecutor(object): def __init__(self, test_state: 'htf_test_state.TestState'): self.test_state = test_state + self.logger = test_state.state_logger.getChild('phase_executor') # This lock exists to prevent stop() calls from being ignored if called when # _execute_phase_once is setting up the next phase thread. self._current_phase_thread_lock = threading.Lock() @@ -267,8 +265,7 @@ def execute_phase( requested and successfully ran for this phase execution. """ repeat_count = 1 - repeat_limit = (phase.options.repeat_limit or - DEFAULT_RETRIES) + repeat_limit = (phase.options.repeat_limit or DEFAULT_RETRIES) while not self._stopping.is_set(): is_last_repeat = repeat_count >= repeat_limit phase_execution_outcome, profile_stats = self._execute_phase_once( @@ -277,9 +274,8 @@ def execute_phase( # Give 3 default retries for timeout phase. # Force repeat up to the repeat limit if force_repeat is set. if ((phase_execution_outcome.is_timeout and - phase.options.repeat_on_timeout) or - phase_execution_outcome.is_repeat or - phase.options.force_repeat) and not is_last_repeat: + phase.options.repeat_on_timeout) or phase_execution_outcome.is_repeat + or phase.options.force_repeat) and not is_last_repeat: repeat_count += 1 continue @@ -297,18 +293,18 @@ def _execute_phase_once( """Executes the given phase, returning a PhaseExecutionOutcome.""" # Check this before we create a PhaseState and PhaseRecord. if phase_desc.options.run_if and not phase_desc.options.run_if(): - _LOG.debug('Phase %s skipped due to run_if returning falsey.', - phase_desc.name) + self.logger.debug('Phase %s skipped due to run_if returning falsey.', + phase_desc.name) return PhaseExecutionOutcome(phase_descriptor.PhaseResult.SKIP), None override_result = None with self.test_state.running_phase_context(phase_desc) as phase_state: if subtest_rec: - _LOG.debug('Executing phase %s under subtest %s', phase_desc.name, - subtest_rec.name) + self.logger.debug('Executing phase %s under subtest %s', + phase_desc.name, subtest_rec.name) phase_state.set_subtest_name(subtest_rec.name) else: - _LOG.debug('Executing phase %s', phase_desc.name) + self.logger.debug('Executing phase %s', phase_desc.name) with self._current_phase_thread_lock: # Checking _stopping must be in the lock context, otherwise there is a # race condition: this thread checks _stopping and then switches to @@ -328,7 +324,7 @@ def _execute_phase_once( phase_state.result = phase_thread.join_or_die() if phase_state.result.is_repeat and is_last_repeat: - _LOG.error('Phase returned REPEAT, exceeding repeat_limit.') + self.logger.error('Phase returned REPEAT, exceeding repeat_limit.') phase_state.hit_repeat_limit = True override_result = PhaseExecutionOutcome( phase_descriptor.PhaseResult.STOP) @@ -337,15 +333,15 @@ def _execute_phase_once( # Refresh the result in case a validation for a partially set measurement # or phase diagnoser raised an exception. result = override_result or phase_state.result - _LOG.debug('Phase %s finished with result %s', phase_desc.name, - result.phase_result) + self.logger.debug('Phase %s finished with result %s', phase_desc.name, + result.phase_result) return (result, phase_thread.get_profile_stats() if run_with_profiling else None) def skip_phase(self, phase_desc: phase_descriptor.PhaseDescriptor, subtest_rec: Optional[test_record.SubtestRecord]) -> None: """Skip a phase, but log a record of it.""" - _LOG.debug('Automatically skipping phase %s', phase_desc.name) + self.logger.debug('Automatically skipping phase %s', phase_desc.name) with self.test_state.running_phase_context(phase_desc) as phase_state: if subtest_rec: phase_state.set_subtest_name(subtest_rec.name) @@ -359,16 +355,16 @@ def evaluate_checkpoint( """Evaluate a checkpoint, returning a PhaseExecutionOutcome.""" if subtest_rec: subtest_name = subtest_rec.name - _LOG.debug('Evaluating checkpoint %s under subtest %s', checkpoint.name, - subtest_name) + self.logger.debug('Evaluating checkpoint %s under subtest %s', + checkpoint.name, subtest_name) else: - _LOG.debug('Evaluating checkpoint %s', checkpoint.name) + self.logger.debug('Evaluating checkpoint %s', checkpoint.name) subtest_name = None evaluated_millis = util.time_millis() try: outcome = PhaseExecutionOutcome(checkpoint.get_result(self.test_state)) - _LOG.debug('Checkpoint %s result: %s', checkpoint.name, - outcome.phase_result) + self.logger.debug('Checkpoint %s result: %s', checkpoint.name, + outcome.phase_result) if outcome.is_fail_subtest and not subtest_rec: raise InvalidPhaseResultError( 'Checkpoint returned FAIL_SUBTEST, but subtest not running.') @@ -385,7 +381,7 @@ def evaluate_checkpoint( def skip_checkpoint(self, checkpoint: phase_branches.Checkpoint, subtest_rec: Optional[test_record.SubtestRecord]) -> None: """Skip a checkpoint, but log a record of it.""" - _LOG.debug('Automatically skipping checkpoint %s', checkpoint.name) + self.logger.debug('Automatically skipping checkpoint %s', checkpoint.name) subtest_name = subtest_rec.name if subtest_rec else None checkpoint_rec = test_record.CheckpointRecord.from_checkpoint( checkpoint, subtest_name, @@ -417,11 +413,11 @@ def stop( if phase_thread.is_alive(): phase_thread.kill() - _LOG.debug('Waiting for cancelled phase to exit: %s', phase_thread) + self.logger.debug('Waiting for cancelled phase to exit: %s', phase_thread) timeout = timeouts.PolledTimeout.from_seconds(timeout_s) while phase_thread.is_alive() and not timeout.has_expired(): time.sleep(0.1) - _LOG.debug('Cancelled phase %s exit', - "didn't" if phase_thread.is_alive() else 'did') + self.logger.debug('Cancelled phase %s exit', + "didn't" if phase_thread.is_alive() else 'did') # Clear the currently running phase, whether it finished or timed out. self.test_state.stop_running_phase() diff --git a/openhtf/core/test_descriptor.py b/openhtf/core/test_descriptor.py index 8759374af..fdf16c65c 100644 --- a/openhtf/core/test_descriptor.py +++ b/openhtf/core/test_descriptor.py @@ -275,7 +275,8 @@ def abort_from_sig_int(self) -> None: self._executor.abort() def execute(self, - test_start: Optional[Union[phase_descriptor.PhaseT, Callable[[], str]]] = None, + test_start: Optional[Union[phase_descriptor.PhaseT, + Callable[[], str]]] = None, profile_filename: Optional[Text] = None) -> bool: """Starts the framework and executes the given test. @@ -480,8 +481,8 @@ class TestApi(object): test_record: A reference to the output TestRecord for the currently running openhtf.Test. Direct access to this attribute is *strongly* discouraged, but provided as a catch-all for interfaces not otherwise provided by - TestApi. If you find yourself using this, please file a - feature request for an alternative at: + TestApi. If you find yourself using this, please file a feature request + for an alternative at: https://github.com/google/openhtf/issues/new """ @@ -583,8 +584,7 @@ def get_measurement( return self._running_test_state.get_measurement(measurement_name) def get_measurement_strict( - self, - measurement_name: Text) -> test_state.ImmutableMeasurement: + self, measurement_name: Text) -> test_state.ImmutableMeasurement: """Get a copy of the test measurement from current or previous phase. Measurement and phase name uniqueness is not enforced, so this method will diff --git a/openhtf/util/configuration.py b/openhtf/util/configuration.py index 9174444dc..986eb61b9 100644 --- a/openhtf/util/configuration.py +++ b/openhtf/util/configuration.py @@ -30,7 +30,7 @@ CONF = configuration.CONF - ANITIMATTER_INTERMIX_CONSTANT = CONF.declare('antimatter_intermix_constant', + ANTIMATTER_INTERMIX_CONSTANT = CONF.declare('antimatter_intermix_constant', default_value=3.14159, description='Intermix constant calibrated for our warp core.') diff --git a/openhtf/util/text.py b/openhtf/util/text.py index 941e2913f..f41d9391c 100644 --- a/openhtf/util/text.py +++ b/openhtf/util/text.py @@ -130,13 +130,14 @@ def StringFromMeasurement(measurement: openhtf.Measurement, return _ColorText(text, _BRIGHT_RED_STYLE) if colorize_text else text elif measurement.outcome == measurements.Outcome.FAIL: text = (f'| {measurement.name} failed because ' - f'{measurement.measured_value.value} failed these checks: ' - '{}'.format([str(v) for v in measurement.validators])) + f'{measurement.measured_value.value} failed these checks: ' + + str([str(v) for v in measurement.validators])) return _ColorText(text, _BRIGHT_RED_STYLE) if colorize_text else text elif measurement.marginal: - text = (f'| {measurement.name} is marginal because ' - f'{measurement.measured_value.value} is marginal in these checks: ' - '{}'.format([str(v) for v in measurement.validators])) + text = ( + f'| {measurement.name} is marginal because ' + f'{measurement.measured_value.value} is marginal in these checks: ' + + str([str(v) for v in measurement.validators])) return (_ColorText(text, str(colorama.Fore.YELLOW)) if colorize_text else text) return f'| {measurement.name}: {measurement.measured_value.value}' diff --git a/openhtf/util/threads.py b/openhtf/util/threads.py index d0bc9b167..092f5ea91 100644 --- a/openhtf/util/threads.py +++ b/openhtf/util/threads.py @@ -79,7 +79,7 @@ class is meant to be subclassed. If you were to invoke this with during garbage collection. """ - def __init__(self, *args, **kwargs): + def __init__(self, *args, logger: logging.Logger = _LOG, **kwargs): """Initializer for KillableThread. The keyword argument `run_with_profiling` is extracted from kwargs. If @@ -87,6 +87,7 @@ def __init__(self, *args, **kwargs): Args: *args: Passed to the base class. + logger: A logger for this class to use. **kwargs: Passed to the base class. """ self._run_with_profiling = kwargs.pop('run_with_profiling', @@ -98,6 +99,7 @@ def __init__(self, *args, **kwargs): self._profiler = cProfile.Profile() else: self._profiler = None + self._logger = logger def run(self): try: @@ -109,11 +111,11 @@ def run(self): self._thread_proc() except Exception: # pylint: disable=broad-except if not self._thread_exception(*sys.exc_info()): - _LOG.critical('Thread raised an exception: %s', self.name) + self._logger.critical('Thread raised an exception: %s', self.name) raise finally: self._thread_finished() - _LOG.debug('Thread finished: %s', self.name) + self._logger.debug('Thread finished: %s', self.name) if self._profiler is not None: self._profiler.disable() @@ -161,11 +163,11 @@ def kill(self): """Terminates the current thread by raising an error.""" self._killed.set() if not self.is_alive(): - logging.debug('Cannot kill thread that is no longer running.') + self._logger.debug('Cannot kill thread that is no longer running.') return if not self._is_thread_proc_running(): - logging.debug("Thread's _thread_proc function is no longer running, " - 'will not kill; letting thread exit gracefully.') + self._logger.debug("Thread's _thread_proc function is no longer running, " + 'will not kill; letting thread exit gracefully.') return self.async_raise(ThreadTerminationError) @@ -176,8 +178,8 @@ def async_raise(self, exc_type): # If the thread has died we don't want to raise an exception so log. if not self.is_alive(): - _LOG.debug('Not raising %s because thread %s (%s) is not alive', exc_type, - self.name, self.ident) + self._logger.debug('Not raising %s because thread %s (%s) is not alive', + exc_type, self.name, self.ident) return result = ctypes.pythonapi.PyThreadState_SetAsyncExc( diff --git a/test/core/exe_test.py b/test/core/exe_test.py index 988719d9e..fed23869f 100644 --- a/test/core/exe_test.py +++ b/test/core/exe_test.py @@ -258,6 +258,7 @@ def test_test_executor(self): def test_class_string(self): check_list = ['PhaseExecutorThread', 'phase_one'] mock_test_state = mock.create_autospec(test_state.TestState) + mock_test_state.state_logger = logging.getLogger(__name__) phase_thread = phase_executor.PhaseExecutorThread( phase_one, mock_test_state, run_with_profiling=False, subtest_rec=None) name = str(phase_thread) diff --git a/test/output/callbacks/callbacks_test.py b/test/output/callbacks/callbacks_test.py index f9563e381..ea81ec29b 100644 --- a/test/output/callbacks/callbacks_test.py +++ b/test/output/callbacks/callbacks_test.py @@ -181,21 +181,23 @@ def test_outcome_colors(self): def test_empty_outcome(self): """Console Summary must not crash if phases have been skipped.""" checkpoint = phase_branches.PhaseFailureCheckpoint.all_previous( - "cp", action=phase_descriptor.PhaseResult.FAIL_SUBTEST) + 'cp', action=phase_descriptor.PhaseResult.FAIL_SUBTEST) phasegroup = phase_group.PhaseGroup( - lambda: htf.PhaseResult.FAIL_AND_CONTINUE, - lambda: htf.PhaseResult.SKIP, - checkpoint, + lambda: htf.PhaseResult.FAIL_AND_CONTINUE, + lambda: htf.PhaseResult.SKIP, + checkpoint, ) - subtest = phase_collections.Subtest("st", phasegroup) - test = htf.Test(subtest) + subtest = phase_collections.Subtest('st', phasegroup) + test_instance = htf.Test(subtest) result_store = util.NonLocalResult() + def _save_result(test_record): result_store.result = test_record - test.add_output_callbacks( - console_summary.ConsoleSummary(), _save_result) - test.execute() - assert not any("Traceback" in record.message + test_instance.add_output_callbacks(console_summary.ConsoleSummary(), + _save_result) + + test_instance.execute() + assert not any('Traceback' in record.message for record in result_store.result.log_records) diff --git a/test/util/text_test.py b/test/util/text_test.py index 00f301ff5..ff684d207 100644 --- a/test/util/text_test.py +++ b/test/util/text_test.py @@ -30,6 +30,7 @@ from openhtf.util import test from openhtf.util import text from openhtf.util import threads +from openhtf.util import validators # colorama makes these strings at runtime but pytype cannot infer this. _RED = typing.cast(str, colorama.Fore.RED) @@ -148,6 +149,47 @@ def testStringFromMeasurement_SuccessfullyConvertsFailMeasurement(self): "| text_measurement_a failed because 5 failed these checks: ['x <= 3']") self.assertNotIn(text._BRIGHT_RED_STYLE, output) + def testStringFromMeasurement_SuccessfullyConvertsFailBracketedMeasurement( + self): + measurement = openhtf.Measurement('text_measurement_a').equals('hello') + measurement._measured_value = measurements.MeasuredValue( + 'text_measurement_a') + measurement._measured_value.set('{hi}') + measurement.notify_value_set() + output = text.StringFromMeasurement(measurement) + self.assertEqual(output, + ('| text_measurement_a failed because {hi} ' + "failed these checks: [\"'x' matches /^hello$/\"]")) + self.assertNotIn(text._BRIGHT_RED_STYLE, output) + + def testStringFromMeasurement_SuccessfullyConvertsMarginalBracketedMeasurement( + self): + + class LengthInRange(validators.InRange): + + def __call__(self, value): + return super().__call__(len(value)) + + def is_marginal(self, value) -> bool: + return super().is_marginal(len(value)) + + # Length of 5 is pass, 4 or 6 is marginal. + validator = LengthInRange( + minimum=4, maximum=6, marginal_minimum=5, marginal_maximum=5) + + measurement = openhtf.Measurement('text_measurement_a').with_validator( + validator) + measurement._measured_value = measurements.MeasuredValue( + 'text_measurement_a') + measurement._measured_value.set('{hi}') + measurement.notify_value_set() + output = text.StringFromMeasurement(measurement) + self.assertEqual( + output, + ('| text_measurement_a is marginal because {hi} is marginal ' + "in these checks: ['4 <= Marginal:5 <= x <= Marginal:5 <= 6']")) + self.assertNotIn(text._BRIGHT_RED_STYLE, output) + def testStringFromMeasurement_SuccessfullyConvertsFailMeasurementColorized( self): measurement = openhtf.Measurement('text_measurement_a').in_range(maximum=3) From 718ff6c0bb863bb0224409fa3b8562ef89b745fd Mon Sep 17 00:00:00 2001 From: tan01 Date: Mon, 19 Sep 2022 11:36:50 -0700 Subject: [PATCH 021/129] Changes deprecated oauth2client for google-auth. (#1038) Oauth2client was previously used in the mfg-inspector output callback for authentication, but the library is now deprecated and replaced by the google-auth library. This removes oauth2client and httplib2 from openhtf's output callbacks and replaces them with google-auth's oauth2 implementation using the Requests transport. PiperOrigin-RevId: 474878614 --- openhtf/output/callbacks/mfg_inspector.py | 65 +++++++-------------- setup.py | 3 +- test/output/callbacks/mfg_inspector_test.py | 6 +- 3 files changed, 25 insertions(+), 49 deletions(-) diff --git a/openhtf/output/callbacks/mfg_inspector.py b/openhtf/output/callbacks/mfg_inspector.py index a89df8471..5c7dce8cc 100644 --- a/openhtf/output/callbacks/mfg_inspector.py +++ b/openhtf/output/callbacks/mfg_inspector.py @@ -1,14 +1,11 @@ -"""Output and/or upload a TestRun or MfgEvent proto for mfg-inspector.com. -""" +"""Output and/or upload a TestRun or MfgEvent proto for mfg-inspector.com.""" -import json import logging -import threading import time import zlib -import httplib2 -import oauth2client.client +from google.auth.transport import requests +from google.oauth2 import service_account from openhtf.output import callbacks from openhtf.output.proto import guzzle_pb2 @@ -26,26 +23,24 @@ class InvalidTestRunError(Exception): def _send_mfg_inspector_request(envelope_data, credentials, destination_url): """Send upload http request. Intended to be run in retry loop.""" logging.info('Uploading result...') - http = httplib2.Http() - if credentials.access_token_expired: - credentials.refresh(http) - credentials.authorize(http) - - resp, content = http.request(destination_url, 'POST', envelope_data) + with requests.AuthorizedSession(credentials) as authed_session: + response = authed_session.request( + 'POST', destination_url, data=envelope_data) try: - result = json.loads(content) + result = response.json() except Exception: - logging.warning('Upload failed with response %s: %s', resp, content) - raise UploadFailedError(resp, content) + logging.warning('Upload failed with response %s: %s', response, + response.text) + raise UploadFailedError(response, response.text) - if resp.status == 200: + if response.status_code == 200: return result message = '%s: %s' % (result.get('error', 'UNKNOWN_ERROR'), result.get('message')) - if resp.status == 400: + if response.status_code == 400: raise InvalidTestRunError(message) else: raise UploadFailedError(message) @@ -73,26 +68,6 @@ def send_mfg_inspector_data(inspector_proto, credentials, destination_url, return {} -class _MemStorage(oauth2client.client.Storage): - """Helper Storage class that keeps credentials in memory.""" - - def __init__(self): - self._lock = threading.Lock() - self._credentials = None - - def acquire_lock(self): - self._lock.acquire(True) - - def release_lock(self): - self._lock.release() - - def locked_get(self): - return self._credentials - - def locked_put(self, credentials): - self._credentials = credentials - - class MfgInspector(object): """Interface to convert a TestRun to a mfg-inspector compatible proto. @@ -146,14 +121,14 @@ def __init__(self, self.destination_url = destination_url if user and keydata: - self.credentials = oauth2client.client.SignedJwtAssertionCredentials( - service_account_name=self.user, - private_key=(self.keydata.encode() - if isinstance(self.keydata, str) else self.keydata), - scope=self.SCOPE_CODE_URI, - user_agent='OpenHTF Guzzle Upload Client', - token_uri=self.token_uri) - self.credentials.set_store(_MemStorage()) + self.credentials = service_account.Credentials.from_service_account_info( + { + 'client_email': self.user, + 'token_uri': self.token_uri, + 'private_key': self.keydata, + 'user_agent': 'OpenHTF Guzzle Upload Client', + }, + scopes=[self.SCOPE_CODE_URI]) else: self.credentials = None diff --git a/setup.py b/setup.py index 18965d150..c2ebb4fb7 100644 --- a/setup.py +++ b/setup.py @@ -132,12 +132,13 @@ def run(self): 'attrs>=19.3.0', 'colorama>=0.3.9,<1.0', 'contextlib2>=0.5.1,<1.0', + 'google-auth>=1.34.0', 'inflection', 'mutablerecords>=0.4.1,<2.0', - 'oauth2client>=1.5.2,<2.0', 'protobuf>=3.6.0,<4.0', 'PyYAML>=3.13', 'pyOpenSSL>=17.1.0,<23', + 'requests>=2.27.1', 'sockjs-tornado>=1.0.3,<2.0', 'tornado>=4.3,<5.0', 'typing-extensions', diff --git a/test/output/callbacks/mfg_inspector_test.py b/test/output/callbacks/mfg_inspector_test.py index 4fc9c9c81..c382cea8c 100644 --- a/test/output/callbacks/mfg_inspector_test.py +++ b/test/output/callbacks/mfg_inspector_test.py @@ -48,9 +48,9 @@ class TestMfgInspector(test.TestCase): def setUp(self): super(TestMfgInspector, self).setUp() - self.mock_credentials = mock.patch( - 'oauth2client.client.SignedJwtAssertionCredentials').start( - ).return_value + self.mock_credentials = mock.patch.object( + mfg_inspector.service_account.Credentials, + 'from_service_account_info').start().return_value self.mock_send_mfg_inspector_data = mock.patch.object( mfg_inspector, 'send_mfg_inspector_data').start() From c34e3ccd3b7ad334b356ab9c09d37f177bef6e8a Mon Sep 17 00:00:00 2001 From: Graham Palmer Date: Mon, 19 Sep 2022 13:52:17 -0500 Subject: [PATCH 022/129] Add subtest_previous PhaseFailureCheckpoint (#992) --- openhtf/core/phase_branches.py | 49 ++++++--- openhtf/core/phase_executor.py | 2 +- test/core/phase_branches_test.py | 164 +++++++++++++++++++++++++++++++ 3 files changed, 203 insertions(+), 12 deletions(-) diff --git a/openhtf/core/phase_branches.py b/openhtf/core/phase_branches.py index e5fef7739..05f6746ec 100644 --- a/openhtf/core/phase_branches.py +++ b/openhtf/core/phase_branches.py @@ -14,13 +14,14 @@ """Implements phase node branches. -A BranchSequence is a phase node sequence that runs conditiionally based on the +A BranchSequence is a phase node sequence that runs conditionally based on the diagnosis results of the test run. """ import abc import enum -from typing import Any, Callable, Dict, Iterator, Text, Tuple, TYPE_CHECKING, Union +from typing import (TYPE_CHECKING, Any, Callable, Dict, Iterator, Optional, + Text, Tuple, Union) import attr from openhtf import util @@ -54,6 +55,9 @@ class PreviousPhases(enum.Enum): # Check all phases. ALL = 'ALL' + # Check all previous phases in the current subtest. + SUBTEST = "SUBTEST" + def _not_any(iterable: Iterator[bool]) -> bool: return not any(iterable) @@ -179,15 +183,20 @@ def apply_to_all_phases( return self def get_result( - self, running_test_state: 'test_state.TestState' + self, + running_test_state: 'test_state.TestState', + subtest_rec: Optional[test_record.SubtestRecord] = None ) -> phase_descriptor.PhaseReturnT: - if self._check_for_action(running_test_state): + if self._check_for_action(running_test_state, subtest_rec): return self.action return phase_descriptor.PhaseResult.CONTINUE @abc.abstractmethod - def _check_for_action(self, - running_test_state: 'test_state.TestState') -> bool: + def _check_for_action( + self, + running_test_state: 'test_state.TestState', + subtest_rec: Optional[test_record.SubtestRecord] = None + ) -> bool: """Returns True when the action should be taken.""" @abc.abstractmethod @@ -197,7 +206,7 @@ def record_conditional(self) -> Union[PreviousPhases, DiagnosisCondition]: @attr.s(slots=True, frozen=True) class PhaseFailureCheckpoint(Checkpoint): - """Node that checks if a previous phase or all previous phases failed. + """Node that checks if the specified previous phase(s) failed. If the phases fail, this will be resolved as `action`. @@ -219,6 +228,12 @@ def all_previous(cls, *args, **kwargs) -> 'PhaseFailureCheckpoint': kwargs['previous_phases_to_check'] = PreviousPhases.ALL return cls(*args, **kwargs) + @classmethod + def subtest_previous(cls, *args, **kwargs) -> 'PhaseFailureCheckpoint': + """Checks if any node in the current subtest has failed.""" + kwargs['previous_phases_to_check'] = PreviousPhases.SUBTEST + return cls(*args, **kwargs) + def _asdict(self) -> Dict[Text, Any]: ret = super(PhaseFailureCheckpoint, self)._asdict() ret.update(previous_phases_to_check=self.previous_phases_to_check) @@ -228,14 +243,23 @@ def _phase_failed(self, phase_rec: test_record.PhaseRecord) -> bool: """Returns True if the phase_rec failed; ignores ERRORs.""" return phase_rec.outcome == test_record.PhaseOutcome.FAIL - def _check_for_action(self, - running_test_state: 'test_state.TestState') -> bool: + def _check_for_action( + self, + running_test_state: 'test_state.TestState', + subtest_rec: Optional[test_record.SubtestRecord] = None + ) -> bool: """Returns True when the specific set of phases fail.""" phase_records = running_test_state.test_record.phases if not phase_records: raise NoPhasesFoundError('No phases found in the test record.') if self.previous_phases_to_check == PreviousPhases.LAST: return self._phase_failed(phase_records[-1]) + elif (self.previous_phases_to_check == PreviousPhases.SUBTEST and + subtest_rec is not None): + for phase_rec in phase_records: + if (phase_rec.subtest_name == subtest_rec.name and + self._phase_failed(phase_rec)): + return True else: for phase_rec in phase_records: if self._phase_failed(phase_rec): @@ -261,8 +285,11 @@ def _asdict(self) -> Dict[Text, Any]: ret.update(diag_condition=self.diag_condition._asdict()) return ret - def _check_for_action(self, - running_test_state: 'test_state.TestState') -> bool: + def _check_for_action( + self, + running_test_state: 'test_state.TestState', + subtest_rec: Optional[test_record.SubtestRecord] = None + ) -> bool: """Returns True if the condition is true.""" return self.diag_condition.check(running_test_state.diagnoses_manager.store) diff --git a/openhtf/core/phase_executor.py b/openhtf/core/phase_executor.py index eb47fc957..ba04e0eb5 100644 --- a/openhtf/core/phase_executor.py +++ b/openhtf/core/phase_executor.py @@ -362,7 +362,7 @@ def evaluate_checkpoint( subtest_name = None evaluated_millis = util.time_millis() try: - outcome = PhaseExecutionOutcome(checkpoint.get_result(self.test_state)) + outcome = PhaseExecutionOutcome(checkpoint.get_result(self.test_state, subtest_rec)) self.logger.debug('Checkpoint %s result: %s', checkpoint.name, outcome.phase_result) if outcome.is_fail_subtest and not subtest_rec: diff --git a/test/core/phase_branches_test.py b/test/core/phase_branches_test.py index 0d316f96d..5cd34e88a 100644 --- a/test/core/phase_branches_test.py +++ b/test/core/phase_branches_test.py @@ -433,6 +433,170 @@ def test_last_fail_subtest__fail_in_subtest(self): evaluated_millis=htf_test.VALID_TIMESTAMP), ], test_rec.checkpoints) + @htf_test.yields_phases + def test_subtest_previous_fail__fail(self): + test_rec = yield htf.Test( + fail_phase, + phase0, + phase_branches.PhaseFailureCheckpoint.subtest_previous( + 'subtest_previous_fail', action=htf.PhaseResult.STOP), error_phase) + + self.assertTestFail(test_rec) + self.assertPhasesOutcomeByName(test_record.PhaseOutcome.PASS, test_rec, + 'phase0') + self.assertPhasesOutcomeByName(test_record.PhaseOutcome.FAIL, test_rec, + 'fail_phase') + + self.assertEqual([ + test_record.CheckpointRecord( + name='subtest_previous_fail', + action=htf.PhaseResult.STOP, + conditional=phase_branches.PreviousPhases.SUBTEST, + subtest_name=None, + result=phase_executor.PhaseExecutionOutcome( + htf.PhaseResult.STOP), + evaluated_millis=htf_test.VALID_TIMESTAMP), + ], test_rec.checkpoints) + + @htf_test.yields_phases + def test_subtest_previous_fail__pass(self): + test_rec = yield htf.Test( + phase0, + phase1, + phase_branches.PhaseFailureCheckpoint.subtest_previous( + 'subtest_previous_pass', action=htf.PhaseResult.STOP), phase2) + + self.assertTestPass(test_rec) + self.assertPhasesOutcomeByName(test_record.PhaseOutcome.PASS, test_rec, + 'phase0', 'phase1', 'phase2') + + self.assertEqual([ + test_record.CheckpointRecord( + name='subtest_previous_pass', + action=htf.PhaseResult.STOP, + conditional=phase_branches.PreviousPhases.SUBTEST, + subtest_name=None, + result=phase_executor.PhaseExecutionOutcome( + htf.PhaseResult.CONTINUE), + evaluated_millis=htf_test.VALID_TIMESTAMP), + ], test_rec.checkpoints) + + @htf_test.yields_phases + def test_subtest_previous_fail__fail_in_subtest(self): + test_rec = yield htf.Test( + phase0, + htf.Subtest( + 'sub', fail_phase, phase1, + phase_branches.PhaseFailureCheckpoint.subtest_previous( + 'subtest_previous_fail_in_subtest', action=htf.PhaseResult.STOP), + ), + error_phase) + + self.assertTestFail(test_rec) + self.assertPhasesOutcomeByName(test_record.PhaseOutcome.PASS, test_rec, + 'phase0', 'phase1') + self.assertPhasesOutcomeByName(test_record.PhaseOutcome.FAIL, test_rec, + 'fail_phase') + + self.assertEqual([ + test_record.CheckpointRecord( + name='subtest_previous_fail_in_subtest', + action=htf.PhaseResult.STOP, + conditional=phase_branches.PreviousPhases.SUBTEST, + subtest_name='sub', + result=phase_executor.PhaseExecutionOutcome( + htf.PhaseResult.STOP), + evaluated_millis=htf_test.VALID_TIMESTAMP), + ], test_rec.checkpoints) + + @htf_test.yields_phases + def test_subtest_previous_fail__fail_out_of_subtest(self): + test_rec = yield htf.Test( + fail_phase, + htf.Subtest( + 'sub', phase0, + phase_branches.PhaseFailureCheckpoint.subtest_previous( + 'subtest_previous_fail_out_of_subtest', action=htf.PhaseResult.STOP), + phase1, + ), + phase2) + + self.assertTestFail(test_rec) + self.assertPhasesOutcomeByName(test_record.PhaseOutcome.PASS, test_rec, + 'phase0', 'phase1', 'phase2') + self.assertPhasesOutcomeByName(test_record.PhaseOutcome.FAIL, test_rec, + 'fail_phase') + + self.assertEqual([ + test_record.CheckpointRecord( + name='subtest_previous_fail_out_of_subtest', + action=htf.PhaseResult.STOP, + conditional=phase_branches.PreviousPhases.SUBTEST, + subtest_name='sub', + result=phase_executor.PhaseExecutionOutcome( + htf.PhaseResult.CONTINUE), + evaluated_millis=htf_test.VALID_TIMESTAMP), + ], test_rec.checkpoints) + + @htf_test.yields_phases + def test_subtest_previous_fail__pass_in_subtest(self): + test_rec = yield htf.Test( + phase0, + htf.Subtest( + 'sub', phase1, + phase_branches.PhaseFailureCheckpoint.subtest_previous( + 'subtest_previous_pass_in_subtest', action=htf.PhaseResult.STOP), + phase2, + ), phase3) + + self.assertTestPass(test_rec) + self.assertPhasesOutcomeByName(test_record.PhaseOutcome.PASS, test_rec, + 'phase0', 'phase1', 'phase2', 'phase3') + self.assertPhasesOutcomeByName(test_record.PhaseOutcome.FAIL, test_rec, + 'fail_phase') + + self.assertEqual([ + test_record.CheckpointRecord( + name='subtest_previous_pass_in_subtest', + action=htf.PhaseResult.STOP, + conditional=phase_branches.PreviousPhases.SUBTEST, + subtest_name='sub', + result=phase_executor.PhaseExecutionOutcome( + htf.PhaseResult.CONTINUE), + evaluated_millis=htf_test.VALID_TIMESTAMP), + ], test_rec.checkpoints) + + @htf_test.yields_phases + def test_subtest_previous_fail_subtest__fail_in_subtest(self): + test_rec = yield htf.Test( + phase0, + htf.Subtest( + 'sub', fail_phase, phase1, + phase_branches.PhaseFailureCheckpoint.subtest_previous( + 'subtest_previous_fail_subtest_in_subtest', action=htf.PhaseResult.FAIL_SUBTEST), + skip0, + ), + phase2) + + self.assertTestFail(test_rec) + self.assertPhasesOutcomeByName(test_record.PhaseOutcome.PASS, test_rec, + 'phase0', 'phase1', 'phase2') + self.assertPhasesOutcomeByName(test_record.PhaseOutcome.FAIL, test_rec, + 'fail_phase') + self.assertPhasesOutcomeByName(test_record.PhaseOutcome.SKIP, test_rec, 'skip0') + + self.assertEqual([ + test_record.CheckpointRecord( + name='subtest_previous_fail_subtest_in_subtest', + action=htf.PhaseResult.FAIL_SUBTEST, + conditional=phase_branches.PreviousPhases.SUBTEST, + subtest_name='sub', + result=phase_executor.PhaseExecutionOutcome( + htf.PhaseResult.FAIL_SUBTEST), + evaluated_millis=htf_test.VALID_TIMESTAMP), + ], test_rec.checkpoints) + + @htf_test.yields_phases def test_all__no_previous_phases(self): self.test_start_function = None From decaa032fb81398c83a2b615ff2bd1455b4b6835 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Mon, 19 Sep 2022 23:32:59 +0200 Subject: [PATCH 023/129] Improved typing for validators (#995) * Add typing to ConsoleSummary * Add typing to StationServer * Improved typing for validators --- openhtf/output/callbacks/console_summary.py | 7 +- openhtf/output/servers/station_server.py | 11 ++- openhtf/util/validators.py | 96 +++++++++++---------- 3 files changed, 63 insertions(+), 51 deletions(-) diff --git a/openhtf/output/callbacks/console_summary.py b/openhtf/output/callbacks/console_summary.py index 21f18f81f..5e187bc0a 100644 --- a/openhtf/output/callbacks/console_summary.py +++ b/openhtf/output/callbacks/console_summary.py @@ -2,6 +2,7 @@ import os import sys +from typing import TextIO from openhtf.core import measurements from openhtf.core import test_record @@ -11,7 +12,9 @@ class ConsoleSummary(): """Print test results with failure info on console.""" # pylint: disable=invalid-name - def __init__(self, indent=2, output_stream=sys.stdout): + def __init__(self, + indent: int = 2, + output_stream: TextIO = sys.stdout) -> None: self.indent = ' ' * indent if os.name == 'posix': # Linux and Mac. self.RED = '\033[91m' @@ -37,7 +40,7 @@ def __init__(self, indent=2, output_stream=sys.stdout): # pylint: enable=invalid-name - def __call__(self, record): + def __call__(self, record: test_record.TestRecord) -> None: output_lines = [ ''.join((self.color_table[record.outcome], self.BOLD, record.code_info.name, ':', record.outcome.name, self.RESET)) diff --git a/openhtf/output/servers/station_server.py b/openhtf/output/servers/station_server.py index a35598bc5..188872ce3 100644 --- a/openhtf/output/servers/station_server.py +++ b/openhtf/output/servers/station_server.py @@ -15,6 +15,7 @@ import threading import time import types +from typing import Optional, Union import openhtf from openhtf.output.servers import pub_sub @@ -558,7 +559,9 @@ class StationServer(web_gui_server.WebGuiServer): test.execute() """ - def __init__(self, history_path=None): + def __init__( + self, + history_path: Optional[Union[str, bytes, os.PathLike]] = None) -> None: # Disable tornado's logging. # TODO(kenadia): Enable these logs if verbosity flag is at least -vvv. # I think this will require changing how StoreRepsInModule works. @@ -614,7 +617,7 @@ def _get_config(self): 'server_type': STATION_SERVER_TYPE, } - def run(self): + def run(self) -> None: _LOG.info('Announcing station server via multicast on %s:%s', self.station_multicast.address, self.station_multicast.port) self.station_multicast.start() @@ -624,13 +627,13 @@ def run(self): host=socket.gethostname(), port=self.port)) super(StationServer, self).run() - def stop(self): + def stop(self) -> None: _LOG.info('Stopping station server.') super(StationServer, self).stop() _LOG.info('Stopping multicast.') self.station_multicast.stop(timeout_s=0) - def publish_final_state(self, test_record): + def publish_final_state(self, test_record: openhtf.TestRecord) -> None: """Test output callback publishing a final state from the test record.""" StationPubSub.publish_test_record(test_record) diff --git a/openhtf/util/validators.py b/openhtf/util/validators.py index 71eb13432..425b039f1 100644 --- a/openhtf/util/validators.py +++ b/openhtf/util/validators.py @@ -8,11 +8,11 @@ from openhtf.util import measurements class MyLessThanValidator(ValidatorBase): - def __init__(self, limit): + def __init__(self, limit) -> None: self.limit = limit # This will be invoked to test if the measurement is 'PASS' or 'FAIL'. - def __call__(self, value): + def __call__(self, value) -> bool: return value < self.limit # Name defaults to the validator's __name__ attribute unless overridden. @@ -31,12 +31,12 @@ def MyPhase(test): For simpler validators, you don't need to register them at all, you can simply attach them to the Measurement with the .with_validator() method: - def LessThan4(value): + def LessThan4(value) -> bool: return value < 4 @measurements.measures( measurements.Measurement('my_measurement).with_validator(LessThan4)) - def MyPhase(test): + def MyPhase(test: htf.TestApi) -> None: test.measurements.my_measurement = 5 # Will also 'FAIL' Notes: @@ -58,12 +58,25 @@ def MyPhase(test): import math import numbers import re +from typing import Callable, Dict, Optional, Type, TypeVar, Union + from openhtf import util -_VALIDATORS = {} +class ValidatorBase(abc.ABC): + + @abc.abstractmethod + def __call__(self, value) -> bool: + """Should validate value, returning a boolean result.""" + + +_ValidatorT = TypeVar("_ValidatorT", bound=ValidatorBase) +_ValidatorFactoryT = Union[Type[_ValidatorT], Callable[..., _ValidatorT]] +_VALIDATORS: Dict[str, _ValidatorFactoryT] = {} -def register(validator, name=None): + +def register(validator: _ValidatorFactoryT, + name: Optional[str] = None) -> _ValidatorFactoryT: name = name or validator.__name__ if name in _VALIDATORS: raise ValueError('Duplicate validator name', name) @@ -71,24 +84,17 @@ def register(validator, name=None): return validator -def has_validator(name): +def has_validator(name: str) -> bool: return name in _VALIDATORS -def create_validator(name, *args, **kwargs): +def create_validator(name: str, *args, **kwargs) -> _ValidatorT: return _VALIDATORS[name](*args, **kwargs) _identity = lambda x: x -class ValidatorBase(abc.ABC): - - @abc.abstractmethod - def __call__(self, value): - """Should validate value, returning a boolean result.""" - - class RangeValidatorBase(ValidatorBase, abc.ABC): @abc.abstractproperty @@ -120,7 +126,7 @@ def __init__(self, minimum, maximum, marginal_minimum=None, - marginal_maximum=None): + marginal_maximum=None) -> None: super(AllInRangeValidator, self).__init__() if minimum is None and maximum is None: raise ValueError('Must specify minimum, maximum, or both') @@ -168,7 +174,7 @@ def marginal_minimum(self): def marginal_maximum(self): return self._marginal_maximum - def __call__(self, values): + def __call__(self, values) -> bool: within_maximum = self._maximum is None or all( value <= self.maximum for value in values) within_minimum = self._minimum is None or all( @@ -204,7 +210,7 @@ def __str__(self): class AllEqualsValidator(ValidatorBase): """Validator to verify a list of values are equal to the expected value.""" - def __init__(self, spec): + def __init__(self, spec) -> None: super(AllEqualsValidator, self).__init__() self._spec = spec @@ -212,10 +218,10 @@ def __init__(self, spec): def spec(self): return self._spec - def __call__(self, values): + def __call__(self, values) -> bool: return all([value == self.spec for value in values]) - def __str__(self): + def __str__(self) -> str: return "'x' is equal to '%s'" % self._spec @@ -242,7 +248,7 @@ def __init__(self, maximum=None, marginal_minimum=None, marginal_maximum=None, - type=None): # pylint: disable=redefined-builtin + type=None) -> None: # pylint: disable=redefined-builtin super(InRange, self).__init__() if minimum is None and maximum is None: @@ -292,7 +298,7 @@ def marginal_minimum(self): return converter(self._marginal_minimum) @property - def marginal_maximum(self): + def marginal_maximum(self) -> str: converter = self._type if self._type is not None else _identity return converter(self._marginal_maximum) @@ -305,7 +311,7 @@ def with_args(self, **kwargs): type=self._type, ) - def __call__(self, value): + def __call__(self, value) -> bool: if value is None: return False if math.isnan(value): @@ -329,7 +335,7 @@ def is_marginal(self, value) -> bool: return True return False - def __str__(self): + def __str__(self) -> str: assert self._minimum is not None or self._maximum is not None if (self._minimum is not None and self._maximum is not None and self._minimum == self._maximum): @@ -347,13 +353,13 @@ def __str__(self): string_repr += ' <= {}'.format(self._maximum) return string_repr - def __eq__(self, other): + def __eq__(self, other) -> bool: return (isinstance(other, type(self)) and self.minimum == other.minimum and self.maximum == other.maximum and self.marginal_minimum == other.marginal_minimum and self.marginal_maximum == other.marginal_maximum) - def __ne__(self, other): + def __ne__(self, other) -> bool: return not self == other @@ -373,10 +379,10 @@ def equals(value, type=None): # pylint: disable=redefined-builtin return Equals(value, type=type) -class Equals(object): +class Equals(ValidatorBase): """Validator to verify an object is equal to the expected value.""" - def __init__(self, expected, type=None): # pylint: disable=redefined-builtin + def __init__(self, expected, type=None) -> None: # pylint: disable=redefined-builtin self._expected = expected self._type = type @@ -388,21 +394,21 @@ def expected(self): def __call__(self, value): return value == self.expected - def __str__(self): + def __str__(self) -> str: return f"'x' is equal to '{self._expected}'" - def __eq__(self, other): + def __eq__(self, other) -> bool: return isinstance(other, type(self)) and self.expected == other.expected -class RegexMatcher(object): +class RegexMatcher(ValidatorBase): """Validator to verify a string value matches a regex.""" - def __init__(self, regex, compiled_regex): + def __init__(self, regex, compiled_regex) -> None: self._compiled = compiled_regex self.regex = regex - def __call__(self, value): + def __call__(self, value) -> bool: return self._compiled.match(str(value)) is not None def __deepcopy__(self, dummy_memo): @@ -414,7 +420,7 @@ def __str__(self): def __eq__(self, other): return isinstance(other, type(self)) and self.regex == other.regex - def __ne__(self, other): + def __ne__(self, other) -> bool: return not self == other @@ -426,7 +432,7 @@ def matches_regex(regex): class WithinPercent(RangeValidatorBase): """Validates that a number is within percent of a value.""" - def __init__(self, expected, percent, marginal_percent=None): + def __init__(self, expected, percent, marginal_percent=None) -> None: super(WithinPercent, self).__init__() if percent < 0: raise ValueError('percent argument is {}, must be >0'.format(percent)) @@ -465,7 +471,7 @@ def marginal_maximum(self): return (self.expected - self._applied_marginal_percent if self.marginal_percent else None) - def __call__(self, value): + def __call__(self, value) -> bool: return self.minimum <= value <= self.maximum def is_marginal(self, value) -> bool: @@ -475,17 +481,17 @@ def is_marginal(self, value) -> bool: return (self.minimum < value <= self.marginal_minimum or self.marginal_maximum <= value < self.maximum) - def __str__(self): + def __str__(self) -> str: return "'x' is within {}% of {}. Marginal: {}% of {}".format( self.percent, self.expected, self.marginal_percent, self.expected) - def __eq__(self, other): + def __eq__(self, other) -> bool: return (isinstance(other, type(self)) and self.expected == other.expected and self.percent == other.percent and self.marginal_percent == other.marginal_percent) - def __ne__(self, other): + def __ne__(self, other) -> bool: return not self == other @@ -497,14 +503,14 @@ def within_percent(expected, percent): class DimensionPivot(ValidatorBase): """Runs a validator on each actual value of a dimensioned measurement.""" - def __init__(self, sub_validator): + def __init__(self, sub_validator) -> None: super(DimensionPivot, self).__init__() self._sub_validator = sub_validator - def __call__(self, dimensioned_value): + def __call__(self, dimensioned_value) -> bool: return all(self._sub_validator(row[-1]) for row in dimensioned_value) - def __str__(self): + def __str__(self) -> str: return 'All values pass: {}'.format(str(self._sub_validator)) @@ -516,11 +522,11 @@ def dimension_pivot_validate(sub_validator): class ConsistentEndDimensionPivot(ValidatorBase): """If any rows validate, all following rows must also validate.""" - def __init__(self, sub_validator): + def __init__(self, sub_validator) -> None: super(ConsistentEndDimensionPivot, self).__init__() self._sub_validator = sub_validator - def __call__(self, dimensioned_value): + def __call__(self, dimensioned_value) -> bool: for index, row in enumerate(dimensioned_value): if self._sub_validator(row[-1]): i = index @@ -529,7 +535,7 @@ def __call__(self, dimensioned_value): return False return all(self._sub_validator(rest[-1]) for rest in dimensioned_value[i:]) - def __str__(self): + def __str__(self) -> str: return 'Once pass, rest must also pass: {}'.format(str(self._sub_validator)) From e7241739d0d818588a05a68742ca16402a4152f6 Mon Sep 17 00:00:00 2001 From: Nehal Patel Date: Tue, 20 Sep 2022 11:34:07 -0700 Subject: [PATCH 024/129] Loosen dependencies to allow newer packages (#1028) Many dependencies are very outdated and when openhtf is combined with or used with other projects, version conflicts become very challenging to unwind. NOTE: tornado is left with a '<5.0' dependency as there have been some major API changes that require more extensive refactors to accommodate. --- setup.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/setup.py b/setup.py index c2ebb4fb7..1f052dbae 100644 --- a/setup.py +++ b/setup.py @@ -130,16 +130,16 @@ def run(self): INSTALL_REQUIRES = [ 'attrs>=19.3.0', - 'colorama>=0.3.9,<1.0', - 'contextlib2>=0.5.1,<1.0', - 'google-auth>=1.34.0', + 'colorama>=0.3.9', + 'contextlib2>=0.5.1', 'inflection', - 'mutablerecords>=0.4.1,<2.0', + 'google-auth>=1.34.0', + 'mutablerecords>=0.4.1', 'protobuf>=3.6.0,<4.0', 'PyYAML>=3.13', - 'pyOpenSSL>=17.1.0,<23', + 'pyOpenSSL>=17.1.0', 'requests>=2.27.1', - 'sockjs-tornado>=1.0.3,<2.0', + 'sockjs-tornado>=1.0.3', 'tornado>=4.3,<5.0', 'typing-extensions', ] @@ -205,11 +205,11 @@ def run_tests(self): install_requires=INSTALL_REQUIRES, extras_require={ 'usb_plugs': [ - 'libusb1>=1.3.0,<2.0', - 'M2Crypto>=0.22.3,<1.0', + 'libusb1>=1.3.0', + 'M2Crypto>=0.22.3', ], - 'update_units': ['xlrd>=1.0.0,<2.0',], - 'serial_collection_plug': ['pyserial>=3.3.0,<4.0',], + 'update_units': ['xlrd>=1.0.0',], + 'serial_collection_plug': ['pyserial>=3.3.0',], 'examples': ['pandas>=0.22.0',], }, tests_require=[ From 3e0b2a331b7d1d27cfa67dcf81121379041108e0 Mon Sep 17 00:00:00 2001 From: Nehal Patel Date: Mon, 26 Sep 2022 14:12:38 -0700 Subject: [PATCH 025/129] Allow using a newer version of protobuf (#1040) * Allow using a newer version of protobuf Will require recompiling protos * Download a newer protoc for CI --- .github/workflows/build_and_deploy.yml | 4 ++-- setup.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build_and_deploy.yml b/.github/workflows/build_and_deploy.yml index db8799d21..7a9f8139d 100644 --- a/.github/workflows/build_and_deploy.yml +++ b/.github/workflows/build_and_deploy.yml @@ -25,8 +25,8 @@ jobs: python -m pip install --upgrade pip python -m pip install tox tox-gh-actions pip install coveralls - wget https://github.com/protocolbuffers/protobuf/releases/download/v3.6.1/protoc-3.6.1-linux-x86_64.zip - unzip protoc-3.6.1-linux-x86_64.zip + wget https://github.com/protocolbuffers/protobuf/releases/download/v21.6/protoc-21.6-linux-x86_64.zip + unzip protoc-21.6-linux-x86_64.zip sudo cp bin/protoc /usr/bin/protoc && sudo chmod 777 /usr/bin/protoc sudo cp -r include/. /usr/include && sudo chmod -R +r /usr/include/google protoc --version diff --git a/setup.py b/setup.py index 1f052dbae..d68dc84fa 100644 --- a/setup.py +++ b/setup.py @@ -135,7 +135,7 @@ def run(self): 'inflection', 'google-auth>=1.34.0', 'mutablerecords>=0.4.1', - 'protobuf>=3.6.0,<4.0', + 'protobuf>=3.6.0', 'PyYAML>=3.13', 'pyOpenSSL>=17.1.0', 'requests>=2.27.1', From 27c9382cd905f2f419e1e0770317554a2c3c1606 Mon Sep 17 00:00:00 2001 From: Dushyant Bhatnagar Date: Mon, 3 Oct 2022 09:40:58 -0700 Subject: [PATCH 026/129] Correct TypeVar usage for Validators (#1042) The TypeVar usage was indicating that ALL validators available in _VALIDATORS would have the same type. This update only indicates that these validators are an instance of the ValidatorBase. --- openhtf/util/validators.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/openhtf/util/validators.py b/openhtf/util/validators.py index 425b039f1..76d581216 100644 --- a/openhtf/util/validators.py +++ b/openhtf/util/validators.py @@ -70,8 +70,7 @@ def __call__(self, value) -> bool: """Should validate value, returning a boolean result.""" -_ValidatorT = TypeVar("_ValidatorT", bound=ValidatorBase) -_ValidatorFactoryT = Union[Type[_ValidatorT], Callable[..., _ValidatorT]] +_ValidatorFactoryT = Union[Callable[..., ValidatorBase]] _VALIDATORS: Dict[str, _ValidatorFactoryT] = {} @@ -88,7 +87,7 @@ def has_validator(name: str) -> bool: return name in _VALIDATORS -def create_validator(name: str, *args, **kwargs) -> _ValidatorT: +def create_validator(name: str, *args, **kwargs) -> ValidatorBase: return _VALIDATORS[name](*args, **kwargs) From 7581ab2c448b3548ef627b0785b72519b21559cc Mon Sep 17 00:00:00 2001 From: Laurenz Date: Tue, 11 Oct 2022 21:57:27 +0200 Subject: [PATCH 027/129] Fix web_gui build (#1035) * Fix missing `SafeHtml` type * Partial revert of c7ab5080ed64c9b81721eb4de72bba2bdf6b83cc * Revert "Bump @angular/core from 4.4.6 to 11.0.5 in /openhtf/output/web_gui (#1014)" This reverts commit e9c7681a00ea08f860e140a56c71cb5db945c499. * Replace uglifyjs-webpack-plugin with terser-webpack-plugin-legacy * Rebuild web_gui * Add CI job to check that the web_gui builds Co-authored-by: glados-verma --- .github/workflows/build_and_deploy.yml | 13 + ...8ddc9.css => app.fb4b46e126eadff0ed0a.css} | 2 +- ...s.map => app.fb4b46e126eadff0ed0a.css.map} | 2 +- openhtf/output/web_gui/dist/index.html | 4 +- .../dist/js/app.d714dbd143d37088ddc9.js | 302 --- .../dist/js/app.d714dbd143d37088ddc9.js.map | 1 - .../dist/js/app.fb4b46e126eadff0ed0a.js | 482 ++++ .../dist/js/app.fb4b46e126eadff0ed0a.js.map | 1 + .../dist/js/polyfills.d714dbd143d37088ddc9.js | 79 - .../js/polyfills.d714dbd143d37088ddc9.js.map | 1 - .../dist/js/polyfills.fb4b46e126eadff0ed0a.js | 98 + .../js/polyfills.fb4b46e126eadff0ed0a.js.map | 1 + .../dist/js/vendor.d714dbd143d37088ddc9.js | 792 ------ .../js/vendor.d714dbd143d37088ddc9.js.map | 1 - .../dist/js/vendor.fb4b46e126eadff0ed0a.js | 1584 +++++++++++ .../js/vendor.fb4b46e126eadff0ed0a.js.map | 1 + openhtf/output/web_gui/package-lock.json | 2347 ++++++++++++----- openhtf/output/web_gui/package.json | 5 +- .../app/plugs/user-input-plug.component.ts | 2 +- .../station/station.component.spec.ts | 4 +- openhtf/output/web_gui/webpack.config.js | 3 +- 21 files changed, 3910 insertions(+), 1815 deletions(-) rename openhtf/output/web_gui/dist/css/{app.d714dbd143d37088ddc9.css => app.fb4b46e126eadff0ed0a.css} (99%) rename openhtf/output/web_gui/dist/css/{app.d714dbd143d37088ddc9.css.map => app.fb4b46e126eadff0ed0a.css.map} (58%) delete mode 100644 openhtf/output/web_gui/dist/js/app.d714dbd143d37088ddc9.js delete mode 100644 openhtf/output/web_gui/dist/js/app.d714dbd143d37088ddc9.js.map create mode 100644 openhtf/output/web_gui/dist/js/app.fb4b46e126eadff0ed0a.js create mode 100644 openhtf/output/web_gui/dist/js/app.fb4b46e126eadff0ed0a.js.map delete mode 100644 openhtf/output/web_gui/dist/js/polyfills.d714dbd143d37088ddc9.js delete mode 100644 openhtf/output/web_gui/dist/js/polyfills.d714dbd143d37088ddc9.js.map create mode 100644 openhtf/output/web_gui/dist/js/polyfills.fb4b46e126eadff0ed0a.js create mode 100644 openhtf/output/web_gui/dist/js/polyfills.fb4b46e126eadff0ed0a.js.map delete mode 100644 openhtf/output/web_gui/dist/js/vendor.d714dbd143d37088ddc9.js delete mode 100644 openhtf/output/web_gui/dist/js/vendor.d714dbd143d37088ddc9.js.map create mode 100644 openhtf/output/web_gui/dist/js/vendor.fb4b46e126eadff0ed0a.js create mode 100644 openhtf/output/web_gui/dist/js/vendor.fb4b46e126eadff0ed0a.js.map diff --git a/.github/workflows/build_and_deploy.yml b/.github/workflows/build_and_deploy.yml index 7a9f8139d..8d63db98f 100644 --- a/.github/workflows/build_and_deploy.yml +++ b/.github/workflows/build_and_deploy.yml @@ -44,3 +44,16 @@ jobs: user: __token__ password: ${{ secrets.PYPI_PUBLISH_PASSWORD }} skip_existing: true + + web_ui: + runs-on: ubuntu-latest + defaults: + run: + working-directory: openhtf/output/web_gui + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 9 + - run: npm install + - run: npm run build diff --git a/openhtf/output/web_gui/dist/css/app.d714dbd143d37088ddc9.css b/openhtf/output/web_gui/dist/css/app.fb4b46e126eadff0ed0a.css similarity index 99% rename from openhtf/output/web_gui/dist/css/app.d714dbd143d37088ddc9.css rename to openhtf/output/web_gui/dist/css/app.fb4b46e126eadff0ed0a.css index e13e5805e..e974796be 100644 --- a/openhtf/output/web_gui/dist/css/app.d714dbd143d37088ddc9.css +++ b/openhtf/output/web_gui/dist/css/app.fb4b46e126eadff0ed0a.css @@ -752,4 +752,4 @@ template { .u-text-color-error { color: #ff5d4e; } -/*# sourceMappingURL=app.d714dbd143d37088ddc9.css.map*/ \ No newline at end of file +/*# sourceMappingURL=app.fb4b46e126eadff0ed0a.css.map*/ \ No newline at end of file diff --git a/openhtf/output/web_gui/dist/css/app.d714dbd143d37088ddc9.css.map b/openhtf/output/web_gui/dist/css/app.fb4b46e126eadff0ed0a.css.map similarity index 58% rename from openhtf/output/web_gui/dist/css/app.d714dbd143d37088ddc9.css.map rename to openhtf/output/web_gui/dist/css/app.fb4b46e126eadff0ed0a.css.map index 0dd76c1dc..7c557bc61 100644 --- a/openhtf/output/web_gui/dist/css/app.d714dbd143d37088ddc9.css.map +++ b/openhtf/output/web_gui/dist/css/app.fb4b46e126eadff0ed0a.css.map @@ -1 +1 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"css/app.d714dbd143d37088ddc9.css","sourceRoot":""} \ No newline at end of file +{"version":3,"sources":[],"names":[],"mappings":"","file":"css/app.fb4b46e126eadff0ed0a.css","sourceRoot":""} \ No newline at end of file diff --git a/openhtf/output/web_gui/dist/index.html b/openhtf/output/web_gui/dist/index.html index b5b4bd879..652f6cccd 100644 --- a/openhtf/output/web_gui/dist/index.html +++ b/openhtf/output/web_gui/dist/index.html @@ -1,4 +1,4 @@ - + OpenHTF @@ -6,4 +6,4 @@ Loading... - \ No newline at end of file + \ No newline at end of file diff --git a/openhtf/output/web_gui/dist/js/app.d714dbd143d37088ddc9.js b/openhtf/output/web_gui/dist/js/app.d714dbd143d37088ddc9.js deleted file mode 100644 index 03851052b..000000000 --- a/openhtf/output/web_gui/dist/js/app.d714dbd143d37088ddc9.js +++ /dev/null @@ -1,302 +0,0 @@ -webpackJsonp([1],{102:function(t,e,n){"use strict";function paramParser(t,e){var n=new Map;if(t.length>0){t.split("&").forEach(function(t){var r=t.indexOf("="),o=-1==r?[e.decodeKey(t),""]:[e.decodeKey(t.slice(0,r)),e.decodeValue(t.slice(r+1))],i=o[0],s=o[1],a=n.get(i)||[];a.push(s),n.set(i,a)})}return n}function standardEncoding(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/gi,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%2B/gi,"+").replace(/%3D/gi,"=").replace(/%3F/gi,"?").replace(/%2F/gi,"/")}/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -function mightHaveBody(t){switch(t){case"DELETE":case"GET":case"HEAD":case"OPTIONS":case"JSONP":return!1;default:return!0}}function isArrayBuffer(t){return"undefined"!=typeof ArrayBuffer&&t instanceof ArrayBuffer}function isBlob(t){return"undefined"!=typeof Blob&&t instanceof Blob}function isFormData(t){return"undefined"!=typeof FormData&&t instanceof FormData}/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -function addBody(t,e){return{body:e,headers:t.headers,observe:t.observe,params:t.params,reportProgress:t.reportProgress,responseType:t.responseType,withCredentials:t.withCredentials}}function getResponseUrl(t){return"responseURL"in t&&t.responseURL?t.responseURL:/^X-Request-URL:/m.test(t.getAllResponseHeaders())?t.getResponseHeader("X-Request-URL"):null}/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -function interceptingHandler(t,e){return void 0===e&&(e=[]),e?e.reduceRight(function(t,e){return new A(t,e)},t):t}function jsonpCallbackContext(){return"object"==typeof window?window:{}}Object.defineProperty(e,"__esModule",{value:!0});var r=n(17),o=n(2),i=n(53),s=(n.n(i),n(80)),a=(n.n(s),n(81)),u=(n.n(a),n(54)),l=(n.n(u),n(19)),c=n(0);n.n(c);n.d(e,"HttpBackend",function(){return d}),n.d(e,"HttpHandler",function(){return p}),n.d(e,"HttpClient",function(){return S}),n.d(e,"HttpHeaders",function(){return f}),n.d(e,"HTTP_INTERCEPTORS",function(){return T}),n.d(e,"JsonpClientBackend",function(){return N}),n.d(e,"JsonpInterceptor",function(){return F}),n.d(e,"HttpClientJsonpModule",function(){return z}),n.d(e,"HttpClientModule",function(){return U}),n.d(e,"HttpClientXsrfModule",function(){return G}),n.d(e,"ɵinterceptingHandler",function(){return interceptingHandler}),n.d(e,"HttpParams",function(){return m}),n.d(e,"HttpUrlEncodingCodec",function(){return h}),n.d(e,"HttpRequest",function(){return y}),n.d(e,"HttpErrorResponse",function(){return C}),n.d(e,"HttpEventType",function(){return g}),n.d(e,"HttpHeaderResponse",function(){return b}),n.d(e,"HttpResponse",function(){return _}),n.d(e,"HttpResponseBase",function(){return v}),n.d(e,"HttpXhrBackend",function(){return k}),n.d(e,"XhrFactory",function(){return I}),n.d(e,"HttpXsrfTokenExtractor",function(){return H}),n.d(e,"ɵa",function(){return E}),n.d(e,"ɵb",function(){return M}),n.d(e,"ɵc",function(){return jsonpCallbackContext}),n.d(e,"ɵd",function(){return D}),n.d(e,"ɵg",function(){return B}),n.d(e,"ɵh",function(){return L}),n.d(e,"ɵe",function(){return R}),n.d(e,"ɵf",function(){return j});/** - * @license Angular v4.4.6 - * (c) 2010-2017 Google, Inc. https://angular.io/ - * License: MIT - */ -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var p=function(){function HttpHandler(){}return HttpHandler.prototype.handle=function(t){},HttpHandler}(),d=function(){function HttpBackend(){}return HttpBackend.prototype.handle=function(t){},HttpBackend}(),h=function(){function HttpUrlEncodingCodec(){}return HttpUrlEncodingCodec.prototype.encodeKey=function(t){return standardEncoding(t)},HttpUrlEncodingCodec.prototype.encodeValue=function(t){return standardEncoding(t)},HttpUrlEncodingCodec.prototype.decodeKey=function(t){return decodeURIComponent(t)},HttpUrlEncodingCodec.prototype.decodeValue=function(t){return decodeURIComponent(t)},HttpUrlEncodingCodec}(),m=function(){function HttpParams(t){void 0===t&&(t={}),this.updates=null,this.cloneFrom=null,this.encoder=t.encoder||new h,this.map=t.fromString?paramParser(t.fromString,this.encoder):null}return HttpParams.prototype.has=function(t){return this.init(),this.map.has(t)},HttpParams.prototype.get=function(t){this.init();var e=this.map.get(t);return e?e[0]:null},HttpParams.prototype.getAll=function(t){return this.init(),this.map.get(t)||null},HttpParams.prototype.keys=function(){return this.init(),Array.from(this.map.keys())},HttpParams.prototype.append=function(t,e){return this.clone({param:t,value:e,op:"a"})},HttpParams.prototype.set=function(t,e){return this.clone({param:t,value:e,op:"s"})},HttpParams.prototype.delete=function(t,e){return this.clone({param:t,value:e,op:"d"})},HttpParams.prototype.toString=function(){var t=this;return this.init(),this.keys().map(function(e){var n=t.encoder.encodeKey(e);return t.map.get(e).map(function(e){return n+"="+t.encoder.encodeValue(e)}).join("&")}).join("&")},HttpParams.prototype.clone=function(t){var e=new HttpParams({encoder:this.encoder});return e.cloneFrom=this.cloneFrom||this,e.updates=(this.updates||[]).concat([t]),e},HttpParams.prototype.init=function(){var t=this;null===this.map&&(this.map=new Map),null!==this.cloneFrom&&(this.cloneFrom.init(),this.cloneFrom.keys().forEach(function(e){return t.map.set(e,t.cloneFrom.map.get(e))}),this.updates.forEach(function(e){switch(e.op){case"a":case"s":var n=("a"===e.op?t.map.get(e.param):void 0)||[];n.push(e.value),t.map.set(e.param,n);break;case"d":if(void 0===e.value){t.map.delete(e.param);break}var r=t.map.get(e.param)||[],o=r.indexOf(e.value);-1!==o&&r.splice(o,1),r.length>0?t.map.set(e.param,r):t.map.delete(e.param)}}),this.cloneFrom=null)},HttpParams}(),f=function(){function HttpHeaders(t){var e=this;this.normalizedNames=new Map,this.lazyUpdate=null,t?this.lazyInit="string"==typeof t?function(){e.headers=new Map,t.split("\n").forEach(function(t){var n=t.indexOf(":");if(n>0){var r=t.slice(0,n),o=r.toLowerCase(),i=t.slice(n+1).trim();e.maybeSetNormalizedName(r,o),e.headers.has(o)?e.headers.get(o).push(i):e.headers.set(o,[i])}})}:function(){e.headers=new Map,Object.keys(t).forEach(function(n){var r=t[n],o=n.toLowerCase();"string"==typeof r&&(r=[r]),r.length>0&&(e.headers.set(o,r),e.maybeSetNormalizedName(n,o))})}:this.headers=new Map}return HttpHeaders.prototype.has=function(t){return this.init(),this.headers.has(t.toLowerCase())},HttpHeaders.prototype.get=function(t){this.init();var e=this.headers.get(t.toLowerCase());return e&&e.length>0?e[0]:null},HttpHeaders.prototype.keys=function(){return this.init(),Array.from(this.normalizedNames.values())},HttpHeaders.prototype.getAll=function(t){return this.init(),this.headers.get(t.toLowerCase())||null},HttpHeaders.prototype.append=function(t,e){return this.clone({name:t,value:e,op:"a"})},HttpHeaders.prototype.set=function(t,e){return this.clone({name:t,value:e,op:"s"})},HttpHeaders.prototype.delete=function(t,e){return this.clone({name:t,value:e,op:"d"})},HttpHeaders.prototype.maybeSetNormalizedName=function(t,e){this.normalizedNames.has(e)||this.normalizedNames.set(e,t)},HttpHeaders.prototype.init=function(){var t=this;this.lazyInit&&(this.lazyInit instanceof HttpHeaders?this.copyFrom(this.lazyInit):this.lazyInit(),this.lazyInit=null,this.lazyUpdate&&(this.lazyUpdate.forEach(function(e){return t.applyUpdate(e)}),this.lazyUpdate=null))},HttpHeaders.prototype.copyFrom=function(t){var e=this;t.init(),Array.from(t.headers.keys()).forEach(function(n){e.headers.set(n,t.headers.get(n)),e.normalizedNames.set(n,t.normalizedNames.get(n))})},HttpHeaders.prototype.clone=function(t){var e=new HttpHeaders;return e.lazyInit=this.lazyInit&&this.lazyInit instanceof HttpHeaders?this.lazyInit:this,e.lazyUpdate=(this.lazyUpdate||[]).concat([t]),e},HttpHeaders.prototype.applyUpdate=function(t){var e=t.name.toLowerCase();switch(t.op){case"a":case"s":var n=t.value;if("string"==typeof n&&(n=[n]),0===n.length)return;this.maybeSetNormalizedName(t.name,e);var r=("a"===t.op?this.headers.get(e):void 0)||[];r.push.apply(r,n),this.headers.set(e,r);break;case"d":var o=t.value;if(o){var i=this.headers.get(e);if(!i)return;i=i.filter(function(t){return-1===o.indexOf(t)}),0===i.length?(this.headers.delete(e),this.normalizedNames.delete(e)):this.headers.set(e,i)}else this.headers.delete(e),this.normalizedNames.delete(e)}},HttpHeaders.prototype.forEach=function(t){var e=this;this.init(),Array.from(this.normalizedNames.keys()).forEach(function(n){return t(e.normalizedNames.get(n),e.headers.get(n))})},HttpHeaders}(),y=function(){function HttpRequest(t,e,n,r){this.url=e,this.body=null,this.reportProgress=!1,this.withCredentials=!1,this.responseType="json",this.method=t.toUpperCase();var o;if(mightHaveBody(this.method)||r?(this.body=n||null,o=r):o=n,o&&(this.reportProgress=!!o.reportProgress,this.withCredentials=!!o.withCredentials,o.responseType&&(this.responseType=o.responseType),o.headers&&(this.headers=o.headers),o.params&&(this.params=o.params)),this.headers||(this.headers=new f),this.params){var i=this.params.toString();if(0===i.length)this.urlWithParams=e;else{var s=e.indexOf("?"),a=-1===s?"?":s=200&&this.status<300}return HttpResponseBase}(),b=function(t){function HttpHeaderResponse(e){void 0===e&&(e={});var n=t.call(this,e)||this;return n.type=g.ResponseHeader,n}return r.a(HttpHeaderResponse,t),HttpHeaderResponse.prototype.clone=function(t){return void 0===t&&(t={}),new HttpHeaderResponse({headers:t.headers||this.headers,status:void 0!==t.status?t.status:this.status,statusText:t.statusText||this.statusText,url:t.url||this.url||void 0})},HttpHeaderResponse}(v),_=function(t){function HttpResponse(e){void 0===e&&(e={});var n=t.call(this,e)||this;return n.type=g.Response,n.body=e.body||null,n}return r.a(HttpResponse,t),HttpResponse.prototype.clone=function(t){return void 0===t&&(t={}),new HttpResponse({body:void 0!==t.body?t.body:this.body,headers:t.headers||this.headers,status:void 0!==t.status?t.status:this.status,statusText:t.statusText||this.statusText,url:t.url||this.url||void 0})},HttpResponse}(v),C=function(t){function HttpErrorResponse(e){var n=t.call(this,e,0,"Unknown Error")||this;return n.name="HttpErrorResponse",n.ok=!1,n.status>=200&&n.status<300?n.message="Http failure during parsing for "+(e.url||"(unknown url)"):n.message="Http failure response for "+(e.url||"(unknown url)")+": "+e.status+" "+e.statusText,n.error=e.error||null,n}return r.a(HttpErrorResponse,t),HttpErrorResponse}(v),S=function(){function HttpClient(t){this.handler=t}return HttpClient.prototype.request=function(t,e,r){var o=this;void 0===r&&(r={});var l;l=t instanceof y?t:new y(t,e,r.body||null,{headers:r.headers,params:r.params,reportProgress:r.reportProgress,responseType:r.responseType||"json",withCredentials:r.withCredentials});var c=s.concatMap.call(n.i(i.of)(l),function(t){return o.handler.handle(t)});if(t instanceof y||"events"===r.observe)return c;var p=a.filter.call(c,function(t){return t instanceof _});switch(r.observe||"body"){case"body":switch(l.responseType){case"arraybuffer":return u.map.call(p,function(t){if(null!==t.body&&!(t.body instanceof ArrayBuffer))throw new Error("Response is not an ArrayBuffer.");return t.body});case"blob":return u.map.call(p,function(t){if(null!==t.body&&!(t.body instanceof Blob))throw new Error("Response is not a Blob.");return t.body});case"text":return u.map.call(p,function(t){if(null!==t.body&&"string"!=typeof t.body)throw new Error("Response is not a string.");return t.body});case"json":default:return u.map.call(p,function(t){return t.body})}case"response":return p;default:throw new Error("Unreachable: unhandled observe type "+r.observe+"}")}},HttpClient.prototype.delete=function(t,e){return void 0===e&&(e={}),this.request("DELETE",t,e)},HttpClient.prototype.get=function(t,e){return void 0===e&&(e={}),this.request("GET",t,e)},HttpClient.prototype.head=function(t,e){return void 0===e&&(e={}),this.request("HEAD",t,e)},HttpClient.prototype.jsonp=function(t,e){return this.request("JSONP",t,{params:(new m).append(e,"JSONP_CALLBACK"),observe:"body",responseType:"json"})},HttpClient.prototype.options=function(t,e){return void 0===e&&(e={}),this.request("OPTIONS",t,e)},HttpClient.prototype.patch=function(t,e,n){return void 0===n&&(n={}),this.request("PATCH",t,addBody(n,e))},HttpClient.prototype.post=function(t,e,n){return void 0===n&&(n={}),this.request("POST",t,addBody(n,e))},HttpClient.prototype.put=function(t,e,n){return void 0===n&&(n={}),this.request("PUT",t,addBody(n,e))},HttpClient}();S.decorators=[{type:o.Injectable}],S.ctorParameters=function(){return[{type:p}]};/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var A=function(){function HttpInterceptorHandler(t,e){this.next=t,this.interceptor=e}return HttpInterceptorHandler.prototype.handle=function(t){return this.interceptor.intercept(t,this.next)},HttpInterceptorHandler}(),T=new o.InjectionToken("HTTP_INTERCEPTORS"),E=function(){function NoopInterceptor(){}return NoopInterceptor.prototype.intercept=function(t,e){return e.handle(t)},NoopInterceptor}();E.decorators=[{type:o.Injectable}],E.ctorParameters=function(){return[]};/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var P=0,w="JSONP injected script did not invoke callback.",x="JSONP requests must use JSONP request method.",O="JSONP requests must use Json response type.",M=function(){function JsonpCallbackContext(){}return JsonpCallbackContext}(),N=function(){function JsonpClientBackend(t,e){this.callbackMap=t,this.document=e}return JsonpClientBackend.prototype.nextCallback=function(){return"ng_jsonp_callback_"+P++},JsonpClientBackend.prototype.handle=function(t){var e=this;if("JSONP"!==t.method)throw new Error(x);if("json"!==t.responseType)throw new Error(O);return new c.Observable(function(n){var r=e.nextCallback(),o=t.urlWithParams.replace(/=JSONP_CALLBACK(&|$)/,"="+r+"$1"),i=e.document.createElement("script");i.src=o;var s=null,a=!1,u=!1;e.callbackMap[r]=function(t){delete e.callbackMap[r],u||(s=t,a=!0)};var l=function(){i.parentNode&&i.parentNode.removeChild(i),delete e.callbackMap[r]},c=function(t){if(!u){if(l(),!a)return void n.error(new C({url:o,status:0,statusText:"JSONP Error",error:new Error(w)}));n.next(new _({body:s,status:200,statusText:"OK",url:o})),n.complete()}},p=function(t){u||(l(),n.error(new C({error:t,status:0,statusText:"JSONP Error",url:o})))};return i.addEventListener("load",c),i.addEventListener("error",p),e.document.body.appendChild(i),n.next({type:g.Sent}),function(){u=!0,i.removeEventListener("load",c),i.removeEventListener("error",p),l()}})},JsonpClientBackend}();N.decorators=[{type:o.Injectable}],N.ctorParameters=function(){return[{type:M},{type:void 0,decorators:[{type:o.Inject,args:[l.DOCUMENT]}]}]};var F=function(){function JsonpInterceptor(t){this.jsonp=t}return JsonpInterceptor.prototype.intercept=function(t,e){return"JSONP"===t.method?this.jsonp.handle(t):e.handle(t)},JsonpInterceptor}();F.decorators=[{type:o.Injectable}],F.ctorParameters=function(){return[{type:N}]};/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var V=/^\)\]\}',?\n/,I=function(){function XhrFactory(){}return XhrFactory.prototype.build=function(){},XhrFactory}(),D=function(){function BrowserXhr(){}return BrowserXhr.prototype.build=function(){return new XMLHttpRequest},BrowserXhr}();D.decorators=[{type:o.Injectable}],D.ctorParameters=function(){return[]};var k=function(){function HttpXhrBackend(t){this.xhrFactory=t}return HttpXhrBackend.prototype.handle=function(t){var e=this;if("JSONP"===t.method)throw new Error("Attempted to construct Jsonp request without JsonpClientModule installed.");return new c.Observable(function(n){var r=e.xhrFactory.build();if(r.open(t.method,t.urlWithParams),t.withCredentials&&(r.withCredentials=!0),t.headers.forEach(function(t,e){return r.setRequestHeader(t,e.join(","))}),t.headers.has("Accept")||r.setRequestHeader("Accept","application/json, text/plain, */*"),!t.headers.has("Content-Type")){var o=t.detectContentTypeHeader();null!==o&&r.setRequestHeader("Content-Type",o)}if(t.responseType){var i=t.responseType.toLowerCase();r.responseType="json"!==i?i:"text"}var s=t.serializeBody(),a=null,u=function(){if(null!==a)return a;var e=1223===r.status?204:r.status,n=r.statusText||"OK",o=new f(r.getAllResponseHeaders()),i=getResponseUrl(r)||t.url;return a=new b({headers:o,status:e,statusText:n,url:i})},l=function(){var e=u(),o=e.headers,i=e.status,s=e.statusText,a=e.url,l=null;204!==i&&(l=void 0===r.response?r.responseText:r.response),0===i&&(i=l?200:0);var c=i>=200&&i<300;if(c&&"json"===t.responseType&&"string"==typeof l){l=l.replace(V,"");try{l=JSON.parse(l)}catch(t){c=!1,l={error:t,text:l}}}else if(!c&&"json"===t.responseType&&"string"==typeof l)try{l=JSON.parse(l)}catch(t){}c?(n.next(new _({body:l,headers:o,status:i,statusText:s,url:a||void 0})),n.complete()):n.error(new C({error:l,headers:o,status:i,statusText:s,url:a||void 0}))},c=function(t){var e=new C({error:t,status:r.status||0,statusText:r.statusText||"Unknown Error"});n.error(e)},p=!1,d=function(e){p||(n.next(u()),p=!0);var o={type:g.DownloadProgress,loaded:e.loaded};e.lengthComputable&&(o.total=e.total),"text"===t.responseType&&r.responseText&&(o.partialText=r.responseText),n.next(o)},h=function(t){var e={type:g.UploadProgress,loaded:t.loaded};t.lengthComputable&&(e.total=t.total),n.next(e)};return r.addEventListener("load",l),r.addEventListener("error",c),t.reportProgress&&(r.addEventListener("progress",d),null!==s&&r.upload&&r.upload.addEventListener("progress",h)),r.send(s),n.next({type:g.Sent}),function(){r.removeEventListener("error",c),r.removeEventListener("load",l),t.reportProgress&&(r.removeEventListener("progress",d),null!==s&&r.upload&&r.upload.removeEventListener("progress",h)),r.abort()}})},HttpXhrBackend}();k.decorators=[{type:o.Injectable}],k.ctorParameters=function(){return[{type:I}]};/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var R=new o.InjectionToken("XSRF_COOKIE_NAME"),j=new o.InjectionToken("XSRF_HEADER_NAME"),H=function(){function HttpXsrfTokenExtractor(){}return HttpXsrfTokenExtractor.prototype.getToken=function(){},HttpXsrfTokenExtractor}(),B=function(){function HttpXsrfCookieExtractor(t,e,n){this.doc=t,this.platform=e,this.cookieName=n,this.lastCookieString="",this.lastToken=null,this.parseCount=0}return HttpXsrfCookieExtractor.prototype.getToken=function(){if("server"===this.platform)return null;var t=this.doc.cookie||"";return t!==this.lastCookieString&&(this.parseCount++,this.lastToken=n.i(l["ɵparseCookieValue"])(t,this.cookieName),this.lastCookieString=t),this.lastToken},HttpXsrfCookieExtractor}();B.decorators=[{type:o.Injectable}],B.ctorParameters=function(){return[{type:void 0,decorators:[{type:o.Inject,args:[l.DOCUMENT]}]},{type:void 0,decorators:[{type:o.Inject,args:[o.PLATFORM_ID]}]},{type:void 0,decorators:[{type:o.Inject,args:[R]}]}]};var L=function(){function HttpXsrfInterceptor(t,e){this.tokenService=t,this.headerName=e}return HttpXsrfInterceptor.prototype.intercept=function(t,e){var n=t.url.toLowerCase();if("GET"===t.method||"HEAD"===t.method||n.startsWith("http://")||n.startsWith("https://"))return e.handle(t);var r=this.tokenService.getToken();return null===r||t.headers.has(this.headerName)||(t=t.clone({headers:t.headers.set(this.headerName,r)})),e.handle(t)},HttpXsrfInterceptor}();L.decorators=[{type:o.Injectable}],L.ctorParameters=function(){return[{type:H},{type:void 0,decorators:[{type:o.Inject,args:[j]}]}]};var G=function(){function HttpClientXsrfModule(){}return HttpClientXsrfModule.disable=function(){return{ngModule:HttpClientXsrfModule,providers:[{provide:L,useClass:E}]}},HttpClientXsrfModule.withOptions=function(t){return void 0===t&&(t={}),{ngModule:HttpClientXsrfModule,providers:[t.cookieName?{provide:R,useValue:t.cookieName}:[],t.headerName?{provide:j,useValue:t.headerName}:[]]}},HttpClientXsrfModule}();G.decorators=[{type:o.NgModule,args:[{providers:[L,{provide:T,useExisting:L,multi:!0},{provide:H,useClass:B},{provide:R,useValue:"XSRF-TOKEN"},{provide:j,useValue:"X-XSRF-TOKEN"}]}]}],G.ctorParameters=function(){return[]};var U=function(){function HttpClientModule(){}return HttpClientModule}();U.decorators=[{type:o.NgModule,args:[{imports:[G.withOptions({cookieName:"XSRF-TOKEN",headerName:"X-XSRF-TOKEN"})],providers:[S,{provide:p,useFactory:interceptingHandler,deps:[d,[new o.Optional,new o.Inject(T)]]},k,{provide:d,useExisting:k},D,{provide:I,useExisting:D}]}]}],U.ctorParameters=function(){return[]};var z=function(){function HttpClientJsonpModule(){}return HttpClientJsonpModule}();z.decorators=[{type:o.NgModule,args:[{providers:[N,{provide:M,useFactory:jsonpCallbackContext},{provide:T,useClass:F,multi:!0}]}]}],z.ctorParameters=function(){return[]}},103:function(t,e,n){"use strict";/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -function isEmptyInputValue(t){return null==t||0===t.length}function isPresent(t){return null!=t}function toObservable(t){var e=n.i(o["ɵisPromise"])(t)?n.i(s.fromPromise)(t):t;if(!n.i(o["ɵisObservable"])(e))throw new Error("Expected validator to return Promise or Observable.");return e}function _executeValidators(t,e){return e.map(function(e){return e(t)})}function _executeAsyncValidators(t,e){return e.map(function(e){return e(t)})}function _mergeErrors(t){var e=t.reduce(function(t,e){return null!=e?Object.assign({},t,e):t},{});return 0===Object.keys(e).length?null:e}function _isAndroid(){return/android (\d+)/.test((n.i(u["ɵgetDOM"])()?n.i(u["ɵgetDOM"])().getUserAgent():"").toLowerCase())}/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -function normalizeValidator(t){return t.validate?function(e){return t.validate(e)}:t}function normalizeAsyncValidator(t){return t.validate?function(e){return t.validate(e)}:t}/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -function unimplemented(){throw new Error("unimplemented")}function _buildValueString(t,e){return null==t?""+e:(e&&"object"==typeof e&&(e="Object"),(t+": "+e).slice(0,50))}function _extractId(t){return t.split(":")[0]}function _buildValueString$1(t,e){return null==t?""+e:("string"==typeof e&&(e="'"+e+"'"),e&&"object"==typeof e&&(e="Object"),(t+": "+e).slice(0,50))}function _extractId$1(t){return t.split(":")[0]}/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -function controlPath(t,e){return e.path.concat([t])}function setUpControl(t,e){t||_throwError(e,"Cannot find control with"),e.valueAccessor||_throwError(e,"No value accessor for form control with"),t.validator=m.compose([t.validator,e.validator]),t.asyncValidator=m.composeAsync([t.asyncValidator,e.asyncValidator]),e.valueAccessor.writeValue(t.value),e.valueAccessor.registerOnChange(function(n){e.viewToModelUpdate(n),t.markAsDirty(),t.setValue(n,{emitModelToViewChange:!1})}),e.valueAccessor.registerOnTouched(function(){return t.markAsTouched()}),t.registerOnChange(function(t,n){e.valueAccessor.writeValue(t),n&&e.viewToModelUpdate(t)}),e.valueAccessor.setDisabledState&&t.registerOnDisabledChange(function(t){e.valueAccessor.setDisabledState(t)}),e._rawValidators.forEach(function(e){e.registerOnValidatorChange&&e.registerOnValidatorChange(function(){return t.updateValueAndValidity()})}),e._rawAsyncValidators.forEach(function(e){e.registerOnValidatorChange&&e.registerOnValidatorChange(function(){return t.updateValueAndValidity()})})}function cleanUpControl(t,e){e.valueAccessor.registerOnChange(function(){return _noControlError(e)}),e.valueAccessor.registerOnTouched(function(){return _noControlError(e)}),e._rawValidators.forEach(function(t){t.registerOnValidatorChange&&t.registerOnValidatorChange(null)}),e._rawAsyncValidators.forEach(function(t){t.registerOnValidatorChange&&t.registerOnValidatorChange(null)}),t&&t._clearChangeFns()}function setUpFormContainer(t,e){null==t&&_throwError(e,"Cannot find control with"),t.validator=m.compose([t.validator,e.validator]),t.asyncValidator=m.composeAsync([t.asyncValidator,e.asyncValidator])}function _noControlError(t){return _throwError(t,"There is no FormControl instance attached to form control element with")}function _throwError(t,e){var n;throw n=t.path.length>1?"path: '"+t.path.join(" -> ")+"'":t.path[0]?"name: '"+t.path+"'":"unspecified name attribute",new Error(e+" "+n)}function composeValidators(t){return null!=t?m.compose(t.map(normalizeValidator)):null}function composeAsyncValidators(t){return null!=t?m.composeAsync(t.map(normalizeAsyncValidator)):null}function isPropertyUpdated(t,e){if(!t.hasOwnProperty("model"))return!1;var r=t.model;return!!r.isFirstChange()||!n.i(o["ɵlooseIdentical"])(e,r.currentValue)}function isBuiltInAccessor(t){return D.some(function(e){return t.constructor===e})}function selectValueAccessor(t,e){if(!e)return null;var n=void 0,r=void 0,o=void 0;return e.forEach(function(e){e.constructor===_?n=e:isBuiltInAccessor(e)?(r&&_throwError(t,"More than one built-in value accessor matches form control with"),r=e):(o&&_throwError(t,"More than one custom value accessor matches form control with"),o=e)}),o||(r||(n||(_throwError(t,"No valid value accessor for form control with"),null)))}function _find(t,e,n){return null==e?null:(e instanceof Array||(e=e.split(n)),e instanceof Array&&0===e.length?null:e.reduce(function(t,e){return t instanceof K?t.controls[e]||null:t instanceof J?t.at(e)||null:null},t))}function coerceToValidator(t){return Array.isArray(t)?composeValidators(t):t||null}function coerceToAsyncValidator(t){return Array.isArray(t)?composeAsyncValidators(t):t||null}function remove(t,e){var n=t.indexOf(e);n>-1&&t.splice(n,1)}function _hasInvalidParent(t){return!(t instanceof pt||t instanceof lt||t instanceof ht)}Object.defineProperty(e,"__esModule",{value:!0});var r=n(17),o=n(2),i=n(126),s=(n.n(i),n(78)),a=(n.n(s),n(54)),u=(n.n(a),n(22));n.d(e,"AbstractControlDirective",function(){return l}),n.d(e,"AbstractFormGroupDirective",function(){return k}),n.d(e,"CheckboxControlValueAccessor",function(){return g}),n.d(e,"ControlContainer",function(){return c}),n.d(e,"NG_VALUE_ACCESSOR",function(){return f}),n.d(e,"COMPOSITION_BUFFER_MODE",function(){return b}),n.d(e,"DefaultValueAccessor",function(){return _}),n.d(e,"NgControl",function(){return A}),n.d(e,"NgControlStatus",function(){return H}),n.d(e,"NgControlStatusGroup",function(){return B}),n.d(e,"NgForm",function(){return $}),n.d(e,"NgModel",function(){return ot}),n.d(e,"NgModelGroup",function(){return et}),n.d(e,"RadioControlValueAccessor",function(){return P}),n.d(e,"FormControlDirective",function(){return at}),n.d(e,"FormControlName",function(){return ft}),n.d(e,"FormGroupDirective",function(){return lt}),n.d(e,"FormArrayName",function(){return ht}),n.d(e,"FormGroupName",function(){return pt}),n.d(e,"NgSelectOption",function(){return N}),n.d(e,"SelectControlValueAccessor",function(){return M}),n.d(e,"SelectMultipleControlValueAccessor",function(){return V}),n.d(e,"CheckboxRequiredValidator",function(){return bt}),n.d(e,"EmailValidator",function(){return Ct}),n.d(e,"MaxLengthValidator",function(){return Et}),n.d(e,"MinLengthValidator",function(){return At}),n.d(e,"PatternValidator",function(){return wt}),n.d(e,"RequiredValidator",function(){return vt}),n.d(e,"FormBuilder",function(){return xt}),n.d(e,"AbstractControl",function(){return q}),n.d(e,"FormArray",function(){return J}),n.d(e,"FormControl",function(){return W}),n.d(e,"FormGroup",function(){return K}),n.d(e,"NG_ASYNC_VALIDATORS",function(){return d}),n.d(e,"NG_VALIDATORS",function(){return p}),n.d(e,"Validators",function(){return m}),n.d(e,"VERSION",function(){return Ot}),n.d(e,"FormsModule",function(){return Dt}),n.d(e,"ReactiveFormsModule",function(){return kt}),n.d(e,"ɵba",function(){return It}),n.d(e,"ɵz",function(){return Vt}),n.d(e,"ɵx",function(){return Nt}),n.d(e,"ɵy",function(){return Ft}),n.d(e,"ɵa",function(){return y}),n.d(e,"ɵb",function(){return v}),n.d(e,"ɵc",function(){return R}),n.d(e,"ɵd",function(){return j}),n.d(e,"ɵe",function(){return Q}),n.d(e,"ɵf",function(){return nt}),n.d(e,"ɵg",function(){return tt}),n.d(e,"ɵbf",function(){return Mt}),n.d(e,"ɵbb",function(){return C}),n.d(e,"ɵbc",function(){return S}),n.d(e,"ɵh",function(){return T}),n.d(e,"ɵi",function(){return E}),n.d(e,"ɵbd",function(){return w}),n.d(e,"ɵbe",function(){return x}),n.d(e,"ɵj",function(){return st}),n.d(e,"ɵk",function(){return mt}),n.d(e,"ɵl",function(){return ut}),n.d(e,"ɵn",function(){return dt}),n.d(e,"ɵm",function(){return ct}),n.d(e,"ɵo",function(){return O}),n.d(e,"ɵq",function(){return I}),n.d(e,"ɵp",function(){return F}),n.d(e,"ɵs",function(){return gt}),n.d(e,"ɵt",function(){return _t}),n.d(e,"ɵv",function(){return Tt}),n.d(e,"ɵu",function(){return St}),n.d(e,"ɵw",function(){return Pt}),n.d(e,"ɵr",function(){return yt});/** - * @license Angular v4.4.6 - * (c) 2010-2017 Google, Inc. https://angular.io/ - * License: MIT - */ -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var l=function(){function AbstractControlDirective(){}return AbstractControlDirective.prototype.control=function(){},Object.defineProperty(AbstractControlDirective.prototype,"value",{get:function(){return this.control?this.control.value:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"valid",{get:function(){return this.control?this.control.valid:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"invalid",{get:function(){return this.control?this.control.invalid:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"pending",{get:function(){return this.control?this.control.pending:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"disabled",{get:function(){return this.control?this.control.disabled:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"enabled",{get:function(){return this.control?this.control.enabled:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"errors",{get:function(){return this.control?this.control.errors:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"pristine",{get:function(){return this.control?this.control.pristine:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"dirty",{get:function(){return this.control?this.control.dirty:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"touched",{get:function(){return this.control?this.control.touched:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"untouched",{get:function(){return this.control?this.control.untouched:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"statusChanges",{get:function(){return this.control?this.control.statusChanges:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"valueChanges",{get:function(){return this.control?this.control.valueChanges:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"path",{get:function(){return null},enumerable:!0,configurable:!0}),AbstractControlDirective.prototype.reset=function(t){void 0===t&&(t=void 0),this.control&&this.control.reset(t)},AbstractControlDirective.prototype.hasError=function(t,e){return!!this.control&&this.control.hasError(t,e)},AbstractControlDirective.prototype.getError=function(t,e){return this.control?this.control.getError(t,e):null},AbstractControlDirective}(),c=function(t){function ControlContainer(){return null!==t&&t.apply(this,arguments)||this}return r.a(ControlContainer,t),Object.defineProperty(ControlContainer.prototype,"formDirective",{get:function(){return null},enumerable:!0,configurable:!0}),Object.defineProperty(ControlContainer.prototype,"path",{get:function(){return null},enumerable:!0,configurable:!0}),ControlContainer}(l),p=new o.InjectionToken("NgValidators"),d=new o.InjectionToken("NgAsyncValidators"),h=/^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+\/0-9=?A-Z^_`a-z{|}~]+(\.[-!#$%&'*+\/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/,m=function(){function Validators(){}return Validators.min=function(t){return function(e){if(isEmptyInputValue(e.value)||isEmptyInputValue(t))return null;var n=parseFloat(e.value);return!isNaN(n)&&nt?{max:{max:t,actual:e.value}}:null}},Validators.required=function(t){return isEmptyInputValue(t.value)?{required:!0}:null},Validators.requiredTrue=function(t){return!0===t.value?null:{required:!0}},Validators.email=function(t){return h.test(t.value)?null:{email:!0}},Validators.minLength=function(t){return function(e){if(isEmptyInputValue(e.value))return null;var n=e.value?e.value.length:0;return nt?{maxlength:{requiredLength:t,actualLength:n}}:null}},Validators.pattern=function(t){if(!t)return Validators.nullValidator;var e,n;return"string"==typeof t?(n="^"+t+"$",e=new RegExp(n)):(n=t.toString(),e=t),function(t){if(isEmptyInputValue(t.value))return null;var r=t.value;return e.test(r)?null:{pattern:{requiredPattern:n,actualValue:r}}}},Validators.nullValidator=function(t){return null},Validators.compose=function(t){if(!t)return null;var e=t.filter(isPresent);return 0==e.length?null:function(t){return _mergeErrors(_executeValidators(t,e))}},Validators.composeAsync=function(t){if(!t)return null;var e=t.filter(isPresent);return 0==e.length?null:function(t){var r=_executeAsyncValidators(t,e).map(toObservable);return a.map.call(n.i(i.forkJoin)(r),_mergeErrors)}},Validators}(),f=new o.InjectionToken("NgValueAccessor"),y={provide:f,useExisting:n.i(o.forwardRef)(function(){return g}),multi:!0},g=function(){function CheckboxControlValueAccessor(t,e){this._renderer=t,this._elementRef=e,this.onChange=function(t){},this.onTouched=function(){}}return CheckboxControlValueAccessor.prototype.writeValue=function(t){this._renderer.setProperty(this._elementRef.nativeElement,"checked",t)},CheckboxControlValueAccessor.prototype.registerOnChange=function(t){this.onChange=t},CheckboxControlValueAccessor.prototype.registerOnTouched=function(t){this.onTouched=t},CheckboxControlValueAccessor.prototype.setDisabledState=function(t){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",t)},CheckboxControlValueAccessor}();g.decorators=[{type:o.Directive,args:[{selector:"input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]",host:{"(change)":"onChange($event.target.checked)","(blur)":"onTouched()"},providers:[y]}]}],g.ctorParameters=function(){return[{type:o.Renderer2},{type:o.ElementRef}]};/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var v={provide:f,useExisting:n.i(o.forwardRef)(function(){return _}),multi:!0},b=new o.InjectionToken("CompositionEventMode"),_=function(){function DefaultValueAccessor(t,e,n){this._renderer=t,this._elementRef=e,this._compositionMode=n,this.onChange=function(t){},this.onTouched=function(){},this._composing=!1,null==this._compositionMode&&(this._compositionMode=!_isAndroid())}return DefaultValueAccessor.prototype.writeValue=function(t){var e=null==t?"":t;this._renderer.setProperty(this._elementRef.nativeElement,"value",e)},DefaultValueAccessor.prototype.registerOnChange=function(t){this.onChange=t},DefaultValueAccessor.prototype.registerOnTouched=function(t){this.onTouched=t},DefaultValueAccessor.prototype.setDisabledState=function(t){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",t)},DefaultValueAccessor.prototype._handleInput=function(t){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(t)},DefaultValueAccessor.prototype._compositionStart=function(){this._composing=!0},DefaultValueAccessor.prototype._compositionEnd=function(t){this._composing=!1,this._compositionMode&&this.onChange(t)},DefaultValueAccessor}();_.decorators=[{type:o.Directive,args:[{selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]",host:{"(input)":"_handleInput($event.target.value)","(blur)":"onTouched()","(compositionstart)":"_compositionStart()","(compositionend)":"_compositionEnd($event.target.value)"},providers:[v]}]}],_.ctorParameters=function(){return[{type:o.Renderer2},{type:o.ElementRef},{type:void 0,decorators:[{type:o.Optional},{type:o.Inject,args:[b]}]}]};/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var C={provide:f,useExisting:n.i(o.forwardRef)(function(){return S}),multi:!0},S=function(){function NumberValueAccessor(t,e){this._renderer=t,this._elementRef=e,this.onChange=function(t){},this.onTouched=function(){}}return NumberValueAccessor.prototype.writeValue=function(t){var e=null==t?"":t;this._renderer.setProperty(this._elementRef.nativeElement,"value",e)},NumberValueAccessor.prototype.registerOnChange=function(t){this.onChange=function(e){t(""==e?null:parseFloat(e))}},NumberValueAccessor.prototype.registerOnTouched=function(t){this.onTouched=t},NumberValueAccessor.prototype.setDisabledState=function(t){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",t)},NumberValueAccessor}();S.decorators=[{type:o.Directive,args:[{selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]",host:{"(change)":"onChange($event.target.value)","(input)":"onChange($event.target.value)","(blur)":"onTouched()"},providers:[C]}]}],S.ctorParameters=function(){return[{type:o.Renderer2},{type:o.ElementRef}]};var A=function(t){function NgControl(){var e=t.apply(this,arguments)||this;return e._parent=null,e.name=null,e.valueAccessor=null,e._rawValidators=[],e._rawAsyncValidators=[],e}return r.a(NgControl,t),Object.defineProperty(NgControl.prototype,"validator",{get:function(){return unimplemented()},enumerable:!0,configurable:!0}),Object.defineProperty(NgControl.prototype,"asyncValidator",{get:function(){return unimplemented()},enumerable:!0,configurable:!0}),NgControl.prototype.viewToModelUpdate=function(t){},NgControl}(l),T={provide:f,useExisting:n.i(o.forwardRef)(function(){return P}),multi:!0},E=function(){function RadioControlRegistry(){this._accessors=[]}return RadioControlRegistry.prototype.add=function(t,e){this._accessors.push([t,e])},RadioControlRegistry.prototype.remove=function(t){for(var e=this._accessors.length-1;e>=0;--e)if(this._accessors[e][1]===t)return void this._accessors.splice(e,1)},RadioControlRegistry.prototype.select=function(t){var e=this;this._accessors.forEach(function(n){e._isSameGroup(n,t)&&n[1]!==t&&n[1].fireUncheck(t.value)})},RadioControlRegistry.prototype._isSameGroup=function(t,e){return!!t[0].control&&(t[0]._parent===e._control._parent&&t[1].name===e.name)},RadioControlRegistry}();E.decorators=[{type:o.Injectable}],E.ctorParameters=function(){return[]};var P=function(){function RadioControlValueAccessor(t,e,n,r){this._renderer=t,this._elementRef=e,this._registry=n,this._injector=r,this.onChange=function(){},this.onTouched=function(){}}return RadioControlValueAccessor.prototype.ngOnInit=function(){this._control=this._injector.get(A),this._checkName(),this._registry.add(this._control,this)},RadioControlValueAccessor.prototype.ngOnDestroy=function(){this._registry.remove(this)},RadioControlValueAccessor.prototype.writeValue=function(t){this._state=t===this.value,this._renderer.setProperty(this._elementRef.nativeElement,"checked",this._state)},RadioControlValueAccessor.prototype.registerOnChange=function(t){var e=this;this._fn=t,this.onChange=function(){t(e.value),e._registry.select(e)}},RadioControlValueAccessor.prototype.fireUncheck=function(t){this.writeValue(t)},RadioControlValueAccessor.prototype.registerOnTouched=function(t){this.onTouched=t},RadioControlValueAccessor.prototype.setDisabledState=function(t){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",t)},RadioControlValueAccessor.prototype._checkName=function(){this.name&&this.formControlName&&this.name!==this.formControlName&&this._throwNameError(),!this.name&&this.formControlName&&(this.name=this.formControlName)},RadioControlValueAccessor.prototype._throwNameError=function(){throw new Error('\n If you define both a name and a formControlName attribute on your radio button, their values\n must match. Ex: \n ')},RadioControlValueAccessor}();P.decorators=[{type:o.Directive,args:[{selector:"input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]",host:{"(change)":"onChange()","(blur)":"onTouched()"},providers:[T]}]}],P.ctorParameters=function(){return[{type:o.Renderer2},{type:o.ElementRef},{type:E},{type:o.Injector}]},P.propDecorators={name:[{type:o.Input}],formControlName:[{type:o.Input}],value:[{type:o.Input}]};/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var w={provide:f,useExisting:n.i(o.forwardRef)(function(){return x}),multi:!0},x=function(){function RangeValueAccessor(t,e){this._renderer=t,this._elementRef=e,this.onChange=function(t){},this.onTouched=function(){}}return RangeValueAccessor.prototype.writeValue=function(t){this._renderer.setProperty(this._elementRef.nativeElement,"value",parseFloat(t))},RangeValueAccessor.prototype.registerOnChange=function(t){this.onChange=function(e){t(""==e?null:parseFloat(e))}},RangeValueAccessor.prototype.registerOnTouched=function(t){this.onTouched=t},RangeValueAccessor.prototype.setDisabledState=function(t){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",t)},RangeValueAccessor}();x.decorators=[{type:o.Directive,args:[{selector:"input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]",host:{"(change)":"onChange($event.target.value)","(input)":"onChange($event.target.value)","(blur)":"onTouched()"},providers:[w]}]}],x.ctorParameters=function(){return[{type:o.Renderer2},{type:o.ElementRef}]};/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var O={provide:f,useExisting:n.i(o.forwardRef)(function(){return M}),multi:!0},M=function(){function SelectControlValueAccessor(t,e){this._renderer=t,this._elementRef=e,this._optionMap=new Map,this._idCounter=0,this.onChange=function(t){},this.onTouched=function(){},this._compareWith=o["ɵlooseIdentical"]}return Object.defineProperty(SelectControlValueAccessor.prototype,"compareWith",{set:function(t){if("function"!=typeof t)throw new Error("compareWith must be a function, but received "+JSON.stringify(t));this._compareWith=t},enumerable:!0,configurable:!0}),SelectControlValueAccessor.prototype.writeValue=function(t){this.value=t;var e=this._getOptionId(t);null==e&&this._renderer.setProperty(this._elementRef.nativeElement,"selectedIndex",-1);var n=_buildValueString(e,t);this._renderer.setProperty(this._elementRef.nativeElement,"value",n)},SelectControlValueAccessor.prototype.registerOnChange=function(t){var e=this;this.onChange=function(n){e.value=e._getOptionValue(n),t(e.value)}},SelectControlValueAccessor.prototype.registerOnTouched=function(t){this.onTouched=t},SelectControlValueAccessor.prototype.setDisabledState=function(t){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",t)},SelectControlValueAccessor.prototype._registerOption=function(){return(this._idCounter++).toString()},SelectControlValueAccessor.prototype._getOptionId=function(t){for(var e=0,n=Array.from(this._optionMap.keys());e-1)}}else n=function(t,e){t._setSelected(!1)};this._optionMap.forEach(n)},SelectMultipleControlValueAccessor.prototype.registerOnChange=function(t){var e=this;this.onChange=function(n){var r=[];if(n.hasOwnProperty("selectedOptions"))for(var o=n.selectedOptions,i=0;i0||this.disabled},FormGroup.prototype._checkAllValuesPresent=function(t){this._forEachChild(function(e,n){if(void 0===t[n])throw new Error("Must supply a value for form control with name: '"+n+"'.")})},FormGroup}(q),J=function(t){function FormArray(e,n,r){var o=t.call(this,n||null,r||null)||this;return o.controls=e,o._initObservables(),o._setUpControls(),o.updateValueAndValidity({onlySelf:!0,emitEvent:!1}),o}return r.a(FormArray,t),FormArray.prototype.at=function(t){return this.controls[t]},FormArray.prototype.push=function(t){this.controls.push(t),this._registerControl(t),this.updateValueAndValidity(),this._onCollectionChange()},FormArray.prototype.insert=function(t,e){this.controls.splice(t,0,e),this._registerControl(e),this.updateValueAndValidity(),this._onCollectionChange()},FormArray.prototype.removeAt=function(t){this.controls[t]&&this.controls[t]._registerOnCollectionChange(function(){}),this.controls.splice(t,1),this.updateValueAndValidity(),this._onCollectionChange()},FormArray.prototype.setControl=function(t,e){this.controls[t]&&this.controls[t]._registerOnCollectionChange(function(){}),this.controls.splice(t,1),e&&(this.controls.splice(t,0,e),this._registerControl(e)),this.updateValueAndValidity(),this._onCollectionChange()},Object.defineProperty(FormArray.prototype,"length",{get:function(){return this.controls.length},enumerable:!0,configurable:!0}),FormArray.prototype.setValue=function(t,e){var n=this;void 0===e&&(e={}),this._checkAllValuesPresent(t),t.forEach(function(t,r){n._throwIfControlMissing(r),n.at(r).setValue(t,{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e)},FormArray.prototype.patchValue=function(t,e){var n=this;void 0===e&&(e={}),t.forEach(function(t,r){n.at(r)&&n.at(r).patchValue(t,{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e)},FormArray.prototype.reset=function(t,e){void 0===t&&(t=[]),void 0===e&&(e={}),this._forEachChild(function(n,r){n.reset(t[r],{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e),this._updatePristine(e),this._updateTouched(e)},FormArray.prototype.getRawValue=function(){return this.controls.map(function(t){return t instanceof W?t.value:t.getRawValue()})},FormArray.prototype._throwIfControlMissing=function(t){if(!this.controls.length)throw new Error("\n There are no form controls registered with this array yet. If you're using ngModel,\n you may want to check next tick (e.g. use setTimeout).\n ");if(!this.at(t))throw new Error("Cannot find form control at index "+t)},FormArray.prototype._forEachChild=function(t){this.controls.forEach(function(e,n){t(e,n)})},FormArray.prototype._updateValue=function(){var t=this;this._value=this.controls.filter(function(e){return e.enabled||t.disabled}).map(function(t){return t.value})},FormArray.prototype._anyControls=function(t){return this.controls.some(function(e){return e.enabled&&t(e)})},FormArray.prototype._setUpControls=function(){var t=this;this._forEachChild(function(e){return t._registerControl(e)})},FormArray.prototype._checkAllValuesPresent=function(t){this._forEachChild(function(e,n){if(void 0===t[n])throw new Error("Must supply a value for form control at index: "+n+".")})},FormArray.prototype._allControlsDisabled=function(){for(var t=0,e=this.controls;t0||this.disabled},FormArray.prototype._registerControl=function(t){t.setParent(this),t._registerOnCollectionChange(this._onCollectionChange)},FormArray}(q),Q={provide:c,useExisting:n.i(o.forwardRef)(function(){return $})},X=Promise.resolve(null),$=function(t){function NgForm(e,n){var r=t.call(this)||this;return r._submitted=!1,r.ngSubmit=new o.EventEmitter,r.form=new K({},composeValidators(e),composeAsyncValidators(n)),r}return r.a(NgForm,t),Object.defineProperty(NgForm.prototype,"submitted",{get:function(){return this._submitted},enumerable:!0,configurable:!0}),Object.defineProperty(NgForm.prototype,"formDirective",{get:function(){return this},enumerable:!0,configurable:!0}),Object.defineProperty(NgForm.prototype,"control",{get:function(){return this.form},enumerable:!0,configurable:!0}),Object.defineProperty(NgForm.prototype,"path",{get:function(){return[]},enumerable:!0,configurable:!0}),Object.defineProperty(NgForm.prototype,"controls",{get:function(){return this.form.controls},enumerable:!0,configurable:!0}),NgForm.prototype.addControl=function(t){var e=this;X.then(function(){var n=e._findContainer(t.path);t._control=n.registerControl(t.name,t.control),setUpControl(t.control,t),t.control.updateValueAndValidity({emitEvent:!1})})},NgForm.prototype.getControl=function(t){return this.form.get(t.path)},NgForm.prototype.removeControl=function(t){var e=this;X.then(function(){var n=e._findContainer(t.path);n&&n.removeControl(t.name)})},NgForm.prototype.addFormGroup=function(t){var e=this;X.then(function(){var n=e._findContainer(t.path),r=new K({});setUpFormContainer(r,t),n.registerControl(t.name,r),r.updateValueAndValidity({emitEvent:!1})})},NgForm.prototype.removeFormGroup=function(t){var e=this;X.then(function(){var n=e._findContainer(t.path);n&&n.removeControl(t.name)})},NgForm.prototype.getFormGroup=function(t){return this.form.get(t.path)},NgForm.prototype.updateModel=function(t,e){var n=this;X.then(function(){n.form.get(t.path).setValue(e)})},NgForm.prototype.setValue=function(t){this.control.setValue(t)},NgForm.prototype.onSubmit=function(t){return this._submitted=!0,this.ngSubmit.emit(t),!1},NgForm.prototype.onReset=function(){this.resetForm()},NgForm.prototype.resetForm=function(t){void 0===t&&(t=void 0),this.form.reset(t),this._submitted=!1},NgForm.prototype._findContainer=function(t){return t.pop(),t.length?this.form.get(t):this.form},NgForm}(c);$.decorators=[{type:o.Directive,args:[{selector:"form:not([ngNoForm]):not([formGroup]),ngForm,[ngForm]",providers:[Q],host:{"(submit)":"onSubmit($event)","(reset)":"onReset()"},outputs:["ngSubmit"],exportAs:"ngForm"}]}],$.ctorParameters=function(){return[{type:Array,decorators:[{type:o.Optional},{type:o.Self},{type:o.Inject,args:[p]}]},{type:Array,decorators:[{type:o.Optional},{type:o.Self},{type:o.Inject,args:[d]}]}]};/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var Y={formControlName:'\n
\n \n
\n\n In your class:\n\n this.myGroup = new FormGroup({\n firstName: new FormControl()\n });',formGroupName:'\n
\n
\n \n
\n
\n\n In your class:\n\n this.myGroup = new FormGroup({\n person: new FormGroup({ firstName: new FormControl() })\n });',formArrayName:'\n
\n
\n
\n \n
\n
\n
\n\n In your class:\n\n this.cityArray = new FormArray([new FormControl(\'SF\')]);\n this.myGroup = new FormGroup({\n cities: this.cityArray\n });',ngModelGroup:'\n
\n
\n \n
\n
',ngModelWithFormGroup:'\n
\n \n \n
\n '},Z=function(){function TemplateDrivenErrors(){}return TemplateDrivenErrors.modelParentException=function(){throw new Error('\n ngModel cannot be used to register form controls with a parent formGroup directive. Try using\n formGroup\'s partner directive "formControlName" instead. Example:\n\n '+Y.formControlName+"\n\n Or, if you'd like to avoid registering this form control, indicate that it's standalone in ngModelOptions:\n\n Example:\n\n "+Y.ngModelWithFormGroup)},TemplateDrivenErrors.formGroupNameException=function(){throw new Error("\n ngModel cannot be used to register form controls with a parent formGroupName or formArrayName directive.\n\n Option 1: Use formControlName instead of ngModel (reactive strategy):\n\n "+Y.formGroupName+"\n\n Option 2: Update ngModel's parent be ngModelGroup (template-driven strategy):\n\n "+Y.ngModelGroup)},TemplateDrivenErrors.missingNameException=function(){throw new Error('If ngModel is used within a form tag, either the name attribute must be set or the form\n control must be defined as \'standalone\' in ngModelOptions.\n\n Example 1: \n Example 2: ')},TemplateDrivenErrors.modelGroupParentException=function(){throw new Error("\n ngModelGroup cannot be used with a parent formGroup directive.\n\n Option 1: Use formGroupName instead of ngModelGroup (reactive strategy):\n\n "+Y.formGroupName+"\n\n Option 2: Use a regular form tag instead of the formGroup directive (template-driven strategy):\n\n "+Y.ngModelGroup)},TemplateDrivenErrors}(),tt={provide:c,useExisting:n.i(o.forwardRef)(function(){return et})},et=function(t){function NgModelGroup(e,n,r){var o=t.call(this)||this;return o._parent=e,o._validators=n,o._asyncValidators=r,o}return r.a(NgModelGroup,t),NgModelGroup.prototype._checkParentType=function(){this._parent instanceof NgModelGroup||this._parent instanceof $||Z.modelGroupParentException()},NgModelGroup}(k);et.decorators=[{type:o.Directive,args:[{selector:"[ngModelGroup]",providers:[tt],exportAs:"ngModelGroup"}]}],et.ctorParameters=function(){return[{type:c,decorators:[{type:o.Host},{type:o.SkipSelf}]},{type:Array,decorators:[{type:o.Optional},{type:o.Self},{type:o.Inject,args:[p]}]},{type:Array,decorators:[{type:o.Optional},{type:o.Self},{type:o.Inject,args:[d]}]}]},et.propDecorators={name:[{type:o.Input,args:["ngModelGroup"]}]};/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var nt={provide:A,useExisting:n.i(o.forwardRef)(function(){return ot})},rt=Promise.resolve(null),ot=function(t){function NgModel(e,n,r,i){var s=t.call(this)||this;return s._control=new W,s._registered=!1,s.update=new o.EventEmitter,s._parent=e,s._rawValidators=n||[],s._rawAsyncValidators=r||[],s.valueAccessor=selectValueAccessor(s,i),s}return r.a(NgModel,t),NgModel.prototype.ngOnChanges=function(t){this._checkForErrors(),this._registered||this._setUpControl(),"isDisabled"in t&&this._updateDisabled(t),isPropertyUpdated(t,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)},NgModel.prototype.ngOnDestroy=function(){this.formDirective&&this.formDirective.removeControl(this)},Object.defineProperty(NgModel.prototype,"control",{get:function(){return this._control},enumerable:!0,configurable:!0}),Object.defineProperty(NgModel.prototype,"path",{get:function(){return this._parent?controlPath(this.name,this._parent):[this.name]},enumerable:!0,configurable:!0}),Object.defineProperty(NgModel.prototype,"formDirective",{get:function(){return this._parent?this._parent.formDirective:null},enumerable:!0,configurable:!0}),Object.defineProperty(NgModel.prototype,"validator",{get:function(){return composeValidators(this._rawValidators)},enumerable:!0,configurable:!0}),Object.defineProperty(NgModel.prototype,"asyncValidator",{get:function(){return composeAsyncValidators(this._rawAsyncValidators)},enumerable:!0,configurable:!0}),NgModel.prototype.viewToModelUpdate=function(t){this.viewModel=t,this.update.emit(t)},NgModel.prototype._setUpControl=function(){this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0},NgModel.prototype._isStandalone=function(){return!this._parent||!(!this.options||!this.options.standalone)},NgModel.prototype._setUpStandalone=function(){setUpControl(this._control,this),this._control.updateValueAndValidity({emitEvent:!1})},NgModel.prototype._checkForErrors=function(){this._isStandalone()||this._checkParentType(),this._checkName()},NgModel.prototype._checkParentType=function(){!(this._parent instanceof et)&&this._parent instanceof k?Z.formGroupNameException():this._parent instanceof et||this._parent instanceof $||Z.modelParentException()},NgModel.prototype._checkName=function(){this.options&&this.options.name&&(this.name=this.options.name),this._isStandalone()||this.name||Z.missingNameException()},NgModel.prototype._updateValue=function(t){var e=this;rt.then(function(){e.control.setValue(t,{emitViewToModelChange:!1})})},NgModel.prototype._updateDisabled=function(t){var e=this,n=t.isDisabled.currentValue,r=""===n||n&&"false"!==n;rt.then(function(){r&&!e.control.disabled?e.control.disable():!r&&e.control.disabled&&e.control.enable()})},NgModel}(A);ot.decorators=[{type:o.Directive,args:[{selector:"[ngModel]:not([formControlName]):not([formControl])",providers:[nt],exportAs:"ngModel"}]}],ot.ctorParameters=function(){return[{type:c,decorators:[{type:o.Optional},{type:o.Host}]},{type:Array,decorators:[{type:o.Optional},{type:o.Self},{type:o.Inject,args:[p]}]},{type:Array,decorators:[{type:o.Optional},{type:o.Self},{type:o.Inject,args:[d]}]},{type:Array,decorators:[{type:o.Optional},{type:o.Self},{type:o.Inject,args:[f]}]}]},ot.propDecorators={name:[{type:o.Input}],isDisabled:[{type:o.Input,args:["disabled"]}],model:[{type:o.Input,args:["ngModel"]}],options:[{type:o.Input,args:["ngModelOptions"]}],update:[{type:o.Output,args:["ngModelChange"]}]};/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var it=function(){function ReactiveErrors(){}return ReactiveErrors.controlParentException=function(){throw new Error("formControlName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n "+Y.formControlName)},ReactiveErrors.ngModelGroupException=function(){throw new Error('formControlName cannot be used with an ngModelGroup parent. It is only compatible with parents\n that also have a "form" prefix: formGroupName, formArrayName, or formGroup.\n\n Option 1: Update the parent to be formGroupName (reactive form strategy)\n\n '+Y.formGroupName+"\n\n Option 2: Use ngModel instead of formControlName (template-driven strategy)\n\n "+Y.ngModelGroup)},ReactiveErrors.missingFormException=function(){throw new Error("formGroup expects a FormGroup instance. Please pass one in.\n\n Example:\n\n "+Y.formControlName)},ReactiveErrors.groupParentException=function(){throw new Error("formGroupName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n "+Y.formGroupName)},ReactiveErrors.arrayParentException=function(){throw new Error("formArrayName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n "+Y.formArrayName)},ReactiveErrors.disabledAttrWarning=function(){console.warn("\n It looks like you're using the disabled attribute with a reactive form directive. If you set disabled to true\n when you set up this control in your component class, the disabled attribute will actually be set in the DOM for\n you. We recommend using this approach to avoid 'changed after checked' errors.\n \n Example: \n form = new FormGroup({\n first: new FormControl({value: 'Nancy', disabled: true}, Validators.required),\n last: new FormControl('Drew', Validators.required)\n });\n ")},ReactiveErrors}(),st={provide:A,useExisting:n.i(o.forwardRef)(function(){return at})},at=function(t){function FormControlDirective(e,n,r){var i=t.call(this)||this;return i.update=new o.EventEmitter,i._rawValidators=e||[],i._rawAsyncValidators=n||[],i.valueAccessor=selectValueAccessor(i,r),i}return r.a(FormControlDirective,t),Object.defineProperty(FormControlDirective.prototype,"isDisabled",{set:function(t){it.disabledAttrWarning()},enumerable:!0,configurable:!0}),FormControlDirective.prototype.ngOnChanges=function(t){this._isControlChanged(t)&&(setUpControl(this.form,this),this.control.disabled&&this.valueAccessor.setDisabledState&&this.valueAccessor.setDisabledState(!0),this.form.updateValueAndValidity({emitEvent:!1})),isPropertyUpdated(t,this.viewModel)&&(this.form.setValue(this.model),this.viewModel=this.model)},Object.defineProperty(FormControlDirective.prototype,"path",{get:function(){return[]},enumerable:!0,configurable:!0}),Object.defineProperty(FormControlDirective.prototype,"validator",{get:function(){return composeValidators(this._rawValidators)},enumerable:!0,configurable:!0}),Object.defineProperty(FormControlDirective.prototype,"asyncValidator",{get:function(){return composeAsyncValidators(this._rawAsyncValidators)},enumerable:!0,configurable:!0}),Object.defineProperty(FormControlDirective.prototype,"control",{get:function(){return this.form},enumerable:!0,configurable:!0}),FormControlDirective.prototype.viewToModelUpdate=function(t){this.viewModel=t,this.update.emit(t)},FormControlDirective.prototype._isControlChanged=function(t){return t.hasOwnProperty("form")},FormControlDirective}(A);at.decorators=[{type:o.Directive,args:[{selector:"[formControl]",providers:[st],exportAs:"ngForm"}]}],at.ctorParameters=function(){return[{type:Array,decorators:[{type:o.Optional},{type:o.Self},{type:o.Inject,args:[p]}]},{type:Array,decorators:[{type:o.Optional},{type:o.Self},{type:o.Inject,args:[d]}]},{type:Array,decorators:[{type:o.Optional},{type:o.Self},{type:o.Inject,args:[f]}]}]},at.propDecorators={form:[{type:o.Input,args:["formControl"]}],model:[{type:o.Input,args:["ngModel"]}],update:[{type:o.Output,args:["ngModelChange"]}],isDisabled:[{type:o.Input,args:["disabled"]}]};/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var ut={provide:c,useExisting:n.i(o.forwardRef)(function(){return lt})},lt=function(t){function FormGroupDirective(e,n){var r=t.call(this)||this;return r._validators=e,r._asyncValidators=n,r._submitted=!1,r.directives=[],r.form=null,r.ngSubmit=new o.EventEmitter,r}return r.a(FormGroupDirective,t),FormGroupDirective.prototype.ngOnChanges=function(t){this._checkFormPresent(),t.hasOwnProperty("form")&&(this._updateValidators(),this._updateDomValue(),this._updateRegistrations())},Object.defineProperty(FormGroupDirective.prototype,"submitted",{get:function(){return this._submitted},enumerable:!0,configurable:!0}),Object.defineProperty(FormGroupDirective.prototype,"formDirective",{get:function(){return this},enumerable:!0,configurable:!0}),Object.defineProperty(FormGroupDirective.prototype,"control",{get:function(){return this.form},enumerable:!0,configurable:!0}),Object.defineProperty(FormGroupDirective.prototype,"path",{get:function(){return[]},enumerable:!0,configurable:!0}),FormGroupDirective.prototype.addControl=function(t){var e=this.form.get(t.path);return setUpControl(e,t),e.updateValueAndValidity({emitEvent:!1}),this.directives.push(t),e},FormGroupDirective.prototype.getControl=function(t){return this.form.get(t.path)},FormGroupDirective.prototype.removeControl=function(t){remove(this.directives,t)},FormGroupDirective.prototype.addFormGroup=function(t){var e=this.form.get(t.path);setUpFormContainer(e,t),e.updateValueAndValidity({emitEvent:!1})},FormGroupDirective.prototype.removeFormGroup=function(t){},FormGroupDirective.prototype.getFormGroup=function(t){return this.form.get(t.path)},FormGroupDirective.prototype.addFormArray=function(t){var e=this.form.get(t.path);setUpFormContainer(e,t),e.updateValueAndValidity({emitEvent:!1})},FormGroupDirective.prototype.removeFormArray=function(t){},FormGroupDirective.prototype.getFormArray=function(t){return this.form.get(t.path)},FormGroupDirective.prototype.updateModel=function(t,e){this.form.get(t.path).setValue(e)},FormGroupDirective.prototype.onSubmit=function(t){return this._submitted=!0,this.ngSubmit.emit(t),!1},FormGroupDirective.prototype.onReset=function(){this.resetForm()},FormGroupDirective.prototype.resetForm=function(t){void 0===t&&(t=void 0),this.form.reset(t),this._submitted=!1},FormGroupDirective.prototype._updateDomValue=function(){var t=this;this.directives.forEach(function(e){var n=t.form.get(e.path);e._control!==n&&(cleanUpControl(e._control,e),n&&setUpControl(n,e),e._control=n)}),this.form._updateTreeValidity({emitEvent:!1})},FormGroupDirective.prototype._updateRegistrations=function(){var t=this;this.form._registerOnCollectionChange(function(){return t._updateDomValue()}),this._oldForm&&this._oldForm._registerOnCollectionChange(function(){}),this._oldForm=this.form},FormGroupDirective.prototype._updateValidators=function(){var t=composeValidators(this._validators);this.form.validator=m.compose([this.form.validator,t]);var e=composeAsyncValidators(this._asyncValidators);this.form.asyncValidator=m.composeAsync([this.form.asyncValidator,e])},FormGroupDirective.prototype._checkFormPresent=function(){this.form||it.missingFormException()},FormGroupDirective}(c);lt.decorators=[{type:o.Directive,args:[{selector:"[formGroup]",providers:[ut],host:{"(submit)":"onSubmit($event)","(reset)":"onReset()"},exportAs:"ngForm"}]}],lt.ctorParameters=function(){return[{type:Array,decorators:[{type:o.Optional},{type:o.Self},{type:o.Inject,args:[p]}]},{type:Array,decorators:[{type:o.Optional},{type:o.Self},{type:o.Inject,args:[d]}]}]},lt.propDecorators={form:[{type:o.Input,args:["formGroup"]}],ngSubmit:[{type:o.Output}]};/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var ct={provide:c,useExisting:n.i(o.forwardRef)(function(){return pt})},pt=function(t){function FormGroupName(e,n,r){var o=t.call(this)||this;return o._parent=e,o._validators=n,o._asyncValidators=r,o}return r.a(FormGroupName,t),FormGroupName.prototype._checkParentType=function(){_hasInvalidParent(this._parent)&&it.groupParentException()},FormGroupName}(k);pt.decorators=[{type:o.Directive,args:[{selector:"[formGroupName]",providers:[ct]}]}],pt.ctorParameters=function(){return[{type:c,decorators:[{type:o.Optional},{type:o.Host},{type:o.SkipSelf}]},{type:Array,decorators:[{type:o.Optional},{type:o.Self},{type:o.Inject,args:[p]}]},{type:Array,decorators:[{type:o.Optional},{type:o.Self},{type:o.Inject,args:[d]}]}]},pt.propDecorators={name:[{type:o.Input,args:["formGroupName"]}]};var dt={provide:c,useExisting:n.i(o.forwardRef)(function(){return ht})},ht=function(t){function FormArrayName(e,n,r){var o=t.call(this)||this;return o._parent=e,o._validators=n,o._asyncValidators=r,o}return r.a(FormArrayName,t),FormArrayName.prototype.ngOnInit=function(){this._checkParentType(),this.formDirective.addFormArray(this)},FormArrayName.prototype.ngOnDestroy=function(){this.formDirective&&this.formDirective.removeFormArray(this)},Object.defineProperty(FormArrayName.prototype,"control",{get:function(){return this.formDirective.getFormArray(this)},enumerable:!0,configurable:!0}),Object.defineProperty(FormArrayName.prototype,"formDirective",{get:function(){return this._parent?this._parent.formDirective:null},enumerable:!0,configurable:!0}),Object.defineProperty(FormArrayName.prototype,"path",{get:function(){return controlPath(this.name,this._parent)},enumerable:!0,configurable:!0}),Object.defineProperty(FormArrayName.prototype,"validator",{get:function(){return composeValidators(this._validators)},enumerable:!0,configurable:!0}),Object.defineProperty(FormArrayName.prototype,"asyncValidator",{get:function(){return composeAsyncValidators(this._asyncValidators)},enumerable:!0,configurable:!0}),FormArrayName.prototype._checkParentType=function(){_hasInvalidParent(this._parent)&&it.arrayParentException()},FormArrayName}(c);ht.decorators=[{type:o.Directive,args:[{selector:"[formArrayName]",providers:[dt]}]}],ht.ctorParameters=function(){return[{type:c,decorators:[{type:o.Optional},{type:o.Host},{type:o.SkipSelf}]},{type:Array,decorators:[{type:o.Optional},{type:o.Self},{type:o.Inject,args:[p]}]},{type:Array,decorators:[{type:o.Optional},{type:o.Self},{type:o.Inject,args:[d]}]}]},ht.propDecorators={name:[{type:o.Input,args:["formArrayName"]}]};/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var mt={provide:A,useExisting:n.i(o.forwardRef)(function(){return ft})},ft=function(t){function FormControlName(e,n,r,i){var s=t.call(this)||this;return s._added=!1,s.update=new o.EventEmitter,s._parent=e,s._rawValidators=n||[],s._rawAsyncValidators=r||[],s.valueAccessor=selectValueAccessor(s,i),s}return r.a(FormControlName,t),Object.defineProperty(FormControlName.prototype,"isDisabled",{set:function(t){it.disabledAttrWarning()},enumerable:!0,configurable:!0}),FormControlName.prototype.ngOnChanges=function(t){this._added||this._setUpControl(),isPropertyUpdated(t,this.viewModel)&&(this.viewModel=this.model,this.formDirective.updateModel(this,this.model))},FormControlName.prototype.ngOnDestroy=function(){this.formDirective&&this.formDirective.removeControl(this)},FormControlName.prototype.viewToModelUpdate=function(t){this.viewModel=t,this.update.emit(t)},Object.defineProperty(FormControlName.prototype,"path",{get:function(){return controlPath(this.name,this._parent)},enumerable:!0,configurable:!0}),Object.defineProperty(FormControlName.prototype,"formDirective",{get:function(){return this._parent?this._parent.formDirective:null},enumerable:!0,configurable:!0}),Object.defineProperty(FormControlName.prototype,"validator",{get:function(){return composeValidators(this._rawValidators)},enumerable:!0,configurable:!0}),Object.defineProperty(FormControlName.prototype,"asyncValidator",{get:function(){return composeAsyncValidators(this._rawAsyncValidators)},enumerable:!0,configurable:!0}),Object.defineProperty(FormControlName.prototype,"control",{get:function(){return this._control},enumerable:!0,configurable:!0}),FormControlName.prototype._checkParentType=function(){!(this._parent instanceof pt)&&this._parent instanceof k?it.ngModelGroupException():this._parent instanceof pt||this._parent instanceof lt||this._parent instanceof ht||it.controlParentException()},FormControlName.prototype._setUpControl=function(){this._checkParentType(),this._control=this.formDirective.addControl(this),this.control.disabled&&this.valueAccessor.setDisabledState&&this.valueAccessor.setDisabledState(!0),this._added=!0},FormControlName}(A);ft.decorators=[{type:o.Directive,args:[{selector:"[formControlName]",providers:[mt]}]}],ft.ctorParameters=function(){return[{type:c,decorators:[{type:o.Optional},{type:o.Host},{type:o.SkipSelf}]},{type:Array,decorators:[{type:o.Optional},{type:o.Self},{type:o.Inject,args:[p]}]},{type:Array,decorators:[{type:o.Optional},{type:o.Self},{type:o.Inject,args:[d]}]},{type:Array,decorators:[{type:o.Optional},{type:o.Self},{type:o.Inject,args:[f]}]}]},ft.propDecorators={name:[{type:o.Input,args:["formControlName"]}],model:[{type:o.Input,args:["ngModel"]}],update:[{type:o.Output,args:["ngModelChange"]}],isDisabled:[{type:o.Input,args:["disabled"]}]};/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var yt={provide:p,useExisting:n.i(o.forwardRef)(function(){return vt}),multi:!0},gt={provide:p,useExisting:n.i(o.forwardRef)(function(){return bt}),multi:!0},vt=function(){function RequiredValidator(){}return Object.defineProperty(RequiredValidator.prototype,"required",{get:function(){return this._required},set:function(t){this._required=null!=t&&!1!==t&&""+t!="false",this._onChange&&this._onChange()},enumerable:!0,configurable:!0}),RequiredValidator.prototype.validate=function(t){return this.required?m.required(t):null},RequiredValidator.prototype.registerOnValidatorChange=function(t){this._onChange=t},RequiredValidator}();vt.decorators=[{type:o.Directive,args:[{selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",providers:[yt],host:{"[attr.required]":'required ? "" : null'}}]}],vt.ctorParameters=function(){return[]},vt.propDecorators={required:[{type:o.Input}]};var bt=function(t){function CheckboxRequiredValidator(){return null!==t&&t.apply(this,arguments)||this}return r.a(CheckboxRequiredValidator,t),CheckboxRequiredValidator.prototype.validate=function(t){return this.required?m.requiredTrue(t):null},CheckboxRequiredValidator}(vt);bt.decorators=[{type:o.Directive,args:[{selector:"input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]",providers:[gt],host:{"[attr.required]":'required ? "" : null'}}]}],bt.ctorParameters=function(){return[]};var _t={provide:p,useExisting:n.i(o.forwardRef)(function(){return Ct}),multi:!0},Ct=function(){function EmailValidator(){}return Object.defineProperty(EmailValidator.prototype,"email",{set:function(t){this._enabled=""===t||!0===t||"true"===t,this._onChange&&this._onChange()},enumerable:!0,configurable:!0}),EmailValidator.prototype.validate=function(t){return this._enabled?m.email(t):null},EmailValidator.prototype.registerOnValidatorChange=function(t){this._onChange=t},EmailValidator}();Ct.decorators=[{type:o.Directive,args:[{selector:"[email][formControlName],[email][formControl],[email][ngModel]",providers:[_t]}]}],Ct.ctorParameters=function(){return[]},Ct.propDecorators={email:[{type:o.Input}]};var St={provide:p,useExisting:n.i(o.forwardRef)(function(){return At}),multi:!0},At=function(){function MinLengthValidator(){}return MinLengthValidator.prototype.ngOnChanges=function(t){"minlength"in t&&(this._createValidator(),this._onChange&&this._onChange())},MinLengthValidator.prototype.validate=function(t){return null==this.minlength?null:this._validator(t)},MinLengthValidator.prototype.registerOnValidatorChange=function(t){this._onChange=t},MinLengthValidator.prototype._createValidator=function(){this._validator=m.minLength(parseInt(this.minlength,10))},MinLengthValidator}();At.decorators=[{type:o.Directive,args:[{selector:"[minlength][formControlName],[minlength][formControl],[minlength][ngModel]",providers:[St],host:{"[attr.minlength]":"minlength ? minlength : null"}}]}],At.ctorParameters=function(){return[]},At.propDecorators={minlength:[{type:o.Input}]};var Tt={provide:p,useExisting:n.i(o.forwardRef)(function(){return Et}),multi:!0},Et=function(){function MaxLengthValidator(){}return MaxLengthValidator.prototype.ngOnChanges=function(t){"maxlength"in t&&(this._createValidator(),this._onChange&&this._onChange())},MaxLengthValidator.prototype.validate=function(t){return null!=this.maxlength?this._validator(t):null},MaxLengthValidator.prototype.registerOnValidatorChange=function(t){this._onChange=t},MaxLengthValidator.prototype._createValidator=function(){this._validator=m.maxLength(parseInt(this.maxlength,10))},MaxLengthValidator}();Et.decorators=[{type:o.Directive,args:[{selector:"[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]",providers:[Tt],host:{"[attr.maxlength]":"maxlength ? maxlength : null"}}]}],Et.ctorParameters=function(){return[]},Et.propDecorators={maxlength:[{type:o.Input}]};var Pt={provide:p,useExisting:n.i(o.forwardRef)(function(){return wt}),multi:!0},wt=function(){function PatternValidator(){}return PatternValidator.prototype.ngOnChanges=function(t){"pattern"in t&&(this._createValidator(),this._onChange&&this._onChange())},PatternValidator.prototype.validate=function(t){return this._validator(t)},PatternValidator.prototype.registerOnValidatorChange=function(t){this._onChange=t},PatternValidator.prototype._createValidator=function(){this._validator=m.pattern(this.pattern)},PatternValidator}();wt.decorators=[{type:o.Directive,args:[{selector:"[pattern][formControlName],[pattern][formControl],[pattern][ngModel]",providers:[Pt],host:{"[attr.pattern]":"pattern ? pattern : null"}}]}],wt.ctorParameters=function(){return[]},wt.propDecorators={pattern:[{type:o.Input}]};/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var xt=function(){function FormBuilder(){}return FormBuilder.prototype.group=function(t,e){void 0===e&&(e=null);var n=this._reduceControls(t),r=null!=e?e.validator:null,o=null!=e?e.asyncValidator:null;return new K(n,r,o)},FormBuilder.prototype.control=function(t,e,n){return new W(t,e,n)},FormBuilder.prototype.array=function(t,e,n){var r=this,o=t.map(function(t){return r._createControl(t)});return new J(o,e,n)},FormBuilder.prototype._reduceControls=function(t){var e=this,n={};return Object.keys(t).forEach(function(r){n[r]=e._createControl(t[r])}),n},FormBuilder.prototype._createControl=function(t){if(t instanceof W||t instanceof K||t instanceof J)return t;if(Array.isArray(t)){var e=t[0],n=t.length>1?t[1]:null,r=t.length>2?t[2]:null;return this.control(e,n,r)}return this.control(t)},FormBuilder}();xt.decorators=[{type:o.Injectable}],xt.ctorParameters=function(){return[]};/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var Ot=new o.Version("4.4.6"),Mt=function(){function NgNoValidate(){}return NgNoValidate}();Mt.decorators=[{type:o.Directive,args:[{selector:"form:not([ngNoForm]):not([ngNativeValidate])",host:{novalidate:""}}]}],Mt.ctorParameters=function(){return[]};/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var Nt=[Mt,N,I,_,S,x,g,M,V,P,H,B,vt,At,Et,wt,bt,Ct],Ft=[ot,et,$],Vt=[at,lt,ft,pt,ht],It=function(){function InternalFormsSharedModule(){}return InternalFormsSharedModule}();It.decorators=[{type:o.NgModule,args:[{declarations:Nt,exports:Nt}]}],It.ctorParameters=function(){return[]};/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var Dt=function(){function FormsModule(){}return FormsModule}();Dt.decorators=[{type:o.NgModule,args:[{declarations:Ft,providers:[E],exports:[It,Ft]}]}],Dt.ctorParameters=function(){return[]};var kt=function(){function ReactiveFormsModule(){}return ReactiveFormsModule}();kt.decorators=[{type:o.NgModule,args:[{declarations:[Vt],providers:[xt,E],exports:[It,Vt]}]}],kt.ctorParameters=function(){return[]}},104:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=0;!function(t){t[t.error=0]="error",t[t.warn=1]="warn"}(e.FlashMessageType||(e.FlashMessageType={}));var o=function(){function FlashMessage(t,e,n){this.content=t,this.tooltip=e,this.type=n,this.id=r++,this.isDismissed=!1,this.hasTooltip=Boolean(e),this.showTooltip=!1}return FlashMessage}();e.FlashMessage=o},105:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(19),o=n(2),i=n(103),s=n(28),a=n(70),u=n(260),l=function(){function PlugsModule(){}return PlugsModule=__decorate([o.NgModule({imports:[r.CommonModule,i.FormsModule,s.HttpModule,a.SharedModule],declarations:[u.UserInputPlugComponent],providers:[],exports:[r.CommonModule,s.HttpModule,u.UserInputPlugComponent]})],PlugsModule)}();e.PlugsModule=l},106:function(t,e,n){"use strict";function washAndExpandIn(t){return[r.state("in",r.style({background:"rgba(0, 119, 255, 0.0)","max-height":t+"px"})),r.transition("void => in",[r.style({background:"rgba(0, 119, 255, 0.2)","max-height":"0"}),r.animate(500)])]}Object.defineProperty(e,"__esModule",{value:!0});var r=n(33);e.washIn=[r.state("in",r.style({background:"rgba(0, 119, 255, 0.0)"})),r.transition("void => in",[r.style({background:"rgba(0, 119, 255, 0.1)"}),r.animate(1e3)])],e.washAndExpandIn=washAndExpandIn},107:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),o=function(){function ProgressBarComponent(){this.isReset=!1}return Object.defineProperty(ProgressBarComponent.prototype,"barStyle",{get:function(){return this.isReset?(this.isReset=!1,{width:"0",transition:"none"}):{width:100*Math.max(0,Math.min(1,this.value))+"%"}},enumerable:!0,configurable:!0}),Object.defineProperty(ProgressBarComponent.prototype,"isComplete",{get:function(){return this.value>=1},enumerable:!0,configurable:!0}),ProgressBarComponent.prototype.reset=function(){this.isReset=!0},__decorate([r.Input(),__metadata("design:type",Number)],ProgressBarComponent.prototype,"value",void 0),ProgressBarComponent=__decorate([r.Component({selector:"htf-progress-bar",template:n(299),styles:[n(287)]})],ProgressBarComponent)}();e.ProgressBarComponent=o},108:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r;!function(t){t[t.unsubscribed=0]="unsubscribed",t[t.subscribing=1]="subscribing",t[t.subscribed=2]="subscribed",t[t.failed=3]="failed",t[t.waiting=4]="waiting"}(r||(r={}));var o=n(9),i=function(){function Subscription(t){this.sockJsService=t,this.messages=new o.Subject,this.retryTimeMs=null,this.currentRetryMs=null,this.retryTimeoutId=null,this.sock=null,this.state=r.unsubscribed,this.url=null,this.retryMs=null,this.retryBackoff=null,this.retryMax=null}return Object.defineProperty(Subscription.prototype,"hasError",{get:function(){return this.state===r.failed||this.state===r.waiting},enumerable:!0,configurable:!0}),Object.defineProperty(Subscription.prototype,"isSubscribing",{get:function(){return this.state===r.subscribing},enumerable:!0,configurable:!0}),Subscription.prototype.refresh=function(){if(this.state===r.unsubscribed)throw new Error("Cannot refresh subscription from state `unsubscribed`.");this.state!==r.subscribing&&(this.unsubscribe(),this.subscribeWithSavedParams())},Subscription.prototype.retryNow=function(){if(this.state!==r.waiting)throw new Error("Subscription cannot retryNow when state != `waiting`.");this.cancelTimeout(),this.subscribeWithSavedParams()},Subscription.prototype.subscribeToUrl=function(t,e,n,r){void 0===e&&(e=null),void 0===n&&(n=1),void 0===r&&(r=Number.MAX_VALUE),null!==this.sock&&this.unsubscribe(),this.url=t,this.retryMs=e,this.retryBackoff=n,this.retryMax=r,this.subscribeWithSavedParams()},Subscription.prototype.unsubscribe=function(){null!==this.sock&&(console.debug("Unsubscribing from "+this.url+"."),this.cancelTimeout(),this.sock.close(),this.currentRetryMs=null,this.state=r.unsubscribed)},Subscription.prototype.cancelTimeout=function(){null!==this.retryTimeoutId&&(clearTimeout(this.retryTimeoutId),this.retryTimeoutId=null)},Subscription.prototype.subscribeWithSavedParams=function(){var t=this;console.debug("Attempting to subscribe to "+this.url+".");var e=new this.sockJsService.sockJs(this.url);e.onopen=function(){t.sock===e&&(console.debug("Subscribed to "+t.url+"."),t.currentRetryMs=null,t.state=r.subscribed)},e.onclose=function(){t.sock===e&&(t.state===r.subscribed?console.debug("Subscription to "+t.url+" lost."):console.debug("Subscription to "+t.url+" failed."),null===t.retryMs?t.state=r.failed:(t.state=r.waiting,null===t.currentRetryMs?t.currentRetryMs=t.retryMs:t.currentRetryMs*=t.retryBackoff,t.currentRetryMs=Math.max(t.currentRetryMs,t.retryMax),t.retryTimeMs=Date.now()+t.currentRetryMs,t.retryTimeoutId=setTimeout(function(){t.subscribeWithSavedParams()},t.currentRetryMs)))},e.onmessage=function(n){t.sock===e&&t.messages.next(n)},this.sock=e,this.state=r.subscribing},Subscription}();e.Subscription=i},109:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),o=n(34),i=n(71),s=n(108),a=n(24),u=a.devHost+"/sub/dashboard",l={UNREACHABLE:o.StationStatus.unreachable,ONLINE:o.StationStatus.online},c=function(t){function DashboardService(n){var r=t.call(this,n)||this;return r.stations={},r.messages.subscribe(function(t){var n=e.validateResponse(t.data),o=e.parseResponse(n);r.applyResponse(o)}),r}return __extends(DashboardService,t),e=DashboardService,DashboardService.prototype.subscribe=function(e,n,r){void 0===e&&(e=null),void 0===n&&(n=1),void 0===r&&(r=Number.MAX_VALUE),t.prototype.subscribeToUrl.call(this,u,e,n,r)},DashboardService.validateResponse=function(t){return t},DashboardService.parseResponse=function(t){for(var n={},r=0,i=Object.keys(t);r=0&&-1===o;){for(var i=t.phases[r],s=0,a=e;s1?(console.error("Unrecognized phase descriptor ID.",t.phases,e),t):((c=t.phases).splice.apply(c,[r+2,0].concat(e.slice(o+1))),t);var l,c}).catch(function(){return i.Observable.of(t)})},StationService.prototype.getOrRequestPhaseDescriptors=function(t){var e=this;if(!(t.testId in this.phaseDescriptorPromise)){var n=p.getTestBaseUrl(this.config.dashboardEnabled,t),r=n+"/phases";this.phaseDescriptorPromise[t.testId]=this.http.get(r).toPromise().then(function(t){return t.json().data.map(h.makePhaseFromDescriptor)}).catch(function(t){var n=p.messageFromErrorResponse(t);return e.flashMessage.error("HTTP request for phase descriptors failed.",n),Promise.reject(t)})}return i.Observable.fromPromise(this.phaseDescriptorPromise[t.testId])},StationService.prototype.applyResponse=function(t,e){if(t.testId in this.testsById){var n=this.testsById[t.testId];n.status!==t.status&&(t.status===u.TestStatus.error?this.flashMessage.error("The test exited early due to an error. View the test logs for details."):t.status===u.TestStatus.timeout?this.flashMessage.warn("The test exited early due to timeout."):t.status===u.TestStatus.aborted&&this.flashMessage.warn("The test was aborted.")),Object.assign(n,t)}else this.testsById[t.testId]=t,this.testsByStation[e.hostPort]=t},StationService=e=__decorate([r.Injectable(),__metadata("design:paramtypes",[s.ConfigService,a.FlashMessageService,d.HistoryService,o.Http,l.SockJsService])],StationService);var e}(c.Subscription);e.StationService=m},20:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});!function(t){t[t.waiting=9]="waiting",t[t.running=10]="running",t[t.pass=11]="pass",t[t.fail=12]="fail",t[t.error=13]="error",t[t.timeout=14]="timeout",t[t.aborted=15]="aborted"}(e.TestStatus||(e.TestStatus={}));var r=function(){function PlugDescriptor(){}return PlugDescriptor}();e.PlugDescriptor=r;var o=function(){function TestState(t){Object.assign(this,t)}return TestState}();e.TestState=o},23:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),o="dashboard",i={server_type:o,history_from_disk_enabled:!1},s=function(){function ConfigService(){this.config=i}return ConfigService.prototype.initialize=function(t){var e=Object.keys(t).filter(function(t){return!(t in i)});if(e.length>0){console.warn("Received unknown config keys",e);for(var n=0,r=e;nn[e]?1:t[e])\s*(\*|[-\w]+)$/);if(null==r||r.length<4)return n.push('The provided transition expression "'+t+'" is not supported'),e;var o=r[1],i=r[2],s=r[3];e.push(makeLambdaFromStates(o,s));var a=o==x&&s==x;"<"!=i[0]||a||e.push(makeLambdaFromStates(s,o))}function parseAnimationAlias(t,e){switch(t){case":enter":return"void => *";case":leave":return"* => void";default:return e.push('The transition alias value "'+t+'" is not supported'),"* => *"}}function makeLambdaFromStates(t,e){var n=O.has(t)||M.has(t),r=O.has(e)||M.has(e);return function(o,i){var s=t==x||t==o,a=e==x||e==i;return!s&&n&&"boolean"==typeof o&&(s=o?O.has(t):M.has(t)),!a&&r&&"boolean"==typeof i&&(a=i?O.has(e):M.has(e)),s&&a}}function buildAnimationAst(t,e){return(new j).build(t,e)}function normalizeSelector(t){var e=!!t.split(/\s*,\s*/).find(function(t){return t==N});return e&&(t=t.replace(F,"")),t=t.replace(k,_).replace(I,C).replace(/@\*/g,A).replace(/@\w+/g,function(t){return A+"-"+t.substr(1)}).replace(/:animating/g,E),[t,e]}function normalizeParams(t){return t?copyObj(t):null}function consumeOffset(t){if("string"==typeof t)return null;var e=null;if(Array.isArray(t))t.forEach(function(t){if(isObject(t)&&t.hasOwnProperty("offset")){var n=t;e=parseFloat(n.offset),delete n.offset}});else if(isObject(t)&&t.hasOwnProperty("offset")){var n=t;e=parseFloat(n.offset),delete n.offset}return e}function isObject(t){return!Array.isArray(t)&&"object"==typeof t}function constructTimingAst(t,e){var n=null;if(t.hasOwnProperty("duration"))n=t;else if("number"==typeof t){var r=resolveTiming(t,e).duration;return makeTimingAst(r,0,"")}var o=t;if(o.split(/\s+/).some(function(t){return"{"==t.charAt(0)&&"{"==t.charAt(1)})){var i=makeTimingAst(0,0,"");return i.dynamic=!0,i.strValue=o,i}return n=n||resolveTiming(o,e),makeTimingAst(n.duration,n.delay,n.easing)}function normalizeAnimationOptions(t){return t?(t=copyObj(t),t.params&&(t.params=normalizeParams(t.params))):t={},t}function makeTimingAst(t,e,n){return{duration:t,delay:e,easing:n}}/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -function createTimelineInstruction(t,e,n,r,o,i,s,a){return void 0===s&&(s=null),void 0===a&&(a=!1),{type:1,element:t,keyframes:e,preStyleProps:n,postStyleProps:r,duration:o,delay:i,totalTime:o+i,easing:s,subTimeline:a}}function buildAnimationTimelines(t,e,n,r,o,i,s,a){return void 0===r&&(r={}),void 0===o&&(o={}),void 0===a&&(a=[]),(new G).buildKeyframes(t,e,n,r,o,i,s,a)}function roundOffset(t,e){void 0===e&&(e=3);var n=Math.pow(10,e-1);return Math.round(t*n)/n}function flattenStyles(t,e){var n,r={};return t.forEach(function(t){"*"===t?(n=n||Object.keys(e),n.forEach(function(t){r[t]=o.AUTO_STYLE})):copyStyles(t,!1,r)}),r}function makeBooleanMap(t){var e={};return t.forEach(function(t){return e[t]=!0}),e}/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -function createTransitionInstruction(t,e,n,r,o,i,s,a,u,l,c,p){return{type:0,element:t,triggerName:e,isRemovalTransition:o,fromState:n,fromStyles:i,toState:r,toStyles:s,timelines:a,queriedElements:u,preStyleProps:l,postStyleProps:c,errors:p}}function oneOrMoreTransitionsMatch(t,e,n){return t.some(function(t){return t(e,n)})}/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -function buildTrigger(t,e){return new Z(t,e)}function createFallbackTransition(t,e){return new $(t,{type:1,animation:{type:2,steps:[],options:null},matchers:[function(t,e){return!0}],options:null,queryCount:0,depCount:0},e)}function balanceProperties(t,e,n){t.hasOwnProperty(e)?t.hasOwnProperty(n)||(t[n]=t[e]):t.hasOwnProperty(n)&&(t[e]=t[n])}function deleteOrUnsetInMap(t,e,n){var r;if(t instanceof Map){if(r=t.get(e)){if(r.length){var o=r.indexOf(n);r.splice(o,1)}0==r.length&&t.delete(e)}}else if(r=t[e]){if(r.length){var o=r.indexOf(n);r.splice(o,1)}0==r.length&&delete t[e]}return r}function normalizeTriggerValue(t){return null!=t?t:null}function isElementNode(t){return t&&1===t.nodeType}function isTriggerEventValid(t){return"start"==t||"done"==t}function cloakElement(t,e){var n=t.style.display;return t.style.display=null!=e?e:"none",n}function cloakAndComputeStyles(t,e,n,r){var o=[];e.forEach(function(t){return o.push(cloakElement(t))});var i=new Map,s=[];n.forEach(function(e,n){var o={};e.forEach(function(e){var i=o[e]=t.computeStyle(n,e,r);i&&0!=i.length||(n[lt]=ut,s.push(n))}),i.set(n,o)});var a=0;return e.forEach(function(t){return cloakElement(t,o[a++])}),[i,s]}function createIsRootFilterFn(t){var e,n=new Set(t),r=new Set;return e=function(t){return!t||!n.has(t.parentNode)&&(!!r.has(t.parentNode)||!!e(t.parentNode)&&(r.add(t),!0))}}function containsClass(t,e){if(t.classList)return t.classList.contains(e);var n=t[gt];return n&&n[e]}function addClass(t,e){if(t.classList)t.classList.add(e);else{var n=t[gt];n||(n=t[gt]={}),n[e]=!0}}function removeClass(t,e){if(t.classList)t.classList.remove(e);else{var n=t[gt];n&&delete n[e]}}function getBodyNode(){return"undefined"!=typeof document?document.body:null}function removeNodesAfterAnimationDone(t,e,n){optimizeGroupPlayer(n).onDone(function(){return t.processLeaveNode(e)})}function flattenGroupPlayers(t){var e=[];return _flattenGroupPlayersRecur(t,e),e}function _flattenGroupPlayersRecur(t,e){for(var n=0;n=0){r=!0;break}}}}),{type:6,styles:n,easing:i,offset:t.offset,containsDynamicStyles:r,options:null}},AnimationAstBuilderVisitor.prototype._validateStyleAst=function(t,e){var n=e.currentAnimateTimings,r=e.currentTime,o=e.currentTime;n&&o>0&&(o-=n.duration+n.delay),t.styles.forEach(function(t){"string"!=typeof t&&Object.keys(t).forEach(function(n){var i=e.collectedStyles[e.currentQuerySelector],s=i[n],a=!0;s&&(o!=r&&o>=s.startTime&&r<=s.endTime&&(e.errors.push('The CSS property "'+n+'" that exists between the times of "'+s.startTime+'ms" and "'+s.endTime+'ms" is also being animated in a parallel animation between the times of "'+o+'ms" and "'+r+'ms"'),a=!1),o=s.startTime),a&&(i[n]={startTime:o,endTime:r}),e.options&&validateStyleParams(t[n],e.options,e.errors)})})},AnimationAstBuilderVisitor.prototype.visitKeyframes=function(t,e){var n=this,r={type:5,styles:[],options:null};if(!e.currentAnimateTimings)return e.errors.push("keyframes() must be placed inside of a call to animate()"),r;var o=1,i=0,s=[],a=!1,u=!1,l=0,c=t.steps.map(function(t){var r=n._makeStyleAst(t,e),o=null!=r.offset?r.offset:consumeOffset(r.styles),c=0;return null!=o&&(i++,c=r.offset=o),u=u||c<0||c>1,a=a||c0&&i0?o==h?1:d*o:s[o],a=i*y;e.currentTime=m+f.delay+a,f.duration=a,n._validateStyleAst(t,e),t.offset=i,r.styles.push(t)}),r},AnimationAstBuilderVisitor.prototype.visitReference=function(t,e){return{type:8,animation:visitDslNode(this,normalizeAnimationEntry(t.animation),e),options:normalizeAnimationOptions(t.options)}},AnimationAstBuilderVisitor.prototype.visitAnimateChild=function(t,e){return e.depCount++,{type:9,options:normalizeAnimationOptions(t.options)}},AnimationAstBuilderVisitor.prototype.visitAnimateRef=function(t,e){return{type:10,animation:this.visitReference(t.animation,e),options:normalizeAnimationOptions(t.options)}},AnimationAstBuilderVisitor.prototype.visitQuery=function(t,e){var n=e.currentQuerySelector,r=t.options||{};e.queryCount++,e.currentQuery=t;var o=normalizeSelector(t.selector),i=o[0],s=o[1];e.currentQuerySelector=n.length?n+" "+i:i,getOrSetAsInMap(e.collectedStyles,e.currentQuerySelector,{});var a=visitDslNode(this,normalizeAnimationEntry(t.animation),e);return e.currentQuery=null,e.currentQuerySelector=n,{type:11,selector:i,limit:r.limit||0,optional:!!r.optional,includeSelf:s,animation:a,originalSelector:t.selector,options:normalizeAnimationOptions(t.options)}},AnimationAstBuilderVisitor.prototype.visitStagger=function(t,e){e.currentQuery||e.errors.push("stagger() can only be used inside of query()");var n="full"===t.timings?{duration:0,delay:0,easing:"full"}:resolveTiming(t.timings,e.errors,!0);return{type:12,animation:visitDslNode(this,normalizeAnimationEntry(t.animation),e),timings:n,options:null}},AnimationAstBuilderVisitor}(),H=function(){function AnimationAstBuilderContext(t){this.errors=t,this.queryCount=0,this.depCount=0,this.currentTransition=null,this.currentQuery=null,this.currentQuerySelector=null,this.currentAnimateTimings=null,this.currentTime=0,this.collectedStyles={},this.options=null}return AnimationAstBuilderContext}(),B=function(){function ElementInstructionMap(){this._map=new Map}return ElementInstructionMap.prototype.consume=function(t){var e=this._map.get(t);return e?this._map.delete(t):e=[],e},ElementInstructionMap.prototype.append=function(t,e){var n=this._map.get(t);n||this._map.set(t,n=[]),n.push.apply(n,e)},ElementInstructionMap.prototype.has=function(t){return this._map.has(t)},ElementInstructionMap.prototype.clear=function(){this._map.clear()},ElementInstructionMap}(),L=1,G=function(){function AnimationTimelineBuilderVisitor(){}return AnimationTimelineBuilderVisitor.prototype.buildKeyframes=function(t,e,n,r,o,i,s,a){void 0===a&&(a=[]),s=s||new B;var u=new z(t,e,s,a,[]);u.options=i,u.currentTimeline.setStyles([r],null,u.errors,i),visitDslNode(this,n,u);var l=u.timelines.filter(function(t){return t.containsAnimation()});if(l.length&&Object.keys(o).length){var c=l[l.length-1];c.allowOnlyTimelineStyles()||c.setStyles([o],null,u.errors,i)}return l.length?l.map(function(t){return t.buildKeyframes()}):[createTimelineInstruction(e,[],[],[],0,0,"",!1)]},AnimationTimelineBuilderVisitor.prototype.visitTrigger=function(t,e){},AnimationTimelineBuilderVisitor.prototype.visitState=function(t,e){},AnimationTimelineBuilderVisitor.prototype.visitTransition=function(t,e){},AnimationTimelineBuilderVisitor.prototype.visitAnimateChild=function(t,e){var n=e.subInstructions.consume(e.element);if(n){var r=e.createSubContext(t.options),o=e.currentTimeline.currentTime,i=this._visitSubInstructions(n,r,r.options);o!=i&&e.transformIntoNewTimeline(i)}e.previousNode=t},AnimationTimelineBuilderVisitor.prototype.visitAnimateRef=function(t,e){var n=e.createSubContext(t.options);n.transformIntoNewTimeline(),this.visitReference(t.animation,n),e.transformIntoNewTimeline(n.currentTimeline.currentTime),e.previousNode=t},AnimationTimelineBuilderVisitor.prototype._visitSubInstructions=function(t,e,n){var r=e.currentTimeline.currentTime,o=r,i=null!=n.duration?resolveTimingValue(n.duration):null,s=null!=n.delay?resolveTimingValue(n.delay):null;return 0!==i&&t.forEach(function(t){var n=e.appendInstructionToTimeline(t,i,s);o=Math.max(o,n.duration+n.delay)}),o},AnimationTimelineBuilderVisitor.prototype.visitReference=function(t,e){e.updateOptions(t.options,!0),visitDslNode(this,t.animation,e),e.previousNode=t},AnimationTimelineBuilderVisitor.prototype.visitSequence=function(t,e){var n=this,r=e.subContextCount,o=e,i=t.options;if(i&&(i.params||i.delay)&&(o=e.createSubContext(i),o.transformIntoNewTimeline(),null!=i.delay)){6==o.previousNode.type&&(o.currentTimeline.snapshotCurrentStyles(),o.previousNode=U);var s=resolveTimingValue(i.delay);o.delayNextStep(s)}t.steps.length&&(t.steps.forEach(function(t){return visitDslNode(n,t,o)}),o.currentTimeline.applyStylesToKeyframe(),o.subContextCount>r&&o.transformIntoNewTimeline()),e.previousNode=t},AnimationTimelineBuilderVisitor.prototype.visitGroup=function(t,e){var n=this,r=[],o=e.currentTimeline.currentTime,i=t.options&&t.options.delay?resolveTimingValue(t.options.delay):0;t.steps.forEach(function(s){var a=e.createSubContext(t.options);i&&a.delayNextStep(i),visitDslNode(n,s,a),o=Math.max(o,a.currentTimeline.currentTime),r.push(a.currentTimeline)}),r.forEach(function(t){return e.currentTimeline.mergeTimelineCollectedStyles(t)}),e.transformIntoNewTimeline(o),e.previousNode=t},AnimationTimelineBuilderVisitor.prototype._visitTiming=function(t,e){if(t.dynamic){var n=t.strValue;return resolveTiming(e.params?interpolateParams(n,e.params,e.errors):n,e.errors)}return{duration:t.duration,delay:t.delay,easing:t.easing}},AnimationTimelineBuilderVisitor.prototype.visitAnimate=function(t,e){var n=e.currentAnimateTimings=this._visitTiming(t.timings,e),r=e.currentTimeline;n.delay&&(e.incrementTime(n.delay),r.snapshotCurrentStyles());var o=t.style;5==o.type?this.visitKeyframes(o,e):(e.incrementTime(n.duration),this.visitStyle(o,e),r.applyStylesToKeyframe()),e.currentAnimateTimings=null,e.previousNode=t},AnimationTimelineBuilderVisitor.prototype.visitStyle=function(t,e){var n=e.currentTimeline,r=e.currentAnimateTimings;!r&&n.getCurrentStyleProperties().length&&n.forwardFrame();var o=r&&r.easing||t.easing;t.isEmptyStep?n.applyEmptyStep(o):n.setStyles(t.styles,o,e.errors,e.options),e.previousNode=t},AnimationTimelineBuilderVisitor.prototype.visitKeyframes=function(t,e){var n=e.currentAnimateTimings,r=e.currentTimeline.duration,o=n.duration,i=e.createSubContext(),s=i.currentTimeline;s.easing=n.easing,t.styles.forEach(function(t){var n=t.offset||0;s.forwardTime(n*o),s.setStyles(t.styles,t.easing,e.errors,e.options),s.applyStylesToKeyframe()}),e.currentTimeline.mergeTimelineCollectedStyles(s),e.transformIntoNewTimeline(r+o),e.previousNode=t},AnimationTimelineBuilderVisitor.prototype.visitQuery=function(t,e){var n=this,r=e.currentTimeline.currentTime,o=t.options||{},i=o.delay?resolveTimingValue(o.delay):0;i&&(6===e.previousNode.type||0==r&&e.currentTimeline.getCurrentStyleProperties().length)&&(e.currentTimeline.snapshotCurrentStyles(),e.previousNode=U);var s=r,a=e.invokeQuery(t.selector,t.originalSelector,t.limit,t.includeSelf,!!o.optional,e.errors);e.currentQueryTotal=a.length;var u=null;a.forEach(function(r,o){e.currentQueryIndex=o;var a=e.createSubContext(t.options,r);i&&a.delayNextStep(i),r===e.element&&(u=a.currentTimeline),visitDslNode(n,t.animation,a),a.currentTimeline.applyStylesToKeyframe();var l=a.currentTimeline.currentTime;s=Math.max(s,l)}),e.currentQueryIndex=0,e.currentQueryTotal=0,e.transformIntoNewTimeline(s),u&&(e.currentTimeline.mergeTimelineCollectedStyles(u),e.currentTimeline.snapshotCurrentStyles()),e.previousNode=t},AnimationTimelineBuilderVisitor.prototype.visitStagger=function(t,e){var n=e.parentContext,r=e.currentTimeline,o=t.timings,i=Math.abs(o.duration),s=i*(e.currentQueryTotal-1),a=i*e.currentQueryIndex;switch(o.duration<0?"reverse":o.easing){case"reverse":a=s-a;break;case"full":a=n.currentStaggerTime}var u=e.currentTimeline;a&&u.delayNextStep(a);var l=u.currentTime;visitDslNode(this,t.animation,e),e.previousNode=t,n.currentStaggerTime=r.currentTime-l+(r.startTime-n.currentTimeline.startTime)},AnimationTimelineBuilderVisitor}(),U={},z=function(){function AnimationTimelineContext(t,e,n,r,o,i){this._driver=t,this.element=e,this.subInstructions=n,this.errors=r,this.timelines=o,this.parentContext=null,this.currentAnimateTimings=null,this.previousNode=U,this.subContextCount=0,this.options={},this.currentQueryIndex=0,this.currentQueryTotal=0,this.currentStaggerTime=0,this.currentTimeline=i||new q(e,0),o.push(this.currentTimeline)}return Object.defineProperty(AnimationTimelineContext.prototype,"params",{get:function(){return this.options.params},enumerable:!0,configurable:!0}),AnimationTimelineContext.prototype.updateOptions=function(t,e){var n=this;if(t){var r=t,o=this.options;null!=r.duration&&(o.duration=resolveTimingValue(r.duration)),null!=r.delay&&(o.delay=resolveTimingValue(r.delay));var i=r.params;if(i){var s=o.params;s||(s=this.options.params={}),Object.keys(i).forEach(function(t){e&&s.hasOwnProperty(t)||(s[t]=interpolateParams(i[t],s,n.errors))})}}},AnimationTimelineContext.prototype._copyOptions=function(){var t={};if(this.options){var e=this.options.params;if(e){var n=t.params={};Object.keys(e).forEach(function(t){n[t]=e[t]})}}return t},AnimationTimelineContext.prototype.createSubContext=function(t,e,n){void 0===t&&(t=null);var r=e||this.element,o=new AnimationTimelineContext(this._driver,r,this.subInstructions,this.errors,this.timelines,this.currentTimeline.fork(r,n||0));return o.previousNode=this.previousNode,o.currentAnimateTimings=this.currentAnimateTimings,o.options=this._copyOptions(),o.updateOptions(t),o.currentQueryIndex=this.currentQueryIndex,o.currentQueryTotal=this.currentQueryTotal,o.parentContext=this,this.subContextCount++,o},AnimationTimelineContext.prototype.transformIntoNewTimeline=function(t){return this.previousNode=U,this.currentTimeline=this.currentTimeline.fork(this.element,t),this.timelines.push(this.currentTimeline),this.currentTimeline},AnimationTimelineContext.prototype.appendInstructionToTimeline=function(t,e,n){var r={duration:null!=e?e:t.duration,delay:this.currentTimeline.currentTime+(null!=n?n:0)+t.delay,easing:""},o=new W(t.element,t.keyframes,t.preStyleProps,t.postStyleProps,r,t.stretchStartingKeyframe);return this.timelines.push(o),r},AnimationTimelineContext.prototype.incrementTime=function(t){this.currentTimeline.forwardTime(this.currentTimeline.duration+t)},AnimationTimelineContext.prototype.delayNextStep=function(t){t>0&&this.currentTimeline.delayNextStep(t)},AnimationTimelineContext.prototype.invokeQuery=function(t,e,n,r,o,i){var s=[];if(r&&s.push(this.element),t.length>0){var a=1!=n,u=this._driver.query(this.element,t,a);0!==n&&(u=u.slice(0,n)),s.push.apply(s,u)}return o||0!=s.length||i.push('`query("'+e+'")` returned zero elements. (Use `query("'+e+'", { optional: true })` if you wish to allow this.)'),s},AnimationTimelineContext}(),q=function(){function TimelineBuilder(t,e,n){this.element=t,this.startTime=e,this._elementTimelineStylesLookup=n,this.duration=0,this._previousKeyframe={},this._currentKeyframe={},this._keyframes=new Map,this._styleSummary={},this._pendingStyles={},this._backFill={},this._currentEmptyStepKeyframe=null,this._elementTimelineStylesLookup||(this._elementTimelineStylesLookup=new Map),this._localTimelineStyles=Object.create(this._backFill,{}),this._globalTimelineStyles=this._elementTimelineStylesLookup.get(t),this._globalTimelineStyles||(this._globalTimelineStyles=this._localTimelineStyles,this._elementTimelineStylesLookup.set(t,this._localTimelineStyles)),this._loadKeyframe()}return TimelineBuilder.prototype.containsAnimation=function(){switch(this._keyframes.size){case 0:return!1;case 1:return this.getCurrentStyleProperties().length>0;default:return!0}},TimelineBuilder.prototype.getCurrentStyleProperties=function(){return Object.keys(this._currentKeyframe)},Object.defineProperty(TimelineBuilder.prototype,"currentTime",{get:function(){return this.startTime+this.duration},enumerable:!0,configurable:!0}),TimelineBuilder.prototype.delayNextStep=function(t){var e=1==this._keyframes.size&&Object.keys(this._pendingStyles).length;this.duration||e?(this.forwardTime(this.currentTime+t),e&&this.snapshotCurrentStyles()):this.startTime+=t},TimelineBuilder.prototype.fork=function(t,e){return this.applyStylesToKeyframe(),new TimelineBuilder(t,e||this.currentTime,this._elementTimelineStylesLookup)},TimelineBuilder.prototype._loadKeyframe=function(){this._currentKeyframe&&(this._previousKeyframe=this._currentKeyframe),this._currentKeyframe=this._keyframes.get(this.duration),this._currentKeyframe||(this._currentKeyframe=Object.create(this._backFill,{}),this._keyframes.set(this.duration,this._currentKeyframe))},TimelineBuilder.prototype.forwardFrame=function(){this.duration+=L,this._loadKeyframe()},TimelineBuilder.prototype.forwardTime=function(t){this.applyStylesToKeyframe(),this.duration=t,this._loadKeyframe()},TimelineBuilder.prototype._updateStyle=function(t,e){this._localTimelineStyles[t]=e,this._globalTimelineStyles[t]=e,this._styleSummary[t]={time:this.currentTime,value:e}},TimelineBuilder.prototype.allowOnlyTimelineStyles=function(){return this._currentEmptyStepKeyframe!==this._currentKeyframe},TimelineBuilder.prototype.applyEmptyStep=function(t){var e=this;t&&(this._previousKeyframe.easing=t),Object.keys(this._globalTimelineStyles).forEach(function(t){e._backFill[t]=e._globalTimelineStyles[t]||o.AUTO_STYLE,e._currentKeyframe[t]=o.AUTO_STYLE}),this._currentEmptyStepKeyframe=this._currentKeyframe},TimelineBuilder.prototype.setStyles=function(t,e,n,r){var i=this;e&&(this._previousKeyframe.easing=e);var s=r&&r.params||{},a=flattenStyles(t,this._globalTimelineStyles);Object.keys(a).forEach(function(t){var e=interpolateParams(a[t],s,n);i._pendingStyles[t]=e,i._localTimelineStyles.hasOwnProperty(t)||(i._backFill[t]=i._globalTimelineStyles.hasOwnProperty(t)?i._globalTimelineStyles[t]:o.AUTO_STYLE),i._updateStyle(t,e)})},TimelineBuilder.prototype.applyStylesToKeyframe=function(){var t=this,e=this._pendingStyles,n=Object.keys(e);0!=n.length&&(this._pendingStyles={},n.forEach(function(n){var r=e[n];t._currentKeyframe[n]=r}),Object.keys(this._localTimelineStyles).forEach(function(e){t._currentKeyframe.hasOwnProperty(e)||(t._currentKeyframe[e]=t._localTimelineStyles[e])}))},TimelineBuilder.prototype.snapshotCurrentStyles=function(){var t=this;Object.keys(this._localTimelineStyles).forEach(function(e){var n=t._localTimelineStyles[e];t._pendingStyles[e]=n,t._updateStyle(e,n)})},TimelineBuilder.prototype.getFinalKeyframe=function(){return this._keyframes.get(this.duration)},Object.defineProperty(TimelineBuilder.prototype,"properties",{get:function(){var t=[];for(var e in this._currentKeyframe)t.push(e);return t},enumerable:!0,configurable:!0}),TimelineBuilder.prototype.mergeTimelineCollectedStyles=function(t){var e=this;Object.keys(t._styleSummary).forEach(function(n){var r=e._styleSummary[n],o=t._styleSummary[n];(!r||o.time>r.time)&&e._updateStyle(n,o.value)})},TimelineBuilder.prototype.buildKeyframes=function(){var t=this;this.applyStylesToKeyframe();var e=new Set,n=new Set,r=1===this._keyframes.size&&0===this.duration,i=[];this._keyframes.forEach(function(s,a){var u=copyStyles(s,!0);Object.keys(u).forEach(function(t){var r=u[t];r==o["ɵPRE_STYLE"]?e.add(t):r==o.AUTO_STYLE&&n.add(t)}),r||(u.offset=a/t.duration),i.push(u)});var s=e.size?iteratorToArray(e.values()):[],a=n.size?iteratorToArray(n.values()):[];if(r){var u=i[0],l=copyObj(u);u.offset=0,l.offset=1,i=[u,l]}return createTimelineInstruction(this.element,i,s,a,this.duration,this.startTime,this.easing,!1)},TimelineBuilder}(),W=function(t){function SubTimelineBuilder(e,n,r,o,i,s){void 0===s&&(s=!1);var a=t.call(this,e,i.delay)||this;return a.element=e,a.keyframes=n,a.preStyleProps=r,a.postStyleProps=o,a._stretchStartingKeyframe=s,a.timings={duration:i.duration,delay:i.delay,easing:i.easing},a}return r.a(SubTimelineBuilder,t),SubTimelineBuilder.prototype.containsAnimation=function(){return this.keyframes.length>1},SubTimelineBuilder.prototype.buildKeyframes=function(){var t=this.keyframes,e=this.timings,n=e.delay,r=e.duration,o=e.easing;if(this._stretchStartingKeyframe&&n){var i=[],s=r+n,a=n/s,u=copyStyles(t[0],!1);u.offset=0,i.push(u);var l=copyStyles(t[0],!1);l.offset=roundOffset(a),i.push(l);for(var c=t.length-1,p=1;p<=c;p++){var d=copyStyles(t[p],!1),h=d.offset,m=n+h*r;d.offset=roundOffset(m/s),i.push(d)}r=s,n=0,o="",t=i}return createTimelineInstruction(this.element,t,this.preStyleProps,this.postStyleProps,r,n,o,!0)},SubTimelineBuilder}(q),K=(function(){function Animation(t,e){this._driver=t;var n=[],r=buildAnimationAst(e,n);if(n.length){var o="animation validation failed:\n"+n.join("\n");throw new Error(o)}this._animationAst=r}Animation.prototype.buildTimelines=function(t,e,n,r,o){var i=Array.isArray(e)?normalizeStyles(e):e,s=Array.isArray(n)?normalizeStyles(n):n,a=[];o=o||new B;var u=buildAnimationTimelines(this._driver,t,this._animationAst,i,s,r,o,a);if(a.length){var l="animation building failed:\n"+a.join("\n");throw new Error(l)}return u}}(),function(){function AnimationStyleNormalizer(){}return AnimationStyleNormalizer}()),J=(function(){function NoopAnimationStyleNormalizer(){}NoopAnimationStyleNormalizer.prototype.normalizePropertyName=function(t,e){return t},NoopAnimationStyleNormalizer.prototype.normalizeStyleValue=function(t,e,n,r){return n}}(),function(t){function WebAnimationsStyleNormalizer(){return null!==t&&t.apply(this,arguments)||this}return r.a(WebAnimationsStyleNormalizer,t),WebAnimationsStyleNormalizer.prototype.normalizePropertyName=function(t,e){return dashCaseToCamelCase(t)},WebAnimationsStyleNormalizer.prototype.normalizeStyleValue=function(t,e,n,r){var o="",i=n.toString().trim();if(Q[e]&&0!==n&&"0"!==n)if("number"==typeof n)o="px";else{var s=n.match(/^[+-]?[\d\.]+([a-z]*)$/);s&&0==s[1].length&&r.push("Please provide a CSS unit value for "+t+":"+n)}return i+o},WebAnimationsStyleNormalizer}(K)),Q=makeBooleanMap("width,height,minWidth,minHeight,maxWidth,maxHeight,left,top,bottom,right,fontSize,outlineWidth,outlineOffset,paddingTop,paddingLeft,paddingBottom,paddingRight,marginTop,marginLeft,marginBottom,marginRight,borderRadius,borderWidth,borderTopWidth,borderLeftWidth,borderRightWidth,borderBottomWidth,textIndent,perspective".split(",")),X={},$=function(){function AnimationTransitionFactory(t,e,n){this._triggerName=t,this.ast=e,this._stateStyles=n}return AnimationTransitionFactory.prototype.match=function(t,e){return oneOrMoreTransitionsMatch(this.ast.matchers,t,e)},AnimationTransitionFactory.prototype.buildStyles=function(t,e,n){var r=this._stateStyles["*"],o=this._stateStyles[t],i=r?r.buildStyles(e,n):{};return o?o.buildStyles(e,n):i},AnimationTransitionFactory.prototype.build=function(t,e,n,r,o,i,s){var a=[],u=this.ast.options&&this.ast.options.params||X,l=o&&o.params||X,c=this.buildStyles(n,l,a),p=i&&i.params||X,d=this.buildStyles(r,p,a),h=new Set,m=new Map,f=new Map,y="void"===r,g={params:Object.assign({},u,p)},v=buildAnimationTimelines(t,e,this.ast.animation,c,d,g,s,a);if(a.length)return createTransitionInstruction(e,this._triggerName,n,r,y,c,d,[],[],m,f,a);v.forEach(function(t){var n=t.element,r=getOrSetAsInMap(m,n,{});t.preStyleProps.forEach(function(t){return r[t]=!0});var o=getOrSetAsInMap(f,n,{});t.postStyleProps.forEach(function(t){return o[t]=!0}),n!==e&&h.add(n)});var b=iteratorToArray(h.values());return createTransitionInstruction(e,this._triggerName,n,r,y,c,d,v,b,m,f)},AnimationTransitionFactory}(),Y=function(){function AnimationStateStyles(t,e){this.styles=t,this.defaultParams=e}return AnimationStateStyles.prototype.buildStyles=function(t,e){var n={},r=copyObj(this.defaultParams);return Object.keys(t).forEach(function(e){var n=t[e];null!=n&&(r[e]=n)}),this.styles.styles.forEach(function(t){if("string"!=typeof t){var o=t;Object.keys(o).forEach(function(t){var i=o[t];i.length>1&&(i=interpolateParams(i,r,e)),n[t]=i})}}),n},AnimationStateStyles}(),Z=function(){function AnimationTrigger(t,e){var n=this;this.name=t,this.ast=e,this.transitionFactories=[],this.states={},e.states.forEach(function(t){var e=t.options&&t.options.params||{};n.states[t.name]=new Y(t.style,e)}),balanceProperties(this.states,"true","1"),balanceProperties(this.states,"false","0"),e.transitions.forEach(function(e){n.transitionFactories.push(new $(t,e,n.states))}),this.fallbackTransition=createFallbackTransition(t,this.states)}return Object.defineProperty(AnimationTrigger.prototype,"containsQueries",{get:function(){return this.ast.queryCount>0},enumerable:!0,configurable:!0}),AnimationTrigger.prototype.matchTransition=function(t,e){return this.transitionFactories.find(function(n){return n.match(t,e)})||null},AnimationTrigger.prototype.matchStyles=function(t,e,n){return this.fallbackTransition.buildStyles(t,e,n)},AnimationTrigger}(),tt=new B,et=function(){function TimelineAnimationEngine(t,e){this._driver=t,this._normalizer=e,this._animations={},this._playersById={},this.players=[]}return TimelineAnimationEngine.prototype.register=function(t,e){var n=[],r=buildAnimationAst(e,n);if(n.length)throw new Error("Unable to build the animation due to the following errors: "+n.join("\n"));this._animations[t]=r},TimelineAnimationEngine.prototype._buildPlayer=function(t,e,n){var r=t.element,o=normalizeKeyframes(this._driver,this._normalizer,r,t.keyframes,e,n);return this._driver.animate(r,o,t.duration,t.delay,t.easing,[])},TimelineAnimationEngine.prototype.create=function(t,e,n){var r=this;void 0===n&&(n={});var i,s=[],a=this._animations[t],u=new Map;if(a?(i=buildAnimationTimelines(this._driver,e,a,{},{},n,tt,s),i.forEach(function(t){var e=getOrSetAsInMap(u,t.element,{});t.postStyleProps.forEach(function(t){return e[t]=null})})):(s.push("The requested animation doesn't exist or has already been destroyed"),i=[]),s.length)throw new Error("Unable to create the animation due to the following errors: "+s.join("\n"));u.forEach(function(t,e){Object.keys(t).forEach(function(n){t[n]=r._driver.computeStyle(e,n,o.AUTO_STYLE)})});var l=i.map(function(t){var e=u.get(t.element);return r._buildPlayer(t,{},e)}),c=optimizeGroupPlayer(l);return this._playersById[t]=c,c.onDestroy(function(){return r.destroy(t)}),this.players.push(c),c},TimelineAnimationEngine.prototype.destroy=function(t){var e=this._getPlayer(t);e.destroy(),delete this._playersById[t];var n=this.players.indexOf(e);n>=0&&this.players.splice(n,1)},TimelineAnimationEngine.prototype._getPlayer=function(t){var e=this._playersById[t];if(!e)throw new Error("Unable to find the timeline player referenced by "+t);return e},TimelineAnimationEngine.prototype.listen=function(t,e,n,r){var o=makeAnimationEvent(e,"","","");return listenOnPlayer(this._getPlayer(t),n,o,r),function(){}},TimelineAnimationEngine.prototype.command=function(t,e,n,r){if("register"==n)return void this.register(t,r[0]);if("create"==n){var o=r[0]||{};return void this.create(t,e,o)}var i=this._getPlayer(t);switch(n){case"play":i.play();break;case"pause":i.pause();break;case"reset":i.reset();break;case"restart":i.restart();break;case"finish":i.finish();break;case"init":i.init();break;case"setPosition":i.setPosition(parseFloat(r[0]));break;case"destroy":this.destroy(t)}},TimelineAnimationEngine}(),nt="ng-animate-queued",rt=".ng-animate-queued",ot="ng-animate-disabled",it=".ng-animate-disabled",st=[],at={namespaceId:"",setForRemoval:null,hasAnimation:!1,removedBeforeQueried:!1},ut={namespaceId:"",setForRemoval:null,hasAnimation:!1,removedBeforeQueried:!0},lt="__ng_removed",ct=function(){function StateValue(t){var e=t&&t.hasOwnProperty("value"),n=e?t.value:t;if(this.value=normalizeTriggerValue(n),e){var r=copyObj(t);delete r.value,this.options=r}else this.options={};this.options.params||(this.options.params={})}return Object.defineProperty(StateValue.prototype,"params",{get:function(){return this.options.params},enumerable:!0,configurable:!0}),StateValue.prototype.absorbOptions=function(t){var e=t.params;if(e){var n=this.options.params;Object.keys(e).forEach(function(t){null==n[t]&&(n[t]=e[t])})}},StateValue}(),pt="void",dt=new ct(pt),ht=new ct("DELETED"),mt=function(){function AnimationTransitionNamespace(t,e,n){this.id=t,this.hostElement=e,this._engine=n,this.players=[],this._triggers={},this._queue=[],this._elementListeners=new Map,this._hostClassName="ng-tns-"+t,addClass(e,this._hostClassName)}return AnimationTransitionNamespace.prototype.listen=function(t,e,n,r){var o=this;if(!this._triggers.hasOwnProperty(e))throw new Error('Unable to listen on the animation trigger event "'+n+'" because the animation trigger "'+e+"\" doesn't exist!");if(null==n||0==n.length)throw new Error('Unable to listen on the animation trigger "'+e+'" because the provided event is undefined!');if(!isTriggerEventValid(n))throw new Error('The provided animation trigger event "'+n+'" for the animation trigger "'+e+'" is not supported!');var i=getOrSetAsInMap(this._elementListeners,t,[]),s={name:e,phase:n,callback:r};i.push(s);var a=getOrSetAsInMap(this._engine.statesByElement,t,{});return a.hasOwnProperty(e)||(addClass(t,S),addClass(t,S+"-"+e),a[e]=null),function(){o._engine.afterFlush(function(){var t=i.indexOf(s);t>=0&&i.splice(t,1),o._triggers[e]||delete a[e]})}},AnimationTransitionNamespace.prototype.register=function(t,e){return!this._triggers[t]&&(this._triggers[t]=e,!0)},AnimationTransitionNamespace.prototype._getTrigger=function(t){var e=this._triggers[t];if(!e)throw new Error('The provided animation trigger "'+t+'" has not been registered!');return e},AnimationTransitionNamespace.prototype.trigger=function(t,e,n,r){var o=this;void 0===r&&(r=!0);var i=this._getTrigger(e),s=new yt(this.id,e,t),a=this._engine.statesByElement.get(t);a||(addClass(t,S),addClass(t,S+"-"+e),this._engine.statesByElement.set(t,a={}));var u=a[e],l=new ct(n);if(!(n&&n.hasOwnProperty("value"))&&u&&l.absorbOptions(u.options),a[e]=l,u){if(u===ht)return s}else u=dt;if(l.value===pt||u.value!==l.value){var c=getOrSetAsInMap(this._engine.playersByElement,t,[]);c.forEach(function(t){t.namespaceId==o.id&&t.triggerName==e&&t.queued&&t.destroy()});var p=i.matchTransition(u.value,l.value),d=!1;if(!p){if(!r)return;p=i.fallbackTransition,d=!0}return this._engine.totalQueuedPlayers++,this._queue.push({element:t,triggerName:e,transition:p,fromState:u,toState:l,player:s,isFallbackTransition:d}),d||(addClass(t,nt),s.onStart(function(){removeClass(t,nt)})),s.onDone(function(){var e=o.players.indexOf(s);e>=0&&o.players.splice(e,1);var n=o._engine.playersByElement.get(t);if(n){var r=n.indexOf(s);r>=0&&n.splice(r,1)}}),this.players.push(s),c.push(s),s}if(!objEquals(u.params,l.params)){var h=[],m=i.matchStyles(u.value,u.params,h),f=i.matchStyles(l.value,l.params,h);h.length?this._engine.reportError(h):this._engine.afterFlush(function(){eraseStyles(t,m),setStyles(t,f)})}},AnimationTransitionNamespace.prototype.deregister=function(t){var e=this;delete this._triggers[t],this._engine.statesByElement.forEach(function(e,n){delete e[t]}),this._elementListeners.forEach(function(n,r){e._elementListeners.set(r,n.filter(function(e){return e.name!=t}))})},AnimationTransitionNamespace.prototype.clearElementCache=function(t){this._engine.statesByElement.delete(t),this._elementListeners.delete(t);var e=this._engine.playersByElement.get(t);e&&(e.forEach(function(t){return t.destroy()}),this._engine.playersByElement.delete(t))},AnimationTransitionNamespace.prototype._destroyInnerNodes=function(t,e,n){var r=this;void 0===n&&(n=!1),this._engine.driver.query(t,A,!0).forEach(function(t){if(n&&containsClass(t,r._hostClassName)){var o=r._engine.namespacesByHostElement.get(t);o&&o.removeNode(t,e,!0),r.removeNode(t,e,!0)}else r.clearElementCache(t)})},AnimationTransitionNamespace.prototype.removeNode=function(t,e,n){var r=this,o=this._engine;!n&&t.childElementCount&&this._destroyInnerNodes(t,e,!0);var i=o.statesByElement.get(t);if(i){var s=[];if(Object.keys(i).forEach(function(e){if(r._triggers[e]){var n=r.trigger(t,e,pt,!1);n&&s.push(n)}}),s.length)return o.markElementAsRemoved(this.id,t,!0,e),void optimizeGroupPlayer(s).onDone(function(){return o.processLeaveNode(t)})}var a=!1;if(o.totalAnimations){var u=o.players.length?o.playersByQueriedElement.get(t):[];if(u&&u.length)a=!0;else for(var l=t;l=l.parentNode;){var c=o.statesByElement.get(l);if(c){a=!0;break}}}var p=this._elementListeners.get(t);if(p){var d=new Set;p.forEach(function(e){var n=e.name;if(!d.has(n)){d.add(n);var i=r._triggers[n],s=i.fallbackTransition,a=o.statesByElement.get(t),u=a[n]||dt,l=new ct(pt),c=new yt(r.id,n,t);r._engine.totalQueuedPlayers++,r._queue.push({element:t,triggerName:n,transition:s,fromState:u,toState:l,player:c,isFallbackTransition:!0})}})}a?o.markElementAsRemoved(this.id,t,!1,e):(o.afterFlush(function(){return r.clearElementCache(t)}),o.destroyInnerAnimations(t),o._onRemovalComplete(t,e))},AnimationTransitionNamespace.prototype.insertNode=function(t,e){addClass(t,this._hostClassName)},AnimationTransitionNamespace.prototype.drainQueuedTransitions=function(t){var e=this,n=[];return this._queue.forEach(function(r){var o=r.player;if(!o.destroyed){var i=r.element,s=e._elementListeners.get(i);s&&s.forEach(function(e){if(e.name==r.triggerName){var n=makeAnimationEvent(i,r.triggerName,r.fromState.value,r.toState.value);n._data=t,listenOnPlayer(r.player,e.phase,n,e.callback)}}),o.markedForDestroy?e._engine.afterFlush(function(){o.destroy()}):n.push(r)}}),this._queue=[],n.sort(function(t,n){var r=t.transition.ast.depCount,o=n.transition.ast.depCount;return 0==r||0==o?r-o:e._engine.driver.containsElement(t.element,n.element)?1:-1})},AnimationTransitionNamespace.prototype.destroy=function(t){this.players.forEach(function(t){return t.destroy()}),this._destroyInnerNodes(this.hostElement,t)},AnimationTransitionNamespace.prototype.elementContainsData=function(t){var e=!1;return this._elementListeners.has(t)&&(e=!0),e=!!this._queue.find(function(e){return e.element===t})||e},AnimationTransitionNamespace}(),ft=function(){function TransitionAnimationEngine(t,e){this.driver=t,this._normalizer=e,this.players=[],this.newHostElements=new Map,this.playersByElement=new Map,this.playersByQueriedElement=new Map,this.statesByElement=new Map,this.disabledNodes=new Set,this.totalAnimations=0,this.totalQueuedPlayers=0,this._namespaceLookup={},this._namespaceList=[],this._flushFns=[],this._whenQuietFns=[],this.namespacesByHostElement=new Map,this.collectedEnterElements=[],this.collectedLeaveElements=[],this.onRemovalComplete=function(t,e){}}return TransitionAnimationEngine.prototype._onRemovalComplete=function(t,e){this.onRemovalComplete(t,e)},Object.defineProperty(TransitionAnimationEngine.prototype,"queuedPlayers",{get:function(){var t=[];return this._namespaceList.forEach(function(e){e.players.forEach(function(e){e.queued&&t.push(e)})}),t},enumerable:!0,configurable:!0}),TransitionAnimationEngine.prototype.createNamespace=function(t,e){var n=new mt(t,e,this);return e.parentNode?this._balanceNamespaceList(n,e):(this.newHostElements.set(e,n),this.collectEnterElement(e)),this._namespaceLookup[t]=n},TransitionAnimationEngine.prototype._balanceNamespaceList=function(t,e){var n=this._namespaceList.length-1;if(n>=0){for(var r=!1,o=n;o>=0;o--){var i=this._namespaceList[o];if(this.driver.containsElement(i.hostElement,e)){this._namespaceList.splice(o+1,0,t),r=!0;break}}r||this._namespaceList.splice(0,0,t)}else this._namespaceList.push(t);return this.namespacesByHostElement.set(e,t),t},TransitionAnimationEngine.prototype.register=function(t,e){var n=this._namespaceLookup[t];return n||(n=this.createNamespace(t,e)),n},TransitionAnimationEngine.prototype.registerTrigger=function(t,e,n){var r=this._namespaceLookup[t];r&&r.register(e,n)&&this.totalAnimations++},TransitionAnimationEngine.prototype.destroy=function(t,e){var n=this;if(t){var r=this._fetchNamespace(t);this.afterFlush(function(){n.namespacesByHostElement.delete(r.hostElement),delete n._namespaceLookup[t];var e=n._namespaceList.indexOf(r);e>=0&&n._namespaceList.splice(e,1)}),this.afterFlushAnimationsDone(function(){return r.destroy(e)})}},TransitionAnimationEngine.prototype._fetchNamespace=function(t){return this._namespaceLookup[t]},TransitionAnimationEngine.prototype.trigger=function(t,e,n,r){return!!isElementNode(e)&&(this._fetchNamespace(t).trigger(e,n,r),!0)},TransitionAnimationEngine.prototype.insertNode=function(t,e,n,r){if(isElementNode(e)){var o=e[lt];o&&o.setForRemoval&&(o.setForRemoval=!1),t&&this._fetchNamespace(t).insertNode(e,n),r&&this.collectEnterElement(e)}},TransitionAnimationEngine.prototype.collectEnterElement=function(t){this.collectedEnterElements.push(t)},TransitionAnimationEngine.prototype.markElementAsDisabled=function(t,e){e?this.disabledNodes.has(t)||(this.disabledNodes.add(t),addClass(t,ot)):this.disabledNodes.has(t)&&(this.disabledNodes.delete(t),removeClass(t,ot))},TransitionAnimationEngine.prototype.removeNode=function(t,e,n,r){if(!isElementNode(e))return void this._onRemovalComplete(e,n);var o=t?this._fetchNamespace(t):null;o?o.removeNode(e,n,r):this.markElementAsRemoved(t,e,!1,n)},TransitionAnimationEngine.prototype.markElementAsRemoved=function(t,e,n,r){this.collectedLeaveElements.push(e),e[lt]={namespaceId:t,setForRemoval:r,hasAnimation:n,removedBeforeQueried:!1}},TransitionAnimationEngine.prototype.listen=function(t,e,n,r,o){return isElementNode(e)?this._fetchNamespace(t).listen(e,n,r,o):function(){}},TransitionAnimationEngine.prototype._buildInstruction=function(t,e){return t.transition.build(this.driver,t.element,t.fromState.value,t.toState.value,t.fromState.options,t.toState.options,e)},TransitionAnimationEngine.prototype.destroyInnerAnimations=function(t){var e=this,n=this.driver.query(t,A,!0);n.forEach(function(t){var n=e.playersByElement.get(t);n&&n.forEach(function(t){t.queued?t.markedForDestroy=!0:t.destroy()});var r=e.statesByElement.get(t);r&&Object.keys(r).forEach(function(t){return r[t]=ht})}),0!=this.playersByQueriedElement.size&&(n=this.driver.query(t,E,!0),n.length&&n.forEach(function(t){var n=e.playersByQueriedElement.get(t);n&&n.forEach(function(t){return t.finish()})}))},TransitionAnimationEngine.prototype.whenRenderingDone=function(){var t=this;return new Promise(function(e){if(t.players.length)return optimizeGroupPlayer(t.players).onDone(function(){return e()});e()})},TransitionAnimationEngine.prototype.processLeaveNode=function(t){var e=this,n=t[lt];if(n&&n.setForRemoval){if(t[lt]=at,n.namespaceId){this.destroyInnerAnimations(t);var r=this._fetchNamespace(n.namespaceId);r&&r.clearElementCache(t)}this._onRemovalComplete(t,n.setForRemoval)}this.driver.matchesElement(t,it)&&this.markElementAsDisabled(t,!1),this.driver.query(t,it,!0).forEach(function(n){e.markElementAsDisabled(t,!1)})},TransitionAnimationEngine.prototype.flush=function(t){var e=this;void 0===t&&(t=-1);var n=[];if(this.newHostElements.size&&(this.newHostElements.forEach(function(t,n){return e._balanceNamespaceList(t,n)}),this.newHostElements.clear()),this._namespaceList.length&&(this.totalQueuedPlayers||this.collectedLeaveElements.length)){var r=[];try{n=this._flushAnimations(r,t)}finally{for(var o=0;o=0;m--){this._namespaceList[m].drainQueuedTransitions(e).forEach(function(t){var e=t.player;C.push(e);var o=t.element;if(!d||!n.driver.containsElement(d,o))return void e.destroy();var s=n._buildInstruction(t,r);if(s.errors&&s.errors.length)return void S.push(s);if(t.isFallbackTransition)return e.onStart(function(){return eraseStyles(o,s.fromStyles)}),e.onDestroy(function(){return setStyles(o,s.toStyles)}),void i.push(e);s.timelines.forEach(function(t){return t.stretchStartingKeyframe=!0}),r.append(o,s.timelines);var p={instruction:s,player:e,element:o};a.push(p),s.queriedElements.forEach(function(t){return getOrSetAsInMap(u,t,[]).push(e)}),s.preStyleProps.forEach(function(t,e){var n=Object.keys(t);if(n.length){var r=l.get(e);r||l.set(e,r=new Set),n.forEach(function(t){return r.add(t)})}}),s.postStyleProps.forEach(function(t,e){var n=Object.keys(t),r=c.get(e);r||c.set(e,r=new Set),n.forEach(function(t){return r.add(t)})})})}if(S.length){var A=[];S.forEach(function(t){A.push("@"+t.triggerName+" has failed due to:\n"),t.errors.forEach(function(t){return A.push("- "+t+"\n")})}),C.forEach(function(t){return t.destroy()}),this.reportError(A)}for(var T=new Set,m=0;m0?this.driver.animate(t.element,e,t.duration,t.delay,t.easing,n):new o.NoopAnimationPlayer},TransitionAnimationEngine}(),yt=function(){function TransitionAnimationPlayer(t,e,n){this.namespaceId=t,this.triggerName=e,this.element=n,this._player=new o.NoopAnimationPlayer,this._containsRealPlayer=!1,this._queuedCallbacks={},this._destroyed=!1,this.markedForDestroy=!1}return Object.defineProperty(TransitionAnimationPlayer.prototype,"queued",{get:function(){return 0==this._containsRealPlayer},enumerable:!0,configurable:!0}),Object.defineProperty(TransitionAnimationPlayer.prototype,"destroyed",{get:function(){return this._destroyed},enumerable:!0,configurable:!0}),TransitionAnimationPlayer.prototype.setRealPlayer=function(t){var e=this;this._containsRealPlayer||(this._player=t,Object.keys(this._queuedCallbacks).forEach(function(n){e._queuedCallbacks[n].forEach(function(e){return listenOnPlayer(t,n,void 0,e)})}),this._queuedCallbacks={},this._containsRealPlayer=!0)},TransitionAnimationPlayer.prototype.getRealPlayer=function(){return this._player},TransitionAnimationPlayer.prototype._queueEvent=function(t,e){getOrSetAsInMap(this._queuedCallbacks,t,[]).push(e)},TransitionAnimationPlayer.prototype.onDone=function(t){this.queued&&this._queueEvent("done",t),this._player.onDone(t)},TransitionAnimationPlayer.prototype.onStart=function(t){this.queued&&this._queueEvent("start",t),this._player.onStart(t)},TransitionAnimationPlayer.prototype.onDestroy=function(t){this.queued&&this._queueEvent("destroy",t),this._player.onDestroy(t)},TransitionAnimationPlayer.prototype.init=function(){this._player.init()},TransitionAnimationPlayer.prototype.hasStarted=function(){return!this.queued&&this._player.hasStarted()},TransitionAnimationPlayer.prototype.play=function(){!this.queued&&this._player.play()},TransitionAnimationPlayer.prototype.pause=function(){!this.queued&&this._player.pause()},TransitionAnimationPlayer.prototype.restart=function(){!this.queued&&this._player.restart()},TransitionAnimationPlayer.prototype.finish=function(){this._player.finish()},TransitionAnimationPlayer.prototype.destroy=function(){this._destroyed=!0,this._player.destroy()},TransitionAnimationPlayer.prototype.reset=function(){!this.queued&&this._player.reset()},TransitionAnimationPlayer.prototype.setPosition=function(t){this.queued||this._player.setPosition(t)},TransitionAnimationPlayer.prototype.getPosition=function(){return this.queued?0:this._player.getPosition()},Object.defineProperty(TransitionAnimationPlayer.prototype,"totalTime",{get:function(){return this._player.totalTime},enumerable:!0,configurable:!0}),TransitionAnimationPlayer}(),gt="$$classes",vt=function(){function AnimationEngine(t,e){var n=this;this._triggerCache={},this.onRemovalComplete=function(t,e){},this._transitionEngine=new ft(t,e),this._timelineEngine=new et(t,e),this._transitionEngine.onRemovalComplete=function(t,e){return n.onRemovalComplete(t,e)}}return AnimationEngine.prototype.registerTrigger=function(t,e,n,r,o){var i=t+"-"+r,s=this._triggerCache[i];if(!s){var a=[],u=buildAnimationAst(o,a);if(a.length)throw new Error('The animation trigger "'+r+'" has failed to build due to the following errors:\n - '+a.join("\n - "));s=buildTrigger(r,u),this._triggerCache[i]=s}this._transitionEngine.registerTrigger(e,r,s)},AnimationEngine.prototype.register=function(t,e){this._transitionEngine.register(t,e)},AnimationEngine.prototype.destroy=function(t,e){this._transitionEngine.destroy(t,e)},AnimationEngine.prototype.onInsert=function(t,e,n,r){this._transitionEngine.insertNode(t,e,n,r)},AnimationEngine.prototype.onRemove=function(t,e,n){this._transitionEngine.removeNode(t,e,n)},AnimationEngine.prototype.disableAnimations=function(t,e){this._transitionEngine.markElementAsDisabled(t,e)},AnimationEngine.prototype.process=function(t,e,n,r){if("@"==n.charAt(0)){var o=parseTimelineCommand(n),i=o[0],s=o[1],a=r;this._timelineEngine.command(i,e,s,a)}else this._transitionEngine.trigger(t,e,n,r)},AnimationEngine.prototype.listen=function(t,e,n,r,o){if("@"==n.charAt(0)){var i=parseTimelineCommand(n),s=i[0],a=i[1];return this._timelineEngine.listen(s,e,a,o)}return this._transitionEngine.listen(t,e,n,r,o)},AnimationEngine.prototype.flush=function(t){void 0===t&&(t=-1),this._transitionEngine.flush(t)},Object.defineProperty(AnimationEngine.prototype,"players",{get:function(){return this._transitionEngine.players.concat(this._timelineEngine.players)},enumerable:!0,configurable:!0}),AnimationEngine.prototype.whenRenderingDone=function(){return this._transitionEngine.whenRenderingDone()},AnimationEngine}(),bt=function(){function WebAnimationsPlayer(t,e,n,r){void 0===r&&(r=[]);var o=this;this.element=t,this.keyframes=e,this.options=n,this.previousPlayers=r,this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._initialized=!1,this._finished=!1,this._started=!1,this._destroyed=!1,this.time=0,this.parentPlayer=null,this.previousStyles={},this.currentSnapshot={},this._duration=n.duration,this._delay=n.delay||0,this.time=this._duration+this._delay,allowPreviousPlayerStylesMerge(this._duration,this._delay)&&r.forEach(function(t){var e=t.currentSnapshot;Object.keys(e).forEach(function(t){return o.previousStyles[t]=e[t]})})}return WebAnimationsPlayer.prototype._onFinish=function(){this._finished||(this._finished=!0,this._onDoneFns.forEach(function(t){return t()}),this._onDoneFns=[])},WebAnimationsPlayer.prototype.init=function(){this._buildPlayer(),this._preparePlayerBeforeStart()},WebAnimationsPlayer.prototype._buildPlayer=function(){var t=this;if(!this._initialized){this._initialized=!0;var e=this.keyframes.map(function(t){return copyStyles(t,!1)}),n=Object.keys(this.previousStyles);if(n.length){var r=e[0],o=[];if(n.forEach(function(e){r.hasOwnProperty(e)||o.push(e),r[e]=t.previousStyles[e]}),o.length)for(var i=this,s=function(){var t=e[a];o.forEach(function(e){t[e]=_computeStyle(i.element,e)})},a=1;a=0&&t0)return this.flashMessage.messages[0]},enumerable:!0,configurable:!0}),FlashMessagesComponent.prototype.dismiss=function(){this.flashMessage.dismissEarly()},FlashMessagesComponent.prototype.onMouseEnter=function(t){this.flashMessage.cancelDismissal(),t.showTooltip=t.hasTooltip},FlashMessagesComponent.prototype.onMouseExit=function(t){this.flashMessage.startDismissal(),t.showTooltip=!1},FlashMessagesComponent=__decorate([r.Component({selector:"htf-flash-messages",template:n(296),styles:[n(284)]}),__metadata("design:paramtypes",[i.FlashMessageService])],FlashMessagesComponent)}();e.FlashMessagesComponent=u;var l},259:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),o=n(28),i=n(20),s=n(24),a=n(24),u=function(){function BasePlug(t,e,n,r){this.className=t,this.config=e,this.http=n,this.flashMessage=r}return BasePlug.prototype.plugExists=function(){return Boolean(this.test&&this.getPlugState())},BasePlug.prototype.respond=function(t,e){var n=this,r=new o.Headers({"Content-Type":"application/json"}),i=new o.RequestOptions({headers:r}),u=a.getTestBaseUrl(this.config.dashboardEnabled,this.test),l=u+"/plugs/"+this.plugName,c=JSON.stringify({method:t,args:e});this.http.post(l,c,i).subscribe(function(){},function(t){var e=s.messageFromErrorResponse(t);n.flashMessage.error("An error occurred trying to respond to plug "+n.plugName+".",e)})},BasePlug.prototype.getPlugState=function(){if(this.plugName&&this.test.plugStates[this.plugName])return this.test.plugStates[this.plugName];for(var t=0,e=Object.keys(this.test.plugStates);t");this.lastPromptHtml=this.sanitizer.bypassSecurityTrustHtml(e),this.focusSelf(),t.default&&this.setResponse(t.default)}return this.lastPromptHtml},enumerable:!0,configurable:!0}),UserInputPlugComponent.prototype.hasTextInput=function(){return this.getPlugState()["text-input"]},UserInputPlugComponent.prototype.sendResponse=function(t){var e,n=this.getPlugState().id;this.hasTextInput()?(e=t.value,t.value=""):e="",this.respond("respond",[n,e])},UserInputPlugComponent.prototype.getPlugState=function(){return t.prototype.getPlugState.call(this)},UserInputPlugComponent.prototype.focusSelf=function(){var t=this.ref.nativeElement.querySelector("input");t&&t.focus()},UserInputPlugComponent.prototype.setResponse=function(t){var e=this.ref.nativeElement.querySelector("input");e&&(e.value=t)},UserInputPlugComponent=__decorate([o.Component({animations:[r.trigger("animateIn",l.washIn)],selector:"htf-user-input-plug",template:n(297),styles:[n(285)]}),__metadata("design:paramtypes",[a.ConfigService,i.Http,u.FlashMessageService,o.ElementRef,s.DomSanitizer])],UserInputPlugComponent)}(c.BasePlug);e.UserInputPlugComponent=d},261:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),o=n(72),i=function(){function ElapsedTimePipe(t){this.time=t}return ElapsedTimePipe.prototype.transform=function(t,e){return void 0===e&&(e="%s"),e.replace("%s",this.getElapsedTimeString(t))},ElapsedTimePipe.prototype.getElapsedTimeString=function(t){if(null===this.time.last)return"0s";var e=t.endTimeMillis||this.time.last,n=Math.round((e-t.startTimeMillis)/1e3),r=Math.floor(n/60);if(0===r)return n+"s";var o=n-60*r,i=Math.floor(r/60);return 0===i?r+"m "+o+"s":i+"h "+(r-60*i)+"m "+o+"s"},ElapsedTimePipe=__decorate([r.Pipe({name:"elapsedTime",pure:!1}),__metadata("design:paramtypes",[o.TimeService])],ElapsedTimePipe)}();e.ElapsedTimePipe=i},262:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),o=function(){function FocusDirective(t){this.ref=t}return FocusDirective.prototype.ngOnChanges=function(){this.focusOn&&this.ref.nativeElement.focus()},__decorate([r.Input("htfFocus"),__metadata("design:type",Boolean)],FocusDirective.prototype,"focusOn",void 0),FocusDirective=__decorate([r.Directive({selector:"[htfFocus]"}),__metadata("design:paramtypes",[r.ElementRef])],FocusDirective)}();e.FocusDirective=o},263:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),o=function(){function GenealogyNodeComponent(){}return GenealogyNodeComponent.prototype.ngOnInit=function(){null===this.maxDepth?this.childMaxDepth=null:this.childMaxDepth=this.maxDepth-1,void 0===this.isRoot&&(this.isRoot=!0)},__decorate([r.Input(),__metadata("design:type",Boolean)],GenealogyNodeComponent.prototype,"isFirst",void 0),__decorate([r.Input(),__metadata("design:type",Boolean)],GenealogyNodeComponent.prototype,"isRoot",void 0),__decorate([r.Input(),__metadata("design:type",Object)],GenealogyNodeComponent.prototype,"node",void 0),__decorate([r.Input(),__metadata("design:type",Number)],GenealogyNodeComponent.prototype,"maxDepth",void 0),GenealogyNodeComponent=__decorate([r.Component({selector:"htf-genealogy-node",template:n(298),styles:[n(286)]})],GenealogyNodeComponent)}();e.GenealogyNodeComponent=o},264:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),o=n(68),i=function(){function LogLevelToClassPipe(){}return LogLevelToClassPipe.prototype.transform=function(t){if(t)return t<=o.logLevels.debug?"ng-log-level-debug":t<=o.logLevels.info?"ng-log-level-info":t<=o.logLevels.warning?"ng-log-level-warning":t<=o.logLevels.error?"ng-log-level-error":"ng-log-level-critical"},LogLevelToClassPipe=__decorate([r.Pipe({name:"logLevelToClass"})],LogLevelToClassPipe)}();e.LogLevelToClassPipe=i},265:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function Attachment(t){Object.assign(this,t)}return Attachment}();e.Attachment=r},266:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),o=function(){function ObjectToSortedValuesPipe(){}return ObjectToSortedValuesPipe.prototype.transform=function(t,e){void 0===e&&(e=null);var n=[],r=Object.keys(t);null===e&&r.sort();for(var o=0,i=r;on[e]?1:0}),n},ObjectToSortedValuesPipe=__decorate([r.Pipe({name:"objectToSortedValues",pure:!1})],ObjectToSortedValuesPipe)}();e.ObjectToSortedValuesPipe=o},267:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,o=n(2),i=n(69),s=n(50),a=n(34),u=n(20);!function(t){t[t.fail=0]="fail",t[t.online=1]="online",t[t.pass=2]="pass",t[t.pending=3]="pending",t[t.running=4]="running",t[t.unreachable=5]="unreachable",t[t.warning=6]="warning"}(r||(r={}));var l=(f={},f[r.fail]="ng-status-fail",f[r.online]="ng-status-online",f[r.pass]="ng-status-pass",f[r.pending]="ng-status-pending",f[r.running]="ng-status-running",f[r.unreachable]="ng-status-unreachable",f[r.warning]="ng-status-warning",f),c=Symbol("unknownStatus"),p=(y={},y[i.MeasurementStatus.unset]=r.pending,y[i.MeasurementStatus.pass]=r.pass,y[i.MeasurementStatus.fail]=r.fail,y[s.PhaseStatus.waiting]=r.pending,y[s.PhaseStatus.running]=r.running,y[s.PhaseStatus.pass]=r.pass,y[s.PhaseStatus.fail]=r.fail,y[a.StationStatus.online]=r.online,y[a.StationStatus.unreachable]=r.unreachable,y[u.TestStatus.waiting]=r.pending,y[u.TestStatus.running]=r.running,y[u.TestStatus.pass]=r.pass,y[u.TestStatus.fail]=r.fail,y[u.TestStatus.error]=r.warning,y[u.TestStatus.timeout]=r.warning,y[u.TestStatus.aborted]=r.warning,y[c]=r.warning,y),d=(g={},g[i.MeasurementStatus.unset]="Unset",g[i.MeasurementStatus.pass]="Pass",g[i.MeasurementStatus.fail]="Fail",g[s.PhaseStatus.waiting]="Waiting",g[s.PhaseStatus.running]="Running",g[s.PhaseStatus.pass]="Pass",g[s.PhaseStatus.fail]="Fail",g[a.StationStatus.online]="Online",g[a.StationStatus.unreachable]="Unreachable",g[u.TestStatus.waiting]="Waiting",g[u.TestStatus.running]="Running",g[u.TestStatus.pass]="Pass",g[u.TestStatus.fail]="Fail",g[u.TestStatus.error]="Error",g[u.TestStatus.timeout]="Timeout",g[u.TestStatus.aborted]="Aborted",g[c]="Unknown",g),h=function(){function StatusToClassPipe(){}return StatusToClassPipe.prototype.transform=function(t){return t in p?l[p[t]]:(console.error('Unknown status "'+t+'".'),l[p[c]])},StatusToClassPipe=__decorate([o.Pipe({name:"statusToClass"})],StatusToClassPipe)}();e.StatusToClassPipe=h;var m=function(){function StatusToTextPipe(){}return StatusToTextPipe.prototype.transform=function(t){return t in p?d[t]:(console.error('Unknown status "'+t+'".'),d[c])},StatusToTextPipe=__decorate([o.Pipe({name:"statusToText"})],StatusToTextPipe)}();e.StatusToTextPipe=m;var f,y,g},268:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),o={format:function(t){return"—"}},i=function(){function TimeAgoPipe(){}return TimeAgoPipe.prototype.transform=function(t){return o.format(t)},TimeAgoPipe=__decorate([r.Pipe({name:"timeAgo",pure:!1})],TimeAgoPipe)}();e.TimeAgoPipe=i},269:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),o=function(){function TooltipDirective(t){this.ref=t}return TooltipDirective.prototype.ngOnInit=function(){if(0!==this.text.length){this.tooltipElement=document.createElement("div"),this.tooltipElement.innerHTML=this.text,this.tooltipElement.classList.add("ng-tooltip");var t=this.ref.nativeElement;t.classList.add("ng-tooltip-host"),t.insertBefore(this.tooltipElement,t.firstChild)}},TooltipDirective.prototype.onMouseEnter=function(){this.text.length>0&&this.tooltipElement.classList.add("ng-tooltip--is-visible")},TooltipDirective.prototype.onMouseLeave=function(){this.text.length>0&&this.tooltipElement.classList.remove("ng-tooltip--is-visible")},__decorate([r.Input("htfTooltip"),__metadata("design:type",String)],TooltipDirective.prototype,"text",void 0),__decorate([r.HostListener("mouseenter"),__metadata("design:type",Function),__metadata("design:paramtypes",[]),__metadata("design:returntype",void 0)],TooltipDirective.prototype,"onMouseEnter",null),__decorate([r.HostListener("mouseleave"),__metadata("design:type",Function),__metadata("design:paramtypes",[]),__metadata("design:returntype",void 0)],TooltipDirective.prototype,"onMouseLeave",null),TooltipDirective=__decorate([r.Directive({selector:"[htfTooltip]"}),__metadata("design:paramtypes",[r.ElementRef])],TooltipDirective)}();e.TooltipDirective=o},270:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),o="…",i='\n {{ trimmedContent }}\n \n',s=function(){function TrimmedTextComponent(){this.expanded=!1}return Object.defineProperty(TrimmedTextComponent.prototype,"buttonLabel",{get:function(){return!this.content||this.content.length<=this.maxChars?null:this.expanded?"collapse":"expand"},enumerable:!0,configurable:!0}),Object.defineProperty(TrimmedTextComponent.prototype,"trimmedContent",{get:function(){return!this.content||this.expanded||this.content.length<=this.maxChars?this.content:this.content.slice(0,this.maxChars-o.length)+o},enumerable:!0,configurable:!0}),TrimmedTextComponent.prototype.onClick=function(){this.expanded=!this.expanded},__decorate([r.Input(),__metadata("design:type",Number)],TrimmedTextComponent.prototype,"maxChars",void 0),__decorate([r.Input(),__metadata("design:type",String)],TrimmedTextComponent.prototype,"content",void 0),TrimmedTextComponent=__decorate([r.Component({selector:"htf-trimmed-text",template:i})],TrimmedTextComponent)}();e.TrimmedTextComponent=s},271:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),o=n(23),i=n(34),s=n(72),a=n(109),u=200,l=1.5,c=1500,p=function(){function StationSelectedEvent(t){this.station=t}return StationSelectedEvent}();e.StationSelectedEvent=p;var d=function(){function StationListComponent(t,e,n){var o=this;if(this.dashboard=t,this.time=e,this.onSelectStation=new r.EventEmitter,this.retryCountdown=this.time.observable.map(function(t){var e=o.dashboard.retryTimeMs-t;return"Retrying in "+Math.round(e/1e3)+"s."}),this.stations=t.stations,!n.dashboardEnabled)var i=t.messages.subscribe(function(){for(var t=0,e=Object.keys(o.stations);t0},enumerable:!0,configurable:!0}),Object.defineProperty(StationListComponent.prototype,"hasError",{get:function(){return this.dashboard.hasError},enumerable:!0,configurable:!0}),Object.defineProperty(StationListComponent.prototype,"isLoading",{get:function(){return this.dashboard.isSubscribing},enumerable:!0,configurable:!0}),Object.defineProperty(StationListComponent.prototype,"stationCount",{get:function(){return Object.keys(this.stations).length},enumerable:!0,configurable:!0}),StationListComponent.prototype.ngOnInit=function(){this.dashboard.subscribe(u,l,c)},StationListComponent.prototype.ngOnDestroy=function(){this.dashboard.unsubscribe()},StationListComponent.prototype.isReachable=function(t){return t.status!==i.StationStatus.unreachable},StationListComponent.prototype.select=function(t){this.onSelectStation.emit(new p(t))},StationListComponent.prototype.manualRetry=function(){this.dashboard.retryNow()},StationListComponent.prototype.manualReload=function(){this.dashboard.refresh()},__decorate([r.Input(),__metadata("design:type",i.Station)],StationListComponent.prototype,"selectedStation",void 0),__decorate([r.Output(),__metadata("design:type",Object)],StationListComponent.prototype,"onSelectStation",void 0),StationListComponent=__decorate([r.Component({selector:"htf-station-list",template:n(300),styles:[n(288)]}),__metadata("design:paramtypes",[a.DashboardService,s.TimeService,o.ConfigService])],StationListComponent)}();e.StationListComponent=d},272:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),o=n(23),i=n(20),s=n(24),a=function(){function AttachmentsComponent(t){this.config=t,this.expanded=!1}return AttachmentsComponent.prototype.linkForAttachment=function(t){if(null!==this.test.testId&&this.test.status===i.TestStatus.running){return s.getTestBaseUrl(this.config.dashboardEnabled,this.test)+"/phases/"+t.phaseDescriptorId+"/attachments/"+t.name}if(null!==this.test.fileName){return s.getStationBaseUrl(this.config.dashboardEnabled,this.test.station)+"/history/"+this.test.fileName+"/attachments/"+t.name+"?sha1="+t.sha1}return null},AttachmentsComponent.prototype.toggleExpanded=function(){this.expanded=!this.expanded},__decorate([r.Input(),__metadata("design:type",i.TestState)],AttachmentsComponent.prototype,"test",void 0),AttachmentsComponent=__decorate([r.Component({selector:"htf-attachments",template:n(301),styles:[n(289)]}),__metadata("design:paramtypes",[o.ConfigService])],AttachmentsComponent)}();e.AttachmentsComponent=a},273:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(33),o=n(2),i=n(30),s=n(106),a=n(34),u=n(20),l=n(24),c=n(110),p=n(73),d=function(){function TestSelectedEvent(t){this.test=t}return TestSelectedEvent}();e.TestSelectedEvent=d;var h=48,m=function(){function HistoryComponent(t,e){this.historyService=t,this.flashMessage=e,this.onSelectTest=new o.EventEmitter,this.collapsedNumTests=5,this.HistoryItemStatus=c.HistoryItemStatus,this.TestStatus=u.TestStatus,this.expanded=!1,this.hasError=!1,this.history=[],this.isLoading=!1,this.lastClickedItem=null}return HistoryComponent.prototype.ngOnChanges=function(t){"station"in t&&this.station.status===a.StationStatus.online&&(this.loadHistory(),this.history=this.historyService.getHistory(this.station))},HistoryComponent.prototype.isSelected=function(t){return t.status===c.HistoryItemStatus.loaded&&t.testState===this.selectedTest},HistoryComponent.prototype.onClick=function(t){var e=this;if(this.lastClickedItem=t,t.status!==c.HistoryItemStatus.loading)return t.status===c.HistoryItemStatus.loaded?(this.selectTest(t.testState),void(t.testState===this.selectedTest&&null===t.testState.fileName&&this.historyService.retrieveFileName(this.station,t).catch(function(t){404!==t.status&&e.flashMessage.warn("Could not retrieve history from disk, so attachments are not available. You may try again later.")}))):void this.historyService.loadItem(this.station,t).then(function(n){e.lastClickedItem===t&&e.selectTest(n)}).catch(function(t){console.error(t.stack);var n=l.messageFromErrorResponse(t);e.flashMessage.error("Error loading history item.",n)})},HistoryComponent.prototype.toggleExpanded=function(){this.expanded=!this.expanded},HistoryComponent.prototype.loadHistory=function(){var t=this;this.isLoading=!0,this.hasError=!1,this.historyService.refreshList(this.station).then(function(){t.isLoading=!1}).catch(function(){t.isLoading=!1,t.hasError=!0})},HistoryComponent.prototype.selectTest=function(t){t===this.selectedTest?this.selectedTest=null:this.selectedTest=t,this.onSelectTest.emit(new d(this.selectedTest))},__decorate([o.Input(),__metadata("design:type",u.TestState)],HistoryComponent.prototype,"selectedTest",void 0),__decorate([o.Input(),__metadata("design:type",a.Station)],HistoryComponent.prototype,"station",void 0),__decorate([o.Output(),__metadata("design:type",Object)],HistoryComponent.prototype,"onSelectTest",void 0),HistoryComponent=__decorate([o.Component({animations:[r.trigger("animateIn",s.washAndExpandIn(h))],selector:"htf-history",template:n(302),styles:[n(290)]}),__metadata("design:paramtypes",[p.HistoryService,i.FlashMessageService])],HistoryComponent)}();e.HistoryComponent=m},274:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),o=n(68),i=n(20),s=function(){function LogsComponent(){this.expanded=!1}return Object.defineProperty(LogsComponent.prototype,"collapsedErrorCount",{get:function(){for(var t=0,e=0,n=this.test.logs;eo.logLevels.warning&&(t+=1)}return this.test.logs[0].level>o.logLevels.warning&&(t-=1),t},enumerable:!0,configurable:!0}),LogsComponent.prototype.toggleExpanded=function(){this.expanded=!this.expanded},__decorate([r.Input(),__metadata("design:type",i.TestState)],LogsComponent.prototype,"test",void 0),LogsComponent=__decorate([r.Component({selector:"htf-logs",template:n(303),styles:[n(291)]})],LogsComponent)}();e.LogsComponent=s},275:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),o=n(20),i=function(){function PhaseListComponent(){this.showMeasurements=!1}return PhaseListComponent.prototype.toggleMeasurements=function(){this.showMeasurements=!this.showMeasurements},__decorate([r.Input(),__metadata("design:type",o.TestState)],PhaseListComponent.prototype,"test",void 0),PhaseListComponent=__decorate([r.Component({selector:"htf-phase-list",template:n(304)})],PhaseListComponent)}();e.PhaseListComponent=i},276:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),o=n(69),i=n(50),s=function(){function PhaseComponent(){this.MeasurementStatus=o.MeasurementStatus,this.PhaseStatus=i.PhaseStatus}return Object.defineProperty(PhaseComponent.prototype,"showMeasurements",{get:function(){return this.expand&&this.phase.measurements.length>0},enumerable:!0,configurable:!0}),__decorate([r.Input(),__metadata("design:type",i.Phase)],PhaseComponent.prototype,"phase",void 0),__decorate([r.Input(),__metadata("design:type",Boolean)],PhaseComponent.prototype,"expand",void 0),PhaseComponent=__decorate([r.Component({selector:"htf-phase",template:n(305),styles:[n(292)]})],PhaseComponent)}();e.PhaseComponent=s},277:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),o=n(23),i=n(34),s=n(112),a=function(){function StationDeselectedEvent(){}return StationDeselectedEvent}();e.StationDeselectedEvent=a;var u=200,l=1.08,c=1500,p=function(){function StationComponent(t,e){this.stationService=t,this.config=e,this.onDeselectStation=new r.EventEmitter,this.selectedTest=null}return Object.defineProperty(StationComponent.prototype,"activeTest",{get:function(){return null!==this.selectedTest?this.selectedTest:this.stationService.getTest(this.selectedStation)},enumerable:!0,configurable:!0}),Object.defineProperty(StationComponent.prototype,"dashboardEnabled",{get:function(){return this.config.dashboardEnabled},enumerable:!0,configurable:!0}),Object.defineProperty(StationComponent.prototype,"hasError",{get:function(){return this.stationService.hasError},enumerable:!0,configurable:!0}),Object.defineProperty(StationComponent.prototype,"isLoading",{get:function(){return this.stationService.isSubscribing},enumerable:!0,configurable:!0}),Object.defineProperty(StationComponent.prototype,"isOnline",{get:function(){return!(this.hasError||this.isLoading)},enumerable:!0,configurable:!0}),StationComponent.prototype.ngOnInit=function(){this.stationService.subscribe(this.selectedStation,u,l,c)},StationComponent.prototype.ngOnDestroy=function(){this.stationService.unsubscribe()},StationComponent.prototype.goBack=function(){this.onDeselectStation.emit(new a)},StationComponent.prototype.manualReload=function(){this.stationService.refresh()},StationComponent.prototype.onSelectTest=function(t){this.selectedTest=t},__decorate([r.Input(),__metadata("design:type",i.Station)],StationComponent.prototype,"selectedStation",void 0),__decorate([r.Output(),__metadata("design:type",Object)],StationComponent.prototype,"onDeselectStation",void 0),StationComponent=__decorate([r.Component({selector:"htf-station",template:n(306),styles:[n(293)]}),__metadata("design:paramtypes",[s.StationService,o.ConfigService])],StationComponent)}();e.StationComponent=p},278:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),o=n(50),i=n(20),s=n(107),a=function(){function TestSummaryComponent(){}return TestSummaryComponent.prototype.ngOnChanges=function(t){"test"in t&&this.progressBar&&this.progressBar.reset()},Object.defineProperty(TestSummaryComponent.prototype,"completedPhaseCount",{get:function(){if(this.test.status===i.TestStatus.waiting)return 0;if(this.test.status===i.TestStatus.pass)return this.test.phases.length;for(var t=0,e=0,n=this.test.phases;e\n \n\n \n \n\n'},296:function(t,e){t.exports='
\n \n \n X\n \n {{ message.content }}\n
\n\n \x3c!-- Avoid whitespace since flash-message-tooltip uses white-space: pre --\x3e\n {{ message.tooltip }}\n\n'},297:function(t,e){t.exports='\n\n \x3c!-- Wrap contents in an extra div for the background color animation. --\x3e\n
\n\n
\n
Operator input
\n
\n\n
\n\n
\n\n \n\n
\n {{ error }}\n
\n\n
\n \n {{ hasTextInput() ? \'Submit\' : \'Okay\' }}\n \n
\n\n
\n\n
\n\n'},298:function(t,e){t.exports='
\n {{ node.component.serial }}\n {{ node.component.instance_name }}\n ({{ node.component.part_number }})\n
\n\n
    \n
  • \n \n \n
  • \n
\n'},299:function(t,e){t.exports='
\n
\n
\n
\n
\n
\n
\n'},30:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),o=n(104),i=400,s=5e3,a=function(){function FlashMessageService(){this.messages=[],this.dismissalJob=null}return FlashMessageService.prototype.cancelDismissal=function(){null!==this.dismissalJob&&(clearTimeout(this.dismissalJob),this.dismissalJob=null)},FlashMessageService.prototype.dismissEarly=function(){this.cancelDismissal(),this.dismiss()},FlashMessageService.prototype.startDismissal=function(){var t=this;this.messages[0].isDismissed||(this.cancelDismissal(),this.dismissalJob=setTimeout(function(){t.dismiss(),t.dismissalJob=null},s))},FlashMessageService.prototype.error=function(t,e){void 0===e&&(e=null),this.addMessage(new o.FlashMessage(t,e,o.FlashMessageType.error))},FlashMessageService.prototype.warn=function(t,e){void 0===e&&(e=null),this.addMessage(new o.FlashMessage(t,e,o.FlashMessageType.warn))},FlashMessageService.prototype.addMessage=function(t){this.messages.push(t),1===this.messages.length&&this.startDismissal()},FlashMessageService.prototype.dismiss=function(){var t=this;this.messages[0].isDismissed=!0,setTimeout(function(){t.messages.shift(),t.messages.length>0&&t.startDismissal()},i+100)},FlashMessageService=__decorate([r.Injectable()],FlashMessageService)}();e.FlashMessageService=a},300:function(t,e){t.exports='\n\n
    \n
  • \n \n\n
    \n
    \n {{ station.label }} ({{ station.status | statusToText }})\n
    \n
    \n
    \n {{ station.host }}:{{ station.port }}\n
    \n
    \n
    \n {{ station.testDescription }}\n
    \n\n \n
  • \n
\n\n
\n Could not connect to the server.\n {{ (retryCountdown | async) || \'Retrying in…\' }}\n \n Try again.\n \n
\n'},301:function(t,e){t.exports='
\n\n
\n
Attachments
\n
\n \n {{ expanded? \'Collapse\' : \'Expand\' }}\n \n
\n\n \n There are no attachments yet.\n
\n\n \n Expand to view\n {{ test.attachments.length }}\n {{ test.attachments.length === 1 ? \'attachment\' : \'attachments\' }}.\n \n\n
    \n \n {{ attachment.name }}\n \n {{ attachment.name }}\n \n  {{ attachment.mimeType }}\n \n From phase: {{ attachment.phaseName }}\n \n
\n\n\n'},302:function(t,e){t.exports='
\n\n
\n
History
\n
\n \n {{ expanded? \'Collapse\' : \'Expand\' }}\n \n
\n\n
    \n \n \n\n \x3c!-- Wrap list item contents in an extra div to enable a “slide down” animation effect. --\x3e\n
    \n
    \n
    \n {{ historyItem.dutId || historyItem.fileName }}\n
    \n
    \n Started {{ historyItem.startTimeMillis | timeAgo }}\n
    \n
    \n
    \n Click to load.\n
    \n
    \n Loading...\n
    \n
    \n An error occurred.\n
    \n \n {{ historyItem.testState.status | statusToText }}\n
    \n
\n \n \n
  • \n Not showing {{ history.length - collapsedNumTests }} additional test\n {{ history.length - collapsedNumTests === 1? \'run\' : \'runs\'}}.\n
  • \n
  • \n There are no known completed test runs.\n
  • \n
  • \n Loading history from the server...\n
  • \n
  • \n Could not retrieve test history from the server.\n
  • \n \n\n\n'},303:function(t,e){t.exports='
    \n\n
    \n
    Logs
    \n
    \n \n {{ expanded? \'Collapse\' : \'Expand\' }}\n \n
    \n\n \n There are no logs yet.\n
    \n\n
      \n
    • \n\n
      \n {{ test.logs[0].timestampMillis | date:\'mediumTime\' }}\n
      {{ test.logs[0].loggerName }}
      \n
      \n\n
      {{ test.logs[0].message }}
      \n\n
    • \n \n Not showing {{ test.logs.length - 1 }} additional log\n {{ test.logs.length - 1 === 1? \'message\' : \'messages\'}}. \n \n {{ collapsedErrorCount }} additional\n {{ collapsedErrorCount === 1? \'error\' : \'errors\' }}.\n \n \n
    \n\n
      \n \n\n
      \n {{ log.timestampMillis | date:\'mediumTime\' }}\n
      {{ log.loggerName }}
      \n
      \n\n
      {{ log.message }}
      \n\n \n
    \n\n\n'},304:function(t,e){t.exports='
    \n\n
    \n
    Phases
    \n
    \n \n {{ showMeasurements ? \'Collapse\' : \'Expand\' }} all\n \n
    \n\n
      \n
    • \n \n \n
    • \n
    \n\n
    \n'},305:function(t,e){t.exports='
    \n \n {{ phase.name }}\n \n  {{ phase | elapsedTime:\'(%s)\' }}\n \n \n\n
    \n \n {{ phase.status | statusToText }}\n
    \n\n\n\n \n Measurement name\n Value\n Validators\n Result\n \n \n \n {{ measurement.name }}\n \n \n \n \n {{ measurement.validators }}\n \n Pass\n Fail\n \n \n \n \n\n'},306:function(t,e){t.exports='
    \n\n \n\n
    \n
    \n
    {{ selectedStation.label }}
    \n
    \n Status: Connected\n Status: Offline\n
    \n
    \n {{ selectedStation.testDescription }}\n
    \n {{ selectedStation.host }}:{{ selectedStation.port }}\n
    \n
    \n\n
    \n
    \n \n
    \n\n
    \n
    \n \n
    \n
    Displaying test record for a previous test run
    \n  ({{ selectedTest.startTimeMillis | timeAgo }})\n
    \n \n Return to current test\n \n
    \n
    \n\n \n \n \n \n
    \n\n
    \n \n \n
    \n
    \n\n
    \n\n\n'},307:function(t,e){t.exports='
    \n\n
    \n
    Current test: {{ test.name }}
    \n
    \n  {{ test | elapsedTime:\'(%s)\' }}\n
    \n
    \n \n {{ test.status | statusToText }}\n
    \n
    \n\n
    \n
    \n
    \n DUT: {{ test.dutId === null ? \'—\' : test.dutId }}\n
    \n
    \n
    \n Started: {{ test.startTimeMillis ? (test.startTimeMillis | date:\'medium\') : \'—\' }}\n
    \n
    \n
    \n\n
    \n
    \n Ran {{ completedPhaseCount }} of {{ this.test.phases.length }}\n {{ completedPhaseCount === 1? \'phase\' : \'phases\' }}\n
    \n \n
    \n\n
    \n \n
    \n\n\n\x3c!-- Empty state --\x3e\n
    \n
    \n
    Test: —
    \n
    \n
    \n
    \n No test information to display\n
    \n
    \n
    \n'},33:function(t,e,n){"use strict";function trigger(t,e){return{type:7,name:t,definitions:e,options:{}}}function animate(t,e){return void 0===e&&(e=null),{type:4,styles:e,timings:t}}function group(t,e){return void 0===e&&(e=null),{type:3,steps:t,options:e}}function sequence(t,e){return void 0===e&&(e=null),{type:2,steps:t,options:e}}function style(t){return{type:6,styles:t,offset:null}}function state(t,e,n){return{type:0,name:t,styles:e,options:n}}function keyframes(t){return{type:5,steps:t}}function transition(t,e,n){return void 0===n&&(n=null),{type:1,expr:t,animation:e,options:n}}function animation(t,e){return void 0===e&&(e=null),{type:8,animation:t,options:e}}function animateChild(t){return void 0===t&&(t=null),{type:9,options:t}}function useAnimation(t,e){return void 0===e&&(e=null),{type:10,animation:t,options:e}}function query(t,e,n){return void 0===n&&(n=null),{type:11,selector:t,animation:e,options:n}}function stagger(t,e){return{type:12,timings:t,animation:e}}/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - * @param {?} cb - * @return {?} - */ -function scheduleMicroTask(t){Promise.resolve(null).then(t)}Object.defineProperty(e,"__esModule",{value:!0}),n.d(e,"AnimationBuilder",function(){return r}),n.d(e,"AnimationFactory",function(){return o}),n.d(e,"AUTO_STYLE",function(){return i}),n.d(e,"animate",function(){return animate}),n.d(e,"animateChild",function(){return animateChild}),n.d(e,"animation",function(){return animation}),n.d(e,"group",function(){return group}),n.d(e,"keyframes",function(){return keyframes}),n.d(e,"query",function(){return query}),n.d(e,"sequence",function(){return sequence}),n.d(e,"stagger",function(){return stagger}),n.d(e,"state",function(){return state}),n.d(e,"style",function(){return style}),n.d(e,"transition",function(){return transition}),n.d(e,"trigger",function(){return trigger}),n.d(e,"useAnimation",function(){return useAnimation}),n.d(e,"NoopAnimationPlayer",function(){return s}),n.d(e,"ɵAnimationGroupPlayer",function(){return a}),n.d(e,"ɵPRE_STYLE",function(){return u});/** - * @license Angular v4.4.6 - * (c) 2010-2017 Google, Inc. https://angular.io/ - * License: MIT - */ -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var r=function(){function AnimationBuilder(){}return AnimationBuilder.prototype.build=function(t){},AnimationBuilder}(),o=function(){function AnimationFactory(){}return AnimationFactory.prototype.create=function(t,e){},AnimationFactory}(),i="*",s=function(){function NoopAnimationPlayer(){this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._started=!1,this._destroyed=!1,this._finished=!1,this.parentPlayer=null,this.totalTime=0}return NoopAnimationPlayer.prototype._onFinish=function(){this._finished||(this._finished=!0,this._onDoneFns.forEach(function(t){return t()}),this._onDoneFns=[])},NoopAnimationPlayer.prototype.onStart=function(t){this._onStartFns.push(t)},NoopAnimationPlayer.prototype.onDone=function(t){this._onDoneFns.push(t)},NoopAnimationPlayer.prototype.onDestroy=function(t){this._onDestroyFns.push(t)},NoopAnimationPlayer.prototype.hasStarted=function(){return this._started},NoopAnimationPlayer.prototype.init=function(){},NoopAnimationPlayer.prototype.play=function(){this.hasStarted()||(this.triggerMicrotask(),this._onStart()),this._started=!0},NoopAnimationPlayer.prototype.triggerMicrotask=function(){var t=this;scheduleMicroTask(function(){return t._onFinish()})},NoopAnimationPlayer.prototype._onStart=function(){this._onStartFns.forEach(function(t){return t()}),this._onStartFns=[]},NoopAnimationPlayer.prototype.pause=function(){},NoopAnimationPlayer.prototype.restart=function(){},NoopAnimationPlayer.prototype.finish=function(){this._onFinish()},NoopAnimationPlayer.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.hasStarted()||this._onStart(),this.finish(),this._onDestroyFns.forEach(function(t){return t()}),this._onDestroyFns=[])},NoopAnimationPlayer.prototype.reset=function(){},NoopAnimationPlayer.prototype.setPosition=function(t){},NoopAnimationPlayer.prototype.getPosition=function(){return 0},NoopAnimationPlayer}(),a=function(){function AnimationGroupPlayer(t){var e=this;this._players=t,this._onDoneFns=[],this._onStartFns=[],this._finished=!1,this._started=!1,this._destroyed=!1,this._onDestroyFns=[],this.parentPlayer=null,this.totalTime=0;var n=0,r=0,o=0,i=this._players.length;0==i?scheduleMicroTask(function(){return e._onFinish()}):this._players.forEach(function(t){t.parentPlayer=e,t.onDone(function(){++n>=i&&e._onFinish()}),t.onDestroy(function(){++r>=i&&e._onDestroy()}),t.onStart(function(){++o>=i&&e._onStart()})}),this.totalTime=this._players.reduce(function(t,e){return Math.max(t,e.totalTime)},0)}return AnimationGroupPlayer.prototype._onFinish=function(){this._finished||(this._finished=!0,this._onDoneFns.forEach(function(t){return t()}),this._onDoneFns=[])},AnimationGroupPlayer.prototype.init=function(){this._players.forEach(function(t){return t.init()})},AnimationGroupPlayer.prototype.onStart=function(t){this._onStartFns.push(t)},AnimationGroupPlayer.prototype._onStart=function(){this.hasStarted()||(this._onStartFns.forEach(function(t){return t()}),this._onStartFns=[],this._started=!0)},AnimationGroupPlayer.prototype.onDone=function(t){this._onDoneFns.push(t)},AnimationGroupPlayer.prototype.onDestroy=function(t){this._onDestroyFns.push(t)},AnimationGroupPlayer.prototype.hasStarted=function(){return this._started},AnimationGroupPlayer.prototype.play=function(){this.parentPlayer||this.init(),this._onStart(),this._players.forEach(function(t){return t.play()})},AnimationGroupPlayer.prototype.pause=function(){this._players.forEach(function(t){return t.pause()})},AnimationGroupPlayer.prototype.restart=function(){this._players.forEach(function(t){return t.restart()})},AnimationGroupPlayer.prototype.finish=function(){this._onFinish(),this._players.forEach(function(t){return t.finish()})},AnimationGroupPlayer.prototype.destroy=function(){this._onDestroy()},AnimationGroupPlayer.prototype._onDestroy=function(){this._destroyed||(this._destroyed=!0,this._onFinish(),this._players.forEach(function(t){return t.destroy()}),this._onDestroyFns.forEach(function(t){return t()}),this._onDestroyFns=[])},AnimationGroupPlayer.prototype.reset=function(){this._players.forEach(function(t){return t.reset()}),this._destroyed=!1,this._finished=!1,this._started=!1},AnimationGroupPlayer.prototype.setPosition=function(t){var e=t*this.totalTime;this._players.forEach(function(t){var n=t.totalTime?Math.min(1,e/t.totalTime):1;t.setPosition(n)})},AnimationGroupPlayer.prototype.getPosition=function(){var t=0;return this._players.forEach(function(e){var n=e.getPosition();t=Math.min(n,t)}),t},Object.defineProperty(AnimationGroupPlayer.prototype,"players",{get:function(){return this._players},enumerable:!0,configurable:!0}),AnimationGroupPlayer.prototype.beforeDestroy=function(){this.players.forEach(function(t){t.beforeDestroy&&t.beforeDestroy()})},AnimationGroupPlayer}(),u="!"},34:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});!function(t){t[t.online=7]="online",t[t.unreachable=8]="unreachable"}(e.StationStatus||(e.StationStatus={}));var r=function(){function Station(t){Object.assign(this,t)}return Station}();e.Station=r},50:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});!function(t){t[t.waiting=3]="waiting",t[t.running=4]="running",t[t.pass=5]="pass",t[t.fail=6]="fail"}(e.PhaseStatus||(e.PhaseStatus={}));var r=function(){function Phase(t){Object.assign(this,t)}return Phase}();e.Phase=r},610:function(t,e,n){"use strict";function main(){return o.platformBrowserDynamic().bootstrapModule(i.AppModule).then(function(t){return t})}Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),o=n(67),i=n(245);r.enableProdMode(),e.main=main,"complete"===document.readyState?main():document.addEventListener("DOMContentLoaded",main)},68:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.logLevels={debug:10,info:20,warning:30,error:40,critical:50};var r=function(){function LogRecord(t){Object.assign(this,t)}return LogRecord}();e.LogRecord=r},69:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});!function(t){t[t.unset=0]="unset",t[t.pass=1]="pass",t[t.fail=2]="fail"}(e.MeasurementStatus||(e.MeasurementStatus={}));var r=function(){function Measurement(t){Object.assign(this,t)}return Measurement}();e.Measurement=r},70:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(19),o=n(2),i=n(28),s=n(261),a=n(262),u=n(263),l=n(264),c=n(266),p=n(107),d=n(71),h=n(267),m=n(268),f=n(72),y=n(269),g=n(270),v=function(){function SharedModule(){}return SharedModule=__decorate([o.NgModule({imports:[r.CommonModule,i.HttpModule],declarations:[s.ElapsedTimePipe,a.FocusDirective,u.GenealogyNodeComponent,l.LogLevelToClassPipe,c.ObjectToSortedValuesPipe,p.ProgressBarComponent,h.StatusToClassPipe,h.StatusToTextPipe,m.TimeAgoPipe,g.TrimmedTextComponent,y.TooltipDirective],providers:[d.SockJsService,f.TimeService],exports:[r.CommonModule,s.ElapsedTimePipe,a.FocusDirective,u.GenealogyNodeComponent,l.LogLevelToClassPipe,c.ObjectToSortedValuesPipe,p.ProgressBarComponent,h.StatusToClassPipe,h.StatusToTextPipe,m.TimeAgoPipe,g.TrimmedTextComponent,y.TooltipDirective]})],SharedModule)}();e.SharedModule=v},71:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),o=function(){function SockJsService(){this.sockJs=SockJS}return SockJsService=__decorate([r.Injectable()],SockJsService)}();e.SockJsService=o},72:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),n(116),n(119),n(121);var r=n(2),o=n(0),i=100,s=function(){function TimeService(){var t=this;this.observable=o.Observable.interval(i).map(function(){return t.last=Date.now(),t.last}).publish(),this.last=null,this.observable.connect()}return TimeService=__decorate([r.Injectable(),__metadata("design:paramtypes",[])],TimeService)}();e.TimeService=s},73:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(102),o=n(2),i=n(23),s=n(30),a=n(24),u=n(110),l=n(111),c=function(){function HistoryService(t,e,n){this.config=t,this.http=e,this.flashMessage=n,this.cache={},this.history={}}return HistoryService.prototype.getCache=function(t){return t.hostPort in this.cache||(this.cache[t.hostPort]={}),this.cache[t.hostPort]},HistoryService.prototype.getHistory=function(t){return t.hostPort in this.history||(this.history[t.hostPort]=[]),this.history[t.hostPort]},HistoryService.prototype.loadItem=function(t,e){var n=this;if(e.status===u.HistoryItemStatus.loading||e.status===u.HistoryItemStatus.loaded)throw new Error("Cannot load a history item that is loading or has loaded.");var r=a.getStationBaseUrl(this.config.dashboardEnabled,t),o=r+"/history/"+e.fileName;return e.status=u.HistoryItemStatus.loading,this.http.get(o).toPromise().then(function(r){var o=e.fileName,i=l.makeTest(r,null,o,t);return n.getCache(t)[e.uniqueId]=i,e.status=u.HistoryItemStatus.loaded,e.testState=i,i}).catch(function(t){return e.status=u.HistoryItemStatus.error,Promise.reject(t)})},HistoryService.prototype.prependItemFromTestState=function(t,e){var n=new u.HistoryItem({drawAttention:!0,dutId:e.dutId,fileName:null,startTimeMillis:e.startTimeMillis,status:u.HistoryItemStatus.loaded,testState:e});this.getCache(t)[n.uniqueId]=e,this.getHistory(t).unshift(n)},HistoryService.prototype.refreshList=function(t){var e=this,n=a.getStationBaseUrl(this.config.dashboardEnabled,t),r=n+"/history";return this.http.get(r).toPromise().then(function(n){var r=n.data;e.getHistory(t).length=0;var o=r.map(function(n){var r=new u.HistoryItem({drawAttention:!1,dutId:n.dut_id,fileName:n.file_name,startTimeMillis:n.start_time_millis,status:u.HistoryItemStatus.unloaded,testState:null});if(r.uniqueId in e.getCache(t)){var o=e.getCache(t)[r.uniqueId];r.status=u.HistoryItemStatus.loaded,r.testState=o}return r});a.sortByProperty(o,"startTimeMillis",!0),(i=e.history[t.hostPort]).push.apply(i,o);var i}).catch(function(t){if(404===t.status)console.info("History from disk appears to be disabled.");else{var n=a.messageFromHttpClientErrorResponse(t);e.flashMessage.error("HTTP request for history failed.",n)}return Promise.reject(t)})},HistoryService.prototype.retrieveFileName=function(t,e){if(e.status!==u.HistoryItemStatus.loaded)throw new Error("Cannot retrieve file name for a history item that is not loaded.");var n=a.getStationBaseUrl(this.config.dashboardEnabled,t),r=n+"/history?dutId="+e.dutId+"&startTimeMillis="+e.startTimeMillis;return this.http.get(r).toPromise().then(function(t){var n=t.data;if(0===n.length)return Promise.reject(new Error("Server returned no history items."));if(n.length>1)return Promise.reject(new Error("Server returned more than one history item."));var r=n[0];e.fileName=r.file_name,e.testState.fileName=r.file_name})},HistoryService=__decorate([o.Injectable(),__metadata("design:paramtypes",[i.ConfigService,r.HttpClient,s.FlashMessageService])],HistoryService)}();e.HistoryService=c}},[610]); -//# sourceMappingURL=app.d714dbd143d37088ddc9.js.map \ No newline at end of file diff --git a/openhtf/output/web_gui/dist/js/app.d714dbd143d37088ddc9.js.map b/openhtf/output/web_gui/dist/js/app.d714dbd143d37088ddc9.js.map deleted file mode 100644 index a935dadeb..000000000 --- a/openhtf/output/web_gui/dist/js/app.d714dbd143d37088ddc9.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///js/app.d714dbd143d37088ddc9.js","webpack:///./~/@angular/common/@angular/common/http.es5.js","webpack:///./~/@angular/forms/@angular/forms.es5.js","webpack:///./src/app/core/flash-message.model.ts","webpack:///./src/app/plugs/plugs.module.ts","webpack:///./src/app/shared/animations.ts","webpack:///./src/app/shared/progress-bar.component.ts","webpack:///./src/app/shared/subscription.ts","webpack:///./src/app/stations/station-list/dashboard.service.ts","webpack:///./src/app/stations/station/history-item.model.ts","webpack:///./src/app/stations/station/station-data.ts","webpack:///./src/app/stations/station/station.service.ts","webpack:///./src/app/shared/models/test-state.model.ts","webpack:///./src/app/core/config.service.ts","webpack:///./src/app/shared/util.ts","webpack:///./src/app/app.module.ts","webpack:///./~/@angular/animations/@angular/animations/browser.es5.js","webpack:///./~/@angular/platform-browser/@angular/platform-browser/animations.es5.js","webpack:///./src/app/app.component.ts","webpack:///./src/app/core/core.module.ts","webpack:///./src/app/core/flash-messages.component.ts","webpack:///./src/app/plugs/base-plug.ts","webpack:///./src/app/plugs/user-input-plug.component.ts","webpack:///./src/app/shared/elapsed-time.pipe.ts","webpack:///./src/app/shared/focus.directive.ts","webpack:///./src/app/shared/genealogy-node.component.ts","webpack:///./src/app/shared/log-level-to-class.pipe.ts","webpack:///./src/app/shared/models/attachment.model.ts","webpack:///./src/app/shared/object-to-sorted-values.pipe.ts","webpack:///./src/app/shared/status-pipes.ts","webpack:///./src/app/shared/time-ago.pipe.ts","webpack:///./src/app/shared/tooltip.directive.ts","webpack:///./src/app/shared/trimmed-text.component.ts","webpack:///./src/app/stations/station-list/station-list.component.ts","webpack:///./src/app/stations/station/attachments.component.ts","webpack:///./src/app/stations/station/history.component.ts","webpack:///./src/app/stations/station/logs.component.ts","webpack:///./src/app/stations/station/phase-list.component.ts","webpack:///./src/app/stations/station/phase.component.ts","webpack:///./src/app/stations/station/station.component.ts","webpack:///./src/app/stations/station/test-summary.component.ts","webpack:///./src/app/stations/stations.module.ts","webpack:///./src/app/app.component.scss","webpack:///./src/app/core/flash-messages.component.scss","webpack:///./src/app/plugs/user-input-plug.component.scss","webpack:///./src/app/shared/genealogy-node.component.scss","webpack:///./src/app/shared/progress-bar.component.scss","webpack:///./src/app/stations/station-list/station-list.component.scss","webpack:///./src/app/stations/station/attachments.component.scss","webpack:///./src/app/stations/station/history.component.scss","webpack:///./src/app/stations/station/logs.component.scss","webpack:///./src/app/stations/station/phase.component.scss","webpack:///./src/app/stations/station/station.component.scss","webpack:///./src/app/stations/station/test-summary.component.scss","webpack:///./src/app/app.component.html","webpack:///./src/app/core/flash-messages.component.html","webpack:///./src/app/plugs/user-input-plug.component.html","webpack:///./src/app/shared/genealogy-node.component.html","webpack:///./src/app/shared/progress-bar.component.html","webpack:///./src/app/core/flash-message.service.ts","webpack:///./src/app/stations/station-list/station-list.component.html","webpack:///./src/app/stations/station/attachments.component.html","webpack:///./src/app/stations/station/history.component.html","webpack:///./src/app/stations/station/logs.component.html","webpack:///./src/app/stations/station/phase-list.component.html","webpack:///./src/app/stations/station/phase.component.html","webpack:///./src/app/stations/station/station.component.html","webpack:///./src/app/stations/station/test-summary.component.html","webpack:///./~/@angular/animations/@angular/animations.es5.js","webpack:///./src/app/shared/models/station.model.ts","webpack:///./src/app/shared/models/phase.model.ts","webpack:///./src/main.ts","webpack:///./src/app/shared/models/log-record.model.ts","webpack:///./src/app/shared/models/measurement.model.ts","webpack:///./src/app/shared/shared.module.ts","webpack:///./src/app/shared/sock-js.service.ts","webpack:///./src/app/shared/time.service.ts","webpack:///./src/app/stations/station/history.service.ts"],"names":["webpackJsonp","102","module","__webpack_exports__","__webpack_require__","paramParser","rawParams","codec","map$$1","Map","length","split","forEach","param","eqIdx","indexOf","_a","decodeKey","slice","decodeValue","key","val","list","get","push","set","standardEncoding","v","encodeURIComponent","replace","mightHaveBody","method","isArrayBuffer","value","ArrayBuffer","isBlob","Blob","isFormData","FormData","addBody","options","body","headers","observe","params","reportProgress","responseType","withCredentials","getResponseUrl","xhr","responseURL","test","getAllResponseHeaders","getResponseHeader","interceptingHandler","backend","interceptors","reduceRight","next","interceptor","HttpInterceptorHandler","jsonpCallbackContext","window","Object","defineProperty","__WEBPACK_IMPORTED_MODULE_0_tslib__","__WEBPACK_IMPORTED_MODULE_1__angular_core__","__WEBPACK_IMPORTED_MODULE_2_rxjs_observable_of__","__WEBPACK_IMPORTED_MODULE_3_rxjs_operator_concatMap__","n","__WEBPACK_IMPORTED_MODULE_4_rxjs_operator_filter__","__WEBPACK_IMPORTED_MODULE_5_rxjs_operator_map__","__WEBPACK_IMPORTED_MODULE_6__angular_common__","__WEBPACK_IMPORTED_MODULE_7_rxjs_Observable__","d","HttpBackend","HttpHandler","HttpClient","HttpHeaders","HTTP_INTERCEPTORS","JsonpClientBackend","JsonpInterceptor","HttpClientJsonpModule","HttpClientModule","HttpClientXsrfModule","HttpParams","HttpUrlEncodingCodec","HttpRequest","HttpErrorResponse","HttpEventType","HttpHeaderResponse","HttpResponse","HttpResponseBase","HttpXhrBackend","XhrFactory","HttpXsrfTokenExtractor","NoopInterceptor","JsonpCallbackContext","BrowserXhr","HttpXsrfCookieExtractor","HttpXsrfInterceptor","XSRF_COOKIE_NAME","XSRF_HEADER_NAME","prototype","handle","req","encodeKey","k","encodeValue","decodeURIComponent","this","updates","cloneFrom","encoder","map","fromString","has","init","res","getAll","keys","Array","from","append","clone","op","delete","toString","_this","eKey","join","update","concat","base","undefined","base_1","idx","splice","normalizedNames","lazyUpdate","lazyInit","line","index","name","toLowerCase","trim","maybeSetNormalizedName","values","lcName","copyFrom","applyUpdate","other","apply","toDelete_1","existing","filter","fn","url","third","fourth","toUpperCase","urlWithParams","qIdx","sep","serializeBody","isArray","JSON","stringify","detectContentTypeHeader","type","setHeaders","reduce","setParams","Sent","UploadProgress","ResponseHeader","DownloadProgress","Response","User","defaultStatus","defaultStatusText","status","statusText","ok","_super","call","message","error","handler","request","first","events$","i","res$","event","Error","head","jsonp","callbackParam","patch","post","put","decorators","ctorParameters","intercept","nextRequestId","JSONP_ERR_NO_CALLBACK","JSONP_ERR_WRONG_METHOD","JSONP_ERR_WRONG_RESPONSE_TYPE","callbackMap","document","nextCallback","observer","callback","node","createElement","src","finished","cancelled","data","cleanup","parentNode","removeChild","onLoad","complete","onError","addEventListener","appendChild","removeEventListener","args","XSSI_PREFIX","build","XMLHttpRequest","xhrFactory","open","setRequestHeader","detectedType","reqBody","headerResponse","partialFromXhr","response","responseText","parse","text","sentHeaders","onDownProgress","progressEvent","loaded","lengthComputable","total","partialText","onUpProgress","progress","upload","send","abort","getToken","doc","platform","cookieName","lastCookieString","lastToken","parseCount","cookieString","cookie","tokenService","headerName","lcUrl","startsWith","token","disable","ngModule","providers","provide","useClass","withOptions","useValue","useExisting","multi","imports","useFactory","deps","103","isEmptyInputValue","isPresent","o","toObservable","r","obs","__WEBPACK_IMPORTED_MODULE_3_rxjs_observable_fromPromise__","_executeValidators","control","validators","_executeAsyncValidators","_mergeErrors","arrayOfErrors","errors","assign","_isAndroid","__WEBPACK_IMPORTED_MODULE_5__angular_platform_browser__","getUserAgent","normalizeValidator","validator","validate","c","normalizeAsyncValidator","unimplemented","_buildValueString","id","_extractId","valueString","_buildValueString$1","_extractId$1","controlPath","parent","setUpControl","dir","_throwError","valueAccessor","Validators","compose","asyncValidator","composeAsync","writeValue","registerOnChange","newValue","viewToModelUpdate","markAsDirty","setValue","emitModelToViewChange","registerOnTouched","markAsTouched","emitModelEvent","setDisabledState","registerOnDisabledChange","isDisabled","_rawValidators","registerOnValidatorChange","updateValueAndValidity","_rawAsyncValidators","cleanUpControl","_noControlError","_clearChangeFns","setUpFormContainer","messageEnd","path","composeValidators","composeAsyncValidators","isPropertyUpdated","changes","viewModel","hasOwnProperty","change","isFirstChange","currentValue","isBuiltInAccessor","BUILTIN_ACCESSORS","some","a","constructor","selectValueAccessor","valueAccessors","defaultAccessor","builtinAccessor","customAccessor","DefaultValueAccessor","_find","delimiter","FormGroup","controls","FormArray","at","coerceToValidator","coerceToAsyncValidator","remove","el","_hasInvalidParent","FormGroupName","FormGroupDirective","FormArrayName","__WEBPACK_IMPORTED_MODULE_2_rxjs_observable_forkJoin__","__WEBPACK_IMPORTED_MODULE_4_rxjs_operator_map__","AbstractControlDirective","AbstractFormGroupDirective","CheckboxControlValueAccessor","ControlContainer","NG_VALUE_ACCESSOR","COMPOSITION_BUFFER_MODE","NgControl","NgControlStatus","NgControlStatusGroup","NgForm","NgModel","NgModelGroup","RadioControlValueAccessor","FormControlDirective","FormControlName","NgSelectOption","SelectControlValueAccessor","SelectMultipleControlValueAccessor","CheckboxRequiredValidator","EmailValidator","MaxLengthValidator","MinLengthValidator","PatternValidator","RequiredValidator","FormBuilder","AbstractControl","FormControl","NG_ASYNC_VALIDATORS","NG_VALIDATORS","VERSION","FormsModule","ReactiveFormsModule","InternalFormsSharedModule","REACTIVE_DRIVEN_DIRECTIVES","SHARED_FORM_DIRECTIVES","TEMPLATE_DRIVEN_DIRECTIVES","CHECKBOX_VALUE_ACCESSOR","DEFAULT_VALUE_ACCESSOR","AbstractControlStatus","ngControlStatusHost","formDirectiveProvider","formControlBinding","modelGroupProvider","NgNoValidate","NUMBER_VALUE_ACCESSOR","NumberValueAccessor","RADIO_VALUE_ACCESSOR","RadioControlRegistry","RANGE_VALUE_ACCESSOR","RangeValueAccessor","formControlBinding$1","controlNameBinding","formDirectiveProvider$1","formArrayNameProvider","formGroupNameProvider","SELECT_VALUE_ACCESSOR","NgSelectMultipleOption","SELECT_MULTIPLE_VALUE_ACCESSOR","CHECKBOX_REQUIRED_VALIDATOR","EMAIL_VALIDATOR","MAX_LENGTH_VALIDATOR","MIN_LENGTH_VALIDATOR","PATTERN_VALIDATOR","REQUIRED_VALIDATOR","enumerable","configurable","valid","invalid","pending","disabled","enabled","pristine","dirty","touched","untouched","statusChanges","valueChanges","reset","hasError","errorCode","getError","arguments","EMAIL_REGEXP","min","parseFloat","isNaN","actual","max","required","requiredTrue","email","minLength","minlength","requiredLength","actualLength","maxLength","maxlength","pattern","nullValidator","regex","regexStr","RegExp","requiredPattern","actualValue","presentValidators","observables","_renderer","_elementRef","onChange","_","onTouched","setProperty","nativeElement","selector","host","(change)","(blur)","_compositionMode","_composing","normalizedValue","_handleInput","_compositionStart","_compositionEnd","(input)","(compositionstart)","(compositionend)","_parent","_accessors","add","accessor","select","_isSameGroup","fireUncheck","controlPair","_control","_registry","_injector","ngOnInit","_checkName","ngOnDestroy","_state","_fn","formControlName","_throwNameError","propDecorators","_optionMap","_idCounter","_compareWith","_getOptionId","_getOptionValue","_registerOption","_i","compareWith","_element","_select","_setElementValue","ngValue","optionSelectedStateSetter","ids_1","opt","_setSelected","selected","selectedOptions","item","_value","_checkParentType","addFormGroup","formDirective","removeFormGroup","getFormGroup","_validators","_asyncValidators","cd","_cd","[class.ng-untouched]","[class.ng-touched]","[class.ng-pristine]","[class.ng-dirty]","[class.ng-valid]","[class.ng-invalid]","[class.ng-pending]","VALID","INVALID","PENDING","DISABLED","_onCollectionChange","_pristine","_touched","_onDisabledChange","_status","_errors","_valueChanges","_statusChanges","setValidators","newValidator","setAsyncValidators","clearValidators","clearAsyncValidators","opts","onlySelf","markAsUntouched","_forEachChild","_updateTouched","markAsPristine","_updatePristine","markAsPending","_updateValue","emitEvent","emit","_updateAncestors","changeFn","enable","setParent","patchValue","_setInitialStatus","_cancelExistingSubscription","_runValidator","_calculateStatus","_runAsyncValidator","_updateTreeValidity","ctrl","_allControlsDisabled","_asyncValidationSubscription","subscribe","setErrors","unsubscribe","_updateControlsErrors","x","_initObservables","_anyControlsHaveStatus","cb","_anyControls","condition","_anyControlsDirty","_anyControlsTouched","_isBoxedValue","formState","_registerOnCollectionChange","_onChange","_applyFormState","emitViewToModelChange","_setUpControls","registerControl","addControl","removeControl","setControl","contains","controlName","_checkAllValuesPresent","_throwIfControlMissing","getRawValue","_reduceChildren","acc","_reduceValue","initValue","_registerControl","insert","removeAt","resolvedPromise","Promise","resolve","asyncValidators","_submitted","ngSubmit","form","then","container","_findContainer","getControl","group","updateModel","onSubmit","$event","onReset","resetForm","pop","(submit)","(reset)","outputs","exportAs","FormErrorExamples","formGroupName","formArrayName","ngModelGroup","ngModelWithFormGroup","TemplateDrivenErrors","modelParentException","formGroupNameException","missingNameException","modelGroupParentException","resolvedPromise$1","_registered","ngOnChanges","_checkForErrors","_setUpControl","_updateDisabled","model","_isStandalone","_setUpStandalone","standalone","disabledValue","ReactiveErrors","controlParentException","ngModelGroupException","missingFormException","groupParentException","arrayParentException","disabledAttrWarning","console","warn","_isControlChanged","directives","_checkFormPresent","_updateValidators","_updateDomValue","_updateRegistrations","addFormArray","removeFormArray","getFormArray","newCtrl","_oldForm","sync","async","_added","_required","[attr.required]","_enabled","_createValidator","_validator","parseInt","[attr.minlength]","[attr.maxlength]","[attr.pattern]","controlsConfig","extra","_reduceControls","array","_createControl","controlConfig","novalidate","declarations","exports","104","messageCount","FlashMessageType","FlashMessage","content","tooltip","isDismissed","hasTooltip","Boolean","showTooltip","105","common_1","core_1","forms_1","http_1","shared_module_1","user_input_plug_component_1","PlugsModule","__decorate","NgModule","CommonModule","HttpModule","SharedModule","UserInputPlugComponent","106","washAndExpandIn","maxHeight","animations_1","state","style","background","max-height","transition","animate","washIn","107","ProgressBarComponent","isReset","width","Math","Input","__metadata","Number","Component","template","styles","108","SubscriptionState","Subject_1","Subscription","sockJsService","messages","Subject","retryTimeMs","currentRetryMs","retryTimeoutId","sock","unsubscribed","retryMs","retryBackoff","retryMax","failed","waiting","subscribing","refresh","subscribeWithSavedParams","retryNow","cancelTimeout","subscribeToUrl","MAX_VALUE","debug","close","clearTimeout","sockJs","onopen","subscribed","onclose","Date","now","setTimeout","onmessage","109","station_model_1","sock_js_service_1","subscription_1","util_1","dashboardUrl","devHost","dashboardStatusMap","UNREACHABLE","StationStatus","unreachable","ONLINE","online","DashboardService","stations","DashboardService_1","validateResponse","newStations","parseResponse","applyResponse","__extends","hostPort","rawStation","Station","cell","label","getStationLabel","port","stationId","station_id","testDescription","test_description","testName","test_name","newStation","_b","_c","urlHost","Injectable","SockJsService","110","HistoryItemStatus","HistoryItem","dutId","startTimeMillis","fileName","111","makeTest","rawState","testId","station","logRecords","test_record","log_records","log","logger_name","reverse","logs","makeLog","phases","phase","makePhase","running_phase_state","attachments","accumulator","testStateStatusCompleted","testRecordOutcomeMap","outcome","testStateStatusMap","test_state_model_1","TestState","dut_id","endTimeMillis","end_time_millis","metadata","plugDescriptors","plugs","plug_descriptors","plugStates","plug_states","start_time_millis","running","rawAttachment","attachment_model_1","Attachment","mimeType","mimetype","phaseDescriptorId","descriptor_id","phaseName","sha1","sortByProperty","measurements","rawMeasuredValue","measured_value","measuredValue","measurement_model_1","Measurement","measurementStatusMap","phase_model_1","PhaseStatus","pass","measurements_1","MeasurementStatus","fail","Phase","descriptorId","makePhaseFromDescriptor","descriptor","measurement","log_record_model_1","LogRecord","level","lineNumber","lineno","loggerName","source","timestampMillis","timestamp_millis","WAITING_FOR_TEST_START","TestStatus","RUNNING","PASS","FAIL","ERROR","TIMEOUT","timeout","ABORTED","aborted","UNSET","unset","PARTIALLY_SET","112","Observable_1","config_service_1","flash_message_service_1","history_service_1","station_data_1","StationService","config","flashMessage","historyService","http","phaseDescriptorPromise","testsById","testsByStation","messagesSubscription","StationService_1","mergeMap","applyPhaseDescriptors","baseUrl","getStationBaseUrl","dashboardEnabled","stationUrl","getTest","testState","test_uid","prependItemFromTestState","getOrRequestPhaseDescriptors","descriptors","numExecutedPhases","lastExecutedPhaseIndex","lastExecutedDescriptorIndex","lastExecuted","descriptors_1","catch","Observable","of","testBaseUrl","getTestBaseUrl","toPromise","json","messageFromErrorResponse","reject","fromPromise","oldTest","ConfigService","FlashMessageService","HistoryService","Http","20","PlugDescriptor","23","DASHBOARD_SERVER_TYPE","defaultConfig","server_type","history_from_disk_enabled","initialize","extraKeys","extraKeys_1","24","localhostAddress","errorBody","errorJson","e","_body","messageFromHttpClientErrorResponse","ErrorEvent","property","sort","b","location","245","platform_browser_1","http_2","app_component_1","core_module_1","plugs_module_1","stations_module_1","hmr_1","AppModule","appRef","hmrOnInit","store","hmrOnDestroy","cmpLocation","components","cmp","disposeOldHosts","createNewHosts","removeNgStyles","hmrAfterDestroy","BrowserAnimationsModule","BrowserModule","CoreModule","StationsModule","AppComponent","bootstrap","ApplicationRef","252","optimizeGroupPlayer","players","__WEBPACK_IMPORTED_MODULE_1__angular_animations__","normalizeKeyframes","driver","normalizer","element","keyframes","preStyles","postStyles","normalizedKeyframes","previousOffset","previousKeyframe","kf","offset","isSameOffset","normalizedKeyframe","prop","normalizedProp","normalizePropertyName","normalizeStyleValue","LINE_START","listenOnPlayer","player","eventName","onStart","copyAnimationEvent","totalTime","onDone","onDestroy","makeAnimationEvent","triggerName","fromState","toState","getOrSetAsInMap","defaultValue","parseTimelineCommand","command","separatorPos","substring","substr","resolveTimingValue","matches","match","_convertTimeValueToMS","unit","ONE_SECOND","resolveTiming","timings","allowNegativeValues","parseTimeExpression","exp","duration","delay","easing","delayMatch","floor","easingVal","containsErrors","startIndex","copyObj","obj","destination","normalizeStyles","normalizedStyles","copyStyles","readPrototype","setStyles","camelProp","dashCaseToCamelCase","eraseStyles","normalizeAnimationEntry","steps","validateStyleParams","extractStyleParams","varName","PARAM_REGEX","exec","lastIndex","interpolateParams","original","str","localVal","iteratorToArray","iterator","arr","done","input","DASH_CASE_REGEXP","m","allowPreviousPlayerStylesMerge","visitDslNode","visitor","context","visitTrigger","visitState","visitTransition","visitSequence","visitGroup","visitAnimate","visitKeyframes","visitStyle","visitReference","visitAnimateChild","visitAnimateRef","visitQuery","visitStagger","parseTransitionExpr","transitionValue","expressions","parseInnerTransitionStr","eventStr","parseAnimationAlias","separator","makeLambdaFromStates","isFullAnyStateExpr","ANY_STATE","alias","lhs","rhs","LHS_MATCH_BOOLEAN","TRUE_BOOLEAN_VALUES","FALSE_BOOLEAN_VALUES","RHS_MATCH_BOOLEAN","lhsMatch","rhsMatch","buildAnimationAst","AnimationAstBuilderVisitor","normalizeSelector","hasAmpersand","find","SELF_TOKEN","SELF_TOKEN_REGEX","ENTER_TOKEN_REGEX","ENTER_SELECTOR","LEAVE_TOKEN_REGEX","LEAVE_SELECTOR","NG_TRIGGER_SELECTOR","NG_ANIMATING_SELECTOR","normalizeParams","consumeOffset","styleTuple","isObject","constructTimingAst","makeTimingAst","strValue","charAt","ast","dynamic","normalizeAnimationOptions","createTimelineInstruction","preStyleProps","postStyleProps","subTimeline","buildAnimationTimelines","rootElement","startingStyles","finalStyles","subInstructions","AnimationTimelineBuilderVisitor","buildKeyframes","roundOffset","decimalPoints","mult","pow","round","flattenStyles","allStyles","allProperties","makeBooleanMap","createTransitionInstruction","isRemovalTransition","fromStyles","toStyles","timelines","queriedElements","oneOrMoreTransitionsMatch","matchFns","currentState","nextState","buildTrigger","AnimationTrigger","createFallbackTransition","states","AnimationTransitionFactory","animation","matchers","queryCount","depCount","balanceProperties","key1","key2","deleteOrUnsetInMap","currentValues","normalizeTriggerValue","isElementNode","isTriggerEventValid","cloakElement","oldValue","display","cloakAndComputeStyles","elements","elementPropsMap","defaultStyle","cloakVals","valuesMap","failedElements","props","computeStyle","REMOVAL_FLAG","NULL_REMOVED_QUERIED_STATE","createIsRootFilterFn","nodes","isRoot","nodeSet","Set","knownRootContainer","containsClass","className","classList","classes","CLASSES_CACHE_KEY","addClass","removeClass","getBodyNode","removeNodesAfterAnimationDone","engine","processLeaveNode","flattenGroupPlayers","finalPlayers","_flattenGroupPlayersRecur","objEquals","k1","k2","replacePostStylesAsPre","allPreStyleElements","allPostStyleElements","postEntry","preEntry","_computeStyle","getComputedStyle","supportsWebAnimations","Element","AnimationDriver","AnimationStyleNormalizer","WebAnimationsStyleNormalizer","NoopAnimationDriver","AnimationEngine","WebAnimationsDriver","_contains","elm1","elm2","_matches","_query","proto","fn_1","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","results","querySelectorAll","elm","querySelector","matchesElement","containsElement","invokeQuery","query","previousPlayers","NOOP","SUBSTITUTION_EXPR_START","SUBSTITUTION_EXPR_END","ENTER_CLASSNAME","LEAVE_CLASSNAME","NG_TRIGGER_CLASSNAME","NG_ANIMATING_CLASSNAME","LEAVE_TOKEN","ENTER_TOKEN","ROOT_SELECTOR","AnimationAstBuilderContext","_resetContextStyleTimingState","currentQuerySelector","collectedStyles","currentTime","transitions","definitions","def","stateDef_1","styleAst","astParams","containsDynamicStyles","missingSubs_1","params_1","stylesObj_1","sub","size","missingSubsArr","expr","s","furthestTime","step","innerAst","timingAst","currentAnimateTimings","styleMetadata","styleMetadata_1","isEmpty","newStyleData","_styleAst","isEmptyStep","_makeStyleAst","_validateStyleAst","collectedEasing","styleData","styleMap","endTime","startTime","tuple","collectedEntry","updateCollectedStyle","MAX_KEYFRAME_OFFSET","totalKeyframesWithOffsets","offsets","offsetsOutOfOrder","keyframesOutOfRange","style$$1","offsetVal","generatedOffset","limit","animateDuration","durationUpToThisFrame","parentSelector","currentQuery","includeSelf","optional","originalSelector","currentTransition","ElementInstructionMap","_map","consume","instructions","existingInstructions","clear","ONE_FRAME_IN_MILLISECONDS","AnimationTimelineContext","currentTimeline","timeline","containsAnimation","tl","allowOnlyTimelineStyles","elementInstructions","innerContext","createSubContext","_visitSubInstructions","transformIntoNewTimeline","previousNode","instruction","instructionTimings","appendInstructionToTimeline","updateOptions","subContextCount","ctx","snapshotCurrentStyles","DEFAULT_NOOP_PREVIOUS_NODE","delayNextStep","applyStylesToKeyframe","innerTimelines","mergeTimelineCollectedStyles","_visitTiming","incrementTime","getCurrentStyleProperties","forwardFrame","applyEmptyStep","innerTimeline","forwardTime","elms","currentQueryTotal","sameElementTimeline","currentQueryIndex","parentContext","abs","maxTime","currentStaggerTime","startingTime","_driver","initialTimeline","TimelineBuilder","skipIfExists","newOptions","optionsToUpdate","newParams","paramsToUpdate_1","_copyOptions","oldParams_1","params_2","newTime","target","fork","updatedTimings","builder","SubTimelineBuilder","stretchStartingKeyframe","time","_elementTimelineStylesLookup","_previousKeyframe","_currentKeyframe","_keyframes","_styleSummary","_pendingStyles","_backFill","_currentEmptyStepKeyframe","_localTimelineStyles","create","_globalTimelineStyles","_loadKeyframe","hasPreStyleStep","_updateStyle","getFinalKeyframe","properties","details0","details1","finalKeyframes","keyframe","finalKeyframe","preProps","postProps","kf0","kf1","_stretchStartingKeyframe","newKeyframes","startingGap","newFirstKeyframe","oldFirstKeyframe","oldOffset","timeAtKeyframe","Animation","errorMessage","_animationAst","buildTimelines","destinationStyles","start","dest","result","NoopAnimationStyleNormalizer","propertyName","userProvidedProperty","normalizedProperty","strVal","DIMENSIONAL_PROP_MAP","valAndSuffixMatch","EMPTY_OBJECT","_triggerName","_stateStyles","buildStyles","stateName","backupStateStyler","stateStyler","backupStyles","currentOptions","nextOptions","transitionAnimationParams","currentAnimationParams","currentStateStyles","nextAnimationParams","nextStateStyles","preStyleMap","postStyleMap","isRemoval","animationOptions","queriedElementsList","AnimationStateStyles","defaultParams","combinedParams","styleObj_1","transitionFactories","fallbackTransition","matchTransition","f","matchStyles","EMPTY_INSTRUCTION_MAP","TimelineAnimationEngine","_normalizer","_animations","_playersById","register","_buildPlayer","autoStylesMap","inst","destroy","_getPlayer","listen","baseEvent","play","pause","restart","finish","setPosition","QUEUED_CLASSNAME","QUEUED_SELECTOR","DISABLED_CLASSNAME","DISABLED_SELECTOR","EMPTY_PLAYER_ARRAY","NULL_REMOVAL_STATE","namespaceId","setForRemoval","hasAnimation","removedBeforeQueried","StateValue","isObj","absorbOptions","oldParams_2","VOID_VALUE","DEFAULT_STATE_VALUE","DELETED_STATE_VALUE","AnimationTransitionNamespace","hostElement","_engine","_triggers","_queue","_elementListeners","_hostClassName","listeners","triggersWithStates","statesByElement","afterFlush","_getTrigger","trigger","defaultToFallback","TransitionAnimationPlayer","playersOnElement","playersByElement","queued","isFallbackTransition","totalQueuedPlayers","index_1","fromStyles_1","toStyles_1","reportError","deregister","stateMap","entry","clearElementCache","elementPlayers","_destroyInnerNodes","innerNs","namespacesByHostElement","removeNode","doNotRecurse","childElementCount","triggerStates","players_1","markElementAsRemoved","containsPotentialParentTransition","totalAnimations","currentPlayers","playersByQueriedElement","triggers","visitedTriggers_1","listener","elementStates","destroyInnerAnimations","_onRemovalComplete","insertNode","drainQueuedTransitions","microtaskId","destroyed","markedForDestroy","d0","d1","p","elementContainsData","containsData","TransitionAnimationEngine","newHostElements","disabledNodes","_namespaceLookup","_namespaceList","_flushFns","_whenQuietFns","collectedEnterElements","collectedLeaveElements","onRemovalComplete","ns","createNamespace","_balanceNamespaceList","collectEnterElement","found","nextNamespace","registerTrigger","_fetchNamespace","afterFlushAnimationsDone","insertBefore","details","markElementAsDisabled","_buildInstruction","subTimelines","containerElement","whenRenderingDone","flush","cleanupFns","_flushAnimations","quietFns_1","skippedPlayers","skippedPlayersMap","queuedInstructions","disabledElementsSet","nodesThatAreDisabled","bodyNode","allEnterNodes","allLeaveNodes","leaveNodesWithoutAnimations","allPlayers","erroneousTransitions","stringMap","setVal_1","setVal","errors_1","enterNodesWithoutAnimations","allPreviousPlayersMap","sortedParentElements","unshift","_beforeAnimationBuild","_getPreviousPlayers","prevPlayer","replaceNodes","postStylesMap","preStylesMap","pre","rootPlayers","subPlayers","innerPlayer","_buildAnimation","setRealPlayer","parentHasPriority","parentPlayers","parentPlayer","playersForElement","queriedPlayerResults","queriedInnerElements","j","queriedPlayers","activePlayers","isQueriedElement","toStateValue","queriedElementPlayers","isRemovalAnimation_1","targetNameSpaceId","targetTriggerName","timelineInstruction","realPlayer","getRealPlayer","beforeDestroy","allQueriedPlayers","allConsumedElements","allSubElements","allNewPlayers","pp","wrappedPlayer","_player","_containsRealPlayer","_queuedCallbacks","_destroyed","_queueEvent","hasStarted","getPosition","_triggerCache","_transitionEngine","_timelineEngine","componentId","cacheKey","onInsert","onRemove","disableAnimations","process","action","eventPhase","WebAnimationsPlayer","_onDoneFns","_onStartFns","_onDestroyFns","_initialized","_finished","_started","previousStyles","currentSnapshot","_duration","_delay","_onFinish","_preparePlayerBeforeStart","previousStyleProps","startingKeyframe_1","missingStyleProps_1","self_1","_loop_1","_triggerWebAnimation","_finalKeyframe","_resetDomPlayerState","cancel","fill","playerOptions","previousWebAnimationPlayers","254","issueAnimationCommand","renderer","resolveElementFromTarget","parseTriggerCallbackName","dotIndex","instantiateSupportedAnimationDriver","__WEBPACK_IMPORTED_MODULE_4__angular_animations_browser__","instantiateDefaultStyleNormalizer","instantiateRendererFactory","zone","AnimationRendererFactory","__WEBPACK_IMPORTED_MODULE_2__angular_platform_browser__","__WEBPACK_IMPORTED_MODULE_3__angular_animations__","NoopAnimationsModule","BrowserAnimationBuilder","BrowserAnimationFactory","AnimationRenderer","BaseAnimationRenderer","BROWSER_ANIMATIONS_PROVIDERS","BROWSER_NOOP_ANIMATIONS_PROVIDERS","InjectableAnimationEngine","rootRenderer","_nextAnimationId","typeData","encapsulation","None","createRenderer","_id","RendererAnimationPlayer","_command","_listen","ANIMATION_PREFIX","DISABLE_ANIMATIONS_FLAG","delegate","_zone","_currentId","_microtaskId","_animationCallbacksBuffer","_rendererCache","_cdRecurDepth","begin","_scheduleCountTask","Zone","current","scheduleMicroTask","scheduleListenerCallback","count","run","end","runOutsideAngular","destroyNode","namespace","createComment","createText","newChild","refChild","oldChild","selectRootElement","selectorOrNode","nextSibling","setAttribute","removeAttribute","setStyle","flags","removeStyle","factory","countId","SHARED_ANIMATION_PROVIDERS","256","configService","ref","selectedStation","configString","getAttribute","ElementRef","257","flash_messages_component_1","parentModule","FlashMessagesComponent","FlashMessageTypeToClass","__param","Optional","SkipSelf","258","flash_message_model_1","typeToCssClass","transform","Pipe","dismiss","dismissEarly","onMouseEnter","cancelDismissal","onMouseExit","startDismissal","259","util_2","BasePlug","plugExists","getPlugState","respond","Headers","Content-Type","RequestOptions","plugUrl","plugName","payload","mro","260","animations_2","base_plug_1","sanitizer","lastPromptId","safeHtml","sanitize","SecurityContext","HTML","lastPromptHtml","bypassSecurityTrustHtml","focusSelf","default","setResponse","hasTextInput","sendResponse","promptId","focus","animations","DomSanitizer","261","time_service_1","ElapsedTimePipe","format","getElapsedTimeString","last","endTimeMs","elapsedSeconds","elapsedMinutes","seconds","elapsedHours","pure","TimeService","262","FocusDirective","focusOn","Directive","263","GenealogyNodeComponent","maxDepth","childMaxDepth","264","LogLevelToClassPipe","logLevels","info","warning","265","266","ObjectToSortedValuesPipe","object","sortBy","asArray","keys_1","267","StatusCategory","categoryToCssClass","unknownStatus","Symbol","statusToCategory","statusToText","StatusToClassPipe","StatusToTextPipe","268","relative","TimeAgoPipe","269","TooltipDirective","tooltipElement","innerHTML","firstChild","onMouseLeave","String","HostListener","Function","270","ellipsis","TrimmedTextComponent","expanded","maxChars","onClick","271","dashboard_service_1","subscriptionRetryMs","subscriptionRetryBackoff","subscriptionRetryMax","StationSelectedEvent","StationListComponent","dashboard","onSelectStation","EventEmitter","retryCountdown","observable","currentMillis","remainingMs","isSubscribing","isReachable","manualRetry","manualReload","Output","272","AttachmentsComponent","linkForAttachment","attachment","toggleExpanded","273","history_item_model_1","TestSelectedEvent","listItemHeight","HistoryComponent","onSelectTest","collapsedNumTests","history","isLoading","lastClickedItem","loadHistory","getHistory","isSelected","historyItem","selectedTest","loading","selectTest","retrieveFileName","loadItem","stack","refreshList","274","LogsComponent","275","PhaseListComponent","showMeasurements","toggleMeasurements","276","PhaseComponent","expand","277","station_service_1","StationDeselectedEvent","StationComponent","stationService","onDeselectStation","goBack","278","progress_bar_component_1","TestSummaryComponent","progressBar","completedPhases","completedPhaseCount","ViewChild","279","station_list_component_1","attachments_component_1","history_component_1","logs_component_1","phase_list_component_1","phase_component_1","station_component_1","test_summary_component_1","281","283","284","285","286","287","288","289","290","291","292","293","294","295","296","297","298","299","30","dismissalDurationMs","flashDurationMs","dismissalJob","addMessage","shift","300","301","302","303","304","305","306","307","33","sequence","tokens","stateChangeExpr","animateChild","useAnimation","stagger","AnimationBuilder","AnimationFactory","AUTO_STYLE","NoopAnimationPlayer","AnimationGroupPlayer","ɵPRE_STYLE","triggerMicrotask","_onStart","_players","doneCount","destroyCount","startCount","_onDestroy","timeAtPosition","position","34","50","610","main","platform_browser_dynamic_1","platformBrowserDynamic","bootstrapModule","app_module_1","MODULE_REF","enableProdMode","readyState","68","critical","69","70","elapsed_time_pipe_1","focus_directive_1","genealogy_node_component_1","log_level_to_class_pipe_1","object_to_sorted_values_pipe_1","status_pipes_1","time_ago_pipe_1","tooltip_directive_1","trimmed_text_component_1","71","SockJS","72","UPDATE_INTERVAL_MS","interval","publish","connect","73","cache","getCache","rawTestState","uniqueId","drawAttention","rawHistoryItems","stationHistory","rawItem","file_name","unloaded","rawHistoryItem"],"mappings":"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","file":"js/app.d714dbd143d37088ddc9.js","sourcesContent":["webpackJsonp([1],{\n\n/***/ 102:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(17);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_core__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_observable_of__ = __webpack_require__(53);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_observable_of___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_rxjs_observable_of__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_operator_concatMap__ = __webpack_require__(80);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_operator_concatMap___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_rxjs_operator_concatMap__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_rxjs_operator_filter__ = __webpack_require__(81);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_rxjs_operator_filter___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_rxjs_operator_filter__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_rxjs_operator_map__ = __webpack_require__(54);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_rxjs_operator_map___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_rxjs_operator_map__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__angular_common__ = __webpack_require__(19);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_rxjs_Observable__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_rxjs_Observable___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_rxjs_Observable__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HttpBackend\", function() { return HttpBackend; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HttpHandler\", function() { return HttpHandler; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HttpClient\", function() { return HttpClient; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HttpHeaders\", function() { return HttpHeaders; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HTTP_INTERCEPTORS\", function() { return HTTP_INTERCEPTORS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JsonpClientBackend\", function() { return JsonpClientBackend; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JsonpInterceptor\", function() { return JsonpInterceptor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HttpClientJsonpModule\", function() { return HttpClientJsonpModule; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HttpClientModule\", function() { return HttpClientModule; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HttpClientXsrfModule\", function() { return HttpClientXsrfModule; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵinterceptingHandler\", function() { return interceptingHandler; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HttpParams\", function() { return HttpParams; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HttpUrlEncodingCodec\", function() { return HttpUrlEncodingCodec; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HttpRequest\", function() { return HttpRequest; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HttpErrorResponse\", function() { return HttpErrorResponse; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HttpEventType\", function() { return HttpEventType; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HttpHeaderResponse\", function() { return HttpHeaderResponse; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HttpResponse\", function() { return HttpResponse; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HttpResponseBase\", function() { return HttpResponseBase; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HttpXhrBackend\", function() { return HttpXhrBackend; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"XhrFactory\", function() { return XhrFactory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HttpXsrfTokenExtractor\", function() { return HttpXsrfTokenExtractor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵa\", function() { return NoopInterceptor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵb\", function() { return JsonpCallbackContext; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵc\", function() { return jsonpCallbackContext; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵd\", function() { return BrowserXhr; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵg\", function() { return HttpXsrfCookieExtractor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵh\", function() { return HttpXsrfInterceptor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵe\", function() { return XSRF_COOKIE_NAME; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵf\", function() { return XSRF_HEADER_NAME; });\n\n/**\n * @license Angular v4.4.6\n * (c) 2010-2017 Google, Inc. https://angular.io/\n * License: MIT\n */\n\n\n\n\n\n\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Transforms an `HttpRequest` into a stream of `HttpEvent`s, one of which will likely be a\n * `HttpResponse`.\n *\n * `HttpHandler` is injectable. When injected, the handler instance dispatches requests to the\n * first interceptor in the chain, which dispatches to the second, etc, eventually reaching the\n * `HttpBackend`.\n *\n * In an `HttpInterceptor`, the `HttpHandler` parameter is the next interceptor in the chain.\n *\n * \\@experimental\n * @abstract\n */\nvar HttpHandler = (function () {\n function HttpHandler() {\n }\n /**\n * @abstract\n * @param {?} req\n * @return {?}\n */\n HttpHandler.prototype.handle = function (req) { };\n return HttpHandler;\n}());\n/**\n * A final `HttpHandler` which will dispatch the request via browser HTTP APIs to a backend.\n *\n * Interceptors sit between the `HttpClient` interface and the `HttpBackend`.\n *\n * When injected, `HttpBackend` dispatches requests directly to the backend, without going\n * through the interceptor chain.\n *\n * \\@experimental\n * @abstract\n */\nvar HttpBackend = (function () {\n function HttpBackend() {\n }\n /**\n * @abstract\n * @param {?} req\n * @return {?}\n */\n HttpBackend.prototype.handle = function (req) { };\n return HttpBackend;\n}());\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * A `HttpParameterCodec` that uses `encodeURIComponent` and `decodeURIComponent` to\n * serialize and parse URL parameter keys and values.\n *\n * \\@experimental\n */\nvar HttpUrlEncodingCodec = (function () {\n function HttpUrlEncodingCodec() {\n }\n /**\n * @param {?} k\n * @return {?}\n */\n HttpUrlEncodingCodec.prototype.encodeKey = function (k) { return standardEncoding(k); };\n /**\n * @param {?} v\n * @return {?}\n */\n HttpUrlEncodingCodec.prototype.encodeValue = function (v) { return standardEncoding(v); };\n /**\n * @param {?} k\n * @return {?}\n */\n HttpUrlEncodingCodec.prototype.decodeKey = function (k) { return decodeURIComponent(k); };\n /**\n * @param {?} v\n * @return {?}\n */\n HttpUrlEncodingCodec.prototype.decodeValue = function (v) { return decodeURIComponent(v); };\n return HttpUrlEncodingCodec;\n}());\n/**\n * @param {?} rawParams\n * @param {?} codec\n * @return {?}\n */\nfunction paramParser(rawParams, codec) {\n var /** @type {?} */ map$$1 = new Map();\n if (rawParams.length > 0) {\n var /** @type {?} */ params = rawParams.split('&');\n params.forEach(function (param) {\n var /** @type {?} */ eqIdx = param.indexOf('=');\n var _a = eqIdx == -1 ?\n [codec.decodeKey(param), ''] :\n [codec.decodeKey(param.slice(0, eqIdx)), codec.decodeValue(param.slice(eqIdx + 1))], key = _a[0], val = _a[1];\n var /** @type {?} */ list = map$$1.get(key) || [];\n list.push(val);\n map$$1.set(key, list);\n });\n }\n return map$$1;\n}\n/**\n * @param {?} v\n * @return {?}\n */\nfunction standardEncoding(v) {\n return encodeURIComponent(v)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/gi, '$')\n .replace(/%2C/gi, ',')\n .replace(/%3B/gi, ';')\n .replace(/%2B/gi, '+')\n .replace(/%3D/gi, '=')\n .replace(/%3F/gi, '?')\n .replace(/%2F/gi, '/');\n}\n/**\n * An HTTP request/response body that represents serialized parameters,\n * per the MIME type `application/x-www-form-urlencoded`.\n *\n * This class is immuatable - all mutation operations return a new instance.\n *\n * \\@experimental\n */\nvar HttpParams = (function () {\n /**\n * @param {?=} options\n */\n function HttpParams(options) {\n if (options === void 0) { options = {}; }\n this.updates = null;\n this.cloneFrom = null;\n this.encoder = options.encoder || new HttpUrlEncodingCodec();\n this.map = !!options.fromString ? paramParser(options.fromString, this.encoder) : null;\n }\n /**\n * Check whether the body has one or more values for the given parameter name.\n * @param {?} param\n * @return {?}\n */\n HttpParams.prototype.has = function (param) {\n this.init();\n return ((this.map)).has(param);\n };\n /**\n * Get the first value for the given parameter name, or `null` if it's not present.\n * @param {?} param\n * @return {?}\n */\n HttpParams.prototype.get = function (param) {\n this.init();\n var /** @type {?} */ res = ((this.map)).get(param);\n return !!res ? res[0] : null;\n };\n /**\n * Get all values for the given parameter name, or `null` if it's not present.\n * @param {?} param\n * @return {?}\n */\n HttpParams.prototype.getAll = function (param) {\n this.init();\n return ((this.map)).get(param) || null;\n };\n /**\n * Get all the parameter names for this body.\n * @return {?}\n */\n HttpParams.prototype.keys = function () {\n this.init();\n return Array.from(/** @type {?} */ ((this.map)).keys());\n };\n /**\n * Construct a new body with an appended value for the given parameter name.\n * @param {?} param\n * @param {?} value\n * @return {?}\n */\n HttpParams.prototype.append = function (param, value) { return this.clone({ param: param, value: value, op: 'a' }); };\n /**\n * Construct a new body with a new value for the given parameter name.\n * @param {?} param\n * @param {?} value\n * @return {?}\n */\n HttpParams.prototype.set = function (param, value) { return this.clone({ param: param, value: value, op: 's' }); };\n /**\n * Construct a new body with either the given value for the given parameter\n * removed, if a value is given, or all values for the given parameter removed\n * if not.\n * @param {?} param\n * @param {?=} value\n * @return {?}\n */\n HttpParams.prototype.delete = function (param, value) { return this.clone({ param: param, value: value, op: 'd' }); };\n /**\n * Serialize the body to an encoded string, where key-value pairs (separated by `=`) are\n * separated by `&`s.\n * @return {?}\n */\n HttpParams.prototype.toString = function () {\n var _this = this;\n this.init();\n return this.keys()\n .map(function (key) {\n var /** @type {?} */ eKey = _this.encoder.encodeKey(key);\n return ((((_this.map)).get(key))).map(function (value) { return eKey + '=' + _this.encoder.encodeValue(value); })\n .join('&');\n })\n .join('&');\n };\n /**\n * @param {?} update\n * @return {?}\n */\n HttpParams.prototype.clone = function (update) {\n var /** @type {?} */ clone = new HttpParams({ encoder: this.encoder });\n clone.cloneFrom = this.cloneFrom || this;\n clone.updates = (this.updates || []).concat([update]);\n return clone;\n };\n /**\n * @return {?}\n */\n HttpParams.prototype.init = function () {\n var _this = this;\n if (this.map === null) {\n this.map = new Map();\n }\n if (this.cloneFrom !== null) {\n this.cloneFrom.init();\n this.cloneFrom.keys().forEach(function (key) { return ((_this.map)).set(key, /** @type {?} */ ((((((_this.cloneFrom)).map)).get(key)))); }); /** @type {?} */\n ((this.updates)).forEach(function (update) {\n switch (update.op) {\n case 'a':\n case 's':\n var /** @type {?} */ base = (update.op === 'a' ? ((_this.map)).get(update.param) : undefined) || [];\n base.push(/** @type {?} */ ((update.value))); /** @type {?} */\n ((_this.map)).set(update.param, base);\n break;\n case 'd':\n if (update.value !== undefined) {\n var /** @type {?} */ base_1 = ((_this.map)).get(update.param) || [];\n var /** @type {?} */ idx = base_1.indexOf(update.value);\n if (idx !== -1) {\n base_1.splice(idx, 1);\n }\n if (base_1.length > 0) {\n ((_this.map)).set(update.param, base_1);\n }\n else {\n ((_this.map)).delete(update.param);\n }\n }\n else {\n ((_this.map)).delete(update.param);\n break;\n }\n }\n });\n this.cloneFrom = null;\n }\n };\n return HttpParams;\n}());\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Immutable set of Http headers, with lazy parsing.\n * \\@experimental\n */\nvar HttpHeaders = (function () {\n /**\n * @param {?=} headers\n */\n function HttpHeaders(headers) {\n var _this = this;\n /**\n * Internal map of lowercased header names to the normalized\n * form of the name (the form seen first).\n */\n this.normalizedNames = new Map();\n /**\n * Queued updates to be materialized the next initialization.\n */\n this.lazyUpdate = null;\n if (!headers) {\n this.headers = new Map();\n }\n else if (typeof headers === 'string') {\n this.lazyInit = function () {\n _this.headers = new Map();\n headers.split('\\n').forEach(function (line) {\n var index = line.indexOf(':');\n if (index > 0) {\n var name = line.slice(0, index);\n var key = name.toLowerCase();\n var value = line.slice(index + 1).trim();\n _this.maybeSetNormalizedName(name, key);\n if (_this.headers.has(key)) {\n _this.headers.get(key).push(value);\n }\n else {\n _this.headers.set(key, [value]);\n }\n }\n });\n };\n }\n else {\n this.lazyInit = function () {\n _this.headers = new Map();\n Object.keys(headers).forEach(function (name) {\n var values = headers[name];\n var key = name.toLowerCase();\n if (typeof values === 'string') {\n values = [values];\n }\n if (values.length > 0) {\n _this.headers.set(key, values);\n _this.maybeSetNormalizedName(name, key);\n }\n });\n };\n }\n }\n /**\n * Checks for existence of header by given name.\n * @param {?} name\n * @return {?}\n */\n HttpHeaders.prototype.has = function (name) {\n this.init();\n return this.headers.has(name.toLowerCase());\n };\n /**\n * Returns first header that matches given name.\n * @param {?} name\n * @return {?}\n */\n HttpHeaders.prototype.get = function (name) {\n this.init();\n var /** @type {?} */ values = this.headers.get(name.toLowerCase());\n return values && values.length > 0 ? values[0] : null;\n };\n /**\n * Returns the names of the headers\n * @return {?}\n */\n HttpHeaders.prototype.keys = function () {\n this.init();\n return Array.from(this.normalizedNames.values());\n };\n /**\n * Returns list of header values for a given name.\n * @param {?} name\n * @return {?}\n */\n HttpHeaders.prototype.getAll = function (name) {\n this.init();\n return this.headers.get(name.toLowerCase()) || null;\n };\n /**\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n HttpHeaders.prototype.append = function (name, value) {\n return this.clone({ name: name, value: value, op: 'a' });\n };\n /**\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n HttpHeaders.prototype.set = function (name, value) {\n return this.clone({ name: name, value: value, op: 's' });\n };\n /**\n * @param {?} name\n * @param {?=} value\n * @return {?}\n */\n HttpHeaders.prototype.delete = function (name, value) {\n return this.clone({ name: name, value: value, op: 'd' });\n };\n /**\n * @param {?} name\n * @param {?} lcName\n * @return {?}\n */\n HttpHeaders.prototype.maybeSetNormalizedName = function (name, lcName) {\n if (!this.normalizedNames.has(lcName)) {\n this.normalizedNames.set(lcName, name);\n }\n };\n /**\n * @return {?}\n */\n HttpHeaders.prototype.init = function () {\n var _this = this;\n if (!!this.lazyInit) {\n if (this.lazyInit instanceof HttpHeaders) {\n this.copyFrom(this.lazyInit);\n }\n else {\n this.lazyInit();\n }\n this.lazyInit = null;\n if (!!this.lazyUpdate) {\n this.lazyUpdate.forEach(function (update) { return _this.applyUpdate(update); });\n this.lazyUpdate = null;\n }\n }\n };\n /**\n * @param {?} other\n * @return {?}\n */\n HttpHeaders.prototype.copyFrom = function (other) {\n var _this = this;\n other.init();\n Array.from(other.headers.keys()).forEach(function (key) {\n _this.headers.set(key, /** @type {?} */ ((other.headers.get(key))));\n _this.normalizedNames.set(key, /** @type {?} */ ((other.normalizedNames.get(key))));\n });\n };\n /**\n * @param {?} update\n * @return {?}\n */\n HttpHeaders.prototype.clone = function (update) {\n var /** @type {?} */ clone = new HttpHeaders();\n clone.lazyInit =\n (!!this.lazyInit && this.lazyInit instanceof HttpHeaders) ? this.lazyInit : this;\n clone.lazyUpdate = (this.lazyUpdate || []).concat([update]);\n return clone;\n };\n /**\n * @param {?} update\n * @return {?}\n */\n HttpHeaders.prototype.applyUpdate = function (update) {\n var /** @type {?} */ key = update.name.toLowerCase();\n switch (update.op) {\n case 'a':\n case 's':\n var /** @type {?} */ value = ((update.value));\n if (typeof value === 'string') {\n value = [value];\n }\n if (value.length === 0) {\n return;\n }\n this.maybeSetNormalizedName(update.name, key);\n var /** @type {?} */ base = (update.op === 'a' ? this.headers.get(key) : undefined) || [];\n base.push.apply(base, value);\n this.headers.set(key, base);\n break;\n case 'd':\n var /** @type {?} */ toDelete_1 = (update.value);\n if (!toDelete_1) {\n this.headers.delete(key);\n this.normalizedNames.delete(key);\n }\n else {\n var /** @type {?} */ existing = this.headers.get(key);\n if (!existing) {\n return;\n }\n existing = existing.filter(function (value) { return toDelete_1.indexOf(value) === -1; });\n if (existing.length === 0) {\n this.headers.delete(key);\n this.normalizedNames.delete(key);\n }\n else {\n this.headers.set(key, existing);\n }\n }\n break;\n }\n };\n /**\n * \\@internal\n * @param {?} fn\n * @return {?}\n */\n HttpHeaders.prototype.forEach = function (fn) {\n var _this = this;\n this.init();\n Array.from(this.normalizedNames.keys())\n .forEach(function (key) { return fn(/** @type {?} */ ((_this.normalizedNames.get(key))), /** @type {?} */ ((_this.headers.get(key)))); });\n };\n return HttpHeaders;\n}());\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Determine whether the given HTTP method may include a body.\n * @param {?} method\n * @return {?}\n */\nfunction mightHaveBody(method) {\n switch (method) {\n case 'DELETE':\n case 'GET':\n case 'HEAD':\n case 'OPTIONS':\n case 'JSONP':\n return false;\n default:\n return true;\n }\n}\n/**\n * Safely assert whether the given value is an ArrayBuffer.\n *\n * In some execution environments ArrayBuffer is not defined.\n * @param {?} value\n * @return {?}\n */\nfunction isArrayBuffer(value) {\n return typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer;\n}\n/**\n * Safely assert whether the given value is a Blob.\n *\n * In some execution environments Blob is not defined.\n * @param {?} value\n * @return {?}\n */\nfunction isBlob(value) {\n return typeof Blob !== 'undefined' && value instanceof Blob;\n}\n/**\n * Safely assert whether the given value is a FormData instance.\n *\n * In some execution environments FormData is not defined.\n * @param {?} value\n * @return {?}\n */\nfunction isFormData(value) {\n return typeof FormData !== 'undefined' && value instanceof FormData;\n}\n/**\n * An outgoing HTTP request with an optional typed body.\n *\n * `HttpRequest` represents an outgoing request, including URL, method,\n * headers, body, and other request configuration options. Instances should be\n * assumed to be immutable. To modify a `HttpRequest`, the `clone`\n * method should be used.\n *\n * \\@experimental\n */\nvar HttpRequest = (function () {\n /**\n * @param {?} method\n * @param {?} url\n * @param {?=} third\n * @param {?=} fourth\n */\n function HttpRequest(method, url, third, fourth) {\n this.url = url;\n /**\n * The request body, or `null` if one isn't set.\n *\n * Bodies are not enforced to be immutable, as they can include a reference to any\n * user-defined data type. However, interceptors should take care to preserve\n * idempotence by treating them as such.\n */\n this.body = null;\n /**\n * Whether this request should be made in a way that exposes progress events.\n *\n * Progress events are expensive (change detection runs on each event) and so\n * they should only be requested if the consumer intends to monitor them.\n */\n this.reportProgress = false;\n /**\n * Whether this request should be sent with outgoing credentials (cookies).\n */\n this.withCredentials = false;\n /**\n * The expected response type of the server.\n *\n * This is used to parse the response appropriately before returning it to\n * the requestee.\n */\n this.responseType = 'json';\n this.method = method.toUpperCase();\n // Next, need to figure out which argument holds the HttpRequestInit\n // options, if any.\n var options;\n // Check whether a body argument is expected. The only valid way to omit\n // the body argument is to use a known no-body method like GET.\n if (mightHaveBody(this.method) || !!fourth) {\n // Body is the third argument, options are the fourth.\n this.body = third || null;\n options = fourth;\n }\n else {\n // No body required, options are the third argument. The body stays null.\n options = third;\n }\n // If options have been passed, interpret them.\n if (options) {\n // Normalize reportProgress and withCredentials.\n this.reportProgress = !!options.reportProgress;\n this.withCredentials = !!options.withCredentials;\n // Override default response type of 'json' if one is provided.\n if (!!options.responseType) {\n this.responseType = options.responseType;\n }\n // Override headers if they're provided.\n if (!!options.headers) {\n this.headers = options.headers;\n }\n if (!!options.params) {\n this.params = options.params;\n }\n }\n // If no headers have been passed in, construct a new HttpHeaders instance.\n if (!this.headers) {\n this.headers = new HttpHeaders();\n }\n // If no parameters have been passed in, construct a new HttpUrlEncodedParams instance.\n if (!this.params) {\n this.params = new HttpParams();\n this.urlWithParams = url;\n }\n else {\n // Encode the parameters to a string in preparation for inclusion in the URL.\n var params = this.params.toString();\n if (params.length === 0) {\n // No parameters, the visible URL is just the URL given at creation time.\n this.urlWithParams = url;\n }\n else {\n // Does the URL already have query parameters? Look for '?'.\n var qIdx = url.indexOf('?');\n // There are 3 cases to handle:\n // 1) No existing parameters -> append '?' followed by params.\n // 2) '?' exists and is followed by existing query string ->\n // append '&' followed by params.\n // 3) '?' exists at the end of the url -> append params directly.\n // This basically amounts to determining the character, if any, with\n // which to join the URL and parameters.\n var sep = qIdx === -1 ? '?' : (qIdx < url.length - 1 ? '&' : '');\n this.urlWithParams = url + sep + params;\n }\n }\n }\n /**\n * Transform the free-form body into a serialized format suitable for\n * transmission to the server.\n * @return {?}\n */\n HttpRequest.prototype.serializeBody = function () {\n // If no body is present, no need to serialize it.\n if (this.body === null) {\n return null;\n }\n // Check whether the body is already in a serialized form. If so,\n // it can just be returned directly.\n if (isArrayBuffer(this.body) || isBlob(this.body) || isFormData(this.body) ||\n typeof this.body === 'string') {\n return this.body;\n }\n // Check whether the body is an instance of HttpUrlEncodedParams.\n if (this.body instanceof HttpParams) {\n return this.body.toString();\n }\n // Check whether the body is an object or array, and serialize with JSON if so.\n if (typeof this.body === 'object' || typeof this.body === 'boolean' ||\n Array.isArray(this.body)) {\n return JSON.stringify(this.body);\n }\n // Fall back on toString() for everything else.\n return ((this.body)).toString();\n };\n /**\n * Examine the body and attempt to infer an appropriate MIME type\n * for it.\n *\n * If no such type can be inferred, this method will return `null`.\n * @return {?}\n */\n HttpRequest.prototype.detectContentTypeHeader = function () {\n // An empty body has no content type.\n if (this.body === null) {\n return null;\n }\n // FormData bodies rely on the browser's content type assignment.\n if (isFormData(this.body)) {\n return null;\n }\n // Blobs usually have their own content type. If it doesn't, then\n // no type can be inferred.\n if (isBlob(this.body)) {\n return this.body.type || null;\n }\n // Array buffers have unknown contents and thus no type can be inferred.\n if (isArrayBuffer(this.body)) {\n return null;\n }\n // Technically, strings could be a form of JSON data, but it's safe enough\n // to assume they're plain strings.\n if (typeof this.body === 'string') {\n return 'text/plain';\n }\n // `HttpUrlEncodedParams` has its own content-type.\n if (this.body instanceof HttpParams) {\n return 'application/x-www-form-urlencoded;charset=UTF-8';\n }\n // Arrays, objects, and numbers will be encoded as JSON.\n if (typeof this.body === 'object' || typeof this.body === 'number' ||\n Array.isArray(this.body)) {\n return 'application/json';\n }\n // No type could be inferred.\n return null;\n };\n /**\n * @param {?=} update\n * @return {?}\n */\n HttpRequest.prototype.clone = function (update) {\n if (update === void 0) { update = {}; }\n // For method, url, and responseType, take the current value unless\n // it is overridden in the update hash.\n var /** @type {?} */ method = update.method || this.method;\n var /** @type {?} */ url = update.url || this.url;\n var /** @type {?} */ responseType = update.responseType || this.responseType;\n // The body is somewhat special - a `null` value in update.body means\n // whatever current body is present is being overridden with an empty\n // body, whereas an `undefined` value in update.body implies no\n // override.\n var /** @type {?} */ body = (update.body !== undefined) ? update.body : this.body;\n // Carefully handle the boolean options to differentiate between\n // `false` and `undefined` in the update args.\n var /** @type {?} */ withCredentials = (update.withCredentials !== undefined) ? update.withCredentials : this.withCredentials;\n var /** @type {?} */ reportProgress = (update.reportProgress !== undefined) ? update.reportProgress : this.reportProgress;\n // Headers and params may be appended to if `setHeaders` or\n // `setParams` are used.\n var /** @type {?} */ headers = update.headers || this.headers;\n var /** @type {?} */ params = update.params || this.params;\n // Check whether the caller has asked to add headers.\n if (update.setHeaders !== undefined) {\n // Set every requested header.\n headers =\n Object.keys(update.setHeaders)\n .reduce(function (headers, name) { return headers.set(name, /** @type {?} */ ((update.setHeaders))[name]); }, headers);\n }\n // Check whether the caller has asked to set params.\n if (update.setParams) {\n // Set every requested param.\n params = Object.keys(update.setParams)\n .reduce(function (params, param) { return params.set(param, /** @type {?} */ ((update.setParams))[param]); }, params);\n }\n // Finally, construct the new HttpRequest using the pieces from above.\n return new HttpRequest(method, url, body, {\n params: params, headers: headers, reportProgress: reportProgress, responseType: responseType, withCredentials: withCredentials,\n });\n };\n return HttpRequest;\n}());\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar HttpEventType = {};\nHttpEventType.Sent = 0;\nHttpEventType.UploadProgress = 1;\nHttpEventType.ResponseHeader = 2;\nHttpEventType.DownloadProgress = 3;\nHttpEventType.Response = 4;\nHttpEventType.User = 5;\nHttpEventType[HttpEventType.Sent] = \"Sent\";\nHttpEventType[HttpEventType.UploadProgress] = \"UploadProgress\";\nHttpEventType[HttpEventType.ResponseHeader] = \"ResponseHeader\";\nHttpEventType[HttpEventType.DownloadProgress] = \"DownloadProgress\";\nHttpEventType[HttpEventType.Response] = \"Response\";\nHttpEventType[HttpEventType.User] = \"User\";\n/**\n * Base class for both `HttpResponse` and `HttpHeaderResponse`.\n *\n * \\@experimental\n * @abstract\n */\nvar HttpResponseBase = (function () {\n /**\n * Super-constructor for all responses.\n *\n * The single parameter accepted is an initialization hash. Any properties\n * of the response passed there will override the default values.\n * @param {?} init\n * @param {?=} defaultStatus\n * @param {?=} defaultStatusText\n */\n function HttpResponseBase(init, defaultStatus, defaultStatusText) {\n if (defaultStatus === void 0) { defaultStatus = 200; }\n if (defaultStatusText === void 0) { defaultStatusText = 'OK'; }\n // If the hash has values passed, use them to initialize the response.\n // Otherwise use the default values.\n this.headers = init.headers || new HttpHeaders();\n this.status = init.status !== undefined ? init.status : defaultStatus;\n this.statusText = init.statusText || defaultStatusText;\n this.url = init.url || null;\n // Cache the ok value to avoid defining a getter.\n this.ok = this.status >= 200 && this.status < 300;\n }\n return HttpResponseBase;\n}());\n/**\n * A partial HTTP response which only includes the status and header data,\n * but no response body.\n *\n * `HttpHeaderResponse` is a `HttpEvent` available on the response\n * event stream, only when progress events are requested.\n *\n * \\@experimental\n */\nvar HttpHeaderResponse = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](HttpHeaderResponse, _super);\n /**\n * Create a new `HttpHeaderResponse` with the given parameters.\n * @param {?=} init\n */\n function HttpHeaderResponse(init) {\n if (init === void 0) { init = {}; }\n var _this = _super.call(this, init) || this;\n _this.type = HttpEventType.ResponseHeader;\n return _this;\n }\n /**\n * Copy this `HttpHeaderResponse`, overriding its contents with the\n * given parameter hash.\n * @param {?=} update\n * @return {?}\n */\n HttpHeaderResponse.prototype.clone = function (update) {\n if (update === void 0) { update = {}; }\n // Perform a straightforward initialization of the new HttpHeaderResponse,\n // overriding the current parameters with new ones if given.\n return new HttpHeaderResponse({\n headers: update.headers || this.headers,\n status: update.status !== undefined ? update.status : this.status,\n statusText: update.statusText || this.statusText,\n url: update.url || this.url || undefined,\n });\n };\n return HttpHeaderResponse;\n}(HttpResponseBase));\n/**\n * A full HTTP response, including a typed response body (which may be `null`\n * if one was not returned).\n *\n * `HttpResponse` is a `HttpEvent` available on the response event\n * stream.\n *\n * \\@experimental\n */\nvar HttpResponse = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](HttpResponse, _super);\n /**\n * Construct a new `HttpResponse`.\n * @param {?=} init\n */\n function HttpResponse(init) {\n if (init === void 0) { init = {}; }\n var _this = _super.call(this, init) || this;\n _this.type = HttpEventType.Response;\n _this.body = init.body || null;\n return _this;\n }\n /**\n * @param {?=} update\n * @return {?}\n */\n HttpResponse.prototype.clone = function (update) {\n if (update === void 0) { update = {}; }\n return new HttpResponse({\n body: (update.body !== undefined) ? update.body : this.body,\n headers: update.headers || this.headers,\n status: (update.status !== undefined) ? update.status : this.status,\n statusText: update.statusText || this.statusText,\n url: update.url || this.url || undefined,\n });\n };\n return HttpResponse;\n}(HttpResponseBase));\n/**\n * A response that represents an error or failure, either from a\n * non-successful HTTP status, an error while executing the request,\n * or some other failure which occurred during the parsing of the response.\n *\n * Any error returned on the `Observable` response stream will be\n * wrapped in an `HttpErrorResponse` to provide additional context about\n * the state of the HTTP layer when the error occurred. The error property\n * will contain either a wrapped Error object or the error response returned\n * from the server.\n *\n * \\@experimental\n */\nvar HttpErrorResponse = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](HttpErrorResponse, _super);\n /**\n * @param {?} init\n */\n function HttpErrorResponse(init) {\n var _this = \n // Initialize with a default status of 0 / Unknown Error.\n _super.call(this, init, 0, 'Unknown Error') || this;\n _this.name = 'HttpErrorResponse';\n /**\n * Errors are never okay, even when the status code is in the 2xx success range.\n */\n _this.ok = false;\n // If the response was successful, then this was a parse error. Otherwise, it was\n // a protocol-level failure of some sort. Either the request failed in transit\n // or the server returned an unsuccessful status code.\n if (_this.status >= 200 && _this.status < 300) {\n _this.message = \"Http failure during parsing for \" + (init.url || '(unknown url)');\n }\n else {\n _this.message =\n \"Http failure response for \" + (init.url || '(unknown url)') + \": \" + init.status + \" \" + init.statusText;\n }\n _this.error = init.error || null;\n return _this;\n }\n return HttpErrorResponse;\n}(HttpResponseBase));\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Construct an instance of `HttpRequestOptions` from a source `HttpMethodOptions` and\n * the given `body`. Basically, this clones the object and adds the body.\n * @template T\n * @param {?} options\n * @param {?} body\n * @return {?}\n */\nfunction addBody(options, body) {\n return {\n body: body,\n headers: options.headers,\n observe: options.observe,\n params: options.params,\n reportProgress: options.reportProgress,\n responseType: options.responseType,\n withCredentials: options.withCredentials,\n };\n}\n/**\n * Perform HTTP requests.\n *\n * `HttpClient` is available as an injectable class, with methods to perform HTTP requests.\n * Each request method has multiple signatures, and the return type varies according to which\n * signature is called (mainly the values of `observe` and `responseType`).\n *\n * \\@experimental\n */\nvar HttpClient = (function () {\n /**\n * @param {?} handler\n */\n function HttpClient(handler) {\n this.handler = handler;\n }\n /**\n * Constructs an `Observable` for a particular HTTP request that, when subscribed,\n * fires the request through the chain of registered interceptors and on to the\n * server.\n *\n * This method can be called in one of two ways. Either an `HttpRequest`\n * instance can be passed directly as the only parameter, or a method can be\n * passed as the first parameter, a string URL as the second, and an\n * options hash as the third.\n *\n * If a `HttpRequest` object is passed directly, an `Observable` of the\n * raw `HttpEvent` stream will be returned.\n *\n * If a request is instead built by providing a URL, the options object\n * determines the return type of `request()`. In addition to configuring\n * request parameters such as the outgoing headers and/or the body, the options\n * hash specifies two key pieces of information about the request: the\n * `responseType` and what to `observe`.\n *\n * The `responseType` value determines how a successful response body will be\n * parsed. If `responseType` is the default `json`, a type interface for the\n * resulting object may be passed as a type parameter to `request()`.\n *\n * The `observe` value determines the return type of `request()`, based on what\n * the consumer is interested in observing. A value of `events` will return an\n * `Observable` representing the raw `HttpEvent` stream,\n * including progress events by default. A value of `response` will return an\n * `Observable>` where the `T` parameter of `HttpResponse`\n * depends on the `responseType` and any optionally provided type parameter.\n * A value of `body` will return an `Observable` with the same `T` body type.\n * @param {?} first\n * @param {?=} url\n * @param {?=} options\n * @return {?}\n */\n HttpClient.prototype.request = function (first, url, options) {\n var _this = this;\n if (options === void 0) { options = {}; }\n var /** @type {?} */ req;\n // Firstly, check whether the primary argument is an instance of `HttpRequest`.\n if (first instanceof HttpRequest) {\n // It is. The other arguments must be undefined (per the signatures) and can be\n // ignored.\n req = (first);\n }\n else {\n // It's a string, so it represents a URL. Construct a request based on it,\n // and incorporate the remaining arguments (assuming GET unless a method is\n // provided.\n req = new HttpRequest(first, /** @type {?} */ ((url)), options.body || null, {\n headers: options.headers,\n params: options.params,\n reportProgress: options.reportProgress,\n // By default, JSON is assumed to be returned for all calls.\n responseType: options.responseType || 'json',\n withCredentials: options.withCredentials,\n });\n }\n // Start with an Observable.of() the initial request, and run the handler (which\n // includes all interceptors) inside a concatMap(). This way, the handler runs\n // inside an Observable chain, which causes interceptors to be re-run on every\n // subscription (this also makes retries re-run the handler, including interceptors).\n var /** @type {?} */ events$ = __WEBPACK_IMPORTED_MODULE_3_rxjs_operator_concatMap__[\"concatMap\"].call(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2_rxjs_observable_of__[\"of\"])(req), function (req) { return _this.handler.handle(req); });\n // If coming via the API signature which accepts a previously constructed HttpRequest,\n // the only option is to get the event stream. Otherwise, return the event stream if\n // that is what was requested.\n if (first instanceof HttpRequest || options.observe === 'events') {\n return events$;\n }\n // The requested stream contains either the full response or the body. In either\n // case, the first step is to filter the event stream to extract a stream of\n // responses(s).\n var /** @type {?} */ res$ = __WEBPACK_IMPORTED_MODULE_4_rxjs_operator_filter__[\"filter\"].call(events$, function (event) { return event instanceof HttpResponse; });\n // Decide which stream to return.\n switch (options.observe || 'body') {\n case 'body':\n // The requested stream is the body. Map the response stream to the response\n // body. This could be done more simply, but a misbehaving interceptor might\n // transform the response body into a different format and ignore the requested\n // responseType. Guard against this by validating that the response is of the\n // requested type.\n switch (req.responseType) {\n case 'arraybuffer':\n return __WEBPACK_IMPORTED_MODULE_5_rxjs_operator_map__[\"map\"].call(res$, function (res) {\n // Validate that the body is an ArrayBuffer.\n if (res.body !== null && !(res.body instanceof ArrayBuffer)) {\n throw new Error('Response is not an ArrayBuffer.');\n }\n return res.body;\n });\n case 'blob':\n return __WEBPACK_IMPORTED_MODULE_5_rxjs_operator_map__[\"map\"].call(res$, function (res) {\n // Validate that the body is a Blob.\n if (res.body !== null && !(res.body instanceof Blob)) {\n throw new Error('Response is not a Blob.');\n }\n return res.body;\n });\n case 'text':\n return __WEBPACK_IMPORTED_MODULE_5_rxjs_operator_map__[\"map\"].call(res$, function (res) {\n // Validate that the body is a string.\n if (res.body !== null && typeof res.body !== 'string') {\n throw new Error('Response is not a string.');\n }\n return res.body;\n });\n case 'json':\n default:\n // No validation needed for JSON responses, as they can be of any type.\n return __WEBPACK_IMPORTED_MODULE_5_rxjs_operator_map__[\"map\"].call(res$, function (res) { return res.body; });\n }\n case 'response':\n // The response stream was requested directly, so return it.\n return res$;\n default:\n // Guard against new future observe types being added.\n throw new Error(\"Unreachable: unhandled observe type \" + options.observe + \"}\");\n }\n };\n /**\n * Constructs an `Observable` which, when subscribed, will cause the configured\n * DELETE request to be executed on the server. See the individual overloads for\n * details of `delete()`'s return type based on the provided options.\n * @param {?} url\n * @param {?=} options\n * @return {?}\n */\n HttpClient.prototype.delete = function (url, options) {\n if (options === void 0) { options = {}; }\n return this.request('DELETE', url, /** @type {?} */ (options));\n };\n /**\n * Constructs an `Observable` which, when subscribed, will cause the configured\n * GET request to be executed on the server. See the individual overloads for\n * details of `get()`'s return type based on the provided options.\n * @param {?} url\n * @param {?=} options\n * @return {?}\n */\n HttpClient.prototype.get = function (url, options) {\n if (options === void 0) { options = {}; }\n return this.request('GET', url, /** @type {?} */ (options));\n };\n /**\n * Constructs an `Observable` which, when subscribed, will cause the configured\n * HEAD request to be executed on the server. See the individual overloads for\n * details of `head()`'s return type based on the provided options.\n * @param {?} url\n * @param {?=} options\n * @return {?}\n */\n HttpClient.prototype.head = function (url, options) {\n if (options === void 0) { options = {}; }\n return this.request('HEAD', url, /** @type {?} */ (options));\n };\n /**\n * Constructs an `Observable` which, when subscribed, will cause a request\n * with the special method `JSONP` to be dispatched via the interceptor pipeline.\n *\n * A suitable interceptor must be installed (e.g. via the `HttpClientJsonpModule`).\n * If no such interceptor is reached, then the `JSONP` request will likely be\n * rejected by the configured backend.\n * @template T\n * @param {?} url\n * @param {?} callbackParam\n * @return {?}\n */\n HttpClient.prototype.jsonp = function (url, callbackParam) {\n return this.request('JSONP', url, {\n params: new HttpParams().append(callbackParam, 'JSONP_CALLBACK'),\n observe: 'body',\n responseType: 'json',\n });\n };\n /**\n * Constructs an `Observable` which, when subscribed, will cause the configured\n * OPTIONS request to be executed on the server. See the individual overloads for\n * details of `options()`'s return type based on the provided options.\n * @param {?} url\n * @param {?=} options\n * @return {?}\n */\n HttpClient.prototype.options = function (url, options) {\n if (options === void 0) { options = {}; }\n return this.request('OPTIONS', url, /** @type {?} */ (options));\n };\n /**\n * Constructs an `Observable` which, when subscribed, will cause the configured\n * PATCH request to be executed on the server. See the individual overloads for\n * details of `patch()`'s return type based on the provided options.\n * @param {?} url\n * @param {?} body\n * @param {?=} options\n * @return {?}\n */\n HttpClient.prototype.patch = function (url, body, options) {\n if (options === void 0) { options = {}; }\n return this.request('PATCH', url, addBody(options, body));\n };\n /**\n * Constructs an `Observable` which, when subscribed, will cause the configured\n * POST request to be executed on the server. See the individual overloads for\n * details of `post()`'s return type based on the provided options.\n * @param {?} url\n * @param {?} body\n * @param {?=} options\n * @return {?}\n */\n HttpClient.prototype.post = function (url, body, options) {\n if (options === void 0) { options = {}; }\n return this.request('POST', url, addBody(options, body));\n };\n /**\n * Constructs an `Observable` which, when subscribed, will cause the configured\n * POST request to be executed on the server. See the individual overloads for\n * details of `post()`'s return type based on the provided options.\n * @param {?} url\n * @param {?} body\n * @param {?=} options\n * @return {?}\n */\n HttpClient.prototype.put = function (url, body, options) {\n if (options === void 0) { options = {}; }\n return this.request('PUT', url, addBody(options, body));\n };\n return HttpClient;\n}());\nHttpClient.decorators = [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Injectable\"] },\n];\n/**\n * @nocollapse\n */\nHttpClient.ctorParameters = function () { return [\n { type: HttpHandler, },\n]; };\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * `HttpHandler` which applies an `HttpInterceptor` to an `HttpRequest`.\n *\n * \\@experimental\n */\nvar HttpInterceptorHandler = (function () {\n /**\n * @param {?} next\n * @param {?} interceptor\n */\n function HttpInterceptorHandler(next, interceptor) {\n this.next = next;\n this.interceptor = interceptor;\n }\n /**\n * @param {?} req\n * @return {?}\n */\n HttpInterceptorHandler.prototype.handle = function (req) {\n return this.interceptor.intercept(req, this.next);\n };\n return HttpInterceptorHandler;\n}());\n/**\n * A multi-provider token which represents the array of `HttpInterceptor`s that\n * are registered.\n *\n * \\@experimental\n */\nvar HTTP_INTERCEPTORS = new __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"InjectionToken\"]('HTTP_INTERCEPTORS');\nvar NoopInterceptor = (function () {\n function NoopInterceptor() {\n }\n /**\n * @param {?} req\n * @param {?} next\n * @return {?}\n */\n NoopInterceptor.prototype.intercept = function (req, next) {\n return next.handle(req);\n };\n return NoopInterceptor;\n}());\nNoopInterceptor.decorators = [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Injectable\"] },\n];\n/**\n * @nocollapse\n */\nNoopInterceptor.ctorParameters = function () { return []; };\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// Every request made through JSONP needs a callback name that's unique across the\n// whole page. Each request is assigned an id and the callback name is constructed\n// from that. The next id to be assigned is tracked in a global variable here that\n// is shared among all applications on the page.\nvar nextRequestId = 0;\n// Error text given when a JSONP script is injected, but doesn't invoke the callback\n// passed in its URL.\nvar JSONP_ERR_NO_CALLBACK = 'JSONP injected script did not invoke callback.';\n// Error text given when a request is passed to the JsonpClientBackend that doesn't\n// have a request method JSONP.\nvar JSONP_ERR_WRONG_METHOD = 'JSONP requests must use JSONP request method.';\nvar JSONP_ERR_WRONG_RESPONSE_TYPE = 'JSONP requests must use Json response type.';\n/**\n * DI token/abstract type representing a map of JSONP callbacks.\n *\n * In the browser, this should always be the `window` object.\n *\n * \\@experimental\n * @abstract\n */\nvar JsonpCallbackContext = (function () {\n function JsonpCallbackContext() {\n }\n return JsonpCallbackContext;\n}());\n/**\n * `HttpBackend` that only processes `HttpRequest` with the JSONP method,\n * by performing JSONP style requests.\n *\n * \\@experimental\n */\nvar JsonpClientBackend = (function () {\n /**\n * @param {?} callbackMap\n * @param {?} document\n */\n function JsonpClientBackend(callbackMap, document) {\n this.callbackMap = callbackMap;\n this.document = document;\n }\n /**\n * Get the name of the next callback method, by incrementing the global `nextRequestId`.\n * @return {?}\n */\n JsonpClientBackend.prototype.nextCallback = function () { return \"ng_jsonp_callback_\" + nextRequestId++; };\n /**\n * Process a JSONP request and return an event stream of the results.\n * @param {?} req\n * @return {?}\n */\n JsonpClientBackend.prototype.handle = function (req) {\n var _this = this;\n // Firstly, check both the method and response type. If either doesn't match\n // then the request was improperly routed here and cannot be handled.\n if (req.method !== 'JSONP') {\n throw new Error(JSONP_ERR_WRONG_METHOD);\n }\n else if (req.responseType !== 'json') {\n throw new Error(JSONP_ERR_WRONG_RESPONSE_TYPE);\n }\n // Everything else happens inside the Observable boundary.\n return new __WEBPACK_IMPORTED_MODULE_7_rxjs_Observable__[\"Observable\"](function (observer) {\n // The first step to make a request is to generate the callback name, and replace the\n // callback placeholder in the URL with the name. Care has to be taken here to ensure\n // a trailing &, if matched, gets inserted back into the URL in the correct place.\n var /** @type {?} */ callback = _this.nextCallback();\n var /** @type {?} */ url = req.urlWithParams.replace(/=JSONP_CALLBACK(&|$)/, \"=\" + callback + \"$1\");\n // Construct the \ No newline at end of file + \ No newline at end of file diff --git a/openhtf/output/web_gui/dist/js/app.77df9acbfc40a7330df9.js b/openhtf/output/web_gui/dist/js/app.77df9acbfc40a7330df9.js new file mode 100644 index 000000000..fb2f8e6b6 --- /dev/null +++ b/openhtf/output/web_gui/dist/js/app.77df9acbfc40a7330df9.js @@ -0,0 +1,482 @@ +webpackJsonp([1],{21:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.waiting=11]="waiting",e[e.running=12]="running",e[e.pass=13]="pass",e[e.fail=14]="fail",e[e.error=15]="error",e[e.timeout=16]="timeout",e[e.aborted=17]="aborted"}(t.TestStatus||(t.TestStatus={}));var r=function(){return function PlugDescriptor(){}}();t.PlugDescriptor=r;var i=function(){return function TestState(e){Object.assign(this,e)}}();t.TestState=i},233:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n.d(t,"HttpBackend",function(){return d}),n.d(t,"HttpHandler",function(){return p}),n.d(t,"HttpClient",function(){return C}),n.d(t,"HttpHeaders",function(){return f}),n.d(t,"HTTP_INTERCEPTORS",function(){return T}),n.d(t,"JsonpClientBackend",function(){return O}),n.d(t,"JsonpInterceptor",function(){return I}),n.d(t,"HttpClientJsonpModule",function(){return B}),n.d(t,"HttpClientModule",function(){return H}),n.d(t,"HttpClientXsrfModule",function(){return j}),n.d(t,"ɵinterceptingHandler",function(){return interceptingHandler}),n.d(t,"HttpParams",function(){return m}),n.d(t,"HttpUrlEncodingCodec",function(){return h}),n.d(t,"HttpRequest",function(){return y}),n.d(t,"HttpErrorResponse",function(){return S}),n.d(t,"HttpEventType",function(){return g}),n.d(t,"HttpHeaderResponse",function(){return b}),n.d(t,"HttpResponse",function(){return _}),n.d(t,"HttpResponseBase",function(){return v}),n.d(t,"HttpXhrBackend",function(){return D}),n.d(t,"XhrFactory",function(){return L}),n.d(t,"HttpXsrfTokenExtractor",function(){return R}),n.d(t,"ɵa",function(){return w}),n.d(t,"ɵb",function(){return P}),n.d(t,"ɵc",function(){return jsonpCallbackContext}),n.d(t,"ɵd",function(){return x}),n.d(t,"ɵg",function(){return V}),n.d(t,"ɵh",function(){return k}),n.d(t,"ɵe",function(){return M}),n.d(t,"ɵf",function(){return F});var r=n(16),i=n(2),o=n(56),s=(n.n(o),n(74)),a=(n.n(s),n(81)),u=(n.n(a),n(57)),l=(n.n(u),n(19)),c=n(0),p=(n.n(c),function(){function HttpHandler(){}return HttpHandler.prototype.handle=function(e){},HttpHandler}()),d=function(){function HttpBackend(){}return HttpBackend.prototype.handle=function(e){},HttpBackend}(),h=function(){function HttpUrlEncodingCodec(){}return HttpUrlEncodingCodec.prototype.encodeKey=function(e){return standardEncoding(e)},HttpUrlEncodingCodec.prototype.encodeValue=function(e){return standardEncoding(e)},HttpUrlEncodingCodec.prototype.decodeKey=function(e){return decodeURIComponent(e)},HttpUrlEncodingCodec.prototype.decodeValue=function(e){return decodeURIComponent(e)},HttpUrlEncodingCodec}();function standardEncoding(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/gi,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%2B/gi,"+").replace(/%3D/gi,"=").replace(/%3F/gi,"?").replace(/%2F/gi,"/")}var m=function(){function HttpParams(e){void 0===e&&(e={}),this.updates=null,this.cloneFrom=null,this.encoder=e.encoder||new h,this.map=e.fromString?function paramParser(e,t){var n=new Map;return e.length>0&&e.split("&").forEach(function(e){var r=e.indexOf("="),i=-1==r?[t.decodeKey(e),""]:[t.decodeKey(e.slice(0,r)),t.decodeValue(e.slice(r+1))],o=i[0],s=i[1],a=n.get(o)||[];a.push(s),n.set(o,a)}),n}(e.fromString,this.encoder):null}return HttpParams.prototype.has=function(e){return this.init(),this.map.has(e)},HttpParams.prototype.get=function(e){this.init();var t=this.map.get(e);return t?t[0]:null},HttpParams.prototype.getAll=function(e){return this.init(),this.map.get(e)||null},HttpParams.prototype.keys=function(){return this.init(),Array.from(this.map.keys())},HttpParams.prototype.append=function(e,t){return this.clone({param:e,value:t,op:"a"})},HttpParams.prototype.set=function(e,t){return this.clone({param:e,value:t,op:"s"})},HttpParams.prototype.delete=function(e,t){return this.clone({param:e,value:t,op:"d"})},HttpParams.prototype.toString=function(){var e=this;return this.init(),this.keys().map(function(t){var n=e.encoder.encodeKey(t);return e.map.get(t).map(function(t){return n+"="+e.encoder.encodeValue(t)}).join("&")}).join("&")},HttpParams.prototype.clone=function(e){var t=new HttpParams({encoder:this.encoder});return t.cloneFrom=this.cloneFrom||this,t.updates=(this.updates||[]).concat([e]),t},HttpParams.prototype.init=function(){var e=this;null===this.map&&(this.map=new Map),null!==this.cloneFrom&&(this.cloneFrom.init(),this.cloneFrom.keys().forEach(function(t){return e.map.set(t,e.cloneFrom.map.get(t))}),this.updates.forEach(function(t){switch(t.op){case"a":case"s":var n=("a"===t.op?e.map.get(t.param):void 0)||[];n.push(t.value),e.map.set(t.param,n);break;case"d":if(void 0===t.value){e.map.delete(t.param);break}var r=e.map.get(t.param)||[],i=r.indexOf(t.value);-1!==i&&r.splice(i,1),r.length>0?e.map.set(t.param,r):e.map.delete(t.param)}}),this.cloneFrom=null)},HttpParams}(),f=function(){function HttpHeaders(e){var t=this;this.normalizedNames=new Map,this.lazyUpdate=null,e?this.lazyInit="string"==typeof e?function(){t.headers=new Map,e.split("\n").forEach(function(e){var n=e.indexOf(":");if(n>0){var r=e.slice(0,n),i=r.toLowerCase(),o=e.slice(n+1).trim();t.maybeSetNormalizedName(r,i),t.headers.has(i)?t.headers.get(i).push(o):t.headers.set(i,[o])}})}:function(){t.headers=new Map,Object.keys(e).forEach(function(n){var r=e[n],i=n.toLowerCase();"string"==typeof r&&(r=[r]),r.length>0&&(t.headers.set(i,r),t.maybeSetNormalizedName(n,i))})}:this.headers=new Map}return HttpHeaders.prototype.has=function(e){return this.init(),this.headers.has(e.toLowerCase())},HttpHeaders.prototype.get=function(e){this.init();var t=this.headers.get(e.toLowerCase());return t&&t.length>0?t[0]:null},HttpHeaders.prototype.keys=function(){return this.init(),Array.from(this.normalizedNames.values())},HttpHeaders.prototype.getAll=function(e){return this.init(),this.headers.get(e.toLowerCase())||null},HttpHeaders.prototype.append=function(e,t){return this.clone({name:e,value:t,op:"a"})},HttpHeaders.prototype.set=function(e,t){return this.clone({name:e,value:t,op:"s"})},HttpHeaders.prototype.delete=function(e,t){return this.clone({name:e,value:t,op:"d"})},HttpHeaders.prototype.maybeSetNormalizedName=function(e,t){this.normalizedNames.has(t)||this.normalizedNames.set(t,e)},HttpHeaders.prototype.init=function(){var e=this;this.lazyInit&&(this.lazyInit instanceof HttpHeaders?this.copyFrom(this.lazyInit):this.lazyInit(),this.lazyInit=null,this.lazyUpdate&&(this.lazyUpdate.forEach(function(t){return e.applyUpdate(t)}),this.lazyUpdate=null))},HttpHeaders.prototype.copyFrom=function(e){var t=this;e.init(),Array.from(e.headers.keys()).forEach(function(n){t.headers.set(n,e.headers.get(n)),t.normalizedNames.set(n,e.normalizedNames.get(n))})},HttpHeaders.prototype.clone=function(e){var t=new HttpHeaders;return t.lazyInit=this.lazyInit&&this.lazyInit instanceof HttpHeaders?this.lazyInit:this,t.lazyUpdate=(this.lazyUpdate||[]).concat([e]),t},HttpHeaders.prototype.applyUpdate=function(e){var t=e.name.toLowerCase();switch(e.op){case"a":case"s":var n=e.value;if("string"==typeof n&&(n=[n]),0===n.length)return;this.maybeSetNormalizedName(e.name,t);var r=("a"===e.op?this.headers.get(t):void 0)||[];r.push.apply(r,n),this.headers.set(t,r);break;case"d":var i=e.value;if(i){var o=this.headers.get(t);if(!o)return;0===(o=o.filter(function(e){return-1===i.indexOf(e)})).length?(this.headers.delete(t),this.normalizedNames.delete(t)):this.headers.set(t,o)}else this.headers.delete(t),this.normalizedNames.delete(t)}},HttpHeaders.prototype.forEach=function(e){var t=this;this.init(),Array.from(this.normalizedNames.keys()).forEach(function(n){return e(t.normalizedNames.get(n),t.headers.get(n))})},HttpHeaders}(); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */function isArrayBuffer(e){return"undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer}function isBlob(e){return"undefined"!=typeof Blob&&e instanceof Blob}function isFormData(e){return"undefined"!=typeof FormData&&e instanceof FormData}var y=function(){function HttpRequest(e,t,n,r){var i;if(this.url=t,this.body=null,this.reportProgress=!1,this.withCredentials=!1,this.responseType="json",this.method=e.toUpperCase(), +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +function mightHaveBody(e){switch(e){case"DELETE":case"GET":case"HEAD":case"OPTIONS":case"JSONP":return!1;default:return!0}}(this.method)||r?(this.body=n||null,i=r):i=n,i&&(this.reportProgress=!!i.reportProgress,this.withCredentials=!!i.withCredentials,i.responseType&&(this.responseType=i.responseType),i.headers&&(this.headers=i.headers),i.params&&(this.params=i.params)),this.headers||(this.headers=new f),this.params){var o=this.params.toString();if(0===o.length)this.urlWithParams=t;else{var s=t.indexOf("?"),a=-1===s?"?":s=200&&this.status<300}}(),b=function(e){function HttpHeaderResponse(t){void 0===t&&(t={});var n=e.call(this,t)||this;return n.type=g.ResponseHeader,n}return r.a(HttpHeaderResponse,e),HttpHeaderResponse.prototype.clone=function(e){return void 0===e&&(e={}),new HttpHeaderResponse({headers:e.headers||this.headers,status:void 0!==e.status?e.status:this.status,statusText:e.statusText||this.statusText,url:e.url||this.url||void 0})},HttpHeaderResponse}(v),_=function(e){function HttpResponse(t){void 0===t&&(t={});var n=e.call(this,t)||this;return n.type=g.Response,n.body=t.body||null,n}return r.a(HttpResponse,e),HttpResponse.prototype.clone=function(e){return void 0===e&&(e={}),new HttpResponse({body:void 0!==e.body?e.body:this.body,headers:e.headers||this.headers,status:void 0!==e.status?e.status:this.status,statusText:e.statusText||this.statusText,url:e.url||this.url||void 0})},HttpResponse}(v),S=function(e){function HttpErrorResponse(t){var n=e.call(this,t,0,"Unknown Error")||this;return n.name="HttpErrorResponse",n.ok=!1,n.status>=200&&n.status<300?n.message="Http failure during parsing for "+(t.url||"(unknown url)"):n.message="Http failure response for "+(t.url||"(unknown url)")+": "+t.status+" "+t.statusText,n.error=t.error||null,n}return r.a(HttpErrorResponse,e),HttpErrorResponse}(v); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +function addBody(e,t){return{body:t,headers:e.headers,observe:e.observe,params:e.params,reportProgress:e.reportProgress,responseType:e.responseType,withCredentials:e.withCredentials}}var C=function(){function HttpClient(e){this.handler=e}return HttpClient.prototype.request=function(e,t,n){var r,i=this;void 0===n&&(n={}),r=e instanceof y?e:new y(e,t,n.body||null,{headers:n.headers,params:n.params,reportProgress:n.reportProgress,responseType:n.responseType||"json",withCredentials:n.withCredentials});var l=s.concatMap.call(Object(o.of)(r),function(e){return i.handler.handle(e)});if(e instanceof y||"events"===n.observe)return l;var c=a.filter.call(l,function(e){return e instanceof _});switch(n.observe||"body"){case"body":switch(r.responseType){case"arraybuffer":return u.map.call(c,function(e){if(null!==e.body&&!(e.body instanceof ArrayBuffer))throw new Error("Response is not an ArrayBuffer.");return e.body});case"blob":return u.map.call(c,function(e){if(null!==e.body&&!(e.body instanceof Blob))throw new Error("Response is not a Blob.");return e.body});case"text":return u.map.call(c,function(e){if(null!==e.body&&"string"!=typeof e.body)throw new Error("Response is not a string.");return e.body});case"json":default:return u.map.call(c,function(e){return e.body})}case"response":return c;default:throw new Error("Unreachable: unhandled observe type "+n.observe+"}")}},HttpClient.prototype.delete=function(e,t){return void 0===t&&(t={}),this.request("DELETE",e,t)},HttpClient.prototype.get=function(e,t){return void 0===t&&(t={}),this.request("GET",e,t)},HttpClient.prototype.head=function(e,t){return void 0===t&&(t={}),this.request("HEAD",e,t)},HttpClient.prototype.jsonp=function(e,t){return this.request("JSONP",e,{params:(new m).append(t,"JSONP_CALLBACK"),observe:"body",responseType:"json"})},HttpClient.prototype.options=function(e,t){return void 0===t&&(t={}),this.request("OPTIONS",e,t)},HttpClient.prototype.patch=function(e,t,n){return void 0===n&&(n={}),this.request("PATCH",e,addBody(n,t))},HttpClient.prototype.post=function(e,t,n){return void 0===n&&(n={}),this.request("POST",e,addBody(n,t))},HttpClient.prototype.put=function(e,t,n){return void 0===n&&(n={}),this.request("PUT",e,addBody(n,t))},HttpClient}();C.decorators=[{type:i.Injectable}],C.ctorParameters=function(){return[{type:p}]}; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +var A=function(){function HttpInterceptorHandler(e,t){this.next=e,this.interceptor=t}return HttpInterceptorHandler.prototype.handle=function(e){return this.interceptor.intercept(e,this.next)},HttpInterceptorHandler}(),T=new i.InjectionToken("HTTP_INTERCEPTORS"),w=function(){function NoopInterceptor(){}return NoopInterceptor.prototype.intercept=function(e,t){return t.handle(e)},NoopInterceptor}();w.decorators=[{type:i.Injectable}],w.ctorParameters=function(){return[]}; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +var E=0,P=function(){return function JsonpCallbackContext(){}}(),O=function(){function JsonpClientBackend(e,t){this.callbackMap=e,this.document=t}return JsonpClientBackend.prototype.nextCallback=function(){return"ng_jsonp_callback_"+E++},JsonpClientBackend.prototype.handle=function(e){var t=this;if("JSONP"!==e.method)throw new Error("JSONP requests must use JSONP request method.");if("json"!==e.responseType)throw new Error("JSONP requests must use Json response type.");return new c.Observable(function(n){var r=t.nextCallback(),i=e.urlWithParams.replace(/=JSONP_CALLBACK(&|$)/,"="+r+"$1"),o=t.document.createElement("script");o.src=i;var s=null,a=!1,u=!1;t.callbackMap[r]=function(e){delete t.callbackMap[r],u||(s=e,a=!0)};var l=function(){o.parentNode&&o.parentNode.removeChild(o),delete t.callbackMap[r]},c=function(e){u||(l(),a?(n.next(new _({body:s,status:200,statusText:"OK",url:i})),n.complete()):n.error(new S({url:i,status:0,statusText:"JSONP Error",error:new Error("JSONP injected script did not invoke callback.")})))},p=function(e){u||(l(),n.error(new S({error:e,status:0,statusText:"JSONP Error",url:i})))};return o.addEventListener("load",c),o.addEventListener("error",p),t.document.body.appendChild(o),n.next({type:g.Sent}),function(){u=!0,o.removeEventListener("load",c),o.removeEventListener("error",p),l()}})},JsonpClientBackend}();O.decorators=[{type:i.Injectable}],O.ctorParameters=function(){return[{type:P},{type:void 0,decorators:[{type:i.Inject,args:[l.DOCUMENT]}]}]};var I=function(){function JsonpInterceptor(e){this.jsonp=e}return JsonpInterceptor.prototype.intercept=function(e,t){return"JSONP"===e.method?this.jsonp.handle(e):t.handle(e)},JsonpInterceptor}();I.decorators=[{type:i.Injectable}],I.ctorParameters=function(){return[{type:O}]}; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +var N=/^\)\]\}',?\n/;var L=function(){function XhrFactory(){}return XhrFactory.prototype.build=function(){},XhrFactory}(),x=function(){function BrowserXhr(){}return BrowserXhr.prototype.build=function(){return new XMLHttpRequest},BrowserXhr}();x.decorators=[{type:i.Injectable}],x.ctorParameters=function(){return[]};var D=function(){function HttpXhrBackend(e){this.xhrFactory=e}return HttpXhrBackend.prototype.handle=function(e){var t=this;if("JSONP"===e.method)throw new Error("Attempted to construct Jsonp request without JsonpClientModule installed.");return new c.Observable(function(n){var r=t.xhrFactory.build();if(r.open(e.method,e.urlWithParams),e.withCredentials&&(r.withCredentials=!0),e.headers.forEach(function(e,t){return r.setRequestHeader(e,t.join(","))}),e.headers.has("Accept")||r.setRequestHeader("Accept","application/json, text/plain, */*"),!e.headers.has("Content-Type")){var i=e.detectContentTypeHeader();null!==i&&r.setRequestHeader("Content-Type",i)}if(e.responseType){var o=e.responseType.toLowerCase();r.responseType="json"!==o?o:"text"}var s=e.serializeBody(),a=null,u=function(){if(null!==a)return a;var t=1223===r.status?204:r.status,n=r.statusText||"OK",i=new f(r.getAllResponseHeaders()),o=function getResponseUrl(e){return"responseURL"in e&&e.responseURL?e.responseURL:/^X-Request-URL:/m.test(e.getAllResponseHeaders())?e.getResponseHeader("X-Request-URL"):null}(r)||e.url;return a=new b({headers:i,status:t,statusText:n,url:o})},l=function(){var t=u(),i=t.headers,o=t.status,s=t.statusText,a=t.url,l=null;204!==o&&(l=void 0===r.response?r.responseText:r.response),0===o&&(o=l?200:0);var c=o>=200&&o<300;if(c&&"json"===e.responseType&&"string"==typeof l){l=l.replace(N,"");try{l=JSON.parse(l)}catch(e){c=!1,l={error:e,text:l}}}else if(!c&&"json"===e.responseType&&"string"==typeof l)try{l=JSON.parse(l)}catch(e){}c?(n.next(new _({body:l,headers:i,status:o,statusText:s,url:a||void 0})),n.complete()):n.error(new S({error:l,headers:i,status:o,statusText:s,url:a||void 0}))},c=function(e){var t=new S({error:e,status:r.status||0,statusText:r.statusText||"Unknown Error"});n.error(t)},p=!1,d=function(t){p||(n.next(u()),p=!0);var i={type:g.DownloadProgress,loaded:t.loaded};t.lengthComputable&&(i.total=t.total),"text"===e.responseType&&r.responseText&&(i.partialText=r.responseText),n.next(i)},h=function(e){var t={type:g.UploadProgress,loaded:e.loaded};e.lengthComputable&&(t.total=e.total),n.next(t)};return r.addEventListener("load",l),r.addEventListener("error",c),e.reportProgress&&(r.addEventListener("progress",d),null!==s&&r.upload&&r.upload.addEventListener("progress",h)),r.send(s),n.next({type:g.Sent}),function(){r.removeEventListener("error",c),r.removeEventListener("load",l),e.reportProgress&&(r.removeEventListener("progress",d),null!==s&&r.upload&&r.upload.removeEventListener("progress",h)),r.abort()}})},HttpXhrBackend}();D.decorators=[{type:i.Injectable}],D.ctorParameters=function(){return[{type:L}]}; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +var M=new i.InjectionToken("XSRF_COOKIE_NAME"),F=new i.InjectionToken("XSRF_HEADER_NAME"),R=function(){function HttpXsrfTokenExtractor(){}return HttpXsrfTokenExtractor.prototype.getToken=function(){},HttpXsrfTokenExtractor}(),V=function(){function HttpXsrfCookieExtractor(e,t,n){this.doc=e,this.platform=t,this.cookieName=n,this.lastCookieString="",this.lastToken=null,this.parseCount=0}return HttpXsrfCookieExtractor.prototype.getToken=function(){if("server"===this.platform)return null;var e=this.doc.cookie||"";return e!==this.lastCookieString&&(this.parseCount++,this.lastToken=Object(l["ɵparseCookieValue"])(e,this.cookieName),this.lastCookieString=e),this.lastToken},HttpXsrfCookieExtractor}();V.decorators=[{type:i.Injectable}],V.ctorParameters=function(){return[{type:void 0,decorators:[{type:i.Inject,args:[l.DOCUMENT]}]},{type:void 0,decorators:[{type:i.Inject,args:[i.PLATFORM_ID]}]},{type:void 0,decorators:[{type:i.Inject,args:[M]}]}]};var k=function(){function HttpXsrfInterceptor(e,t){this.tokenService=e,this.headerName=t}return HttpXsrfInterceptor.prototype.intercept=function(e,t){var n=e.url.toLowerCase();if("GET"===e.method||"HEAD"===e.method||n.startsWith("http://")||n.startsWith("https://"))return t.handle(e);var r=this.tokenService.getToken();return null===r||e.headers.has(this.headerName)||(e=e.clone({headers:e.headers.set(this.headerName,r)})),t.handle(e)},HttpXsrfInterceptor}(); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +function interceptingHandler(e,t){return void 0===t&&(t=[]),t?t.reduceRight(function(e,t){return new A(e,t)},e):e}function jsonpCallbackContext(){return"object"==typeof window?window:{}}k.decorators=[{type:i.Injectable}],k.ctorParameters=function(){return[{type:R},{type:void 0,decorators:[{type:i.Inject,args:[F]}]}]};var j=function(){function HttpClientXsrfModule(){}return HttpClientXsrfModule.disable=function(){return{ngModule:HttpClientXsrfModule,providers:[{provide:k,useClass:w}]}},HttpClientXsrfModule.withOptions=function(e){return void 0===e&&(e={}),{ngModule:HttpClientXsrfModule,providers:[e.cookieName?{provide:M,useValue:e.cookieName}:[],e.headerName?{provide:F,useValue:e.headerName}:[]]}},HttpClientXsrfModule}();j.decorators=[{type:i.NgModule,args:[{providers:[k,{provide:T,useExisting:k,multi:!0},{provide:R,useClass:V},{provide:M,useValue:"XSRF-TOKEN"},{provide:F,useValue:"X-XSRF-TOKEN"}]}]}],j.ctorParameters=function(){return[]};var H=function(){return function HttpClientModule(){}}();H.decorators=[{type:i.NgModule,args:[{imports:[j.withOptions({cookieName:"XSRF-TOKEN",headerName:"X-XSRF-TOKEN"})],providers:[C,{provide:p,useFactory:interceptingHandler,deps:[d,[new i.Optional,new i.Inject(T)]]},D,{provide:d,useExisting:D},x,{provide:L,useExisting:x}]}]}],H.ctorParameters=function(){return[]};var B=function(){return function HttpClientJsonpModule(){}}();B.decorators=[{type:i.NgModule,args:[{providers:[O,{provide:P,useFactory:jsonpCallbackContext},{provide:T,useClass:I,multi:!0}]}]}],B.ctorParameters=function(){return[]}},234:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n.d(t,"AbstractControlDirective",function(){return l}),n.d(t,"AbstractFormGroupDirective",function(){return R}),n.d(t,"CheckboxControlValueAccessor",function(){return g}),n.d(t,"ControlContainer",function(){return c}),n.d(t,"NG_VALUE_ACCESSOR",function(){return f}),n.d(t,"COMPOSITION_BUFFER_MODE",function(){return b}),n.d(t,"DefaultValueAccessor",function(){return _}),n.d(t,"NgControl",function(){return A}),n.d(t,"NgControlStatus",function(){return j}),n.d(t,"NgControlStatusGroup",function(){return H}),n.d(t,"NgForm",function(){return K}),n.d(t,"NgModel",function(){return ie}),n.d(t,"NgModelGroup",function(){return te}),n.d(t,"RadioControlValueAccessor",function(){return E}),n.d(t,"FormControlDirective",function(){return ae}),n.d(t,"FormControlName",function(){return fe}),n.d(t,"FormGroupDirective",function(){return le}),n.d(t,"FormArrayName",function(){return he}),n.d(t,"FormGroupName",function(){return pe}),n.d(t,"NgSelectOption",function(){return L}),n.d(t,"SelectControlValueAccessor",function(){return N}),n.d(t,"SelectMultipleControlValueAccessor",function(){return D}),n.d(t,"CheckboxRequiredValidator",function(){return be}),n.d(t,"EmailValidator",function(){return Se}),n.d(t,"MaxLengthValidator",function(){return we}),n.d(t,"MinLengthValidator",function(){return Ae}),n.d(t,"PatternValidator",function(){return Pe}),n.d(t,"RequiredValidator",function(){return ve}),n.d(t,"FormBuilder",function(){return Oe}),n.d(t,"AbstractControl",function(){return B}),n.d(t,"FormArray",function(){return q}),n.d(t,"FormControl",function(){return G}),n.d(t,"FormGroup",function(){return U}),n.d(t,"NG_ASYNC_VALIDATORS",function(){return d}),n.d(t,"NG_VALIDATORS",function(){return p}),n.d(t,"Validators",function(){return m}),n.d(t,"VERSION",function(){return Ie}),n.d(t,"FormsModule",function(){return Fe}),n.d(t,"ReactiveFormsModule",function(){return Re}),n.d(t,"ɵba",function(){return Me}),n.d(t,"ɵz",function(){return De}),n.d(t,"ɵx",function(){return Le}),n.d(t,"ɵy",function(){return xe}),n.d(t,"ɵa",function(){return y}),n.d(t,"ɵb",function(){return v}),n.d(t,"ɵc",function(){return V}),n.d(t,"ɵd",function(){return k}),n.d(t,"ɵe",function(){return W}),n.d(t,"ɵf",function(){return ne}),n.d(t,"ɵg",function(){return ee}),n.d(t,"ɵbf",function(){return Ne}),n.d(t,"ɵbb",function(){return S}),n.d(t,"ɵbc",function(){return C}),n.d(t,"ɵh",function(){return T}),n.d(t,"ɵi",function(){return w}),n.d(t,"ɵbd",function(){return P}),n.d(t,"ɵbe",function(){return O}),n.d(t,"ɵj",function(){return se}),n.d(t,"ɵk",function(){return me}),n.d(t,"ɵl",function(){return ue}),n.d(t,"ɵn",function(){return de}),n.d(t,"ɵm",function(){return ce}),n.d(t,"ɵo",function(){return I}),n.d(t,"ɵq",function(){return M}),n.d(t,"ɵp",function(){return x}),n.d(t,"ɵs",function(){return ge}),n.d(t,"ɵt",function(){return _e}),n.d(t,"ɵv",function(){return Te}),n.d(t,"ɵu",function(){return Ce}),n.d(t,"ɵw",function(){return Ee}),n.d(t,"ɵr",function(){return ye});var r=n(16),i=n(2),o=n(126),s=(n.n(o),n(80)),a=(n.n(s),n(57)),u=(n.n(a),n(27)),l=function(){function AbstractControlDirective(){}return AbstractControlDirective.prototype.control=function(){},Object.defineProperty(AbstractControlDirective.prototype,"value",{get:function(){return this.control?this.control.value:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"valid",{get:function(){return this.control?this.control.valid:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"invalid",{get:function(){return this.control?this.control.invalid:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"pending",{get:function(){return this.control?this.control.pending:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"disabled",{get:function(){return this.control?this.control.disabled:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"enabled",{get:function(){return this.control?this.control.enabled:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"errors",{get:function(){return this.control?this.control.errors:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"pristine",{get:function(){return this.control?this.control.pristine:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"dirty",{get:function(){return this.control?this.control.dirty:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"touched",{get:function(){return this.control?this.control.touched:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"untouched",{get:function(){return this.control?this.control.untouched:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"statusChanges",{get:function(){return this.control?this.control.statusChanges:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"valueChanges",{get:function(){return this.control?this.control.valueChanges:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"path",{get:function(){return null},enumerable:!0,configurable:!0}),AbstractControlDirective.prototype.reset=function(e){void 0===e&&(e=void 0),this.control&&this.control.reset(e)},AbstractControlDirective.prototype.hasError=function(e,t){return!!this.control&&this.control.hasError(e,t)},AbstractControlDirective.prototype.getError=function(e,t){return this.control?this.control.getError(e,t):null},AbstractControlDirective}(),c=function(e){function ControlContainer(){return null!==e&&e.apply(this,arguments)||this}return r.a(ControlContainer,e),Object.defineProperty(ControlContainer.prototype,"formDirective",{get:function(){return null},enumerable:!0,configurable:!0}),Object.defineProperty(ControlContainer.prototype,"path",{get:function(){return null},enumerable:!0,configurable:!0}),ControlContainer}(l); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +function isEmptyInputValue(e){return null==e||0===e.length}var p=new i.InjectionToken("NgValidators"),d=new i.InjectionToken("NgAsyncValidators"),h=/^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/,m=function(){function Validators(){}return Validators.min=function(e){return function(t){if(isEmptyInputValue(t.value)||isEmptyInputValue(e))return null;var n=parseFloat(t.value);return!isNaN(n)&&ne?{max:{max:e,actual:t.value}}:null}},Validators.required=function(e){return isEmptyInputValue(e.value)?{required:!0}:null},Validators.requiredTrue=function(e){return!0===e.value?null:{required:!0}},Validators.email=function(e){return h.test(e.value)?null:{email:!0}},Validators.minLength=function(e){return function(t){if(isEmptyInputValue(t.value))return null;var n=t.value?t.value.length:0;return ne?{maxlength:{requiredLength:e,actualLength:n}}:null}},Validators.pattern=function(e){return e?("string"==typeof e?(n="^"+e+"$",t=new RegExp(n)):(n=e.toString(),t=e),function(e){if(isEmptyInputValue(e.value))return null;var r=e.value;return t.test(r)?null:{pattern:{requiredPattern:n,actualValue:r}}}):Validators.nullValidator;var t,n},Validators.nullValidator=function(e){return null},Validators.compose=function(e){if(!e)return null;var t=e.filter(isPresent);return 0==t.length?null:function(e){return _mergeErrors(function _executeValidators(e,t){return t.map(function(t){return t(e)})}(e,t))}},Validators.composeAsync=function(e){if(!e)return null;var t=e.filter(isPresent);return 0==t.length?null:function(e){var n=function _executeAsyncValidators(e,t){return t.map(function(t){return t(e)})}(e,t).map(toObservable);return a.map.call(Object(o.forkJoin)(n),_mergeErrors)}},Validators}();function isPresent(e){return null!=e}function toObservable(e){var t=Object(i["ɵisPromise"])(e)?Object(s.fromPromise)(e):e;if(!Object(i["ɵisObservable"])(t))throw new Error("Expected validator to return Promise or Observable.");return t}function _mergeErrors(e){var t=e.reduce(function(e,t){return null!=t?Object.assign({},e,t):e},{});return 0===Object.keys(t).length?null:t} +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */var f=new i.InjectionToken("NgValueAccessor"),y={provide:f,useExisting:Object(i.forwardRef)(function(){return g}),multi:!0},g=function(){function CheckboxControlValueAccessor(e,t){this._renderer=e,this._elementRef=t,this.onChange=function(e){},this.onTouched=function(){}}return CheckboxControlValueAccessor.prototype.writeValue=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"checked",e)},CheckboxControlValueAccessor.prototype.registerOnChange=function(e){this.onChange=e},CheckboxControlValueAccessor.prototype.registerOnTouched=function(e){this.onTouched=e},CheckboxControlValueAccessor.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},CheckboxControlValueAccessor}(); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */g.decorators=[{type:i.Directive,args:[{selector:"input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]",host:{"(change)":"onChange($event.target.checked)","(blur)":"onTouched()"},providers:[y]}]}],g.ctorParameters=function(){return[{type:i.Renderer2},{type:i.ElementRef}]}; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +var v={provide:f,useExisting:Object(i.forwardRef)(function(){return _}),multi:!0};var b=new i.InjectionToken("CompositionEventMode"),_=function(){function DefaultValueAccessor(e,t,n){this._renderer=e,this._elementRef=t,this._compositionMode=n,this.onChange=function(e){},this.onTouched=function(){},this._composing=!1,null==this._compositionMode&&(this._compositionMode=!function _isAndroid(){var e=Object(u["ɵgetDOM"])()?Object(u["ɵgetDOM"])().getUserAgent():"";return/android (\d+)/.test(e.toLowerCase())}())}return DefaultValueAccessor.prototype.writeValue=function(e){var t=null==e?"":e;this._renderer.setProperty(this._elementRef.nativeElement,"value",t)},DefaultValueAccessor.prototype.registerOnChange=function(e){this.onChange=e},DefaultValueAccessor.prototype.registerOnTouched=function(e){this.onTouched=e},DefaultValueAccessor.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},DefaultValueAccessor.prototype._handleInput=function(e){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(e)},DefaultValueAccessor.prototype._compositionStart=function(){this._composing=!0},DefaultValueAccessor.prototype._compositionEnd=function(e){this._composing=!1,this._compositionMode&&this.onChange(e)},DefaultValueAccessor}(); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +function normalizeValidator(e){return e.validate?function(t){return e.validate(t)}:e}function normalizeAsyncValidator(e){return e.validate?function(t){return e.validate(t)}:e} +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */_.decorators=[{type:i.Directive,args:[{selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]",host:{"(input)":"_handleInput($event.target.value)","(blur)":"onTouched()","(compositionstart)":"_compositionStart()","(compositionend)":"_compositionEnd($event.target.value)"},providers:[v]}]}],_.ctorParameters=function(){return[{type:i.Renderer2},{type:i.ElementRef},{type:void 0,decorators:[{type:i.Optional},{type:i.Inject,args:[b]}]}]};var S={provide:f,useExisting:Object(i.forwardRef)(function(){return C}),multi:!0},C=function(){function NumberValueAccessor(e,t){this._renderer=e,this._elementRef=t,this.onChange=function(e){},this.onTouched=function(){}}return NumberValueAccessor.prototype.writeValue=function(e){var t=null==e?"":e;this._renderer.setProperty(this._elementRef.nativeElement,"value",t)},NumberValueAccessor.prototype.registerOnChange=function(e){this.onChange=function(t){e(""==t?null:parseFloat(t))}},NumberValueAccessor.prototype.registerOnTouched=function(e){this.onTouched=e},NumberValueAccessor.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},NumberValueAccessor}(); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +function unimplemented(){throw new Error("unimplemented")}C.decorators=[{type:i.Directive,args:[{selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]",host:{"(change)":"onChange($event.target.value)","(input)":"onChange($event.target.value)","(blur)":"onTouched()"},providers:[S]}]}],C.ctorParameters=function(){return[{type:i.Renderer2},{type:i.ElementRef}]};var A=function(e){function NgControl(){var t=e.apply(this,arguments)||this;return t._parent=null,t.name=null,t.valueAccessor=null,t._rawValidators=[],t._rawAsyncValidators=[],t}return r.a(NgControl,e),Object.defineProperty(NgControl.prototype,"validator",{get:function(){return unimplemented()},enumerable:!0,configurable:!0}),Object.defineProperty(NgControl.prototype,"asyncValidator",{get:function(){return unimplemented()},enumerable:!0,configurable:!0}),NgControl.prototype.viewToModelUpdate=function(e){},NgControl}(l),T={provide:f,useExisting:Object(i.forwardRef)(function(){return E}),multi:!0},w=function(){function RadioControlRegistry(){this._accessors=[]}return RadioControlRegistry.prototype.add=function(e,t){this._accessors.push([e,t])},RadioControlRegistry.prototype.remove=function(e){for(var t=this._accessors.length-1;t>=0;--t)if(this._accessors[t][1]===e)return void this._accessors.splice(t,1)},RadioControlRegistry.prototype.select=function(e){var t=this;this._accessors.forEach(function(n){t._isSameGroup(n,e)&&n[1]!==e&&n[1].fireUncheck(e.value)})},RadioControlRegistry.prototype._isSameGroup=function(e,t){return!!e[0].control&&(e[0]._parent===t._control._parent&&e[1].name===t.name)},RadioControlRegistry}(); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */w.decorators=[{type:i.Injectable}],w.ctorParameters=function(){return[]};var E=function(){function RadioControlValueAccessor(e,t,n,r){this._renderer=e,this._elementRef=t,this._registry=n,this._injector=r,this.onChange=function(){},this.onTouched=function(){}}return RadioControlValueAccessor.prototype.ngOnInit=function(){this._control=this._injector.get(A),this._checkName(),this._registry.add(this._control,this)},RadioControlValueAccessor.prototype.ngOnDestroy=function(){this._registry.remove(this)},RadioControlValueAccessor.prototype.writeValue=function(e){this._state=e===this.value,this._renderer.setProperty(this._elementRef.nativeElement,"checked",this._state)},RadioControlValueAccessor.prototype.registerOnChange=function(e){var t=this;this._fn=e,this.onChange=function(){e(t.value),t._registry.select(t)}},RadioControlValueAccessor.prototype.fireUncheck=function(e){this.writeValue(e)},RadioControlValueAccessor.prototype.registerOnTouched=function(e){this.onTouched=e},RadioControlValueAccessor.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},RadioControlValueAccessor.prototype._checkName=function(){this.name&&this.formControlName&&this.name!==this.formControlName&&this._throwNameError(),!this.name&&this.formControlName&&(this.name=this.formControlName)},RadioControlValueAccessor.prototype._throwNameError=function(){throw new Error('\n If you define both a name and a formControlName attribute on your radio button, their values\n must match. Ex: \n ')},RadioControlValueAccessor}();E.decorators=[{type:i.Directive,args:[{selector:"input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]",host:{"(change)":"onChange()","(blur)":"onTouched()"},providers:[T]}]}],E.ctorParameters=function(){return[{type:i.Renderer2},{type:i.ElementRef},{type:w},{type:i.Injector}]},E.propDecorators={name:[{type:i.Input}],formControlName:[{type:i.Input}],value:[{type:i.Input}]}; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +var P={provide:f,useExisting:Object(i.forwardRef)(function(){return O}),multi:!0},O=function(){function RangeValueAccessor(e,t){this._renderer=e,this._elementRef=t,this.onChange=function(e){},this.onTouched=function(){}}return RangeValueAccessor.prototype.writeValue=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"value",parseFloat(e))},RangeValueAccessor.prototype.registerOnChange=function(e){this.onChange=function(t){e(""==t?null:parseFloat(t))}},RangeValueAccessor.prototype.registerOnTouched=function(e){this.onTouched=e},RangeValueAccessor.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},RangeValueAccessor}();O.decorators=[{type:i.Directive,args:[{selector:"input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]",host:{"(change)":"onChange($event.target.value)","(input)":"onChange($event.target.value)","(blur)":"onTouched()"},providers:[P]}]}],O.ctorParameters=function(){return[{type:i.Renderer2},{type:i.ElementRef}]}; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +var I={provide:f,useExisting:Object(i.forwardRef)(function(){return N}),multi:!0};function _buildValueString(e,t){return null==e?""+t:(t&&"object"==typeof t&&(t="Object"),(e+": "+t).slice(0,50))}var N=function(){function SelectControlValueAccessor(e,t){this._renderer=e,this._elementRef=t,this._optionMap=new Map,this._idCounter=0,this.onChange=function(e){},this.onTouched=function(){},this._compareWith=i["ɵlooseIdentical"]}return Object.defineProperty(SelectControlValueAccessor.prototype,"compareWith",{set:function(e){if("function"!=typeof e)throw new Error("compareWith must be a function, but received "+JSON.stringify(e));this._compareWith=e},enumerable:!0,configurable:!0}),SelectControlValueAccessor.prototype.writeValue=function(e){this.value=e;var t=this._getOptionId(e);null==t&&this._renderer.setProperty(this._elementRef.nativeElement,"selectedIndex",-1);var n=_buildValueString(t,e);this._renderer.setProperty(this._elementRef.nativeElement,"value",n)},SelectControlValueAccessor.prototype.registerOnChange=function(e){var t=this;this.onChange=function(n){t.value=t._getOptionValue(n),e(t.value)}},SelectControlValueAccessor.prototype.registerOnTouched=function(e){this.onTouched=e},SelectControlValueAccessor.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},SelectControlValueAccessor.prototype._registerOption=function(){return(this._idCounter++).toString()},SelectControlValueAccessor.prototype._getOptionId=function(e){for(var t=0,n=Array.from(this._optionMap.keys());t-1)}}else t=function(e,t){e._setSelected(!1)};this._optionMap.forEach(t)},SelectMultipleControlValueAccessor.prototype.registerOnChange=function(e){var t=this;this.onChange=function(n){var r=[];if(n.hasOwnProperty("selectedOptions"))for(var i=n.selectedOptions,o=0;o1?"path: '"+e.path.join(" -> ")+"'":e.path[0]?"name: '"+e.path+"'":"unspecified name attribute",new Error(t+" "+n)}function composeValidators(e){return null!=e?m.compose(e.map(normalizeValidator)):null}function composeAsyncValidators(e){return null!=e?m.composeAsync(e.map(normalizeAsyncValidator)):null}function isPropertyUpdated(e,t){if(!e.hasOwnProperty("model"))return!1;var n=e.model;return!!n.isFirstChange()||!Object(i["ɵlooseIdentical"])(t,n.currentValue)}M.decorators=[{type:i.Directive,args:[{selector:"option"}]}],M.ctorParameters=function(){return[{type:i.ElementRef},{type:i.Renderer2},{type:D,decorators:[{type:i.Optional},{type:i.Host}]}]},M.propDecorators={ngValue:[{type:i.Input,args:["ngValue"]}],value:[{type:i.Input,args:["value"]}]};var F=[g,O,C,N,D,E];function selectValueAccessor(e,t){if(!t)return null;var n=void 0,r=void 0,i=void 0;return t.forEach(function(t){t.constructor===_?n=t:!function isBuiltInAccessor(e){return F.some(function(t){return e.constructor===t})}(t)?(i&&_throwError(e,"More than one custom value accessor matches form control with"),i=t):(r&&_throwError(e,"More than one built-in value accessor matches form control with"),r=t)}),i||(r||(n||(_throwError(e,"No valid value accessor for form control with"),null)))} +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */var R=function(e){function AbstractFormGroupDirective(){return null!==e&&e.apply(this,arguments)||this}return r.a(AbstractFormGroupDirective,e),AbstractFormGroupDirective.prototype.ngOnInit=function(){this._checkParentType(),this.formDirective.addFormGroup(this)},AbstractFormGroupDirective.prototype.ngOnDestroy=function(){this.formDirective&&this.formDirective.removeFormGroup(this)},Object.defineProperty(AbstractFormGroupDirective.prototype,"control",{get:function(){return this.formDirective.getFormGroup(this)},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractFormGroupDirective.prototype,"path",{get:function(){return controlPath(this.name,this._parent)},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractFormGroupDirective.prototype,"formDirective",{get:function(){return this._parent?this._parent.formDirective:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractFormGroupDirective.prototype,"validator",{get:function(){return composeValidators(this._validators)},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractFormGroupDirective.prototype,"asyncValidator",{get:function(){return composeAsyncValidators(this._asyncValidators)},enumerable:!0,configurable:!0}),AbstractFormGroupDirective.prototype._checkParentType=function(){},AbstractFormGroupDirective}(c),V=function(){function AbstractControlStatus(e){this._cd=e}return Object.defineProperty(AbstractControlStatus.prototype,"ngClassUntouched",{get:function(){return!!this._cd.control&&this._cd.control.untouched},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlStatus.prototype,"ngClassTouched",{get:function(){return!!this._cd.control&&this._cd.control.touched},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlStatus.prototype,"ngClassPristine",{get:function(){return!!this._cd.control&&this._cd.control.pristine},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlStatus.prototype,"ngClassDirty",{get:function(){return!!this._cd.control&&this._cd.control.dirty},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlStatus.prototype,"ngClassValid",{get:function(){return!!this._cd.control&&this._cd.control.valid},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlStatus.prototype,"ngClassInvalid",{get:function(){return!!this._cd.control&&this._cd.control.invalid},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlStatus.prototype,"ngClassPending",{get:function(){return!!this._cd.control&&this._cd.control.pending},enumerable:!0,configurable:!0}),AbstractControlStatus}(),k={"[class.ng-untouched]":"ngClassUntouched","[class.ng-touched]":"ngClassTouched","[class.ng-pristine]":"ngClassPristine","[class.ng-dirty]":"ngClassDirty","[class.ng-valid]":"ngClassValid","[class.ng-invalid]":"ngClassInvalid","[class.ng-pending]":"ngClassPending"},j=function(e){function NgControlStatus(t){return e.call(this,t)||this}return r.a(NgControlStatus,e),NgControlStatus}(V); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */j.decorators=[{type:i.Directive,args:[{selector:"[formControlName],[ngModel],[formControl]",host:k}]}],j.ctorParameters=function(){return[{type:A,decorators:[{type:i.Self}]}]};var H=function(e){function NgControlStatusGroup(t){return e.call(this,t)||this}return r.a(NgControlStatusGroup,e),NgControlStatusGroup}(V);H.decorators=[{type:i.Directive,args:[{selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]",host:k}]}],H.ctorParameters=function(){return[{type:c,decorators:[{type:i.Self}]}]};function coerceToValidator(e){return Array.isArray(e)?composeValidators(e):e||null}function coerceToAsyncValidator(e){return Array.isArray(e)?composeAsyncValidators(e):e||null}var B=function(){function AbstractControl(e,t){this.validator=e,this.asyncValidator=t,this._onCollectionChange=function(){},this._pristine=!0,this._touched=!1,this._onDisabledChange=[]}return Object.defineProperty(AbstractControl.prototype,"value",{get:function(){return this._value},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControl.prototype,"parent",{get:function(){return this._parent},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControl.prototype,"status",{get:function(){return this._status},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControl.prototype,"valid",{get:function(){return"VALID"===this._status},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControl.prototype,"invalid",{get:function(){return"INVALID"===this._status},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControl.prototype,"pending",{get:function(){return"PENDING"==this._status},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControl.prototype,"disabled",{get:function(){return"DISABLED"===this._status},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControl.prototype,"enabled",{get:function(){return"DISABLED"!==this._status},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControl.prototype,"errors",{get:function(){return this._errors},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControl.prototype,"pristine",{get:function(){return this._pristine},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControl.prototype,"dirty",{get:function(){return!this.pristine},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControl.prototype,"touched",{get:function(){return this._touched},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControl.prototype,"untouched",{get:function(){return!this._touched},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControl.prototype,"valueChanges",{get:function(){return this._valueChanges},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControl.prototype,"statusChanges",{get:function(){return this._statusChanges},enumerable:!0,configurable:!0}),AbstractControl.prototype.setValidators=function(e){this.validator=coerceToValidator(e)},AbstractControl.prototype.setAsyncValidators=function(e){this.asyncValidator=coerceToAsyncValidator(e)},AbstractControl.prototype.clearValidators=function(){this.validator=null},AbstractControl.prototype.clearAsyncValidators=function(){this.asyncValidator=null},AbstractControl.prototype.markAsTouched=function(e){void 0===e&&(e={}),this._touched=!0,this._parent&&!e.onlySelf&&this._parent.markAsTouched(e)},AbstractControl.prototype.markAsUntouched=function(e){void 0===e&&(e={}),this._touched=!1,this._forEachChild(function(e){e.markAsUntouched({onlySelf:!0})}),this._parent&&!e.onlySelf&&this._parent._updateTouched(e)},AbstractControl.prototype.markAsDirty=function(e){void 0===e&&(e={}),this._pristine=!1,this._parent&&!e.onlySelf&&this._parent.markAsDirty(e)},AbstractControl.prototype.markAsPristine=function(e){void 0===e&&(e={}),this._pristine=!0,this._forEachChild(function(e){e.markAsPristine({onlySelf:!0})}),this._parent&&!e.onlySelf&&this._parent._updatePristine(e)},AbstractControl.prototype.markAsPending=function(e){void 0===e&&(e={}),this._status="PENDING",this._parent&&!e.onlySelf&&this._parent.markAsPending(e)},AbstractControl.prototype.disable=function(e){void 0===e&&(e={}),this._status="DISABLED",this._errors=null,this._forEachChild(function(e){e.disable({onlySelf:!0})}),this._updateValue(),!1!==e.emitEvent&&(this._valueChanges.emit(this._value),this._statusChanges.emit(this._status)),this._updateAncestors(!!e.onlySelf),this._onDisabledChange.forEach(function(e){return e(!0)})},AbstractControl.prototype.enable=function(e){void 0===e&&(e={}),this._status="VALID",this._forEachChild(function(e){e.enable({onlySelf:!0})}),this.updateValueAndValidity({onlySelf:!0,emitEvent:e.emitEvent}),this._updateAncestors(!!e.onlySelf),this._onDisabledChange.forEach(function(e){return e(!1)})},AbstractControl.prototype._updateAncestors=function(e){this._parent&&!e&&(this._parent.updateValueAndValidity(),this._parent._updatePristine(),this._parent._updateTouched())},AbstractControl.prototype.setParent=function(e){this._parent=e},AbstractControl.prototype.setValue=function(e,t){},AbstractControl.prototype.patchValue=function(e,t){},AbstractControl.prototype.reset=function(e,t){},AbstractControl.prototype.updateValueAndValidity=function(e){void 0===e&&(e={}),this._setInitialStatus(),this._updateValue(),this.enabled&&(this._cancelExistingSubscription(),this._errors=this._runValidator(),this._status=this._calculateStatus(),"VALID"!==this._status&&"PENDING"!==this._status||this._runAsyncValidator(e.emitEvent)),!1!==e.emitEvent&&(this._valueChanges.emit(this._value),this._statusChanges.emit(this._status)),this._parent&&!e.onlySelf&&this._parent.updateValueAndValidity(e)},AbstractControl.prototype._updateTreeValidity=function(e){void 0===e&&(e={emitEvent:!0}),this._forEachChild(function(t){return t._updateTreeValidity(e)}),this.updateValueAndValidity({onlySelf:!0,emitEvent:e.emitEvent})},AbstractControl.prototype._setInitialStatus=function(){this._status=this._allControlsDisabled()?"DISABLED":"VALID"},AbstractControl.prototype._runValidator=function(){return this.validator?this.validator(this):null},AbstractControl.prototype._runAsyncValidator=function(e){var t=this;if(this.asyncValidator){this._status="PENDING";var n=toObservable(this.asyncValidator(this));this._asyncValidationSubscription=n.subscribe(function(n){return t.setErrors(n,{emitEvent:e})})}},AbstractControl.prototype._cancelExistingSubscription=function(){this._asyncValidationSubscription&&this._asyncValidationSubscription.unsubscribe()},AbstractControl.prototype.setErrors=function(e,t){void 0===t&&(t={}),this._errors=e,this._updateControlsErrors(!1!==t.emitEvent)},AbstractControl.prototype.get=function(e){return function _find(e,t,n){return null==t?null:(t instanceof Array||(t=t.split(n)),t instanceof Array&&0===t.length?null:t.reduce(function(e,t){return e instanceof U?e.controls[t]||null:e instanceof q&&e.at(t)||null},e))}(this,e,".")},AbstractControl.prototype.getError=function(e,t){var n=t?this.get(t):this;return n&&n._errors?n._errors[e]:null},AbstractControl.prototype.hasError=function(e,t){return!!this.getError(e,t)},Object.defineProperty(AbstractControl.prototype,"root",{get:function(){for(var e=this;e._parent;)e=e._parent;return e},enumerable:!0,configurable:!0}),AbstractControl.prototype._updateControlsErrors=function(e){this._status=this._calculateStatus(),e&&this._statusChanges.emit(this._status),this._parent&&this._parent._updateControlsErrors(e)},AbstractControl.prototype._initObservables=function(){this._valueChanges=new i.EventEmitter,this._statusChanges=new i.EventEmitter},AbstractControl.prototype._calculateStatus=function(){return this._allControlsDisabled()?"DISABLED":this._errors?"INVALID":this._anyControlsHaveStatus("PENDING")?"PENDING":this._anyControlsHaveStatus("INVALID")?"INVALID":"VALID"},AbstractControl.prototype._updateValue=function(){},AbstractControl.prototype._forEachChild=function(e){},AbstractControl.prototype._anyControls=function(e){},AbstractControl.prototype._allControlsDisabled=function(){},AbstractControl.prototype._anyControlsHaveStatus=function(e){return this._anyControls(function(t){return t.status===e})},AbstractControl.prototype._anyControlsDirty=function(){return this._anyControls(function(e){return e.dirty})},AbstractControl.prototype._anyControlsTouched=function(){return this._anyControls(function(e){return e.touched})},AbstractControl.prototype._updatePristine=function(e){void 0===e&&(e={}),this._pristine=!this._anyControlsDirty(),this._parent&&!e.onlySelf&&this._parent._updatePristine(e)},AbstractControl.prototype._updateTouched=function(e){void 0===e&&(e={}),this._touched=this._anyControlsTouched(),this._parent&&!e.onlySelf&&this._parent._updateTouched(e)},AbstractControl.prototype._isBoxedValue=function(e){return"object"==typeof e&&null!==e&&2===Object.keys(e).length&&"value"in e&&"disabled"in e},AbstractControl.prototype._registerOnCollectionChange=function(e){this._onCollectionChange=e},AbstractControl}(),G=function(e){function FormControl(t,n,r){void 0===t&&(t=null);var i=e.call(this,coerceToValidator(n),coerceToAsyncValidator(r))||this;return i._onChange=[],i._applyFormState(t),i.updateValueAndValidity({onlySelf:!0,emitEvent:!1}),i._initObservables(),i}return r.a(FormControl,e),FormControl.prototype.setValue=function(e,t){var n=this;void 0===t&&(t={}),this._value=e,this._onChange.length&&!1!==t.emitModelToViewChange&&this._onChange.forEach(function(e){return e(n._value,!1!==t.emitViewToModelChange)}),this.updateValueAndValidity(t)},FormControl.prototype.patchValue=function(e,t){void 0===t&&(t={}),this.setValue(e,t)},FormControl.prototype.reset=function(e,t){void 0===e&&(e=null),void 0===t&&(t={}),this._applyFormState(e),this.markAsPristine(t),this.markAsUntouched(t),this.setValue(this._value,t)},FormControl.prototype._updateValue=function(){},FormControl.prototype._anyControls=function(e){return!1},FormControl.prototype._allControlsDisabled=function(){return this.disabled},FormControl.prototype.registerOnChange=function(e){this._onChange.push(e)},FormControl.prototype._clearChangeFns=function(){this._onChange=[],this._onDisabledChange=[],this._onCollectionChange=function(){}},FormControl.prototype.registerOnDisabledChange=function(e){this._onDisabledChange.push(e)},FormControl.prototype._forEachChild=function(e){},FormControl.prototype._applyFormState=function(e){this._isBoxedValue(e)?(this._value=e.value,e.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this._value=e},FormControl}(B),U=function(e){function FormGroup(t,n,r){var i=e.call(this,n||null,r||null)||this;return i.controls=t,i._initObservables(),i._setUpControls(),i.updateValueAndValidity({onlySelf:!0,emitEvent:!1}),i}return r.a(FormGroup,e),FormGroup.prototype.registerControl=function(e,t){return this.controls[e]?this.controls[e]:(this.controls[e]=t,t.setParent(this),t._registerOnCollectionChange(this._onCollectionChange),t)},FormGroup.prototype.addControl=function(e,t){this.registerControl(e,t),this.updateValueAndValidity(),this._onCollectionChange()},FormGroup.prototype.removeControl=function(e){this.controls[e]&&this.controls[e]._registerOnCollectionChange(function(){}),delete this.controls[e],this.updateValueAndValidity(),this._onCollectionChange()},FormGroup.prototype.setControl=function(e,t){this.controls[e]&&this.controls[e]._registerOnCollectionChange(function(){}),delete this.controls[e],t&&this.registerControl(e,t),this.updateValueAndValidity(),this._onCollectionChange()},FormGroup.prototype.contains=function(e){return this.controls.hasOwnProperty(e)&&this.controls[e].enabled},FormGroup.prototype.setValue=function(e,t){var n=this;void 0===t&&(t={}),this._checkAllValuesPresent(e),Object.keys(e).forEach(function(r){n._throwIfControlMissing(r),n.controls[r].setValue(e[r],{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t)},FormGroup.prototype.patchValue=function(e,t){var n=this;void 0===t&&(t={}),Object.keys(e).forEach(function(r){n.controls[r]&&n.controls[r].patchValue(e[r],{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t)},FormGroup.prototype.reset=function(e,t){void 0===e&&(e={}),void 0===t&&(t={}),this._forEachChild(function(n,r){n.reset(e[r],{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t),this._updatePristine(t),this._updateTouched(t)},FormGroup.prototype.getRawValue=function(){return this._reduceChildren({},function(e,t,n){return e[n]=t instanceof G?t.value:t.getRawValue(),e})},FormGroup.prototype._throwIfControlMissing=function(e){if(!Object.keys(this.controls).length)throw new Error("\n There are no form controls registered with this group yet. If you're using ngModel,\n you may want to check next tick (e.g. use setTimeout).\n ");if(!this.controls[e])throw new Error("Cannot find form control with name: "+e+".")},FormGroup.prototype._forEachChild=function(e){var t=this;Object.keys(this.controls).forEach(function(n){return e(t.controls[n],n)})},FormGroup.prototype._setUpControls=function(){var e=this;this._forEachChild(function(t){t.setParent(e),t._registerOnCollectionChange(e._onCollectionChange)})},FormGroup.prototype._updateValue=function(){this._value=this._reduceValue()},FormGroup.prototype._anyControls=function(e){var t=this,n=!1;return this._forEachChild(function(r,i){n=n||t.contains(i)&&e(r)}),n},FormGroup.prototype._reduceValue=function(){var e=this;return this._reduceChildren({},function(t,n,r){return(n.enabled||e.disabled)&&(t[r]=n.value),t})},FormGroup.prototype._reduceChildren=function(e,t){var n=e;return this._forEachChild(function(e,r){n=t(n,e,r)}),n},FormGroup.prototype._allControlsDisabled=function(){for(var e=0,t=Object.keys(this.controls);e0||this.disabled},FormGroup.prototype._checkAllValuesPresent=function(e){this._forEachChild(function(t,n){if(void 0===e[n])throw new Error("Must supply a value for form control with name: '"+n+"'.")})},FormGroup}(B),q=function(e){function FormArray(t,n,r){var i=e.call(this,n||null,r||null)||this;return i.controls=t,i._initObservables(),i._setUpControls(),i.updateValueAndValidity({onlySelf:!0,emitEvent:!1}),i}return r.a(FormArray,e),FormArray.prototype.at=function(e){return this.controls[e]},FormArray.prototype.push=function(e){this.controls.push(e),this._registerControl(e),this.updateValueAndValidity(),this._onCollectionChange()},FormArray.prototype.insert=function(e,t){this.controls.splice(e,0,t),this._registerControl(t),this.updateValueAndValidity(),this._onCollectionChange()},FormArray.prototype.removeAt=function(e){this.controls[e]&&this.controls[e]._registerOnCollectionChange(function(){}),this.controls.splice(e,1),this.updateValueAndValidity(),this._onCollectionChange()},FormArray.prototype.setControl=function(e,t){this.controls[e]&&this.controls[e]._registerOnCollectionChange(function(){}),this.controls.splice(e,1),t&&(this.controls.splice(e,0,t),this._registerControl(t)),this.updateValueAndValidity(),this._onCollectionChange()},Object.defineProperty(FormArray.prototype,"length",{get:function(){return this.controls.length},enumerable:!0,configurable:!0}),FormArray.prototype.setValue=function(e,t){var n=this;void 0===t&&(t={}),this._checkAllValuesPresent(e),e.forEach(function(e,r){n._throwIfControlMissing(r),n.at(r).setValue(e,{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t)},FormArray.prototype.patchValue=function(e,t){var n=this;void 0===t&&(t={}),e.forEach(function(e,r){n.at(r)&&n.at(r).patchValue(e,{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t)},FormArray.prototype.reset=function(e,t){void 0===e&&(e=[]),void 0===t&&(t={}),this._forEachChild(function(n,r){n.reset(e[r],{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t),this._updatePristine(t),this._updateTouched(t)},FormArray.prototype.getRawValue=function(){return this.controls.map(function(e){return e instanceof G?e.value:e.getRawValue()})},FormArray.prototype._throwIfControlMissing=function(e){if(!this.controls.length)throw new Error("\n There are no form controls registered with this array yet. If you're using ngModel,\n you may want to check next tick (e.g. use setTimeout).\n ");if(!this.at(e))throw new Error("Cannot find form control at index "+e)},FormArray.prototype._forEachChild=function(e){this.controls.forEach(function(t,n){e(t,n)})},FormArray.prototype._updateValue=function(){var e=this;this._value=this.controls.filter(function(t){return t.enabled||e.disabled}).map(function(e){return e.value})},FormArray.prototype._anyControls=function(e){return this.controls.some(function(t){return t.enabled&&e(t)})},FormArray.prototype._setUpControls=function(){var e=this;this._forEachChild(function(t){return e._registerControl(t)})},FormArray.prototype._checkAllValuesPresent=function(e){this._forEachChild(function(t,n){if(void 0===e[n])throw new Error("Must supply a value for form control at index: "+n+".")})},FormArray.prototype._allControlsDisabled=function(){for(var e=0,t=this.controls;e0||this.disabled},FormArray.prototype._registerControl=function(e){e.setParent(this),e._registerOnCollectionChange(this._onCollectionChange)},FormArray}(B),W={provide:c,useExisting:Object(i.forwardRef)(function(){return K})},z=Promise.resolve(null),K=function(e){function NgForm(t,n){var r=e.call(this)||this;return r._submitted=!1,r.ngSubmit=new i.EventEmitter,r.form=new U({},composeValidators(t),composeAsyncValidators(n)),r}return r.a(NgForm,e),Object.defineProperty(NgForm.prototype,"submitted",{get:function(){return this._submitted},enumerable:!0,configurable:!0}),Object.defineProperty(NgForm.prototype,"formDirective",{get:function(){return this},enumerable:!0,configurable:!0}),Object.defineProperty(NgForm.prototype,"control",{get:function(){return this.form},enumerable:!0,configurable:!0}),Object.defineProperty(NgForm.prototype,"path",{get:function(){return[]},enumerable:!0,configurable:!0}),Object.defineProperty(NgForm.prototype,"controls",{get:function(){return this.form.controls},enumerable:!0,configurable:!0}),NgForm.prototype.addControl=function(e){var t=this;z.then(function(){var n=t._findContainer(e.path);e._control=n.registerControl(e.name,e.control),setUpControl(e.control,e),e.control.updateValueAndValidity({emitEvent:!1})})},NgForm.prototype.getControl=function(e){return this.form.get(e.path)},NgForm.prototype.removeControl=function(e){var t=this;z.then(function(){var n=t._findContainer(e.path);n&&n.removeControl(e.name)})},NgForm.prototype.addFormGroup=function(e){var t=this;z.then(function(){var n=t._findContainer(e.path),r=new U({});setUpFormContainer(r,e),n.registerControl(e.name,r),r.updateValueAndValidity({emitEvent:!1})})},NgForm.prototype.removeFormGroup=function(e){var t=this;z.then(function(){var n=t._findContainer(e.path);n&&n.removeControl(e.name)})},NgForm.prototype.getFormGroup=function(e){return this.form.get(e.path)},NgForm.prototype.updateModel=function(e,t){var n=this;z.then(function(){n.form.get(e.path).setValue(t)})},NgForm.prototype.setValue=function(e){this.control.setValue(e)},NgForm.prototype.onSubmit=function(e){return this._submitted=!0,this.ngSubmit.emit(e),!1},NgForm.prototype.onReset=function(){this.resetForm()},NgForm.prototype.resetForm=function(e){void 0===e&&(e=void 0),this.form.reset(e),this._submitted=!1},NgForm.prototype._findContainer=function(e){return e.pop(),e.length?this.form.get(e):this.form},NgForm}(c);K.decorators=[{type:i.Directive,args:[{selector:"form:not([ngNoForm]):not([formGroup]),ngForm,[ngForm]",providers:[W],host:{"(submit)":"onSubmit($event)","(reset)":"onReset()"},outputs:["ngSubmit"],exportAs:"ngForm"}]}],K.ctorParameters=function(){return[{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[p]}]},{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[d]}]}]}; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +var Y='\n
    \n \n
    \n\n In your class:\n\n this.myGroup = new FormGroup({\n firstName: new FormControl()\n });',J='\n
    \n
    \n \n
    \n
    \n\n In your class:\n\n this.myGroup = new FormGroup({\n person: new FormGroup({ firstName: new FormControl() })\n });',Q='\n
    \n
    \n
    \n \n
    \n
    \n
    \n\n In your class:\n\n this.cityArray = new FormArray([new FormControl(\'SF\')]);\n this.myGroup = new FormGroup({\n cities: this.cityArray\n });',X='\n
    \n
    \n \n
    \n
    ',$='\n
    \n \n \n
    \n ',Z=function(){function TemplateDrivenErrors(){}return TemplateDrivenErrors.modelParentException=function(){throw new Error('\n ngModel cannot be used to register form controls with a parent formGroup directive. Try using\n formGroup\'s partner directive "formControlName" instead. Example:\n\n '+Y+"\n\n Or, if you'd like to avoid registering this form control, indicate that it's standalone in ngModelOptions:\n\n Example:\n\n "+$)},TemplateDrivenErrors.formGroupNameException=function(){throw new Error("\n ngModel cannot be used to register form controls with a parent formGroupName or formArrayName directive.\n\n Option 1: Use formControlName instead of ngModel (reactive strategy):\n\n "+J+"\n\n Option 2: Update ngModel's parent be ngModelGroup (template-driven strategy):\n\n "+X)},TemplateDrivenErrors.missingNameException=function(){throw new Error('If ngModel is used within a form tag, either the name attribute must be set or the form\n control must be defined as \'standalone\' in ngModelOptions.\n\n Example 1: \n Example 2: ')},TemplateDrivenErrors.modelGroupParentException=function(){throw new Error("\n ngModelGroup cannot be used with a parent formGroup directive.\n\n Option 1: Use formGroupName instead of ngModelGroup (reactive strategy):\n\n "+J+"\n\n Option 2: Use a regular form tag instead of the formGroup directive (template-driven strategy):\n\n "+X)},TemplateDrivenErrors}(),ee={provide:c,useExisting:Object(i.forwardRef)(function(){return te})},te=function(e){function NgModelGroup(t,n,r){var i=e.call(this)||this;return i._parent=t,i._validators=n,i._asyncValidators=r,i}return r.a(NgModelGroup,e),NgModelGroup.prototype._checkParentType=function(){this._parent instanceof NgModelGroup||this._parent instanceof K||Z.modelGroupParentException()},NgModelGroup}(R); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */te.decorators=[{type:i.Directive,args:[{selector:"[ngModelGroup]",providers:[ee],exportAs:"ngModelGroup"}]}],te.ctorParameters=function(){return[{type:c,decorators:[{type:i.Host},{type:i.SkipSelf}]},{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[p]}]},{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[d]}]}]},te.propDecorators={name:[{type:i.Input,args:["ngModelGroup"]}]}; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +var ne={provide:A,useExisting:Object(i.forwardRef)(function(){return ie})},re=Promise.resolve(null),ie=function(e){function NgModel(t,n,r,o){var s=e.call(this)||this;return s._control=new G,s._registered=!1,s.update=new i.EventEmitter,s._parent=t,s._rawValidators=n||[],s._rawAsyncValidators=r||[],s.valueAccessor=selectValueAccessor(s,o),s}return r.a(NgModel,e),NgModel.prototype.ngOnChanges=function(e){this._checkForErrors(),this._registered||this._setUpControl(),"isDisabled"in e&&this._updateDisabled(e),isPropertyUpdated(e,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)},NgModel.prototype.ngOnDestroy=function(){this.formDirective&&this.formDirective.removeControl(this)},Object.defineProperty(NgModel.prototype,"control",{get:function(){return this._control},enumerable:!0,configurable:!0}),Object.defineProperty(NgModel.prototype,"path",{get:function(){return this._parent?controlPath(this.name,this._parent):[this.name]},enumerable:!0,configurable:!0}),Object.defineProperty(NgModel.prototype,"formDirective",{get:function(){return this._parent?this._parent.formDirective:null},enumerable:!0,configurable:!0}),Object.defineProperty(NgModel.prototype,"validator",{get:function(){return composeValidators(this._rawValidators)},enumerable:!0,configurable:!0}),Object.defineProperty(NgModel.prototype,"asyncValidator",{get:function(){return composeAsyncValidators(this._rawAsyncValidators)},enumerable:!0,configurable:!0}),NgModel.prototype.viewToModelUpdate=function(e){this.viewModel=e,this.update.emit(e)},NgModel.prototype._setUpControl=function(){this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0},NgModel.prototype._isStandalone=function(){return!this._parent||!(!this.options||!this.options.standalone)},NgModel.prototype._setUpStandalone=function(){setUpControl(this._control,this),this._control.updateValueAndValidity({emitEvent:!1})},NgModel.prototype._checkForErrors=function(){this._isStandalone()||this._checkParentType(),this._checkName()},NgModel.prototype._checkParentType=function(){!(this._parent instanceof te)&&this._parent instanceof R?Z.formGroupNameException():this._parent instanceof te||this._parent instanceof K||Z.modelParentException()},NgModel.prototype._checkName=function(){this.options&&this.options.name&&(this.name=this.options.name),this._isStandalone()||this.name||Z.missingNameException()},NgModel.prototype._updateValue=function(e){var t=this;re.then(function(){t.control.setValue(e,{emitViewToModelChange:!1})})},NgModel.prototype._updateDisabled=function(e){var t=this,n=e.isDisabled.currentValue,r=""===n||n&&"false"!==n;re.then(function(){r&&!t.control.disabled?t.control.disable():!r&&t.control.disabled&&t.control.enable()})},NgModel}(A);ie.decorators=[{type:i.Directive,args:[{selector:"[ngModel]:not([formControlName]):not([formControl])",providers:[ne],exportAs:"ngModel"}]}],ie.ctorParameters=function(){return[{type:c,decorators:[{type:i.Optional},{type:i.Host}]},{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[p]}]},{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[d]}]},{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[f]}]}]},ie.propDecorators={name:[{type:i.Input}],isDisabled:[{type:i.Input,args:["disabled"]}],model:[{type:i.Input,args:["ngModel"]}],options:[{type:i.Input,args:["ngModelOptions"]}],update:[{type:i.Output,args:["ngModelChange"]}]}; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +var oe=function(){function ReactiveErrors(){}return ReactiveErrors.controlParentException=function(){throw new Error("formControlName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n "+Y)},ReactiveErrors.ngModelGroupException=function(){throw new Error('formControlName cannot be used with an ngModelGroup parent. It is only compatible with parents\n that also have a "form" prefix: formGroupName, formArrayName, or formGroup.\n\n Option 1: Update the parent to be formGroupName (reactive form strategy)\n\n '+J+"\n\n Option 2: Use ngModel instead of formControlName (template-driven strategy)\n\n "+X)},ReactiveErrors.missingFormException=function(){throw new Error("formGroup expects a FormGroup instance. Please pass one in.\n\n Example:\n\n "+Y)},ReactiveErrors.groupParentException=function(){throw new Error("formGroupName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n "+J)},ReactiveErrors.arrayParentException=function(){throw new Error("formArrayName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n "+Q)},ReactiveErrors.disabledAttrWarning=function(){console.warn("\n It looks like you're using the disabled attribute with a reactive form directive. If you set disabled to true\n when you set up this control in your component class, the disabled attribute will actually be set in the DOM for\n you. We recommend using this approach to avoid 'changed after checked' errors.\n \n Example: \n form = new FormGroup({\n first: new FormControl({value: 'Nancy', disabled: true}, Validators.required),\n last: new FormControl('Drew', Validators.required)\n });\n ")},ReactiveErrors}(),se={provide:A,useExisting:Object(i.forwardRef)(function(){return ae})},ae=function(e){function FormControlDirective(t,n,r){var o=e.call(this)||this;return o.update=new i.EventEmitter,o._rawValidators=t||[],o._rawAsyncValidators=n||[],o.valueAccessor=selectValueAccessor(o,r),o}return r.a(FormControlDirective,e),Object.defineProperty(FormControlDirective.prototype,"isDisabled",{set:function(e){oe.disabledAttrWarning()},enumerable:!0,configurable:!0}),FormControlDirective.prototype.ngOnChanges=function(e){this._isControlChanged(e)&&(setUpControl(this.form,this),this.control.disabled&&this.valueAccessor.setDisabledState&&this.valueAccessor.setDisabledState(!0),this.form.updateValueAndValidity({emitEvent:!1})),isPropertyUpdated(e,this.viewModel)&&(this.form.setValue(this.model),this.viewModel=this.model)},Object.defineProperty(FormControlDirective.prototype,"path",{get:function(){return[]},enumerable:!0,configurable:!0}),Object.defineProperty(FormControlDirective.prototype,"validator",{get:function(){return composeValidators(this._rawValidators)},enumerable:!0,configurable:!0}),Object.defineProperty(FormControlDirective.prototype,"asyncValidator",{get:function(){return composeAsyncValidators(this._rawAsyncValidators)},enumerable:!0,configurable:!0}),Object.defineProperty(FormControlDirective.prototype,"control",{get:function(){return this.form},enumerable:!0,configurable:!0}),FormControlDirective.prototype.viewToModelUpdate=function(e){this.viewModel=e,this.update.emit(e)},FormControlDirective.prototype._isControlChanged=function(e){return e.hasOwnProperty("form")},FormControlDirective}(A); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ae.decorators=[{type:i.Directive,args:[{selector:"[formControl]",providers:[se],exportAs:"ngForm"}]}],ae.ctorParameters=function(){return[{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[p]}]},{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[d]}]},{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[f]}]}]},ae.propDecorators={form:[{type:i.Input,args:["formControl"]}],model:[{type:i.Input,args:["ngModel"]}],update:[{type:i.Output,args:["ngModelChange"]}],isDisabled:[{type:i.Input,args:["disabled"]}]}; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +var ue={provide:c,useExisting:Object(i.forwardRef)(function(){return le})},le=function(e){function FormGroupDirective(t,n){var r=e.call(this)||this;return r._validators=t,r._asyncValidators=n,r._submitted=!1,r.directives=[],r.form=null,r.ngSubmit=new i.EventEmitter,r}return r.a(FormGroupDirective,e),FormGroupDirective.prototype.ngOnChanges=function(e){this._checkFormPresent(),e.hasOwnProperty("form")&&(this._updateValidators(),this._updateDomValue(),this._updateRegistrations())},Object.defineProperty(FormGroupDirective.prototype,"submitted",{get:function(){return this._submitted},enumerable:!0,configurable:!0}),Object.defineProperty(FormGroupDirective.prototype,"formDirective",{get:function(){return this},enumerable:!0,configurable:!0}),Object.defineProperty(FormGroupDirective.prototype,"control",{get:function(){return this.form},enumerable:!0,configurable:!0}),Object.defineProperty(FormGroupDirective.prototype,"path",{get:function(){return[]},enumerable:!0,configurable:!0}),FormGroupDirective.prototype.addControl=function(e){var t=this.form.get(e.path);return setUpControl(t,e),t.updateValueAndValidity({emitEvent:!1}),this.directives.push(e),t},FormGroupDirective.prototype.getControl=function(e){return this.form.get(e.path)},FormGroupDirective.prototype.removeControl=function(e){!function remove(e,t){var n=e.indexOf(t);n>-1&&e.splice(n,1)} +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */(this.directives,e)},FormGroupDirective.prototype.addFormGroup=function(e){var t=this.form.get(e.path);setUpFormContainer(t,e),t.updateValueAndValidity({emitEvent:!1})},FormGroupDirective.prototype.removeFormGroup=function(e){},FormGroupDirective.prototype.getFormGroup=function(e){return this.form.get(e.path)},FormGroupDirective.prototype.addFormArray=function(e){var t=this.form.get(e.path);setUpFormContainer(t,e),t.updateValueAndValidity({emitEvent:!1})},FormGroupDirective.prototype.removeFormArray=function(e){},FormGroupDirective.prototype.getFormArray=function(e){return this.form.get(e.path)},FormGroupDirective.prototype.updateModel=function(e,t){this.form.get(e.path).setValue(t)},FormGroupDirective.prototype.onSubmit=function(e){return this._submitted=!0,this.ngSubmit.emit(e),!1},FormGroupDirective.prototype.onReset=function(){this.resetForm()},FormGroupDirective.prototype.resetForm=function(e){void 0===e&&(e=void 0),this.form.reset(e),this._submitted=!1},FormGroupDirective.prototype._updateDomValue=function(){var e=this;this.directives.forEach(function(t){var n=e.form.get(t.path);t._control!==n&&(!function cleanUpControl(e,t){t.valueAccessor.registerOnChange(function(){return _noControlError(t)}),t.valueAccessor.registerOnTouched(function(){return _noControlError(t)}),t._rawValidators.forEach(function(e){e.registerOnValidatorChange&&e.registerOnValidatorChange(null)}),t._rawAsyncValidators.forEach(function(e){e.registerOnValidatorChange&&e.registerOnValidatorChange(null)}),e&&e._clearChangeFns()}(t._control,t),n&&setUpControl(n,t),t._control=n)}),this.form._updateTreeValidity({emitEvent:!1})},FormGroupDirective.prototype._updateRegistrations=function(){var e=this;this.form._registerOnCollectionChange(function(){return e._updateDomValue()}),this._oldForm&&this._oldForm._registerOnCollectionChange(function(){}),this._oldForm=this.form},FormGroupDirective.prototype._updateValidators=function(){var e=composeValidators(this._validators);this.form.validator=m.compose([this.form.validator,e]);var t=composeAsyncValidators(this._asyncValidators);this.form.asyncValidator=m.composeAsync([this.form.asyncValidator,t])},FormGroupDirective.prototype._checkFormPresent=function(){this.form||oe.missingFormException()},FormGroupDirective}(c);le.decorators=[{type:i.Directive,args:[{selector:"[formGroup]",providers:[ue],host:{"(submit)":"onSubmit($event)","(reset)":"onReset()"},exportAs:"ngForm"}]}],le.ctorParameters=function(){return[{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[p]}]},{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[d]}]}]},le.propDecorators={form:[{type:i.Input,args:["formGroup"]}],ngSubmit:[{type:i.Output}]};var ce={provide:c,useExisting:Object(i.forwardRef)(function(){return pe})},pe=function(e){function FormGroupName(t,n,r){var i=e.call(this)||this;return i._parent=t,i._validators=n,i._asyncValidators=r,i}return r.a(FormGroupName,e),FormGroupName.prototype._checkParentType=function(){_hasInvalidParent(this._parent)&&oe.groupParentException()},FormGroupName}(R);pe.decorators=[{type:i.Directive,args:[{selector:"[formGroupName]",providers:[ce]}]}],pe.ctorParameters=function(){return[{type:c,decorators:[{type:i.Optional},{type:i.Host},{type:i.SkipSelf}]},{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[p]}]},{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[d]}]}]},pe.propDecorators={name:[{type:i.Input,args:["formGroupName"]}]};var de={provide:c,useExisting:Object(i.forwardRef)(function(){return he})},he=function(e){function FormArrayName(t,n,r){var i=e.call(this)||this;return i._parent=t,i._validators=n,i._asyncValidators=r,i}return r.a(FormArrayName,e),FormArrayName.prototype.ngOnInit=function(){this._checkParentType(),this.formDirective.addFormArray(this)},FormArrayName.prototype.ngOnDestroy=function(){this.formDirective&&this.formDirective.removeFormArray(this)},Object.defineProperty(FormArrayName.prototype,"control",{get:function(){return this.formDirective.getFormArray(this)},enumerable:!0,configurable:!0}),Object.defineProperty(FormArrayName.prototype,"formDirective",{get:function(){return this._parent?this._parent.formDirective:null},enumerable:!0,configurable:!0}),Object.defineProperty(FormArrayName.prototype,"path",{get:function(){return controlPath(this.name,this._parent)},enumerable:!0,configurable:!0}),Object.defineProperty(FormArrayName.prototype,"validator",{get:function(){return composeValidators(this._validators)},enumerable:!0,configurable:!0}),Object.defineProperty(FormArrayName.prototype,"asyncValidator",{get:function(){return composeAsyncValidators(this._asyncValidators)},enumerable:!0,configurable:!0}),FormArrayName.prototype._checkParentType=function(){_hasInvalidParent(this._parent)&&oe.arrayParentException()},FormArrayName}(c);function _hasInvalidParent(e){return!(e instanceof pe||e instanceof le||e instanceof he)} +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */he.decorators=[{type:i.Directive,args:[{selector:"[formArrayName]",providers:[de]}]}],he.ctorParameters=function(){return[{type:c,decorators:[{type:i.Optional},{type:i.Host},{type:i.SkipSelf}]},{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[p]}]},{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[d]}]}]},he.propDecorators={name:[{type:i.Input,args:["formArrayName"]}]};var me={provide:A,useExisting:Object(i.forwardRef)(function(){return fe})},fe=function(e){function FormControlName(t,n,r,o){var s=e.call(this)||this;return s._added=!1,s.update=new i.EventEmitter,s._parent=t,s._rawValidators=n||[],s._rawAsyncValidators=r||[],s.valueAccessor=selectValueAccessor(s,o),s}return r.a(FormControlName,e),Object.defineProperty(FormControlName.prototype,"isDisabled",{set:function(e){oe.disabledAttrWarning()},enumerable:!0,configurable:!0}),FormControlName.prototype.ngOnChanges=function(e){this._added||this._setUpControl(),isPropertyUpdated(e,this.viewModel)&&(this.viewModel=this.model,this.formDirective.updateModel(this,this.model))},FormControlName.prototype.ngOnDestroy=function(){this.formDirective&&this.formDirective.removeControl(this)},FormControlName.prototype.viewToModelUpdate=function(e){this.viewModel=e,this.update.emit(e)},Object.defineProperty(FormControlName.prototype,"path",{get:function(){return controlPath(this.name,this._parent)},enumerable:!0,configurable:!0}),Object.defineProperty(FormControlName.prototype,"formDirective",{get:function(){return this._parent?this._parent.formDirective:null},enumerable:!0,configurable:!0}),Object.defineProperty(FormControlName.prototype,"validator",{get:function(){return composeValidators(this._rawValidators)},enumerable:!0,configurable:!0}),Object.defineProperty(FormControlName.prototype,"asyncValidator",{get:function(){return composeAsyncValidators(this._rawAsyncValidators)},enumerable:!0,configurable:!0}),Object.defineProperty(FormControlName.prototype,"control",{get:function(){return this._control},enumerable:!0,configurable:!0}),FormControlName.prototype._checkParentType=function(){!(this._parent instanceof pe)&&this._parent instanceof R?oe.ngModelGroupException():this._parent instanceof pe||this._parent instanceof le||this._parent instanceof he||oe.controlParentException()},FormControlName.prototype._setUpControl=function(){this._checkParentType(),this._control=this.formDirective.addControl(this),this.control.disabled&&this.valueAccessor.setDisabledState&&this.valueAccessor.setDisabledState(!0),this._added=!0},FormControlName}(A);fe.decorators=[{type:i.Directive,args:[{selector:"[formControlName]",providers:[me]}]}],fe.ctorParameters=function(){return[{type:c,decorators:[{type:i.Optional},{type:i.Host},{type:i.SkipSelf}]},{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[p]}]},{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[d]}]},{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[f]}]}]},fe.propDecorators={name:[{type:i.Input,args:["formControlName"]}],model:[{type:i.Input,args:["ngModel"]}],update:[{type:i.Output,args:["ngModelChange"]}],isDisabled:[{type:i.Input,args:["disabled"]}]}; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +var ye={provide:p,useExisting:Object(i.forwardRef)(function(){return ve}),multi:!0},ge={provide:p,useExisting:Object(i.forwardRef)(function(){return be}),multi:!0},ve=function(){function RequiredValidator(){}return Object.defineProperty(RequiredValidator.prototype,"required",{get:function(){return this._required},set:function(e){this._required=null!=e&&!1!==e&&""+e!="false",this._onChange&&this._onChange()},enumerable:!0,configurable:!0}),RequiredValidator.prototype.validate=function(e){return this.required?m.required(e):null},RequiredValidator.prototype.registerOnValidatorChange=function(e){this._onChange=e},RequiredValidator}();ve.decorators=[{type:i.Directive,args:[{selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",providers:[ye],host:{"[attr.required]":'required ? "" : null'}}]}],ve.ctorParameters=function(){return[]},ve.propDecorators={required:[{type:i.Input}]};var be=function(e){function CheckboxRequiredValidator(){return null!==e&&e.apply(this,arguments)||this}return r.a(CheckboxRequiredValidator,e),CheckboxRequiredValidator.prototype.validate=function(e){return this.required?m.requiredTrue(e):null},CheckboxRequiredValidator}(ve);be.decorators=[{type:i.Directive,args:[{selector:"input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]",providers:[ge],host:{"[attr.required]":'required ? "" : null'}}]}],be.ctorParameters=function(){return[]};var _e={provide:p,useExisting:Object(i.forwardRef)(function(){return Se}),multi:!0},Se=function(){function EmailValidator(){}return Object.defineProperty(EmailValidator.prototype,"email",{set:function(e){this._enabled=""===e||!0===e||"true"===e,this._onChange&&this._onChange()},enumerable:!0,configurable:!0}),EmailValidator.prototype.validate=function(e){return this._enabled?m.email(e):null},EmailValidator.prototype.registerOnValidatorChange=function(e){this._onChange=e},EmailValidator}();Se.decorators=[{type:i.Directive,args:[{selector:"[email][formControlName],[email][formControl],[email][ngModel]",providers:[_e]}]}],Se.ctorParameters=function(){return[]},Se.propDecorators={email:[{type:i.Input}]};var Ce={provide:p,useExisting:Object(i.forwardRef)(function(){return Ae}),multi:!0},Ae=function(){function MinLengthValidator(){}return MinLengthValidator.prototype.ngOnChanges=function(e){"minlength"in e&&(this._createValidator(),this._onChange&&this._onChange())},MinLengthValidator.prototype.validate=function(e){return null==this.minlength?null:this._validator(e)},MinLengthValidator.prototype.registerOnValidatorChange=function(e){this._onChange=e},MinLengthValidator.prototype._createValidator=function(){this._validator=m.minLength(parseInt(this.minlength,10))},MinLengthValidator}();Ae.decorators=[{type:i.Directive,args:[{selector:"[minlength][formControlName],[minlength][formControl],[minlength][ngModel]",providers:[Ce],host:{"[attr.minlength]":"minlength ? minlength : null"}}]}],Ae.ctorParameters=function(){return[]},Ae.propDecorators={minlength:[{type:i.Input}]};var Te={provide:p,useExisting:Object(i.forwardRef)(function(){return we}),multi:!0},we=function(){function MaxLengthValidator(){}return MaxLengthValidator.prototype.ngOnChanges=function(e){"maxlength"in e&&(this._createValidator(),this._onChange&&this._onChange())},MaxLengthValidator.prototype.validate=function(e){return null!=this.maxlength?this._validator(e):null},MaxLengthValidator.prototype.registerOnValidatorChange=function(e){this._onChange=e},MaxLengthValidator.prototype._createValidator=function(){this._validator=m.maxLength(parseInt(this.maxlength,10))},MaxLengthValidator}();we.decorators=[{type:i.Directive,args:[{selector:"[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]",providers:[Te],host:{"[attr.maxlength]":"maxlength ? maxlength : null"}}]}],we.ctorParameters=function(){return[]},we.propDecorators={maxlength:[{type:i.Input}]};var Ee={provide:p,useExisting:Object(i.forwardRef)(function(){return Pe}),multi:!0},Pe=function(){function PatternValidator(){}return PatternValidator.prototype.ngOnChanges=function(e){"pattern"in e&&(this._createValidator(),this._onChange&&this._onChange())},PatternValidator.prototype.validate=function(e){return this._validator(e)},PatternValidator.prototype.registerOnValidatorChange=function(e){this._onChange=e},PatternValidator.prototype._createValidator=function(){this._validator=m.pattern(this.pattern)},PatternValidator}();Pe.decorators=[{type:i.Directive,args:[{selector:"[pattern][formControlName],[pattern][formControl],[pattern][ngModel]",providers:[Ee],host:{"[attr.pattern]":"pattern ? pattern : null"}}]}],Pe.ctorParameters=function(){return[]},Pe.propDecorators={pattern:[{type:i.Input}]}; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +var Oe=function(){function FormBuilder(){}return FormBuilder.prototype.group=function(e,t){void 0===t&&(t=null);var n=this._reduceControls(e),r=null!=t?t.validator:null,i=null!=t?t.asyncValidator:null;return new U(n,r,i)},FormBuilder.prototype.control=function(e,t,n){return new G(e,t,n)},FormBuilder.prototype.array=function(e,t,n){var r=this,i=e.map(function(e){return r._createControl(e)});return new q(i,t,n)},FormBuilder.prototype._reduceControls=function(e){var t=this,n={};return Object.keys(e).forEach(function(r){n[r]=t._createControl(e[r])}),n},FormBuilder.prototype._createControl=function(e){if(e instanceof G||e instanceof U||e instanceof q)return e;if(Array.isArray(e)){var t=e[0],n=e.length>1?e[1]:null,r=e.length>2?e[2]:null;return this.control(t,n,r)}return this.control(e)},FormBuilder}();Oe.decorators=[{type:i.Injectable}],Oe.ctorParameters=function(){return[]}; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +var Ie=new i.Version("4.4.6"),Ne=function(){return function NgNoValidate(){}}(); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */Ne.decorators=[{type:i.Directive,args:[{selector:"form:not([ngNoForm]):not([ngNativeValidate])",host:{novalidate:""}}]}],Ne.ctorParameters=function(){return[]}; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +var Le=[Ne,L,M,_,C,O,g,N,D,E,j,H,ve,Ae,we,Pe,be,Se],xe=[ie,te,K],De=[ae,le,fe,pe,he],Me=function(){return function InternalFormsSharedModule(){}}();Me.decorators=[{type:i.NgModule,args:[{declarations:Le,exports:Le}]}],Me.ctorParameters=function(){return[]}; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +var Fe=function(){return function FormsModule(){}}();Fe.decorators=[{type:i.NgModule,args:[{declarations:xe,providers:[w],exports:[Me,xe]}]}],Fe.ctorParameters=function(){return[]};var Re=function(){return function ReactiveFormsModule(){}}();Re.decorators=[{type:i.NgModule,args:[{declarations:[De],providers:[Oe,w],exports:[Me,De]}]}],Re.ctorParameters=function(){return[]}},235:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=0;!function(e){e[e.error=0]="error",e[e.warn=1]="warn"}(t.FlashMessageType||(t.FlashMessageType={}));var i=function(){return function FlashMessage(e,t,n){this.content=e,this.tooltip=t,this.type=n,this.id=r++,this.isDismissed=!1,this.hasTooltip=Boolean(t),this.showTooltip=!1}}();t.FlashMessage=i},236:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(19),i=n(2),o=n(234),s=n(29),a=n(94),u=n(584),l=function(){function PlugsModule(){}return PlugsModule=__decorate([i.NgModule({imports:[r.CommonModule,o.FormsModule,s.HttpModule,a.SharedModule],declarations:[u.UserInputPlugComponent],providers:[],exports:[r.CommonModule,s.HttpModule,u.UserInputPlugComponent]})],PlugsModule)}();t.PlugsModule=l},237:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=function(){function ProgressBarComponent(){this.isReset=!1}return Object.defineProperty(ProgressBarComponent.prototype,"barStyle",{get:function(){return this.isReset?(this.isReset=!1,{width:"0",transition:"none"}):{width:100*Math.max(0,Math.min(1,this.value))+"%"}},enumerable:!0,configurable:!0}),Object.defineProperty(ProgressBarComponent.prototype,"isComplete",{get:function(){return this.value>=1},enumerable:!0,configurable:!0}),ProgressBarComponent.prototype.reset=function(){this.isReset=!0},__decorate([r.Input(),__metadata("design:type",Number)],ProgressBarComponent.prototype,"value",void 0),ProgressBarComponent=__decorate([r.Component({selector:"htf-progress-bar",template:n(578),styles:[n(579)]})],ProgressBarComponent)}();t.ProgressBarComponent=i},238:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(48);t.washIn=[r.state("in",r.style({background:"rgba(0, 119, 255, 0.0)"})),r.transition("void => in",[r.style({background:"rgba(0, 119, 255, 0.1)"}),r.animate(1e3)])],t.washAndExpandIn=function washAndExpandIn(e){return[r.state("in",r.style({background:"rgba(0, 119, 255, 0.0)","max-height":e+"px"})),r.transition("void => in",[r.style({background:"rgba(0, 119, 255, 0.2)","max-height":"0"}),r.animate(500)])]}},239:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=n(49),o=n(97),s=n(240),a=n(26),u=a.devHost+"/sub/dashboard",l={UNREACHABLE:i.StationStatus.unreachable,ONLINE:i.StationStatus.online},c=function(e){function DashboardService(n){var r=e.call(this,n)||this;return r.stations={},r.messages.subscribe(function(e){var n=t.validateResponse(e.data),i=t.parseResponse(n);r.applyResponse(i)}),r}return __extends(DashboardService,e),t=DashboardService,DashboardService.prototype.subscribe=function(t,n,r){void 0===t&&(t=null),void 0===n&&(n=1),void 0===r&&(r=Number.MAX_VALUE),e.prototype.subscribeToUrl.call(this,u,t,n,r)},DashboardService.validateResponse=function(e){return e},DashboardService.parseResponse=function(e){for(var n={},r=0,o=Object.keys(e);r=0&&-1===s;){for(var a=e.phases[o],u=0,l=t;u1?(console.error("Unrecognized phase descriptor ID.",e.phases,t),e):((i=e.phases).splice.apply(i,[o+2,0].concat(t.slice(s+1))),e)}).catch(function(){return o.Observable.of(e)})},StationService.prototype.getOrRequestPhaseDescriptors=function(e){var t=this;if(!(e.testId in this.phaseDescriptorPromise)){var n=p.getTestBaseUrl(this.config.dashboardEnabled,e)+"/phases";this.phaseDescriptorPromise[e.testId]=this.http.get(n).toPromise().then(function(e){return e.json().data.map(h.makePhaseFromDescriptor)}).catch(function(e){var n=p.messageFromErrorResponse(e);return t.flashMessage.error("HTTP request for phase descriptors failed.",n),Promise.reject(e)})}return o.Observable.fromPromise(this.phaseDescriptorPromise[e.testId])},StationService.prototype.applyResponse=function(e,t){if(e.testId in this.testsById){var n=this.testsById[e.testId];n.status!==e.status&&(e.status===u.TestStatus.error?this.flashMessage.error("The test exited early due to an error. View the test logs for details."):e.status===u.TestStatus.timeout?this.flashMessage.warn("The test exited early due to timeout."):e.status===u.TestStatus.aborted&&this.flashMessage.warn("The test was aborted.")),Object.assign(n,e)}else this.testsById[e.testId]=e,this.testsByStation[t.hostPort]=e},StationService=t=__decorate([r.Injectable(),__metadata("design:paramtypes",[s.ConfigService,a.FlashMessageService,d.HistoryService,i.Http,l.SockJsService])],StationService);var t}(c.Subscription);t.StationService=m},25:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i={server_type:"dashboard",history_from_disk_enabled:!1},o=function(){function ConfigService(){this.config=i}return ConfigService.prototype.initialize=function(e){var t=Object.keys(e).filter(function(e){return!(e in i)});if(t.length>0){console.warn("Received unknown config keys",t);for(var n=0,r=t;nn[t]?1:e[t]0&&e.startDismissal()},500)},FlashMessageService=__decorate([r.Injectable()],FlashMessageService)}();t.FlashMessageService=o},48:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n.d(t,"AnimationBuilder",function(){return r}),n.d(t,"AnimationFactory",function(){return i}),n.d(t,"AUTO_STYLE",function(){return o}),n.d(t,"animate",function(){return animate}),n.d(t,"animateChild",function(){return animateChild}),n.d(t,"animation",function(){return animation}),n.d(t,"group",function(){return group}),n.d(t,"keyframes",function(){return keyframes}),n.d(t,"query",function(){return query}),n.d(t,"sequence",function(){return sequence}),n.d(t,"stagger",function(){return stagger}),n.d(t,"state",function(){return state}),n.d(t,"style",function(){return style}),n.d(t,"transition",function(){return transition}),n.d(t,"trigger",function(){return trigger}),n.d(t,"useAnimation",function(){return useAnimation}),n.d(t,"NoopAnimationPlayer",function(){return s}),n.d(t,"ɵAnimationGroupPlayer",function(){return a}),n.d(t,"ɵPRE_STYLE",function(){return u}); +/** + * @license Angular v4.4.6 + * (c) 2010-2017 Google, Inc. https://angular.io/ + * License: MIT + */ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +var r=function(){function AnimationBuilder(){}return AnimationBuilder.prototype.build=function(e){},AnimationBuilder}(),i=function(){function AnimationFactory(){}return AnimationFactory.prototype.create=function(e,t){},AnimationFactory}(),o="*";function trigger(e,t){return{type:7,name:e,definitions:t,options:{}}}function animate(e,t){return void 0===t&&(t=null),{type:4,styles:t,timings:e}}function group(e,t){return void 0===t&&(t=null),{type:3,steps:e,options:t}}function sequence(e,t){return void 0===t&&(t=null),{type:2,steps:e,options:t}}function style(e){return{type:6,styles:e,offset:null}}function state(e,t,n){return{type:0,name:e,styles:t,options:n}}function keyframes(e){return{type:5,steps:e}}function transition(e,t,n){return void 0===n&&(n=null),{type:1,expr:e,animation:t,options:n}}function animation(e,t){return void 0===t&&(t=null),{type:8,animation:e,options:t}}function animateChild(e){return void 0===e&&(e=null),{type:9,options:e}}function useAnimation(e,t){return void 0===t&&(t=null),{type:10,animation:e,options:t}}function query(e,t,n){return void 0===n&&(n=null),{type:11,selector:e,animation:t,options:n}}function stagger(e,t){return{type:12,timings:e,animation:t}} +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + * @param {?} cb + * @return {?} + */function scheduleMicroTask(e){Promise.resolve(null).then(e)} +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */var s=function(){function NoopAnimationPlayer(){this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._started=!1,this._destroyed=!1,this._finished=!1,this.parentPlayer=null,this.totalTime=0}return NoopAnimationPlayer.prototype._onFinish=function(){this._finished||(this._finished=!0,this._onDoneFns.forEach(function(e){return e()}),this._onDoneFns=[])},NoopAnimationPlayer.prototype.onStart=function(e){this._onStartFns.push(e)},NoopAnimationPlayer.prototype.onDone=function(e){this._onDoneFns.push(e)},NoopAnimationPlayer.prototype.onDestroy=function(e){this._onDestroyFns.push(e)},NoopAnimationPlayer.prototype.hasStarted=function(){return this._started},NoopAnimationPlayer.prototype.init=function(){},NoopAnimationPlayer.prototype.play=function(){this.hasStarted()||(this.triggerMicrotask(),this._onStart()),this._started=!0},NoopAnimationPlayer.prototype.triggerMicrotask=function(){var e=this;scheduleMicroTask(function(){return e._onFinish()})},NoopAnimationPlayer.prototype._onStart=function(){this._onStartFns.forEach(function(e){return e()}),this._onStartFns=[]},NoopAnimationPlayer.prototype.pause=function(){},NoopAnimationPlayer.prototype.restart=function(){},NoopAnimationPlayer.prototype.finish=function(){this._onFinish()},NoopAnimationPlayer.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.hasStarted()||this._onStart(),this.finish(),this._onDestroyFns.forEach(function(e){return e()}),this._onDestroyFns=[])},NoopAnimationPlayer.prototype.reset=function(){},NoopAnimationPlayer.prototype.setPosition=function(e){},NoopAnimationPlayer.prototype.getPosition=function(){return 0},NoopAnimationPlayer}(),a=function(){function AnimationGroupPlayer(e){var t=this;this._players=e,this._onDoneFns=[],this._onStartFns=[],this._finished=!1,this._started=!1,this._destroyed=!1,this._onDestroyFns=[],this.parentPlayer=null,this.totalTime=0;var n=0,r=0,i=0,o=this._players.length;0==o?scheduleMicroTask(function(){return t._onFinish()}):this._players.forEach(function(e){e.parentPlayer=t,e.onDone(function(){++n>=o&&t._onFinish()}),e.onDestroy(function(){++r>=o&&t._onDestroy()}),e.onStart(function(){++i>=o&&t._onStart()})}),this.totalTime=this._players.reduce(function(e,t){return Math.max(e,t.totalTime)},0)}return AnimationGroupPlayer.prototype._onFinish=function(){this._finished||(this._finished=!0,this._onDoneFns.forEach(function(e){return e()}),this._onDoneFns=[])},AnimationGroupPlayer.prototype.init=function(){this._players.forEach(function(e){return e.init()})},AnimationGroupPlayer.prototype.onStart=function(e){this._onStartFns.push(e)},AnimationGroupPlayer.prototype._onStart=function(){this.hasStarted()||(this._onStartFns.forEach(function(e){return e()}),this._onStartFns=[],this._started=!0)},AnimationGroupPlayer.prototype.onDone=function(e){this._onDoneFns.push(e)},AnimationGroupPlayer.prototype.onDestroy=function(e){this._onDestroyFns.push(e)},AnimationGroupPlayer.prototype.hasStarted=function(){return this._started},AnimationGroupPlayer.prototype.play=function(){this.parentPlayer||this.init(),this._onStart(),this._players.forEach(function(e){return e.play()})},AnimationGroupPlayer.prototype.pause=function(){this._players.forEach(function(e){return e.pause()})},AnimationGroupPlayer.prototype.restart=function(){this._players.forEach(function(e){return e.restart()})},AnimationGroupPlayer.prototype.finish=function(){this._onFinish(),this._players.forEach(function(e){return e.finish()})},AnimationGroupPlayer.prototype.destroy=function(){this._onDestroy()},AnimationGroupPlayer.prototype._onDestroy=function(){this._destroyed||(this._destroyed=!0,this._onFinish(),this._players.forEach(function(e){return e.destroy()}),this._onDestroyFns.forEach(function(e){return e()}),this._onDestroyFns=[])},AnimationGroupPlayer.prototype.reset=function(){this._players.forEach(function(e){return e.reset()}),this._destroyed=!1,this._finished=!1,this._started=!1},AnimationGroupPlayer.prototype.setPosition=function(e){var t=e*this.totalTime;this._players.forEach(function(e){var n=e.totalTime?Math.min(1,t/e.totalTime):1;e.setPosition(n)})},AnimationGroupPlayer.prototype.getPosition=function(){var e=0;return this._players.forEach(function(t){var n=t.getPosition();e=Math.min(n,e)}),e},Object.defineProperty(AnimationGroupPlayer.prototype,"players",{get:function(){return this._players},enumerable:!0,configurable:!0}),AnimationGroupPlayer.prototype.beforeDestroy=function(){this.players.forEach(function(e){e.beforeDestroy&&e.beforeDestroy()})},AnimationGroupPlayer}(),u="!"; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */},49:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.online=9]="online",e[e.unreachable=10]="unreachable"}(t.StationStatus||(t.StationStatus={}));var r=function(){return function Station(e){Object.assign(this,e)}}();t.Station=r},559:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=n(111),o=n(560);function main(){return i.platformBrowserDynamic().bootstrapModule(o.AppModule).then(function(e){return e})}r.enableProdMode(),t.main=main,"complete"===document.readyState?main():document.addEventListener("DOMContentLoaded",main)},560:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=n(561),o=n(27),s=n(233),a=n(29),u=n(234),l=n(563),c=n(567),p=n(236),d=n(94),h=n(588),m=n(218),f=function(){function AppModule(e){this.appRef=e}return AppModule.prototype.hmrOnInit=function(e){console.log("HMR store",e)},AppModule.prototype.hmrOnDestroy=function(e){var t=this.appRef.components.map(function(e){return e.location.nativeElement});e.disposeOldHosts=m.createNewHosts(t),m.removeNgStyles()},AppModule.prototype.hmrAfterDestroy=function(e){e.disposeOldHosts(),delete e.disposeOldHosts},AppModule=__decorate([r.NgModule({imports:[i.BrowserAnimationsModule,o.BrowserModule,s.HttpClientModule,a.HttpModule,u.FormsModule,c.CoreModule,p.PlugsModule,d.SharedModule,h.StationsModule],declarations:[l.AppComponent],providers:[],bootstrap:[l.AppComponent]}),__metadata("design:paramtypes",[r.ApplicationRef])],AppModule)}();t.AppModule=f},561:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n.d(t,"BrowserAnimationsModule",function(){return v}),n.d(t,"NoopAnimationsModule",function(){return b}),n.d(t,"ɵBrowserAnimationBuilder",function(){return u}),n.d(t,"ɵBrowserAnimationFactory",function(){return l}),n.d(t,"ɵAnimationRenderer",function(){return h}),n.d(t,"ɵAnimationRendererFactory",function(){return p}),n.d(t,"ɵa",function(){return d}),n.d(t,"ɵf",function(){return y}),n.d(t,"ɵg",function(){return g}),n.d(t,"ɵb",function(){return m}),n.d(t,"ɵd",function(){return instantiateDefaultStyleNormalizer}),n.d(t,"ɵe",function(){return instantiateRendererFactory}),n.d(t,"ɵc",function(){return instantiateSupportedAnimationDriver});var r=n(16),i=n(2),o=n(27),s=n(48),a=n(562),u=function(e){function BrowserAnimationBuilder(t,n){var r=e.call(this)||this;r._nextAnimationId=0;var o={id:"0",encapsulation:i.ViewEncapsulation.None,styles:[],data:{animation:[]}};return r._renderer=t.createRenderer(n.body,o),r}return r.a(BrowserAnimationBuilder,e),BrowserAnimationBuilder.prototype.build=function(e){var t=this._nextAnimationId.toString();this._nextAnimationId++;var n=Array.isArray(e)?Object(s.sequence)(e):e;return issueAnimationCommand(this._renderer,null,t,"register",[n]),new l(t,this._renderer)},BrowserAnimationBuilder}(s.AnimationBuilder);u.decorators=[{type:i.Injectable}],u.ctorParameters=function(){return[{type:i.RendererFactory2},{type:void 0,decorators:[{type:i.Inject,args:[o.DOCUMENT]}]}]};var l=function(e){function BrowserAnimationFactory(t,n){var r=e.call(this)||this;return r._id=t,r._renderer=n,r}return r.a(BrowserAnimationFactory,e),BrowserAnimationFactory.prototype.create=function(e,t){return new c(this._id,e,t||{},this._renderer)},BrowserAnimationFactory}(s.AnimationFactory),c=function(){function RendererAnimationPlayer(e,t,n,r){this.id=e,this.element=t,this._renderer=r,this.parentPlayer=null,this._started=!1,this.totalTime=0,this._command("create",n)}return RendererAnimationPlayer.prototype._listen=function(e,t){return this._renderer.listen(this.element,"@@"+this.id+":"+e,t)},RendererAnimationPlayer.prototype._command=function(e){for(var t=[],n=1;n=0&&e *";case":leave":return"* => void";default:return t.push('The transition alias value "'+e+'" is not supported'),"* => *"}}(e,n));var r=e.match(/^(\*|[-\w]+)\s*()\s*(\*|[-\w]+)$/);if(null==r||r.length<4)return n.push('The provided transition expression "'+e+'" is not supported'),t;var i=r[1],o=r[2],s=r[3];t.push(makeLambdaFromStates(i,s));var a=i==C&&s==C;"<"!=o[0]||a||t.push(makeLambdaFromStates(s,i))}(e,n,t)}):n.push(e),n}var A=new Set;A.add("true"),A.add("1");var T=new Set;function makeLambdaFromStates(e,t){var n=A.has(e)||T.has(e),r=A.has(t)||T.has(t);return function(i,o){var s=e==C||e==i,a=t==C||t==o;return!s&&n&&"boolean"==typeof i&&(s=i?A.has(e):T.has(e)),!a&&r&&"boolean"==typeof o&&(a=o?A.has(t):T.has(t)),s&&a}} +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */T.add("false"),T.add("0");var w=":self",E=new RegExp("s*"+w+"s*,?","g");function buildAnimationAst(e,t){return(new I).build(e,t)}var P=new RegExp(":leave","g"),O=new RegExp(":enter","g"),I=function(){function AnimationAstBuilderVisitor(){}return AnimationAstBuilderVisitor.prototype.build=function(e,t){var n=new N(t);return this._resetContextStyleTimingState(n),visitDslNode(this,normalizeAnimationEntry(e),n)},AnimationAstBuilderVisitor.prototype._resetContextStyleTimingState=function(e){e.currentQuerySelector="",e.collectedStyles={},e.collectedStyles[""]={},e.currentTime=0},AnimationAstBuilderVisitor.prototype.visitTrigger=function(e,t){var n=this,r=t.queryCount=0,i=t.depCount=0,o=[],s=[];return e.definitions.forEach(function(e){if(n._resetContextStyleTimingState(t),0==e.type){var a=e,u=a.name;u.split(/\s*,\s*/).forEach(function(e){a.name=e,o.push(n.visitState(a,t))}),a.name=u}else if(1==e.type){var l=n.visitTransition(e,t);r+=l.queryCount,i+=l.depCount,s.push(l)}else t.errors.push("only state() and transition() definitions can sit inside of a trigger()")}),{type:7,name:e.name,states:o,transitions:s,queryCount:r,depCount:i,options:null}},AnimationAstBuilderVisitor.prototype.visitState=function(e,t){var n=this.visitStyle(e.styles,t),r=e.options&&e.options.params||null;if(n.containsDynamicStyles){var i=new Set,o=r||{};if(n.styles.forEach(function(e){if(isObject(e)){var t=e;Object.keys(t).forEach(function(e){extractStyleParams(t[e]).forEach(function(e){o.hasOwnProperty(e)||i.add(e)})})}}),i.size){var s=iteratorToArray(i.values());t.errors.push('state("'+e.name+'", ...) must define default values for all the following style substitutions: '+s.join(", "))}}return{type:0,name:e.name,style:n,options:r?{params:r}:null}},AnimationAstBuilderVisitor.prototype.visitTransition=function(e,t){t.queryCount=0,t.depCount=0;var n=visitDslNode(this,normalizeAnimationEntry(e.animation),t);return{type:1,matchers:parseTransitionExpr(e.expr,t.errors),animation:n,queryCount:t.queryCount,depCount:t.depCount,options:normalizeAnimationOptions(e.options)}},AnimationAstBuilderVisitor.prototype.visitSequence=function(e,t){var n=this;return{type:2,steps:e.steps.map(function(e){return visitDslNode(n,e,t)}),options:normalizeAnimationOptions(e.options)}},AnimationAstBuilderVisitor.prototype.visitGroup=function(e,t){var n=this,r=t.currentTime,i=0,o=e.steps.map(function(e){t.currentTime=r;var o=visitDslNode(n,e,t);return i=Math.max(i,t.currentTime),o});return t.currentTime=i,{type:3,steps:o,options:normalizeAnimationOptions(e.options)}},AnimationAstBuilderVisitor.prototype.visitAnimate=function(e,t){var n,r=function constructTimingAst(e,t){var n=null;if(e.hasOwnProperty("duration"))n=e;else if("number"==typeof e){var r=resolveTiming(e,t).duration;return makeTimingAst(r,0,"")}var i=e;if(i.split(/\s+/).some(function(e){return"{"==e.charAt(0)&&"{"==e.charAt(1)})){var o=makeTimingAst(0,0,"");return o.dynamic=!0,o.strValue=i,o}return makeTimingAst((n=n||resolveTiming(i,t)).duration,n.delay,n.easing)}(e.timings,t.errors);t.currentAnimateTimings=r;var o=e.styles?e.styles:Object(i.style)({});if(5==o.type)n=this.visitKeyframes(o,t);else{var s=e.styles,a=!1;if(!s){a=!0;var u={};r.easing&&(u.easing=r.easing),s=Object(i.style)(u)}t.currentTime+=r.duration+r.delay;var l=this.visitStyle(s,t);l.isEmptyStep=a,n=l}return t.currentAnimateTimings=null,{type:4,timings:r,style:n,options:null}},AnimationAstBuilderVisitor.prototype.visitStyle=function(e,t){var n=this._makeStyleAst(e,t);return this._validateStyleAst(n,t),n},AnimationAstBuilderVisitor.prototype._makeStyleAst=function(e,t){var n=[];Array.isArray(e.styles)?e.styles.forEach(function(e){"string"==typeof e?e==i.AUTO_STYLE?n.push(e):t.errors.push("The provided style string value "+e+" is not allowed."):n.push(e)}):n.push(e.styles);var r=!1,o=null;return n.forEach(function(e){if(isObject(e)){var t=e,n=t.easing;if(n&&(o=n,delete t.easing),!r)for(var i in t){if(t[i].toString().indexOf("{{")>=0){r=!0;break}}}}),{type:6,styles:n,easing:o,offset:e.offset,containsDynamicStyles:r,options:null}},AnimationAstBuilderVisitor.prototype._validateStyleAst=function(e,t){var n=t.currentAnimateTimings,r=t.currentTime,i=t.currentTime;n&&i>0&&(i-=n.duration+n.delay),e.styles.forEach(function(e){"string"!=typeof e&&Object.keys(e).forEach(function(n){var o=t.collectedStyles[t.currentQuerySelector],s=o[n],a=!0;s&&(i!=r&&i>=s.startTime&&r<=s.endTime&&(t.errors.push('The CSS property "'+n+'" that exists between the times of "'+s.startTime+'ms" and "'+s.endTime+'ms" is also being animated in a parallel animation between the times of "'+i+'ms" and "'+r+'ms"'),a=!1),i=s.startTime),a&&(o[n]={startTime:i,endTime:r}),t.options&&function validateStyleParams(e,t,n){var r=t.params||{},i=extractStyleParams(e);i.length&&i.forEach(function(e){r.hasOwnProperty(e)||n.push("Unable to resolve the local animation param "+e+" in the given list of values")})}(e[n],t.options,t.errors)})})},AnimationAstBuilderVisitor.prototype.visitKeyframes=function(e,t){var n=this,r={type:5,styles:[],options:null};if(!t.currentAnimateTimings)return t.errors.push("keyframes() must be placed inside of a call to animate()"),r;var i=0,o=[],s=!1,a=!1,u=0,l=e.steps.map(function(e){var r=n._makeStyleAst(e,t),l=null!=r.offset?r.offset:function consumeOffset(e){if("string"==typeof e)return null;var t=null;if(Array.isArray(e))e.forEach(function(e){if(isObject(e)&&e.hasOwnProperty("offset")){var n=e;t=parseFloat(n.offset),delete n.offset}});else if(isObject(e)&&e.hasOwnProperty("offset")){var n=e;t=parseFloat(n.offset),delete n.offset}return t}(r.styles),c=0;return null!=l&&(i++,c=r.offset=l),a=a||c<0||c>1,s=s||c0&&i0?i==d?1:p*i:o[i],a=s*f;t.currentTime=h+m.delay+a,m.duration=a,n._validateStyleAst(e,t),e.offset=s,r.styles.push(e)}),r},AnimationAstBuilderVisitor.prototype.visitReference=function(e,t){return{type:8,animation:visitDslNode(this,normalizeAnimationEntry(e.animation),t),options:normalizeAnimationOptions(e.options)}},AnimationAstBuilderVisitor.prototype.visitAnimateChild=function(e,t){return t.depCount++,{type:9,options:normalizeAnimationOptions(e.options)}},AnimationAstBuilderVisitor.prototype.visitAnimateRef=function(e,t){return{type:10,animation:this.visitReference(e.animation,t),options:normalizeAnimationOptions(e.options)}},AnimationAstBuilderVisitor.prototype.visitQuery=function(e,t){var n=t.currentQuerySelector,r=e.options||{};t.queryCount++,t.currentQuery=e;var i=function normalizeSelector(e){var t=!!e.split(/\s*,\s*/).find(function(e){return e==w});t&&(e=e.replace(E,""));return[e=e.replace(O,y).replace(P,g).replace(/@\*/g,v).replace(/@\w+/g,function(e){return v+"-"+e.substr(1)}).replace(/:animating/g,b),t]}(e.selector),o=i[0],s=i[1];t.currentQuerySelector=n.length?n+" "+o:o,getOrSetAsInMap(t.collectedStyles,t.currentQuerySelector,{});var a=visitDslNode(this,normalizeAnimationEntry(e.animation),t);return t.currentQuery=null,t.currentQuerySelector=n,{type:11,selector:o,limit:r.limit||0,optional:!!r.optional,includeSelf:s,animation:a,originalSelector:e.selector,options:normalizeAnimationOptions(e.options)}},AnimationAstBuilderVisitor.prototype.visitStagger=function(e,t){t.currentQuery||t.errors.push("stagger() can only be used inside of query()");var n="full"===e.timings?{duration:0,delay:0,easing:"full"}:resolveTiming(e.timings,t.errors,!0);return{type:12,animation:visitDslNode(this,normalizeAnimationEntry(e.animation),t),timings:n,options:null}},AnimationAstBuilderVisitor}();var N=function(){return function AnimationAstBuilderContext(e){this.errors=e,this.queryCount=0,this.depCount=0,this.currentTransition=null,this.currentQuery=null,this.currentQuerySelector=null,this.currentAnimateTimings=null,this.currentTime=0,this.collectedStyles={},this.options=null}}();function isObject(e){return!Array.isArray(e)&&"object"==typeof e}function normalizeAnimationOptions(e){return e?(e=copyObj(e)).params&&(e.params=function normalizeParams(e){return e?copyObj(e):null}(e.params)):e={},e}function makeTimingAst(e,t,n){return{duration:e,delay:t,easing:n}} +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */function createTimelineInstruction(e,t,n,r,i,o,s,a){return void 0===s&&(s=null),void 0===a&&(a=!1),{type:1,element:e,keyframes:t,preStyleProps:n,postStyleProps:r,duration:i,delay:o,totalTime:i+o,easing:s,subTimeline:a}} +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */var L=function(){function ElementInstructionMap(){this._map=new Map}return ElementInstructionMap.prototype.consume=function(e){var t=this._map.get(e);return t?this._map.delete(e):t=[],t},ElementInstructionMap.prototype.append=function(e,t){var n=this._map.get(e);n||this._map.set(e,n=[]),n.push.apply(n,t)},ElementInstructionMap.prototype.has=function(e){return this._map.has(e)},ElementInstructionMap.prototype.clear=function(){this._map.clear()},ElementInstructionMap}(); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */function buildAnimationTimelines(e,t,n,r,i,o,s,a){return void 0===r&&(r={}),void 0===i&&(i={}),void 0===a&&(a=[]),(new x).buildKeyframes(e,t,n,r,i,o,s,a)}var x=function(){function AnimationTimelineBuilderVisitor(){}return AnimationTimelineBuilderVisitor.prototype.buildKeyframes=function(e,t,n,r,i,o,s,a){void 0===a&&(a=[]),s=s||new L;var u=new M(e,t,s,a,[]);u.options=o,u.currentTimeline.setStyles([r],null,u.errors,o),visitDslNode(this,n,u);var l=u.timelines.filter(function(e){return e.containsAnimation()});if(l.length&&Object.keys(i).length){var c=l[l.length-1];c.allowOnlyTimelineStyles()||c.setStyles([i],null,u.errors,o)}return l.length?l.map(function(e){return e.buildKeyframes()}):[createTimelineInstruction(t,[],[],[],0,0,"",!1)]},AnimationTimelineBuilderVisitor.prototype.visitTrigger=function(e,t){},AnimationTimelineBuilderVisitor.prototype.visitState=function(e,t){},AnimationTimelineBuilderVisitor.prototype.visitTransition=function(e,t){},AnimationTimelineBuilderVisitor.prototype.visitAnimateChild=function(e,t){var n=t.subInstructions.consume(t.element);if(n){var r=t.createSubContext(e.options),i=t.currentTimeline.currentTime,o=this._visitSubInstructions(n,r,r.options);i!=o&&t.transformIntoNewTimeline(o)}t.previousNode=e},AnimationTimelineBuilderVisitor.prototype.visitAnimateRef=function(e,t){var n=t.createSubContext(e.options);n.transformIntoNewTimeline(),this.visitReference(e.animation,n),t.transformIntoNewTimeline(n.currentTimeline.currentTime),t.previousNode=e},AnimationTimelineBuilderVisitor.prototype._visitSubInstructions=function(e,t,n){var r=t.currentTimeline.currentTime,i=null!=n.duration?resolveTimingValue(n.duration):null,o=null!=n.delay?resolveTimingValue(n.delay):null;return 0!==i&&e.forEach(function(e){var n=t.appendInstructionToTimeline(e,i,o);r=Math.max(r,n.duration+n.delay)}),r},AnimationTimelineBuilderVisitor.prototype.visitReference=function(e,t){t.updateOptions(e.options,!0),visitDslNode(this,e.animation,t),t.previousNode=e},AnimationTimelineBuilderVisitor.prototype.visitSequence=function(e,t){var n=this,r=t.subContextCount,i=t,o=e.options;if(o&&(o.params||o.delay)&&((i=t.createSubContext(o)).transformIntoNewTimeline(),null!=o.delay)){6==i.previousNode.type&&(i.currentTimeline.snapshotCurrentStyles(),i.previousNode=D);var s=resolveTimingValue(o.delay);i.delayNextStep(s)}e.steps.length&&(e.steps.forEach(function(e){return visitDslNode(n,e,i)}),i.currentTimeline.applyStylesToKeyframe(),i.subContextCount>r&&i.transformIntoNewTimeline()),t.previousNode=e},AnimationTimelineBuilderVisitor.prototype.visitGroup=function(e,t){var n=this,r=[],i=t.currentTimeline.currentTime,o=e.options&&e.options.delay?resolveTimingValue(e.options.delay):0;e.steps.forEach(function(s){var a=t.createSubContext(e.options);o&&a.delayNextStep(o),visitDslNode(n,s,a),i=Math.max(i,a.currentTimeline.currentTime),r.push(a.currentTimeline)}),r.forEach(function(e){return t.currentTimeline.mergeTimelineCollectedStyles(e)}),t.transformIntoNewTimeline(i),t.previousNode=e},AnimationTimelineBuilderVisitor.prototype._visitTiming=function(e,t){if(e.dynamic){var n=e.strValue;return resolveTiming(t.params?interpolateParams(n,t.params,t.errors):n,t.errors)}return{duration:e.duration,delay:e.delay,easing:e.easing}},AnimationTimelineBuilderVisitor.prototype.visitAnimate=function(e,t){var n=t.currentAnimateTimings=this._visitTiming(e.timings,t),r=t.currentTimeline;n.delay&&(t.incrementTime(n.delay),r.snapshotCurrentStyles());var i=e.style;5==i.type?this.visitKeyframes(i,t):(t.incrementTime(n.duration),this.visitStyle(i,t),r.applyStylesToKeyframe()),t.currentAnimateTimings=null,t.previousNode=e},AnimationTimelineBuilderVisitor.prototype.visitStyle=function(e,t){var n=t.currentTimeline,r=t.currentAnimateTimings;!r&&n.getCurrentStyleProperties().length&&n.forwardFrame();var i=r&&r.easing||e.easing;e.isEmptyStep?n.applyEmptyStep(i):n.setStyles(e.styles,i,t.errors,t.options),t.previousNode=e},AnimationTimelineBuilderVisitor.prototype.visitKeyframes=function(e,t){var n=t.currentAnimateTimings,r=t.currentTimeline.duration,i=n.duration,o=t.createSubContext().currentTimeline;o.easing=n.easing,e.styles.forEach(function(e){var n=e.offset||0;o.forwardTime(n*i),o.setStyles(e.styles,e.easing,t.errors,t.options),o.applyStylesToKeyframe()}),t.currentTimeline.mergeTimelineCollectedStyles(o),t.transformIntoNewTimeline(r+i),t.previousNode=e},AnimationTimelineBuilderVisitor.prototype.visitQuery=function(e,t){var n=this,r=t.currentTimeline.currentTime,i=e.options||{},o=i.delay?resolveTimingValue(i.delay):0;o&&(6===t.previousNode.type||0==r&&t.currentTimeline.getCurrentStyleProperties().length)&&(t.currentTimeline.snapshotCurrentStyles(),t.previousNode=D);var s=r,a=t.invokeQuery(e.selector,e.originalSelector,e.limit,e.includeSelf,!!i.optional,t.errors);t.currentQueryTotal=a.length;var u=null;a.forEach(function(r,i){t.currentQueryIndex=i;var a=t.createSubContext(e.options,r);o&&a.delayNextStep(o),r===t.element&&(u=a.currentTimeline),visitDslNode(n,e.animation,a),a.currentTimeline.applyStylesToKeyframe();var l=a.currentTimeline.currentTime;s=Math.max(s,l)}),t.currentQueryIndex=0,t.currentQueryTotal=0,t.transformIntoNewTimeline(s),u&&(t.currentTimeline.mergeTimelineCollectedStyles(u),t.currentTimeline.snapshotCurrentStyles()),t.previousNode=e},AnimationTimelineBuilderVisitor.prototype.visitStagger=function(e,t){var n=t.parentContext,r=t.currentTimeline,i=e.timings,o=Math.abs(i.duration),s=o*(t.currentQueryTotal-1),a=o*t.currentQueryIndex;switch(i.duration<0?"reverse":i.easing){case"reverse":a=s-a;break;case"full":a=n.currentStaggerTime}var u=t.currentTimeline;a&&u.delayNextStep(a);var l=u.currentTime;visitDslNode(this,e.animation,t),t.previousNode=e,n.currentStaggerTime=r.currentTime-l+(r.startTime-n.currentTimeline.startTime)},AnimationTimelineBuilderVisitor}(),D={},M=function(){function AnimationTimelineContext(e,t,n,r,i,o){this._driver=e,this.element=t,this.subInstructions=n,this.errors=r,this.timelines=i,this.parentContext=null,this.currentAnimateTimings=null,this.previousNode=D,this.subContextCount=0,this.options={},this.currentQueryIndex=0,this.currentQueryTotal=0,this.currentStaggerTime=0,this.currentTimeline=o||new F(t,0),i.push(this.currentTimeline)}return Object.defineProperty(AnimationTimelineContext.prototype,"params",{get:function(){return this.options.params},enumerable:!0,configurable:!0}),AnimationTimelineContext.prototype.updateOptions=function(e,t){var n=this;if(e){var r=e,i=this.options;null!=r.duration&&(i.duration=resolveTimingValue(r.duration)),null!=r.delay&&(i.delay=resolveTimingValue(r.delay));var o=r.params;if(o){var s=i.params;s||(s=this.options.params={}),Object.keys(o).forEach(function(e){t&&s.hasOwnProperty(e)||(s[e]=interpolateParams(o[e],s,n.errors))})}}},AnimationTimelineContext.prototype._copyOptions=function(){var e={};if(this.options){var t=this.options.params;if(t){var n=e.params={};Object.keys(t).forEach(function(e){n[e]=t[e]})}}return e},AnimationTimelineContext.prototype.createSubContext=function(e,t,n){void 0===e&&(e=null);var r=t||this.element,i=new AnimationTimelineContext(this._driver,r,this.subInstructions,this.errors,this.timelines,this.currentTimeline.fork(r,n||0));return i.previousNode=this.previousNode,i.currentAnimateTimings=this.currentAnimateTimings,i.options=this._copyOptions(),i.updateOptions(e),i.currentQueryIndex=this.currentQueryIndex,i.currentQueryTotal=this.currentQueryTotal,i.parentContext=this,this.subContextCount++,i},AnimationTimelineContext.prototype.transformIntoNewTimeline=function(e){return this.previousNode=D,this.currentTimeline=this.currentTimeline.fork(this.element,e),this.timelines.push(this.currentTimeline),this.currentTimeline},AnimationTimelineContext.prototype.appendInstructionToTimeline=function(e,t,n){var r={duration:null!=t?t:e.duration,delay:this.currentTimeline.currentTime+(null!=n?n:0)+e.delay,easing:""},i=new R(e.element,e.keyframes,e.preStyleProps,e.postStyleProps,r,e.stretchStartingKeyframe);return this.timelines.push(i),r},AnimationTimelineContext.prototype.incrementTime=function(e){this.currentTimeline.forwardTime(this.currentTimeline.duration+e)},AnimationTimelineContext.prototype.delayNextStep=function(e){e>0&&this.currentTimeline.delayNextStep(e)},AnimationTimelineContext.prototype.invokeQuery=function(e,t,n,r,i,o){var s=[];if(r&&s.push(this.element),e.length>0){var a=1!=n,u=this._driver.query(this.element,e,a);0!==n&&(u=u.slice(0,n)),s.push.apply(s,u)}return i||0!=s.length||o.push('`query("'+t+'")` returned zero elements. (Use `query("'+t+'", { optional: true })` if you wish to allow this.)'),s},AnimationTimelineContext}(),F=function(){function TimelineBuilder(e,t,n){this.element=e,this.startTime=t,this._elementTimelineStylesLookup=n,this.duration=0,this._previousKeyframe={},this._currentKeyframe={},this._keyframes=new Map,this._styleSummary={},this._pendingStyles={},this._backFill={},this._currentEmptyStepKeyframe=null,this._elementTimelineStylesLookup||(this._elementTimelineStylesLookup=new Map),this._localTimelineStyles=Object.create(this._backFill,{}),this._globalTimelineStyles=this._elementTimelineStylesLookup.get(e),this._globalTimelineStyles||(this._globalTimelineStyles=this._localTimelineStyles,this._elementTimelineStylesLookup.set(e,this._localTimelineStyles)),this._loadKeyframe()}return TimelineBuilder.prototype.containsAnimation=function(){switch(this._keyframes.size){case 0:return!1;case 1:return this.getCurrentStyleProperties().length>0;default:return!0}},TimelineBuilder.prototype.getCurrentStyleProperties=function(){return Object.keys(this._currentKeyframe)},Object.defineProperty(TimelineBuilder.prototype,"currentTime",{get:function(){return this.startTime+this.duration},enumerable:!0,configurable:!0}),TimelineBuilder.prototype.delayNextStep=function(e){var t=1==this._keyframes.size&&Object.keys(this._pendingStyles).length;this.duration||t?(this.forwardTime(this.currentTime+e),t&&this.snapshotCurrentStyles()):this.startTime+=e},TimelineBuilder.prototype.fork=function(e,t){return this.applyStylesToKeyframe(),new TimelineBuilder(e,t||this.currentTime,this._elementTimelineStylesLookup)},TimelineBuilder.prototype._loadKeyframe=function(){this._currentKeyframe&&(this._previousKeyframe=this._currentKeyframe),this._currentKeyframe=this._keyframes.get(this.duration),this._currentKeyframe||(this._currentKeyframe=Object.create(this._backFill,{}),this._keyframes.set(this.duration,this._currentKeyframe))},TimelineBuilder.prototype.forwardFrame=function(){this.duration+=1,this._loadKeyframe()},TimelineBuilder.prototype.forwardTime=function(e){this.applyStylesToKeyframe(),this.duration=e,this._loadKeyframe()},TimelineBuilder.prototype._updateStyle=function(e,t){this._localTimelineStyles[e]=t,this._globalTimelineStyles[e]=t,this._styleSummary[e]={time:this.currentTime,value:t}},TimelineBuilder.prototype.allowOnlyTimelineStyles=function(){return this._currentEmptyStepKeyframe!==this._currentKeyframe},TimelineBuilder.prototype.applyEmptyStep=function(e){var t=this;e&&(this._previousKeyframe.easing=e),Object.keys(this._globalTimelineStyles).forEach(function(e){t._backFill[e]=t._globalTimelineStyles[e]||i.AUTO_STYLE,t._currentKeyframe[e]=i.AUTO_STYLE}),this._currentEmptyStepKeyframe=this._currentKeyframe},TimelineBuilder.prototype.setStyles=function(e,t,n,r){var o=this;t&&(this._previousKeyframe.easing=t);var s=r&&r.params||{},a=function flattenStyles(e,t){var n,r={};return e.forEach(function(e){"*"===e?(n=n||Object.keys(t)).forEach(function(e){r[e]=i.AUTO_STYLE}):copyStyles(e,!1,r)}),r} +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */(e,this._globalTimelineStyles);Object.keys(a).forEach(function(e){var t=interpolateParams(a[e],s,n);o._pendingStyles[e]=t,o._localTimelineStyles.hasOwnProperty(e)||(o._backFill[e]=o._globalTimelineStyles.hasOwnProperty(e)?o._globalTimelineStyles[e]:i.AUTO_STYLE),o._updateStyle(e,t)})},TimelineBuilder.prototype.applyStylesToKeyframe=function(){var e=this,t=this._pendingStyles,n=Object.keys(t);0!=n.length&&(this._pendingStyles={},n.forEach(function(n){var r=t[n];e._currentKeyframe[n]=r}),Object.keys(this._localTimelineStyles).forEach(function(t){e._currentKeyframe.hasOwnProperty(t)||(e._currentKeyframe[t]=e._localTimelineStyles[t])}))},TimelineBuilder.prototype.snapshotCurrentStyles=function(){var e=this;Object.keys(this._localTimelineStyles).forEach(function(t){var n=e._localTimelineStyles[t];e._pendingStyles[t]=n,e._updateStyle(t,n)})},TimelineBuilder.prototype.getFinalKeyframe=function(){return this._keyframes.get(this.duration)},Object.defineProperty(TimelineBuilder.prototype,"properties",{get:function(){var e=[];for(var t in this._currentKeyframe)e.push(t);return e},enumerable:!0,configurable:!0}),TimelineBuilder.prototype.mergeTimelineCollectedStyles=function(e){var t=this;Object.keys(e._styleSummary).forEach(function(n){var r=t._styleSummary[n],i=e._styleSummary[n];(!r||i.time>r.time)&&t._updateStyle(n,i.value)})},TimelineBuilder.prototype.buildKeyframes=function(){var e=this;this.applyStylesToKeyframe();var t=new Set,n=new Set,r=1===this._keyframes.size&&0===this.duration,o=[];this._keyframes.forEach(function(s,a){var u=copyStyles(s,!0);Object.keys(u).forEach(function(e){var r=u[e];r==i["ɵPRE_STYLE"]?t.add(e):r==i.AUTO_STYLE&&n.add(e)}),r||(u.offset=a/e.duration),o.push(u)});var s=t.size?iteratorToArray(t.values()):[],a=n.size?iteratorToArray(n.values()):[];if(r){var u=o[0],l=copyObj(u);u.offset=0,l.offset=1,o=[u,l]}return createTimelineInstruction(this.element,o,s,a,this.duration,this.startTime,this.easing,!1)},TimelineBuilder}(),R=function(e){function SubTimelineBuilder(t,n,r,i,o,s){void 0===s&&(s=!1);var a=e.call(this,t,o.delay)||this;return a.element=t,a.keyframes=n,a.preStyleProps=r,a.postStyleProps=i,a._stretchStartingKeyframe=s,a.timings={duration:o.duration,delay:o.delay,easing:o.easing},a}return r.a(SubTimelineBuilder,e),SubTimelineBuilder.prototype.containsAnimation=function(){return this.keyframes.length>1},SubTimelineBuilder.prototype.buildKeyframes=function(){var e=this.keyframes,t=this.timings,n=t.delay,r=t.duration,i=t.easing;if(this._stretchStartingKeyframe&&n){var o=[],s=r+n,a=n/s,u=copyStyles(e[0],!1);u.offset=0,o.push(u);var l=copyStyles(e[0],!1);l.offset=roundOffset(a),o.push(l);for(var c=e.length-1,p=1;p<=c;p++){var d=copyStyles(e[p],!1),h=n+d.offset*r;d.offset=roundOffset(h/s),o.push(d)}r=s,n=0,i="",e=o}return createTimelineInstruction(this.element,e,this.preStyleProps,this.postStyleProps,r,n,i,!0)},SubTimelineBuilder}(F);function roundOffset(e,t){void 0===t&&(t=3);var n=Math.pow(10,t-1);return Math.round(e*n)/n}!function(){function Animation(e,t){this._driver=e;var n=[],r=buildAnimationAst(t,n);if(n.length){var i="animation validation failed:\n"+n.join("\n");throw new Error(i)}this._animationAst=r}Animation.prototype.buildTimelines=function(e,t,n,r,i){var o=Array.isArray(t)?normalizeStyles(t):t,s=Array.isArray(n)?normalizeStyles(n):n,a=[];i=i||new L;var u=buildAnimationTimelines(this._driver,e,this._animationAst,o,s,r,i,a);if(a.length){var l="animation building failed:\n"+a.join("\n");throw new Error(l)}return u}}(); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */var V=function(){return function AnimationStyleNormalizer(){}}(),k=(function(){function NoopAnimationStyleNormalizer(){}NoopAnimationStyleNormalizer.prototype.normalizePropertyName=function(e,t){return e},NoopAnimationStyleNormalizer.prototype.normalizeStyleValue=function(e,t,n,r){return n}}(),function(e){function WebAnimationsStyleNormalizer(){return null!==e&&e.apply(this,arguments)||this}return r.a(WebAnimationsStyleNormalizer,e),WebAnimationsStyleNormalizer.prototype.normalizePropertyName=function(e,t){return dashCaseToCamelCase(e)},WebAnimationsStyleNormalizer.prototype.normalizeStyleValue=function(e,t,n,r){var i="",o=n.toString().trim();if(j[t]&&0!==n&&"0"!==n)if("number"==typeof n)i="px";else{var s=n.match(/^[+-]?[\d\.]+([a-z]*)$/);s&&0==s[1].length&&r.push("Please provide a CSS unit value for "+e+":"+n)}return o+i},WebAnimationsStyleNormalizer}(V)),j=function makeBooleanMap(e){var t={};return e.forEach(function(e){return t[e]=!0}),t} +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */("width,height,minWidth,minHeight,maxWidth,maxHeight,left,top,bottom,right,fontSize,outlineWidth,outlineOffset,paddingTop,paddingLeft,paddingBottom,paddingRight,marginTop,marginLeft,marginBottom,marginRight,borderRadius,borderWidth,borderTopWidth,borderLeftWidth,borderRightWidth,borderBottomWidth,textIndent,perspective".split(","));function createTransitionInstruction(e,t,n,r,i,o,s,a,u,l,c,p){return{type:0,element:e,triggerName:t,isRemovalTransition:i,fromState:n,fromStyles:o,toState:r,toStyles:s,timelines:a,queriedElements:u,preStyleProps:l,postStyleProps:c,errors:p}} +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */var H={},B=function(){function AnimationTransitionFactory(e,t,n){this._triggerName=e,this.ast=t,this._stateStyles=n}return AnimationTransitionFactory.prototype.match=function(e,t){return function oneOrMoreTransitionsMatch(e,t,n){return e.some(function(e){return e(t,n)})}(this.ast.matchers,e,t)},AnimationTransitionFactory.prototype.buildStyles=function(e,t,n){var r=this._stateStyles["*"],i=this._stateStyles[e],o=r?r.buildStyles(t,n):{};return i?i.buildStyles(t,n):o},AnimationTransitionFactory.prototype.build=function(e,t,n,r,i,o,s){var a=[],u=this.ast.options&&this.ast.options.params||H,l=i&&i.params||H,c=this.buildStyles(n,l,a),p=o&&o.params||H,d=this.buildStyles(r,p,a),h=new Set,m=new Map,f=new Map,y="void"===r,g={params:Object.assign({},u,p)},v=buildAnimationTimelines(e,t,this.ast.animation,c,d,g,s,a);if(a.length)return createTransitionInstruction(t,this._triggerName,n,r,y,c,d,[],[],m,f,a);v.forEach(function(e){var n=e.element,r=getOrSetAsInMap(m,n,{});e.preStyleProps.forEach(function(e){return r[e]=!0});var i=getOrSetAsInMap(f,n,{});e.postStyleProps.forEach(function(e){return i[e]=!0}),n!==t&&h.add(n)});var b=iteratorToArray(h.values());return createTransitionInstruction(t,this._triggerName,n,r,y,c,d,v,b,m,f)},AnimationTransitionFactory}();var G=function(){function AnimationStateStyles(e,t){this.styles=e,this.defaultParams=t}return AnimationStateStyles.prototype.buildStyles=function(e,t){var n={},r=copyObj(this.defaultParams);return Object.keys(e).forEach(function(t){var n=e[t];null!=n&&(r[t]=n)}),this.styles.styles.forEach(function(e){if("string"!=typeof e){var i=e;Object.keys(i).forEach(function(e){var o=i[e];o.length>1&&(o=interpolateParams(o,r,t)),n[e]=o})}}),n},AnimationStateStyles}(); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */var U=function(){function AnimationTrigger(e,t){var n=this;this.name=e,this.ast=t,this.transitionFactories=[],this.states={},t.states.forEach(function(e){var t=e.options&&e.options.params||{};n.states[e.name]=new G(e.style,t)}),balanceProperties(this.states,"true","1"),balanceProperties(this.states,"false","0"),t.transitions.forEach(function(t){n.transitionFactories.push(new B(e,t,n.states))}),this.fallbackTransition=function createFallbackTransition(e,t){return new B(e,{type:1,animation:{type:2,steps:[],options:null},matchers:[function(e,t){return!0}],options:null,queryCount:0,depCount:0},t)}(e,this.states)}return Object.defineProperty(AnimationTrigger.prototype,"containsQueries",{get:function(){return this.ast.queryCount>0},enumerable:!0,configurable:!0}),AnimationTrigger.prototype.matchTransition=function(e,t){return this.transitionFactories.find(function(n){return n.match(e,t)})||null},AnimationTrigger.prototype.matchStyles=function(e,t,n){return this.fallbackTransition.buildStyles(e,t,n)},AnimationTrigger}();function balanceProperties(e,t,n){e.hasOwnProperty(t)?e.hasOwnProperty(n)||(e[n]=e[t]):e.hasOwnProperty(n)&&(e[t]=e[n])} +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */var q=new L,W=function(){function TimelineAnimationEngine(e,t){this._driver=e,this._normalizer=t,this._animations={},this._playersById={},this.players=[]}return TimelineAnimationEngine.prototype.register=function(e,t){var n=[],r=buildAnimationAst(t,n);if(n.length)throw new Error("Unable to build the animation due to the following errors: "+n.join("\n"));this._animations[e]=r},TimelineAnimationEngine.prototype._buildPlayer=function(e,t,n){var r=e.element,i=normalizeKeyframes(this._driver,this._normalizer,0,e.keyframes,t,n);return this._driver.animate(r,i,e.duration,e.delay,e.easing,[])},TimelineAnimationEngine.prototype.create=function(e,t,n){var r=this;void 0===n&&(n={});var o,s=[],a=this._animations[e],u=new Map;if(a?(o=buildAnimationTimelines(this._driver,t,a,{},{},n,q,s)).forEach(function(e){var t=getOrSetAsInMap(u,e.element,{});e.postStyleProps.forEach(function(e){return t[e]=null})}):(s.push("The requested animation doesn't exist or has already been destroyed"),o=[]),s.length)throw new Error("Unable to create the animation due to the following errors: "+s.join("\n"));u.forEach(function(e,t){Object.keys(e).forEach(function(n){e[n]=r._driver.computeStyle(t,n,i.AUTO_STYLE)})});var l=optimizeGroupPlayer(o.map(function(e){var t=u.get(e.element);return r._buildPlayer(e,{},t)}));return this._playersById[e]=l,l.onDestroy(function(){return r.destroy(e)}),this.players.push(l),l},TimelineAnimationEngine.prototype.destroy=function(e){var t=this._getPlayer(e);t.destroy(),delete this._playersById[e];var n=this.players.indexOf(t);n>=0&&this.players.splice(n,1)},TimelineAnimationEngine.prototype._getPlayer=function(e){var t=this._playersById[e];if(!t)throw new Error("Unable to find the timeline player referenced by "+e);return t},TimelineAnimationEngine.prototype.listen=function(e,t,n,r){var i=makeAnimationEvent(t,"","","");return listenOnPlayer(this._getPlayer(e),n,i,r),function(){}},TimelineAnimationEngine.prototype.command=function(e,t,n,r){if("register"!=n)if("create"!=n){var i=this._getPlayer(e);switch(n){case"play":i.play();break;case"pause":i.pause();break;case"reset":i.reset();break;case"restart":i.restart();break;case"finish":i.finish();break;case"init":i.init();break;case"setPosition":i.setPosition(parseFloat(r[0]));break;case"destroy":this.destroy(e)}}else{var o=r[0]||{};this.create(e,t,o)}else this.register(e,r[0])},TimelineAnimationEngine}(),z=[],K={namespaceId:"",setForRemoval:null,hasAnimation:!1,removedBeforeQueried:!1},Y={namespaceId:"",setForRemoval:null,hasAnimation:!1,removedBeforeQueried:!0},J="__ng_removed",Q=function(){function StateValue(e){var t=e&&e.hasOwnProperty("value"),n=t?e.value:e;if(this.value=function normalizeTriggerValue(e){return null!=e?e:null}(n),t){var r=copyObj(e);delete r.value,this.options=r}else this.options={};this.options.params||(this.options.params={})}return Object.defineProperty(StateValue.prototype,"params",{get:function(){return this.options.params},enumerable:!0,configurable:!0}),StateValue.prototype.absorbOptions=function(e){var t=e.params;if(t){var n=this.options.params;Object.keys(t).forEach(function(e){null==n[e]&&(n[e]=t[e])})}},StateValue}(),X=new Q("void"),$=new Q("DELETED"),Z=function(){function AnimationTransitionNamespace(e,t,n){this.id=e,this.hostElement=t,this._engine=n,this.players=[],this._triggers={},this._queue=[],this._elementListeners=new Map,this._hostClassName="ng-tns-"+e,addClass(t,this._hostClassName)}return AnimationTransitionNamespace.prototype.listen=function(e,t,n,r){var i=this;if(!this._triggers.hasOwnProperty(t))throw new Error('Unable to listen on the animation trigger event "'+n+'" because the animation trigger "'+t+"\" doesn't exist!");if(null==n||0==n.length)throw new Error('Unable to listen on the animation trigger "'+t+'" because the provided event is undefined!');if(!function isTriggerEventValid(e){return"start"==e||"done"==e}(n))throw new Error('The provided animation trigger event "'+n+'" for the animation trigger "'+t+'" is not supported!');var o=getOrSetAsInMap(this._elementListeners,e,[]),s={name:t,phase:n,callback:r};o.push(s);var a=getOrSetAsInMap(this._engine.statesByElement,e,{});return a.hasOwnProperty(t)||(addClass(e,"ng-trigger"),addClass(e,"ng-trigger-"+t),a[t]=null),function(){i._engine.afterFlush(function(){var e=o.indexOf(s);e>=0&&o.splice(e,1),i._triggers[t]||delete a[t]})}},AnimationTransitionNamespace.prototype.register=function(e,t){return!this._triggers[e]&&(this._triggers[e]=t,!0)},AnimationTransitionNamespace.prototype._getTrigger=function(e){var t=this._triggers[e];if(!t)throw new Error('The provided animation trigger "'+e+'" has not been registered!');return t},AnimationTransitionNamespace.prototype.trigger=function(e,t,n,r){var i=this;void 0===r&&(r=!0);var o=this._getTrigger(t),s=new te(this.id,t,e),a=this._engine.statesByElement.get(e);a||(addClass(e,"ng-trigger"),addClass(e,"ng-trigger-"+t),this._engine.statesByElement.set(e,a={}));var u=a[t],l=new Q(n);if(!(n&&n.hasOwnProperty("value"))&&u&&l.absorbOptions(u.options),a[t]=l,u){if(u===$)return s}else u=X;if("void"===l.value||u.value!==l.value){var c=getOrSetAsInMap(this._engine.playersByElement,e,[]);c.forEach(function(e){e.namespaceId==i.id&&e.triggerName==t&&e.queued&&e.destroy()});var p=o.matchTransition(u.value,l.value),d=!1;if(!p){if(!r)return;p=o.fallbackTransition,d=!0}return this._engine.totalQueuedPlayers++,this._queue.push({element:e,triggerName:t,transition:p,fromState:u,toState:l,player:s,isFallbackTransition:d}),d||(addClass(e,"ng-animate-queued"),s.onStart(function(){removeClass(e,"ng-animate-queued")})),s.onDone(function(){var t=i.players.indexOf(s);t>=0&&i.players.splice(t,1);var n=i._engine.playersByElement.get(e);if(n){var r=n.indexOf(s);r>=0&&n.splice(r,1)}}),this.players.push(s),c.push(s),s}if(!function objEquals(e,t){var n=Object.keys(e),r=Object.keys(t);if(n.length!=r.length)return!1;for(var i=0;i=0){for(var r=!1,i=n;i>=0;i--){var o=this._namespaceList[i];if(this.driver.containsElement(o.hostElement,t)){this._namespaceList.splice(i+1,0,e),r=!0;break}}r||this._namespaceList.splice(0,0,e)}else this._namespaceList.push(e);return this.namespacesByHostElement.set(t,e),e},TransitionAnimationEngine.prototype.register=function(e,t){var n=this._namespaceLookup[e];return n||(n=this.createNamespace(e,t)),n},TransitionAnimationEngine.prototype.registerTrigger=function(e,t,n){var r=this._namespaceLookup[e];r&&r.register(t,n)&&this.totalAnimations++},TransitionAnimationEngine.prototype.destroy=function(e,t){var n=this;if(e){var r=this._fetchNamespace(e);this.afterFlush(function(){n.namespacesByHostElement.delete(r.hostElement),delete n._namespaceLookup[e];var t=n._namespaceList.indexOf(r);t>=0&&n._namespaceList.splice(t,1)}),this.afterFlushAnimationsDone(function(){return r.destroy(t)})}},TransitionAnimationEngine.prototype._fetchNamespace=function(e){return this._namespaceLookup[e]},TransitionAnimationEngine.prototype.trigger=function(e,t,n,r){return!!isElementNode(t)&&(this._fetchNamespace(e).trigger(t,n,r),!0)},TransitionAnimationEngine.prototype.insertNode=function(e,t,n,r){if(isElementNode(t)){var i=t[J];i&&i.setForRemoval&&(i.setForRemoval=!1),e&&this._fetchNamespace(e).insertNode(t,n),r&&this.collectEnterElement(t)}},TransitionAnimationEngine.prototype.collectEnterElement=function(e){this.collectedEnterElements.push(e)},TransitionAnimationEngine.prototype.markElementAsDisabled=function(e,t){t?this.disabledNodes.has(e)||(this.disabledNodes.add(e),addClass(e,"ng-animate-disabled")):this.disabledNodes.has(e)&&(this.disabledNodes.delete(e),removeClass(e,"ng-animate-disabled"))},TransitionAnimationEngine.prototype.removeNode=function(e,t,n,r){if(isElementNode(t)){var i=e?this._fetchNamespace(e):null;i?i.removeNode(t,n,r):this.markElementAsRemoved(e,t,!1,n)}else this._onRemovalComplete(t,n)},TransitionAnimationEngine.prototype.markElementAsRemoved=function(e,t,n,r){this.collectedLeaveElements.push(t),t[J]={namespaceId:e,setForRemoval:r,hasAnimation:n,removedBeforeQueried:!1}},TransitionAnimationEngine.prototype.listen=function(e,t,n,r,i){return isElementNode(t)?this._fetchNamespace(e).listen(t,n,r,i):function(){}},TransitionAnimationEngine.prototype._buildInstruction=function(e,t){return e.transition.build(this.driver,e.element,e.fromState.value,e.toState.value,e.fromState.options,e.toState.options,t)},TransitionAnimationEngine.prototype.destroyInnerAnimations=function(e){var t=this,n=this.driver.query(e,v,!0);n.forEach(function(e){var n=t.playersByElement.get(e);n&&n.forEach(function(e){e.queued?e.markedForDestroy=!0:e.destroy()});var r=t.statesByElement.get(e);r&&Object.keys(r).forEach(function(e){return r[e]=$})}),0!=this.playersByQueriedElement.size&&(n=this.driver.query(e,b,!0)).length&&n.forEach(function(e){var n=t.playersByQueriedElement.get(e);n&&n.forEach(function(e){return e.finish()})})},TransitionAnimationEngine.prototype.whenRenderingDone=function(){var e=this;return new Promise(function(t){if(e.players.length)return optimizeGroupPlayer(e.players).onDone(function(){return t()});t()})},TransitionAnimationEngine.prototype.processLeaveNode=function(e){var t=this,n=e[J];if(n&&n.setForRemoval){if(e[J]=K,n.namespaceId){this.destroyInnerAnimations(e);var r=this._fetchNamespace(n.namespaceId);r&&r.clearElementCache(e)}this._onRemovalComplete(e,n.setForRemoval)}this.driver.matchesElement(e,".ng-animate-disabled")&&this.markElementAsDisabled(e,!1),this.driver.query(e,".ng-animate-disabled",!0).forEach(function(n){t.markElementAsDisabled(e,!1)})},TransitionAnimationEngine.prototype.flush=function(e){var t=this;void 0===e&&(e=-1);var n=[];if(this.newHostElements.size&&(this.newHostElements.forEach(function(e,n){return t._balanceNamespaceList(e,n)}),this.newHostElements.clear()),this._namespaceList.length&&(this.totalQueuedPlayers||this.collectedLeaveElements.length)){var r=[];try{n=this._flushAnimations(r,e)}finally{for(var i=0;i=0;m--){this._namespaceList[m].drainQueuedTransitions(t).forEach(function(e){var t=e.player;g.push(t);var i=e.element;if(d&&n.driver.containsElement(d,i)){var s=n._buildInstruction(e,r);if(s.errors&&s.errors.length)v.push(s);else{if(e.isFallbackTransition)return t.onStart(function(){return eraseStyles(i,s.fromStyles)}),t.onDestroy(function(){return setStyles(i,s.toStyles)}),void o.push(t);s.timelines.forEach(function(e){return e.stretchStartingKeyframe=!0}),r.append(i,s.timelines);var p={instruction:s,player:t,element:i};a.push(p),s.queriedElements.forEach(function(e){return getOrSetAsInMap(u,e,[]).push(t)}),s.preStyleProps.forEach(function(e,t){var n=Object.keys(e);if(n.length){var r=l.get(t);r||l.set(t,r=new Set),n.forEach(function(e){return r.add(e)})}}),s.postStyleProps.forEach(function(e,t){var n=Object.keys(e),r=c.get(t);r||c.set(t,r=new Set),n.forEach(function(e){return r.add(e)})})}}else t.destroy()})}if(v.length){var _=[];v.forEach(function(e){_.push("@"+e.triggerName+" has failed due to:\n"),e.errors.forEach(function(e){return _.push("- "+e+"\n")})}),g.forEach(function(e){return e.destroy()}),this.reportError(_)}var S=new Set;for(m=0;m0?this.driver.animate(e.element,t,e.duration,e.delay,e.easing,n):new i.NoopAnimationPlayer},TransitionAnimationEngine}(),te=function(){function TransitionAnimationPlayer(e,t,n){this.namespaceId=e,this.triggerName=t,this.element=n,this._player=new i.NoopAnimationPlayer,this._containsRealPlayer=!1,this._queuedCallbacks={},this._destroyed=!1,this.markedForDestroy=!1}return Object.defineProperty(TransitionAnimationPlayer.prototype,"queued",{get:function(){return 0==this._containsRealPlayer},enumerable:!0,configurable:!0}),Object.defineProperty(TransitionAnimationPlayer.prototype,"destroyed",{get:function(){return this._destroyed},enumerable:!0,configurable:!0}),TransitionAnimationPlayer.prototype.setRealPlayer=function(e){var t=this;this._containsRealPlayer||(this._player=e,Object.keys(this._queuedCallbacks).forEach(function(n){t._queuedCallbacks[n].forEach(function(t){return listenOnPlayer(e,n,void 0,t)})}),this._queuedCallbacks={},this._containsRealPlayer=!0)},TransitionAnimationPlayer.prototype.getRealPlayer=function(){return this._player},TransitionAnimationPlayer.prototype._queueEvent=function(e,t){getOrSetAsInMap(this._queuedCallbacks,e,[]).push(t)},TransitionAnimationPlayer.prototype.onDone=function(e){this.queued&&this._queueEvent("done",e),this._player.onDone(e)},TransitionAnimationPlayer.prototype.onStart=function(e){this.queued&&this._queueEvent("start",e),this._player.onStart(e)},TransitionAnimationPlayer.prototype.onDestroy=function(e){this.queued&&this._queueEvent("destroy",e),this._player.onDestroy(e)},TransitionAnimationPlayer.prototype.init=function(){this._player.init()},TransitionAnimationPlayer.prototype.hasStarted=function(){return!this.queued&&this._player.hasStarted()},TransitionAnimationPlayer.prototype.play=function(){!this.queued&&this._player.play()},TransitionAnimationPlayer.prototype.pause=function(){!this.queued&&this._player.pause()},TransitionAnimationPlayer.prototype.restart=function(){!this.queued&&this._player.restart()},TransitionAnimationPlayer.prototype.finish=function(){this._player.finish()},TransitionAnimationPlayer.prototype.destroy=function(){this._destroyed=!0,this._player.destroy()},TransitionAnimationPlayer.prototype.reset=function(){!this.queued&&this._player.reset()},TransitionAnimationPlayer.prototype.setPosition=function(e){this.queued||this._player.setPosition(e)},TransitionAnimationPlayer.prototype.getPosition=function(){return this.queued?0:this._player.getPosition()},Object.defineProperty(TransitionAnimationPlayer.prototype,"totalTime",{get:function(){return this._player.totalTime},enumerable:!0,configurable:!0}),TransitionAnimationPlayer}();function isElementNode(e){return e&&1===e.nodeType}function cloakElement(e,t){var n=e.style.display;return e.style.display=null!=t?t:"none",n}function cloakAndComputeStyles(e,t,n,r){var i=[];t.forEach(function(e){return i.push(cloakElement(e))});var o=new Map,s=[];n.forEach(function(t,n){var i={};t.forEach(function(t){var o=i[t]=e.computeStyle(n,t,r);o&&0!=o.length||(n[J]=Y,s.push(n))}),o.set(n,i)});var a=0;return t.forEach(function(e){return cloakElement(e,i[a++])}),[o,s]}var ne="$$classes";function addClass(e,t){if(e.classList)e.classList.add(t);else{var n=e[ne];n||(n=e[ne]={}),n[t]=!0}}function removeClass(e,t){if(e.classList)e.classList.remove(t);else{var n=e[ne];n&&delete n[t]}}function removeNodesAfterAnimationDone(e,t,n){optimizeGroupPlayer(n).onDone(function(){return e.processLeaveNode(t)})}function replacePostStylesAsPre(e,t,n){var r=n.get(e);if(!r)return!1;var i=t.get(e);return i?r.forEach(function(e){return i.add(e)}):t.set(e,r),n.delete(e),!0} +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */var re=function(){function AnimationEngine(e,t){var n=this;this._triggerCache={},this.onRemovalComplete=function(e,t){},this._transitionEngine=new ee(e,t),this._timelineEngine=new W(e,t),this._transitionEngine.onRemovalComplete=function(e,t){return n.onRemovalComplete(e,t)}}return AnimationEngine.prototype.registerTrigger=function(e,t,n,r,i){var o=e+"-"+r,s=this._triggerCache[o];if(!s){var a=[],u=buildAnimationAst(i,a);if(a.length)throw new Error('The animation trigger "'+r+'" has failed to build due to the following errors:\n - '+a.join("\n - "));s=function buildTrigger(e,t){return new U(e,t)}(r,u),this._triggerCache[o]=s}this._transitionEngine.registerTrigger(t,r,s)},AnimationEngine.prototype.register=function(e,t){this._transitionEngine.register(e,t)},AnimationEngine.prototype.destroy=function(e,t){this._transitionEngine.destroy(e,t)},AnimationEngine.prototype.onInsert=function(e,t,n,r){this._transitionEngine.insertNode(e,t,n,r)},AnimationEngine.prototype.onRemove=function(e,t,n){this._transitionEngine.removeNode(e,t,n)},AnimationEngine.prototype.disableAnimations=function(e,t){this._transitionEngine.markElementAsDisabled(e,t)},AnimationEngine.prototype.process=function(e,t,n,r){if("@"==n.charAt(0)){var i=parseTimelineCommand(n),o=i[0],s=i[1],a=r;this._timelineEngine.command(o,t,s,a)}else this._transitionEngine.trigger(e,t,n,r)},AnimationEngine.prototype.listen=function(e,t,n,r,i){if("@"==n.charAt(0)){var o=parseTimelineCommand(n),s=o[0],a=o[1];return this._timelineEngine.listen(s,t,a,i)}return this._transitionEngine.listen(e,t,n,r,i)},AnimationEngine.prototype.flush=function(e){void 0===e&&(e=-1),this._transitionEngine.flush(e)},Object.defineProperty(AnimationEngine.prototype,"players",{get:function(){return this._transitionEngine.players.concat(this._timelineEngine.players)},enumerable:!0,configurable:!0}),AnimationEngine.prototype.whenRenderingDone=function(){return this._transitionEngine.whenRenderingDone()},AnimationEngine}(),ie=function(){function WebAnimationsPlayer(e,t,n,r){void 0===r&&(r=[]);var i=this;this.element=e,this.keyframes=t,this.options=n,this.previousPlayers=r,this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._initialized=!1,this._finished=!1,this._started=!1,this._destroyed=!1,this.time=0,this.parentPlayer=null,this.previousStyles={},this.currentSnapshot={},this._duration=n.duration,this._delay=n.delay||0,this.time=this._duration+this._delay,function allowPreviousPlayerStylesMerge(e,t){return 0===e||0===t}(this._duration,this._delay)&&r.forEach(function(e){var t=e.currentSnapshot;Object.keys(t).forEach(function(e){return i.previousStyles[e]=t[e]})})}return WebAnimationsPlayer.prototype._onFinish=function(){this._finished||(this._finished=!0,this._onDoneFns.forEach(function(e){return e()}),this._onDoneFns=[])},WebAnimationsPlayer.prototype.init=function(){this._buildPlayer(),this._preparePlayerBeforeStart()},WebAnimationsPlayer.prototype._buildPlayer=function(){var e=this;if(!this._initialized){this._initialized=!0;var t=this.keyframes.map(function(e){return copyStyles(e,!1)}),n=Object.keys(this.previousStyles);if(n.length){var r=t[0],i=[];if(n.forEach(function(t){r.hasOwnProperty(t)||i.push(t),r[t]=e.previousStyles[t]}),i.length)for(var o=this,s=function(){var e=t[a];i.forEach(function(t){e[t]=_computeStyle(o.element,t)})},a=1;a\n\n
    \n
    \n

    OpenHTF

    \n

    Hardware Testing Framework.

    \n
    \n
    \n\n
    \n \n \n\n \n \n
    \n'},566:function(e,t){e.exports='/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nh1 {\n color: #323232;\n font-size: 20px;\n margin: 0; }\n\nh2 {\n color: #949a9f;\n font-size: 12px;\n margin-left: 5px; }\n'},567:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(19),i=n(2),o=n(25),s=n(32),a=n(568),u=function(){function CoreModule(e){if(e)throw new Error("CoreModule is already loaded. Import it in the AppModule only")}return CoreModule=__decorate([i.NgModule({imports:[r.CommonModule],declarations:[a.FlashMessagesComponent,a.FlashMessageTypeToClass],providers:[o.ConfigService,s.FlashMessageService],exports:[r.CommonModule,a.FlashMessagesComponent]}),__param(0,i.Optional()),__param(0,i.SkipSelf()),__metadata("design:paramtypes",[CoreModule])],CoreModule)}();t.CoreModule=u},568:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=n(235),o=n(32),s=((u={})[i.FlashMessageType.error]="ng-flash-message-error",u[i.FlashMessageType.warn]="ng-flash-message-warn",u),a=function(){function FlashMessageTypeToClass(){}return FlashMessageTypeToClass.prototype.transform=function(e){return s[e]},FlashMessageTypeToClass=__decorate([r.Pipe({name:"flashMessageTypeToClass"})],FlashMessageTypeToClass)}();t.FlashMessageTypeToClass=a;var u,l=function(){function FlashMessagesComponent(e){this.flashMessage=e}return Object.defineProperty(FlashMessagesComponent.prototype,"message",{get:function(){if(this.flashMessage.messages.length>0)return this.flashMessage.messages[0]},enumerable:!0,configurable:!0}),FlashMessagesComponent.prototype.dismiss=function(){this.flashMessage.dismissEarly()},FlashMessagesComponent.prototype.onMouseEnter=function(e){this.flashMessage.cancelDismissal(),e.showTooltip=e.hasTooltip},FlashMessagesComponent.prototype.onMouseExit=function(e){this.flashMessage.startDismissal(),e.showTooltip=!1},FlashMessagesComponent=__decorate([r.Component({selector:"htf-flash-messages",template:n(569),styles:[n(570)]}),__metadata("design:paramtypes",[o.FlashMessageService])],FlashMessagesComponent)}();t.FlashMessagesComponent=l},569:function(e,t){e.exports='\x3c!--\n Copyright 2022 Google LLC\n\n Licensed under the Apache License, Version 2.0 (the "License");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an "AS IS" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n--\x3e\n\n
    \n \n \n X\n \n {{ message.content }}\n
    \n\n \x3c!-- Avoid whitespace since flash-message-tooltip uses white-space: pre --\x3e\n {{ message.tooltip }}\n\n'},570:function(e,t){e.exports='/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n@keyframes flash-message-enter {\n 0% {\n top: -32px; }\n 100% {\n top: 0; } }\n\n@keyframes flash-message-exit {\n 0% {\n top: 0; }\n 100% {\n top: -32px; } }\n\n.flash-message {\n animation: flash-message-enter 400ms forwards;\n border-bottom-left-radius: 10px;\n border-bottom-right-radius: 10px;\n height: 32px;\n left: 50%;\n line-height: 31px;\n min-width: 400px;\n opacity: .9;\n padding: 0 20px;\n position: fixed;\n text-align: center;\n top: 0;\n transform: translateX(-50%);\n white-space: nowrap;\n z-index: 2; }\n .flash-message.flash-message--has-tooltip {\n cursor: pointer; }\n .flash-message.flash-message--is-dismissed {\n animation: flash-message-exit 400ms forwards; }\n .flash-message.ng-flash-message-error {\n background: #ff5d4e;\n color: #fff; }\n .flash-message.ng-flash-message-warn {\n background: #ffe54d;\n color: #323232; }\n\n.flash-message-tooltip {\n background: rgba(0, 0, 0, 0.7);\n border-radius: 3px;\n color: #fff;\n font-size: 12px;\n left: 50%;\n line-height: initial;\n max-width: 500px;\n opacity: 0;\n padding: 10px;\n position: fixed;\n text-align: left;\n top: 40px;\n transform: translateX(-50%);\n transition: 200ms ease opacity;\n white-space: pre-wrap;\n word-wrap: break-word;\n z-index: 2; }\n .flash-message-tooltip.flash-message-tooltip--is-visible {\n opacity: 1; }\n\n.flash-message-dismissal-button {\n -webkit-appearance: initial;\n background: transparent;\n border: 0;\n padding: 0;\n border-radius: 50%;\n border: 1px solid #fff;\n color: inherit;\n display: inline-block;\n float: left;\n font-size: 11px;\n height: 18px;\n left: -6px;\n padding-left: 1px;\n position: relative;\n top: 6px;\n width: 18px; }\n .flash-message-dismissal-button:focus, .flash-message-dismissal-button:active {\n outline: none; }\n\n.flash-message.ng-flash-message-warn .flash-message-dismissal-button {\n border-color: #323232; }\n'},571:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=n(95),o=function(){function ElapsedTimePipe(e){this.time=e}return ElapsedTimePipe.prototype.transform=function(e,t){return void 0===t&&(t="%s"),t.replace("%s",this.getElapsedTimeString(e))},ElapsedTimePipe.prototype.getElapsedTimeString=function(e){if(null===this.time.last)return"0s";var t=e.endTimeMillis||this.time.last,n=Math.round((t-e.startTimeMillis)/1e3),r=Math.floor(n/60);if(0===r)return n+"s";var i=n-60*r,o=Math.floor(r/60);return 0===o?r+"m "+i+"s":o+"h "+(r-60*o)+"m "+i+"s"},ElapsedTimePipe=__decorate([r.Pipe({name:"elapsedTime",pure:!1}),__metadata("design:paramtypes",[i.TimeService])],ElapsedTimePipe)}();t.ElapsedTimePipe=o},572:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=function(){function FocusDirective(e){this.ref=e}return FocusDirective.prototype.ngOnChanges=function(){this.focusOn&&this.ref.nativeElement.focus()},__decorate([r.Input("htfFocus"),__metadata("design:type",Boolean)],FocusDirective.prototype,"focusOn",void 0),FocusDirective=__decorate([r.Directive({selector:"[htfFocus]"}),__metadata("design:paramtypes",[r.ElementRef])],FocusDirective)}();t.FocusDirective=i},573:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=function(){function GenealogyNodeComponent(){}return GenealogyNodeComponent.prototype.ngOnInit=function(){null===this.maxDepth?this.childMaxDepth=null:this.childMaxDepth=this.maxDepth-1,void 0===this.isRoot&&(this.isRoot=!0)},__decorate([r.Input(),__metadata("design:type",Boolean)],GenealogyNodeComponent.prototype,"isFirst",void 0),__decorate([r.Input(),__metadata("design:type",Boolean)],GenealogyNodeComponent.prototype,"isRoot",void 0),__decorate([r.Input(),__metadata("design:type",Object)],GenealogyNodeComponent.prototype,"node",void 0),__decorate([r.Input(),__metadata("design:type",Number)],GenealogyNodeComponent.prototype,"maxDepth",void 0),GenealogyNodeComponent=__decorate([r.Component({selector:"htf-genealogy-node",template:n(574),styles:[n(575)]})],GenealogyNodeComponent)}();t.GenealogyNodeComponent=i},574:function(e,t){e.exports='\x3c!--\n Copyright 2022 Google LLC\n\n Licensed under the Apache License, Version 2.0 (the "License");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an "AS IS" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n--\x3e\n\n
    \n {{ node.component.serial }}\n {{ node.component.instance_name }}\n ({{ node.component.part_number }})\n
    \n\n
      \n
    • \n \n \n
    • \n
    \n'},575:function(e,t){e.exports='/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n.component-info {\n border: 1px solid #323232;\n display: inline-block;\n margin-bottom: 10px;\n padding: 5px;\n position: relative; }\n\n.component-info:not(.is-root)::before {\n border-bottom: 1px solid #323232;\n border-left: 1px solid #323232;\n content: \'\';\n height: calc(100% + 11px);\n left: -21px;\n position: absolute;\n top: calc(-50% - 11px);\n width: 20px; }\n\n.component-info:not(.is-root).is-first::before {\n height: calc(50% + 11px);\n top: -11px; }\n\nul {\n list-style: none;\n margin: 0;\n padding: 0;\n padding-left: 40px; }\n\n.serial-number {\n font-weight: bold; }\n'},576:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=n(96),o=function(){function LogLevelToClassPipe(){}return LogLevelToClassPipe.prototype.transform=function(e){if(e)return e<=i.logLevels.debug?"ng-log-level-debug":e<=i.logLevels.info?"ng-log-level-info":e<=i.logLevels.warning?"ng-log-level-warning":e<=i.logLevels.error?"ng-log-level-error":"ng-log-level-critical"},LogLevelToClassPipe=__decorate([r.Pipe({name:"logLevelToClass"})],LogLevelToClassPipe)}();t.LogLevelToClassPipe=o},577:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=function(){function ObjectToSortedValuesPipe(){}return ObjectToSortedValuesPipe.prototype.transform=function(e,t){void 0===t&&(t=null);var n=[],r=Object.keys(e);null===t&&r.sort();for(var i=0,o=r;in[t]?1:0}),n},ObjectToSortedValuesPipe=__decorate([r.Pipe({name:"objectToSortedValues",pure:!1})],ObjectToSortedValuesPipe)}();t.ObjectToSortedValuesPipe=i},578:function(e,t){e.exports='\x3c!--\n Copyright 2022 Google LLC\n\n Licensed under the Apache License, Version 2.0 (the "License");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an "AS IS" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n--\x3e\n\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n'},579:function(e,t){e.exports='/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n.outer {\n height: 100%;\n width: 100%;\n background: #e5e5e5;\n border-radius: 3px;\n overflow: hidden; }\n .outer.is-complete {\n animation: htf-progress-bar-pulse 2s infinite; }\n\n.inner-wrapper {\n height: 100%;\n left: -10px;\n position: relative;\n width: calc(100% + 20px); }\n\n.inner {\n background: rgba(0, 119, 255, 0.8);\n height: 100%;\n transition: width .4s ease;\n transform: skewX(-30deg); }\n\n.stripes {\n transform: skewX(45deg);\n height: 100%;\n width: 100%;\n background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.08) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.08) 50%, rgba(255, 255, 255, 0.08) 75%, transparent 75%, transparent);\n background-size: 50px 50px;\n animation: move 4s linear infinite; }\n\n@keyframes htf-progress-bar-pulse {\n 0% {\n box-shadow: 0 0 0 0 rgba(0, 119, 255, 0.25); }\n 70% {\n box-shadow: 0 0 0 8px rgba(0, 119, 255, 0); }\n 100% {\n box-shadow: 0 0 0 0 rgba(0, 119, 255, 0); } }\n\n@keyframes move {\n 0% {\n background-position: 0 0; }\n 100% {\n background-position: 50px 50px; } }\n'},580:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r,i=n(2),o=n(98),s=n(66),a=n(49),u=n(21);!function(e){e[e.fail=0]="fail",e[e.online=1]="online",e[e.pass=2]="pass",e[e.pending=3]="pending",e[e.running=4]="running",e[e.unreachable=5]="unreachable",e[e.warning=6]="warning"}(r||(r={}));var l=((m={})[r.fail]="ng-status-fail",m[r.online]="ng-status-online",m[r.pass]="ng-status-pass",m[r.pending]="ng-status-pending",m[r.running]="ng-status-running",m[r.unreachable]="ng-status-unreachable",m[r.warning]="ng-status-warning",m),c=Symbol("unknownStatus"),p=((f={})[o.MeasurementStatus.unset]=r.pending,f[o.MeasurementStatus.pass]=r.pass,f[o.MeasurementStatus.fail]=r.fail,f[s.PhaseStatus.waiting]=r.pending,f[s.PhaseStatus.running]=r.running,f[s.PhaseStatus.pass]=r.pass,f[s.PhaseStatus.fail]=r.fail,f[s.PhaseStatus.skip]=r.unreachable,f[s.PhaseStatus.error]=r.warning,f[a.StationStatus.online]=r.online,f[a.StationStatus.unreachable]=r.unreachable,f[u.TestStatus.waiting]=r.pending,f[u.TestStatus.running]=r.running,f[u.TestStatus.pass]=r.pass,f[u.TestStatus.fail]=r.fail,f[u.TestStatus.error]=r.warning,f[u.TestStatus.timeout]=r.warning,f[u.TestStatus.aborted]=r.warning,f[c]=r.warning,f),d=((y={})[o.MeasurementStatus.unset]="Unset",y[o.MeasurementStatus.pass]="Pass",y[o.MeasurementStatus.fail]="Fail",y[s.PhaseStatus.waiting]="Waiting",y[s.PhaseStatus.running]="Running",y[s.PhaseStatus.pass]="Pass",y[s.PhaseStatus.fail]="Fail",y[s.PhaseStatus.skip]="Skip",y[s.PhaseStatus.error]="Error",y[a.StationStatus.online]="Online",y[a.StationStatus.unreachable]="Unreachable",y[u.TestStatus.waiting]="Waiting",y[u.TestStatus.running]="Running",y[u.TestStatus.pass]="Pass",y[u.TestStatus.fail]="Fail",y[u.TestStatus.error]="Error",y[u.TestStatus.timeout]="Timeout",y[u.TestStatus.aborted]="Aborted",y[c]="Unknown",y),h=function(){function StatusToClassPipe(){}return StatusToClassPipe.prototype.transform=function(e){return e in p?l[p[e]]:(console.error('Unknown status "'+e+'".'),l[p[c]])},StatusToClassPipe=__decorate([i.Pipe({name:"statusToClass"})],StatusToClassPipe)}();t.StatusToClassPipe=h;var m,f,y,g=function(){function StatusToTextPipe(){}return StatusToTextPipe.prototype.transform=function(e){return e in p?d[e]:(console.error('Unknown status "'+e+'".'),d[c])},StatusToTextPipe=__decorate([i.Pipe({name:"statusToText"})],StatusToTextPipe)}();t.StatusToTextPipe=g},581:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=function(e){return"—"},o=function(){function TimeAgoPipe(){}return TimeAgoPipe.prototype.transform=function(e){return i(e)},TimeAgoPipe=__decorate([r.Pipe({name:"timeAgo",pure:!1})],TimeAgoPipe)}();t.TimeAgoPipe=o},582:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=function(){function TooltipDirective(e){this.ref=e}return TooltipDirective.prototype.ngOnInit=function(){if(0!==this.text.length){this.tooltipElement=document.createElement("div"),this.tooltipElement.innerHTML=this.text,this.tooltipElement.classList.add("ng-tooltip");var e=this.ref.nativeElement;e.classList.add("ng-tooltip-host"),e.insertBefore(this.tooltipElement,e.firstChild)}},TooltipDirective.prototype.onMouseEnter=function(){this.text.length>0&&this.tooltipElement.classList.add("ng-tooltip--is-visible")},TooltipDirective.prototype.onMouseLeave=function(){this.text.length>0&&this.tooltipElement.classList.remove("ng-tooltip--is-visible")},__decorate([r.Input("htfTooltip"),__metadata("design:type",String)],TooltipDirective.prototype,"text",void 0),__decorate([r.HostListener("mouseenter"),__metadata("design:type",Function),__metadata("design:paramtypes",[]),__metadata("design:returntype",void 0)],TooltipDirective.prototype,"onMouseEnter",null),__decorate([r.HostListener("mouseleave"),__metadata("design:type",Function),__metadata("design:paramtypes",[]),__metadata("design:returntype",void 0)],TooltipDirective.prototype,"onMouseLeave",null),TooltipDirective=__decorate([r.Directive({selector:"[htfTooltip]"}),__metadata("design:paramtypes",[r.ElementRef])],TooltipDirective)}();t.TooltipDirective=i},583:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=function(){function TrimmedTextComponent(){this.expanded=!1}return Object.defineProperty(TrimmedTextComponent.prototype,"buttonLabel",{get:function(){return!this.content||this.content.length<=this.maxChars?null:this.expanded?"collapse":"expand"},enumerable:!0,configurable:!0}),Object.defineProperty(TrimmedTextComponent.prototype,"trimmedContent",{get:function(){return!this.content||this.expanded||this.content.length<=this.maxChars?this.content:this.content.slice(0,this.maxChars-"…".length)+"…"},enumerable:!0,configurable:!0}),TrimmedTextComponent.prototype.onClick=function(){this.expanded=!this.expanded},__decorate([r.Input(),__metadata("design:type",Number)],TrimmedTextComponent.prototype,"maxChars",void 0),__decorate([r.Input(),__metadata("design:type",String)],TrimmedTextComponent.prototype,"content",void 0),TrimmedTextComponent=__decorate([r.Component({selector:"htf-trimmed-text",template:'\n {{ trimmedContent }}\n \n'})],TrimmedTextComponent)}();t.TrimmedTextComponent=i},584:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(48),i=n(2),o=n(29),s=n(25),a=n(32),u=n(238),l=n(585),c="openhtf.plugs.user_input.UserInput",p=function(e){function UserInputPlugComponent(t,n,r,i){var o=e.call(this,c,t,n,r)||this;return o.ref=i,o}return __extends(UserInputPlugComponent,e),Object.defineProperty(UserInputPlugComponent.prototype,"error",{get:function(){return this.getPlugState().error},enumerable:!0,configurable:!0}),Object.defineProperty(UserInputPlugComponent.prototype,"prompt",{get:function(){var e=this.getPlugState();if(this.lastPromptId!==e.id){this.lastPromptId=e.id;var t=e.message.replace(/ /g,"
    ");this.lastPromptHtml=t,this.focusSelf(),e.default&&this.setResponse(e.default)}return this.lastPromptHtml},enumerable:!0,configurable:!0}),UserInputPlugComponent.prototype.hasTextInput=function(){return this.getPlugState()["text-input"]},UserInputPlugComponent.prototype.hasImage=function(){return this.getPlugState()["image-url"]},Object.defineProperty(UserInputPlugComponent.prototype,"Image_URL",{get:function(){return this.getPlugState()["image-url"]},enumerable:!0,configurable:!0}),UserInputPlugComponent.prototype.sendResponse=function(e){var t,n=this.getPlugState().id;this.hasTextInput()?(t=e.value,e.value=""):t="",this.respond("respond",[n,t])},UserInputPlugComponent.prototype.getPlugState=function(){return e.prototype.getPlugState.call(this)},UserInputPlugComponent.prototype.focusSelf=function(){var e=this.ref.nativeElement.querySelector("input");e&&e.focus()},UserInputPlugComponent.prototype.setResponse=function(e){var t=this.ref.nativeElement.querySelector("input");t&&(t.value=e)},UserInputPlugComponent=__decorate([i.Component({animations:[r.trigger("animateIn",u.washIn)],selector:"htf-user-input-plug",template:n(586),styles:[n(587)]}),__metadata("design:paramtypes",[s.ConfigService,o.Http,a.FlashMessageService,i.ElementRef])],UserInputPlugComponent)}(l.BasePlug);t.UserInputPlugComponent=p},585:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=n(29),o=n(21),s=n(26),a=n(26),u=function(){function BasePlug(e,t,n,r){this.className=e,this.config=t,this.http=n,this.flashMessage=r}return BasePlug.prototype.plugExists=function(){return Boolean(this.test&&this.getPlugState())},BasePlug.prototype.respond=function(e,t){var n=this,r=new i.Headers({"Content-Type":"application/json"}),o=new i.RequestOptions({headers:r}),u=a.getTestBaseUrl(this.config.dashboardEnabled,this.test)+"/plugs/"+this.plugName,l=JSON.stringify({method:e,args:t});this.http.post(u,l,o).subscribe(function(){},function(e){var t=s.messageFromErrorResponse(e);n.flashMessage.error("An error occurred trying to respond to plug "+n.plugName+".",t)})},BasePlug.prototype.getPlugState=function(){if(this.plugName&&this.test.plugStates[this.plugName])return this.test.plugStates[this.plugName];for(var e=0,t=Object.keys(this.test.plugStates);e\n\n \x3c!-- Wrap contents in an extra div for the background color animation. --\x3e\n
    \n\n
    \n
    Operator input
    \n
    \n\n
    \n\n user-input-image\n\n
    \n\n \n\n
    \n {{ error }}\n
    \n\n
    \n \n {{ hasTextInput() ? \'Submit\' : \'Okay\' }}\n \n
    \n\n
    \n\n
    \n\n'},587:function(e,t){e.exports='/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n:host ::ng-deep ol,\n:host ::ng-deep ul {\n padding-left: 25px;\n margin: 0; }\n\n.user-input-has-error {\n border-color: #ff5d4e; }\n .user-input-has-error:focus {\n border-color: #e71400; }\n\n.user-input-error-text {\n color: #ff5d4e;\n font-size: 12px; }\n'},588:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(19),i=n(2),o=n(236),s=n(94),a=n(239),u=n(589),l=n(592),c=n(595),p=n(99),d=n(599),h=n(602),m=n(604),f=n(607),y=n(243),g=n(610),v=function(){function StationsModule(){}return StationsModule=__decorate([i.NgModule({imports:[r.CommonModule,o.PlugsModule,s.SharedModule],declarations:[u.StationListComponent,l.AttachmentsComponent,c.HistoryComponent,d.LogsComponent,m.PhaseComponent,h.PhaseListComponent,f.StationComponent,g.TestSummaryComponent],providers:[a.DashboardService,p.HistoryService,y.StationService],exports:[r.CommonModule,f.StationComponent,u.StationListComponent]})],StationsModule)}();t.StationsModule=v},589:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=n(25),o=n(49),s=n(95),a=n(239),u=function(){return function StationSelectedEvent(e){this.station=e}}();t.StationSelectedEvent=u;var l=function(){function StationListComponent(e,t,n){var i=this;if(this.dashboard=e,this.time=t,this.onSelectStation=new r.EventEmitter,this.retryCountdown=this.time.observable.map(function(e){var t=i.dashboard.retryTimeMs-e;return"Retrying in "+Math.round(t/1e3)+"s."}),this.stations=e.stations,!n.dashboardEnabled)var o=e.messages.subscribe(function(){for(var e=0,t=Object.keys(i.stations);e0},enumerable:!0,configurable:!0}),Object.defineProperty(StationListComponent.prototype,"hasError",{get:function(){return this.dashboard.hasError},enumerable:!0,configurable:!0}),Object.defineProperty(StationListComponent.prototype,"isLoading",{get:function(){return this.dashboard.isSubscribing},enumerable:!0,configurable:!0}),Object.defineProperty(StationListComponent.prototype,"stationCount",{get:function(){return Object.keys(this.stations).length},enumerable:!0,configurable:!0}),StationListComponent.prototype.ngOnInit=function(){this.dashboard.subscribe(200,1.5,1500)},StationListComponent.prototype.ngOnDestroy=function(){this.dashboard.unsubscribe()},StationListComponent.prototype.isReachable=function(e){return e.status!==o.StationStatus.unreachable},StationListComponent.prototype.select=function(e){this.onSelectStation.emit(new u(e))},StationListComponent.prototype.manualRetry=function(){this.dashboard.retryNow()},StationListComponent.prototype.manualReload=function(){this.dashboard.refresh()},__decorate([r.Input(),__metadata("design:type",o.Station)],StationListComponent.prototype,"selectedStation",void 0),__decorate([r.Output(),__metadata("design:type",Object)],StationListComponent.prototype,"onSelectStation",void 0),StationListComponent=__decorate([r.Component({selector:"htf-station-list",template:n(590),styles:[n(591)]}),__metadata("design:paramtypes",[a.DashboardService,s.TimeService,i.ConfigService])],StationListComponent)}();t.StationListComponent=l},590:function(e,t){e.exports='\x3c!--\n Copyright 2022 Google LLC\n\n Licensed under the Apache License, Version 2.0 (the "License");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an "AS IS" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n--\x3e\n\n\n\n
      \n
    • \n \n\n
      \n
      \n {{ station.label }} ({{ station.status | statusToText }})\n
      \n
      \n
      \n {{ station.host }}:{{ station.port }}\n
      \n
      \n
      \n {{ station.testDescription }}\n
      \n\n \n
    • \n
    \n\n
    \n Could not connect to the server.\n {{ (retryCountdown | async) || \'Retrying in…\' }}\n \n Try again.\n \n
    \n'},591:function(e,t){e.exports='/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n.nav-bar {\n color: #949a9f;\n display: -ms-flexbox;\n display: flex;\n font-size: 12px;\n margin-bottom: 14px; }\n\n.station-list {\n list-style: none;\n margin: 0;\n padding: 0; }\n\n.station-list li {\n background: #fff;\n border-radius: 3px;\n border: 1px solid #ccc;\n margin-bottom: 14px; }\n\n.station-list li button {\n -webkit-appearance: initial;\n background: transparent;\n border: 0;\n padding: 0;\n box-shadow: inset 0 0 0 0 #07f;\n cursor: pointer;\n overflow: hidden;\n padding: 15px 20px;\n text-overflow: ellipsis;\n transition: 300ms ease box-shadow;\n white-space: nowrap;\n width: 100%; }\n .station-list li button:focus, .station-list li button:active {\n outline: none; }\n .station-list li button:hover, .station-list li button:active {\n box-shadow: inset 0 -3px 0 0 #07f; }\n .station-list li button:hover .station-label,\n .station-list li button:hover .station-description, .station-list li button:active .station-label,\n .station-list li button:active .station-description {\n color: #07f; }\n .station-list li button:focus .station-label,\n .station-list li button:focus .station-description {\n color: #07f; }\n .station-list li button.is-unreachable {\n color: #949a9f; }\n\n.station-label {\n font-size: 16px;\n transition: 300ms ease color; }\n\n.station-description {\n color: #949a9f;\n transition: 300ms ease color; }\n'},592:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=n(25),o=n(21),s=n(26),a=function(){function AttachmentsComponent(e){this.config=e,this.expanded=!1}return AttachmentsComponent.prototype.linkForAttachment=function(e){return null!==this.test.testId&&this.test.status===o.TestStatus.running?s.getTestBaseUrl(this.config.dashboardEnabled,this.test)+"/phases/"+e.phaseDescriptorId+"/attachments/"+e.name:null!==this.test.fileName?s.getStationBaseUrl(this.config.dashboardEnabled,this.test.station)+"/history/"+this.test.fileName+"/attachments/"+e.name+"?sha1="+e.sha1:null},AttachmentsComponent.prototype.toggleExpanded=function(){this.expanded=!this.expanded},__decorate([r.Input(),__metadata("design:type",o.TestState)],AttachmentsComponent.prototype,"test",void 0),AttachmentsComponent=__decorate([r.Component({selector:"htf-attachments",template:n(593),styles:[n(594)]}),__metadata("design:paramtypes",[i.ConfigService])],AttachmentsComponent)}();t.AttachmentsComponent=a},593:function(e,t){e.exports='\x3c!--\n Copyright 2022 Google LLC\n\n Licensed under the Apache License, Version 2.0 (the "License");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an "AS IS" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n--\x3e\n\n
    \n\n
    \n
    Attachments
    \n
    \n \n {{ expanded? \'Collapse\' : \'Expand\' }}\n \n
    \n\n \n There are no attachments yet.\n
    \n\n \n Expand to view\n {{ test.attachments.length }}\n {{ test.attachments.length === 1 ? \'attachment\' : \'attachments\' }}.\n \n\n
      \n \n {{ attachment.name }}\n \n {{ attachment.name }}\n \n  {{ attachment.mimeType }}\n \n From phase: {{ attachment.phaseName }}\n \n
    \n\n\n'},594:function(e,t){e.exports='/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nul {\n list-style: none;\n margin: 0;\n padding: 0; }\n\nli {\n -ms-flex-align: baseline;\n align-items: baseline;\n display: -ms-flexbox;\n display: flex;\n padding: 10px 15px;\n border-bottom: 1px solid #e5e5e5; }\n li:last-of-type {\n border-bottom: 0; }\n'},595:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(48),i=n(2),o=n(32),s=n(238),a=n(49),u=n(21),l=n(26),c=n(241),p=n(99),d=function(){return function TestSelectedEvent(e){this.test=e}}();t.TestSelectedEvent=d;var h=function(){function HistoryComponent(e,t){this.historyService=e,this.flashMessage=t,this.onSelectTest=new i.EventEmitter,this.collapsedNumTests=5,this.HistoryItemStatus=c.HistoryItemStatus,this.TestStatus=u.TestStatus,this.expanded=!1,this.hasError=!1,this.history=[],this.historyFromDiskEnabled=!1,this.isLoading=!1,this.lastClickedItem=null}return HistoryComponent.prototype.ngOnChanges=function(e){"station"in e&&this.station.status===a.StationStatus.online&&(this.loadHistory(),this.history=this.historyService.getHistory(this.station))},HistoryComponent.prototype.isSelected=function(e){return e.status===c.HistoryItemStatus.loaded&&e.testState===this.selectedTest},HistoryComponent.prototype.onClick=function(e){var t=this;if(this.lastClickedItem=e,e.status!==c.HistoryItemStatus.loading)return e.status===c.HistoryItemStatus.loaded?(this.selectTest(e.testState),void(e.testState===this.selectedTest&&null===e.testState.fileName&&this.historyService.retrieveFileName(this.station,e).catch(function(){t.historyFromDiskEnabled&&t.flashMessage.warn("Could not retrieve history from disk, so attachments are not available. You may try again later.")}))):void this.historyService.loadItem(this.station,e).then(function(n){t.lastClickedItem===e&&t.selectTest(n)}).catch(function(e){console.error(e.stack);var n=l.messageFromErrorResponse(e);t.flashMessage.error("Error loading history item.",n)})},HistoryComponent.prototype.toggleExpanded=function(){this.expanded=!this.expanded},HistoryComponent.prototype.loadHistory=function(){var e=this;this.hasError=!1,this.isLoading=!0,this.historyFromDiskEnabled=!1,this.historyService.refreshList(this.station).then(function(){e.isLoading=!1,e.historyFromDiskEnabled=!0}).catch(function(t){e.isLoading=!1,e.hasError=!0,e.historyFromDiskEnabled=404!==t.status})},HistoryComponent.prototype.selectTest=function(e){e===this.selectedTest?this.selectedTest=null:this.selectedTest=e,this.onSelectTest.emit(new d(this.selectedTest))},__decorate([i.Input(),__metadata("design:type",u.TestState)],HistoryComponent.prototype,"selectedTest",void 0),__decorate([i.Input(),__metadata("design:type",a.Station)],HistoryComponent.prototype,"station",void 0),__decorate([i.Output(),__metadata("design:type",Object)],HistoryComponent.prototype,"onSelectTest",void 0),HistoryComponent=__decorate([i.Component({animations:[r.trigger("animateIn",s.washAndExpandIn(48))],selector:"htf-history",template:n(597),styles:[n(598)]}),__metadata("design:paramtypes",[p.HistoryService,o.FlashMessageService])],HistoryComponent)}();t.HistoryComponent=h},596:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){return function Attachment(e){Object.assign(this,e)}}();t.Attachment=r},597:function(e,t){e.exports='\x3c!--\n Copyright 2022 Google LLC\n\n Licensed under the Apache License, Version 2.0 (the "License");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an "AS IS" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n--\x3e\n\n
    \n\n
    \n
    History
    \n
    \n \n {{ expanded? \'Collapse\' : \'Expand\' }}\n \n
    \n\n
      \n \n \n\n \x3c!-- Wrap list item contents in an extra div to enable a “slide down” animation effect. --\x3e\n
      \n
      \n
      \n {{ historyItem.dutId || historyItem.fileName }}\n
      \n
      \n Started {{ historyItem.startTimeMillis | timeAgo }}\n
      \n
      \n
      \n Click to load.\n
      \n
      \n Loading...\n
      \n
      \n An error occurred.\n
      \n \n {{ historyItem.testState.status | statusToText }}\n
      \n
    \n \n \n
  • \n Not showing {{ history.length - collapsedNumTests }} additional test\n {{ history.length - collapsedNumTests === 1? \'run\' : \'runs\'}}.\n
  • \n
  • \n There are no known completed test runs.\n
  • \n
  • \n Loading history from the server...\n
  • \n
  • \n History from disk is disabled.\n
  • \n
  • \n \n Could not retrieve test history from the server.\n \n
  • \n \n\n\n'},598:function(e,t){e.exports='/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n.history-item-container {\n cursor: pointer;\n overflow: hidden; }\n .history-item-container.is-selected {\n background: rgba(0, 119, 255, 0.2);\n border: 2px solid rgba(0, 119, 255, 0.8); }\n\n.history-item {\n height: 48px;\n line-height: 47px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none; }\n\n.history-item-name-container {\n -ms-flex-positive: 1;\n flex-grow: 1;\n line-height: initial;\n min-width: 0; }\n\n.history-item-name {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap; }\n\n.history-item-status {\n color: #949a9f;\n font-size: 12px;\n padding: 10px 0;\n text-align: center;\n margin-left: 15px;\n margin-right: -15px;\n min-width: 100px; }\n\n.status-text {\n color: #949a9f;\n font-size: 12px;\n padding: 10px 0;\n text-align: center; }\n'},599:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=n(96),o=n(21),s=function(){function LogsComponent(){this.expanded=!1}return Object.defineProperty(LogsComponent.prototype,"collapsedErrorCount",{get:function(){for(var e=0,t=0,n=this.test.logs;ti.logLevels.warning&&(e+=1)}return this.test.logs[0].level>i.logLevels.warning&&(e-=1),e},enumerable:!0,configurable:!0}),LogsComponent.prototype.toggleExpanded=function(){this.expanded=!this.expanded},__decorate([r.Input(),__metadata("design:type",o.TestState)],LogsComponent.prototype,"test",void 0),LogsComponent=__decorate([r.Component({selector:"htf-logs",template:n(600),styles:[n(601)]})],LogsComponent)}();t.LogsComponent=s},600:function(e,t){e.exports='\x3c!--\n Copyright 2022 Google LLC\n\n Licensed under the Apache License, Version 2.0 (the "License");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an "AS IS" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n--\x3e\n\n
    \n\n
    \n
    Logs
    \n
    \n \n {{ expanded? \'Collapse\' : \'Expand\' }}\n \n
    \n\n \n There are no logs yet.\n
    \n\n
      \n
    • \n\n
      \n {{ test.logs[0].timestampMillis | date:\'mediumTime\' }}\n
      {{ test.logs[0].loggerName }}
      \n
      \n\n
      {{ test.logs[0].message }}
      \n\n
    • \n \n Not showing {{ test.logs.length - 1 }} additional log\n {{ test.logs.length - 1 === 1? \'message\' : \'messages\'}}. \n \n {{ collapsedErrorCount }} additional\n {{ collapsedErrorCount === 1? \'error\' : \'errors\' }}.\n \n \n
    \n\n
      \n \n\n
      \n {{ log.timestampMillis | date:\'mediumTime\' }}\n
      {{ log.loggerName }}
      \n
      \n\n
      {{ log.message }}
      \n\n \n
    \n\n\n'},601:function(e,t){e.exports='/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nul {\n list-style: none;\n margin: 0;\n padding: 0;\n font-size: 12px; }\n\nli {\n display: -ms-flexbox;\n display: flex;\n padding: 10px 15px;\n border-bottom: 1px solid #e5e5e5; }\n li:last-of-type {\n border-bottom: 0; }\n\n.log-message {\n font-family: monospace, serif; }\n\n.timestamp-column {\n font-size: 10px;\n margin-right: 10px;\n max-width: 170px;\n min-width: 170px; }\n\n.logger-name {\n color: #949a9f; }\n\n.log-message-content {\n white-space: pre-wrap;\n word-break: break-all; }\n\n.ng-log-level-warning {\n background: rgba(255, 229, 77, 0.2); }\n\n.ng-log-level-error {\n background: rgba(255, 93, 78, 0.25); }\n\n.ng-log-level-critical {\n background: rgba(255, 93, 78, 0.45); }\n'},602:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=n(21),o=function(){function PhaseListComponent(){this.showMeasurements=!1}return PhaseListComponent.prototype.toggleMeasurements=function(){this.showMeasurements=!this.showMeasurements},__decorate([r.Input(),__metadata("design:type",i.TestState)],PhaseListComponent.prototype,"test",void 0),PhaseListComponent=__decorate([r.Component({selector:"htf-phase-list",template:n(603)})],PhaseListComponent)}();t.PhaseListComponent=o},603:function(e,t){e.exports='\x3c!--\n Copyright 2022 Google LLC\n\n Licensed under the Apache License, Version 2.0 (the "License");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an "AS IS" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n--\x3e\n\n
    \n\n
    \n
    Phases
    \n
    \n \n {{ showMeasurements ? \'Collapse\' : \'Expand\' }} all\n \n
    \n\n
      \n
    • \n \n \n
    • \n
    \n\n
    \n'},604:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=n(98),o=n(66),s=function(){function PhaseComponent(){this.MeasurementStatus=i.MeasurementStatus,this.PhaseStatus=o.PhaseStatus}return Object.defineProperty(PhaseComponent.prototype,"showMeasurements",{get:function(){return this.expand&&this.phase.measurements.length>0},enumerable:!0,configurable:!0}),__decorate([r.Input(),__metadata("design:type",o.Phase)],PhaseComponent.prototype,"phase",void 0),__decorate([r.Input(),__metadata("design:type",Boolean)],PhaseComponent.prototype,"expand",void 0),PhaseComponent=__decorate([r.Component({selector:"htf-phase",template:n(605),styles:[n(606)]})],PhaseComponent)}();t.PhaseComponent=s},605:function(e,t){e.exports='\x3c!--\n Copyright 2022 Google LLC\n\n Licensed under the Apache License, Version 2.0 (the "License");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an "AS IS" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n--\x3e\n\n
    \n \n {{ phase.name }}\n \n  {{ phase | elapsedTime:\'(%s)\' }}\n \n \n\n
    \n \n {{ phase.status | statusToText }}\n
    \n\n\n\n \n Measurement name\n Value\n Validators\n Result\n \n \n \n {{ measurement.name }}\n \n \n \n \n {{ measurement.validators }}\n \n Pass\n Fail\n \n \n \n \n\n'},606:function(e,t){e.exports='/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n.header-with-measurements {\n border-bottom: 1px solid #e5e5e5; }\n\n.measurement-list {\n border-collapse: separate;\n border-right: 100px solid rgba(50, 50, 50, 0.1);\n border-spacing: 0 3px;\n font-size: 12px;\n padding: 10px 15px;\n width: 100%; }\n .measurement-list.ng-status-fail {\n border-right-color: rgba(255, 93, 78, 0.1); }\n .measurement-list.ng-status-pass {\n border-right-color: rgba(0, 232, 157, 0.1); }\n .measurement-list.ng-status-running {\n border-right-color: rgba(0, 119, 255, 0.1); }\n .measurement-list thead {\n text-decoration: underline; }\n .measurement-list tbody {\n vertical-align: top; }\n .measurement-list td {\n padding: 0; }\n .measurement-list .measurement-column-name {\n width: 30%;\n padding-right: 5px; }\n .measurement-list .measurement-column-value {\n width: 30%;\n padding-right: 5px; }\n .measurement-list .measurement-column-validators {\n width: 30%;\n padding-right: 5px; }\n .measurement-list .measurement-column-result {\n text-align: right; }\n'},607:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=n(25),o=n(49),s=n(243),a=function(){return function StationDeselectedEvent(){}}();t.StationDeselectedEvent=a;var u=function(){function StationComponent(e,t){this.stationService=e,this.config=t,this.onDeselectStation=new r.EventEmitter,this.selectedTest=null}return Object.defineProperty(StationComponent.prototype,"activeTest",{get:function(){return null!==this.selectedTest?this.selectedTest:this.stationService.getTest(this.selectedStation)},enumerable:!0,configurable:!0}),Object.defineProperty(StationComponent.prototype,"dashboardEnabled",{get:function(){return this.config.dashboardEnabled},enumerable:!0,configurable:!0}),Object.defineProperty(StationComponent.prototype,"hasError",{get:function(){return this.stationService.hasError},enumerable:!0,configurable:!0}),Object.defineProperty(StationComponent.prototype,"isLoading",{get:function(){return this.stationService.isSubscribing},enumerable:!0,configurable:!0}),Object.defineProperty(StationComponent.prototype,"isOnline",{get:function(){return!(this.hasError||this.isLoading)},enumerable:!0,configurable:!0}),StationComponent.prototype.ngOnInit=function(){this.stationService.subscribe(this.selectedStation,200,1.08,1500)},StationComponent.prototype.ngOnDestroy=function(){this.stationService.unsubscribe()},StationComponent.prototype.goBack=function(){this.onDeselectStation.emit(new a)},StationComponent.prototype.manualReload=function(){this.stationService.refresh()},StationComponent.prototype.onSelectTest=function(e){this.selectedTest=e},__decorate([r.Input(),__metadata("design:type",o.Station)],StationComponent.prototype,"selectedStation",void 0),__decorate([r.Output(),__metadata("design:type",Object)],StationComponent.prototype,"onDeselectStation",void 0),StationComponent=__decorate([r.Component({selector:"htf-station",template:n(608),styles:[n(609)]}),__metadata("design:paramtypes",[s.StationService,i.ConfigService])],StationComponent)}();t.StationComponent=u},608:function(e,t){e.exports='\x3c!--\n Copyright 2022 Google LLC\n\n Licensed under the Apache License, Version 2.0 (the "License");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an "AS IS" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n--\x3e\n\n
    \n\n \n\n
    \n
    \n
    {{ selectedStation.label }}
    \n
    \n Status: Connected\n Status: Offline\n
    \n
    \n {{ selectedStation.testDescription }}\n
    \n {{ selectedStation.host }}:{{ selectedStation.port }}\n
    \n
    \n\n
    \n
    \n \n
    \n\n
    \n
    \n \n
    \n
    Displaying test record for a previous test run
    \n  ({{ selectedTest.startTimeMillis | timeAgo }})\n
    \n \n Return to current test\n \n
    \n
    \n\n \n \n \n \n
    \n\n
    \n \n \n
    \n
    \n\n
    \n\n\n'},609:function(e,t){e.exports='/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n.nav-bar {\n display: -ms-flexbox;\n display: flex;\n font-size: 12px;\n margin-bottom: 12px; }\n\n.status-bar {\n margin-bottom: 16px; }\n\n.status-bar-row {\n -ms-flex-align: baseline;\n align-items: baseline;\n display: -ms-flexbox;\n display: flex; }\n\n.past-test-warning {\n color: #ff5d4e; }\n .past-test-warning .htf-layout-widget-header {\n border: 0; }\n'},610:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=n(66),o=n(21),s=n(237),a=function(){function TestSummaryComponent(){}return TestSummaryComponent.prototype.ngOnChanges=function(e){"test"in e&&this.progressBar&&this.progressBar.reset()},Object.defineProperty(TestSummaryComponent.prototype,"completedPhaseCount",{get:function(){if(this.test.status===o.TestStatus.waiting)return 0;if(this.test.status===o.TestStatus.pass)return this.test.phases.length;for(var e=0,t=0,n=this.test.phases;t\n\n
    \n
    Current test: {{ test.name }}
    \n
    \n  {{ test | elapsedTime:\'(%s)\' }}\n
    \n
    \n \n {{ test.status | statusToText }}\n
    \n \n\n
    \n
    \n
    \n DUT: {{ test.dutId === null ? \'—\' : test.dutId }}\n
    \n
    \n
    \n Started: {{ test.startTimeMillis ? (test.startTimeMillis | date:\'medium\') : \'—\' }}\n
    \n
    \n
    \n\n
    \n
    \n Ran {{ completedPhaseCount }} of {{ this.test.phases.length }}\n {{ completedPhaseCount === 1? \'phase\' : \'phases\' }}\n
    \n \n
    \n\n
    \n \n
    \n\n\n\x3c!-- Empty state --\x3e\n
    \n
    \n
    Test: —
    \n
    \n
    \n
    \n No test information to display\n
    \n
    \n
    \n'},612:function(e,t){e.exports='/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n.htf-status-indicator {\n line-height: 53px; }\n\n.progress-bar-container {\n -ms-flex-align: center;\n align-items: center;\n display: -ms-flexbox;\n display: flex;\n font-size: 12px;\n white-space: nowrap; }\n\nhtf-progress-bar {\n display: block;\n -ms-flex-positive: 1;\n flex-grow: 1;\n height: 22px;\n margin-left: 15px;\n width: 100%; }\n\n.phase-container {\n padding: 0; }\n\n:host ::ng-deep htf-phase .phase-name {\n font-weight: bold; }\n :host ::ng-deep htf-phase .phase-name::before {\n content: \'Current phase: \'; }\n'},66:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.waiting=3]="waiting",e[e.running=4]="running",e[e.pass=5]="pass",e[e.fail=6]="fail",e[e.skip=7]="skip",e[e.error=8]="error"}(t.PhaseStatus||(t.PhaseStatus={}));var r=function(){return function Phase(e){Object.assign(this,e)}}();t.Phase=r},94:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(19),i=n(2),o=n(29),s=n(571),a=n(572),u=n(573),l=n(576),c=n(577),p=n(237),d=n(97),h=n(580),m=n(581),f=n(95),y=n(582),g=n(583),v=function(){function SharedModule(){}return SharedModule=__decorate([i.NgModule({imports:[r.CommonModule,o.HttpModule],declarations:[s.ElapsedTimePipe,a.FocusDirective,u.GenealogyNodeComponent,l.LogLevelToClassPipe,c.ObjectToSortedValuesPipe,p.ProgressBarComponent,h.StatusToClassPipe,h.StatusToTextPipe,m.TimeAgoPipe,g.TrimmedTextComponent,y.TooltipDirective],providers:[d.SockJsService,f.TimeService],exports:[r.CommonModule,s.ElapsedTimePipe,a.FocusDirective,u.GenealogyNodeComponent,l.LogLevelToClassPipe,c.ObjectToSortedValuesPipe,p.ProgressBarComponent,h.StatusToClassPipe,h.StatusToTextPipe,m.TimeAgoPipe,g.TrimmedTextComponent,y.TooltipDirective]})],SharedModule)}();t.SharedModule=v},95:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n(128),n(161),n(173);var r=n(2),i=n(0),o=100,s=function(){function TimeService(){var e=this;this.observable=i.Observable.interval(o).map(function(){return e.last=Date.now(),e.last}).publish(),this.last=null,this.observable.connect()}return TimeService=__decorate([r.Injectable(),__metadata("design:paramtypes",[])],TimeService)}();t.TimeService=s},96:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.logLevels={debug:10,info:20,warning:30,error:40,critical:50};var r=function(){return function LogRecord(e){Object.assign(this,e)}}();t.LogRecord=r},97:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=function(){function SockJsService(){this.sockJs=SockJS}return SockJsService=__decorate([r.Injectable()],SockJsService)}();t.SockJsService=i},98:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.unset=0]="unset",e[e.pass=1]="pass",e[e.fail=2]="fail"}(t.MeasurementStatus||(t.MeasurementStatus={}));var r=function(){return function Measurement(e){Object.assign(this,e)}}();t.Measurement=r},99:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(233),i=n(2),o=n(25),s=n(32),a=n(26),u=n(241),l=n(242),c=function(){function HistoryService(e,t,n){this.config=e,this.http=t,this.flashMessage=n,this.cache={},this.history={}}return HistoryService.prototype.getCache=function(e){return e.hostPort in this.cache||(this.cache[e.hostPort]={}),this.cache[e.hostPort]},HistoryService.prototype.getHistory=function(e){return e.hostPort in this.history||(this.history[e.hostPort]=[]),this.history[e.hostPort]},HistoryService.prototype.loadItem=function(e,t){var n=this;if(t.status===u.HistoryItemStatus.loading||t.status===u.HistoryItemStatus.loaded)throw new Error("Cannot load a history item that is loading or has loaded.");var r=a.getStationBaseUrl(this.config.dashboardEnabled,e)+"/history/"+t.fileName;return t.status=u.HistoryItemStatus.loading,this.http.get(r).toPromise().then(function(r){var i=t.fileName,o=l.makeTest(r,null,i,e);return n.getCache(e)[t.uniqueId]=o,t.status=u.HistoryItemStatus.loaded,t.testState=o,o}).catch(function(e){return t.status=u.HistoryItemStatus.error,Promise.reject(e)})},HistoryService.prototype.prependItemFromTestState=function(e,t){var n=new u.HistoryItem({drawAttention:!0,dutId:t.dutId,fileName:null,startTimeMillis:t.startTimeMillis,status:u.HistoryItemStatus.loaded,testState:t});this.getCache(e)[n.uniqueId]=t,this.getHistory(e).unshift(n)},HistoryService.prototype.refreshList=function(e){var t=this,n=a.getStationBaseUrl(this.config.dashboardEnabled,e)+"/history";return this.http.get(n).toPromise().then(function(n){var r=n.data;t.getHistory(e).length=0;var i,o=r.map(function(n){var r=new u.HistoryItem({drawAttention:!1,dutId:n.dut_id,fileName:n.file_name,startTimeMillis:n.start_time_millis,status:u.HistoryItemStatus.unloaded,testState:null});if(r.uniqueId in t.getCache(e)){var i=t.getCache(e)[r.uniqueId];r.status=u.HistoryItemStatus.loaded,r.testState=i}return r});a.sortByProperty(o,"startTimeMillis",!0),(i=t.history[e.hostPort]).push.apply(i,o)}).catch(function(e){if(404===e.status)console.info("History from disk appears to be disabled.");else{var n=a.messageFromHttpClientErrorResponse(e);t.flashMessage.error("HTTP request for history failed.",n)}return Promise.reject(e)})},HistoryService.prototype.retrieveFileName=function(e,t){if(t.status!==u.HistoryItemStatus.loaded)throw new Error("Cannot retrieve file name for a history item that is not loaded.");var n=a.getStationBaseUrl(this.config.dashboardEnabled,e)+"/history?dutId="+t.dutId+"&startTimeMillis="+t.startTimeMillis;return this.http.get(n).toPromise().then(function(e){var n=e.data;if(0===n.length)return Promise.reject(new Error("Server returned no history items."));if(n.length>1)return Promise.reject(new Error("Server returned more than one history item."));var r=n[0];t.fileName=r.file_name,t.testState.fileName=r.file_name})},HistoryService=__decorate([i.Injectable(),__metadata("design:paramtypes",[o.ConfigService,r.HttpClient,s.FlashMessageService])],HistoryService)}();t.HistoryService=c}},[559]); +//# sourceMappingURL=app.77df9acbfc40a7330df9.js.map \ No newline at end of file diff --git a/openhtf/output/web_gui/dist/js/app.77df9acbfc40a7330df9.js.map b/openhtf/output/web_gui/dist/js/app.77df9acbfc40a7330df9.js.map new file mode 100644 index 000000000..a5420ce96 --- /dev/null +++ b/openhtf/output/web_gui/dist/js/app.77df9acbfc40a7330df9.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./src/app/shared/models/test-state.model.ts","webpack:///./node_modules/@angular/common/@angular/common/http.es5.js","webpack:///./node_modules/@angular/forms/@angular/forms.es5.js","webpack:///./src/app/core/flash-message.model.ts","webpack:///./src/app/plugs/plugs.module.ts","webpack:///./src/app/shared/progress-bar.component.ts","webpack:///./src/app/shared/animations.ts","webpack:///./src/app/stations/station-list/dashboard.service.ts","webpack:///./src/app/shared/subscription.ts","webpack:///./src/app/stations/station/history-item.model.ts","webpack:///./src/app/stations/station/station-data.ts","webpack:///./src/app/stations/station/station.service.ts","webpack:///./src/app/core/config.service.ts","webpack:///./src/app/shared/util.ts","webpack:///./src/app/core/flash-message.service.ts","webpack:///./node_modules/@angular/animations/@angular/animations.es5.js","webpack:///./src/app/shared/models/station.model.ts","webpack:///./src/main.ts","webpack:///./src/app/app.module.ts","webpack:///./node_modules/@angular/platform-browser/@angular/platform-browser/animations.es5.js","webpack:///./node_modules/@angular/animations/@angular/animations/browser.es5.js","webpack:///./src/app/app.component.ts","webpack:///./src/app/app.component.html","webpack:///./src/app/app.component.scss","webpack:///./src/app/core/core.module.ts","webpack:///./src/app/core/flash-messages.component.ts","webpack:///./src/app/core/flash-messages.component.html","webpack:///./src/app/core/flash-messages.component.scss","webpack:///./src/app/shared/elapsed-time.pipe.ts","webpack:///./src/app/shared/focus.directive.ts","webpack:///./src/app/shared/genealogy-node.component.ts","webpack:///./src/app/shared/genealogy-node.component.html","webpack:///./src/app/shared/genealogy-node.component.scss","webpack:///./src/app/shared/log-level-to-class.pipe.ts","webpack:///./src/app/shared/object-to-sorted-values.pipe.ts","webpack:///./src/app/shared/progress-bar.component.html","webpack:///./src/app/shared/progress-bar.component.scss","webpack:///./src/app/shared/status-pipes.ts","webpack:///./src/app/shared/time-ago.pipe.ts","webpack:///./src/app/shared/tooltip.directive.ts","webpack:///./src/app/shared/trimmed-text.component.ts","webpack:///./src/app/plugs/user-input-plug.component.ts","webpack:///./src/app/plugs/base-plug.ts","webpack:///./src/app/plugs/user-input-plug.component.html","webpack:///./src/app/plugs/user-input-plug.component.scss","webpack:///./src/app/stations/stations.module.ts","webpack:///./src/app/stations/station-list/station-list.component.ts","webpack:///./src/app/stations/station-list/station-list.component.html","webpack:///./src/app/stations/station-list/station-list.component.scss","webpack:///./src/app/stations/station/attachments.component.ts","webpack:///./src/app/stations/station/attachments.component.html","webpack:///./src/app/stations/station/attachments.component.scss","webpack:///./src/app/stations/station/history.component.ts","webpack:///./src/app/shared/models/attachment.model.ts","webpack:///./src/app/stations/station/history.component.html","webpack:///./src/app/stations/station/history.component.scss","webpack:///./src/app/stations/station/logs.component.ts","webpack:///./src/app/stations/station/logs.component.html","webpack:///./src/app/stations/station/logs.component.scss","webpack:///./src/app/stations/station/phase-list.component.ts","webpack:///./src/app/stations/station/phase-list.component.html","webpack:///./src/app/stations/station/phase.component.ts","webpack:///./src/app/stations/station/phase.component.html","webpack:///./src/app/stations/station/phase.component.scss","webpack:///./src/app/stations/station/station.component.ts","webpack:///./src/app/stations/station/station.component.html","webpack:///./src/app/stations/station/station.component.scss","webpack:///./src/app/stations/station/test-summary.component.ts","webpack:///./src/app/stations/station/test-summary.component.html","webpack:///./src/app/stations/station/test-summary.component.scss","webpack:///./src/app/shared/models/phase.model.ts","webpack:///./src/app/shared/shared.module.ts","webpack:///./src/app/shared/time.service.ts","webpack:///./src/app/shared/models/log-record.model.ts","webpack:///./src/app/shared/sock-js.service.ts","webpack:///./src/app/shared/models/measurement.model.ts","webpack:///./src/app/stations/station/history.service.ts"],"names":["TestStatus","exports","PlugDescriptor","TestState","params","Object","assign","this","HttpHandler","prototype","handle","req","HttpBackend","HttpUrlEncodingCodec","encodeKey","k","standardEncoding","encodeValue","v","decodeKey","decodeURIComponent","decodeValue","encodeURIComponent","replace","HttpParams","options","updates","cloneFrom","encoder","map","fromString","paramParser","rawParams","codec","map$$1","Map","length","split","forEach","param","eqIdx","indexOf","_a","slice","key","val","list","get","push","set","has","init","res","getAll","keys","Array","from","append","value","clone","op","delete","toString","_this","eKey","join","update","concat","base","undefined","base_1","idx","splice","HttpHeaders","headers","normalizedNames","lazyUpdate","lazyInit","line","index","name","toLowerCase","trim","maybeSetNormalizedName","values","lcName","copyFrom","applyUpdate","other","apply","toDelete_1","existing","filter","fn","isArrayBuffer","ArrayBuffer","isBlob","Blob","isFormData","FormData","HttpRequest","method","url","third","fourth","body","reportProgress","withCredentials","responseType","toUpperCase","mightHaveBody","urlWithParams","qIdx","sep","serializeBody","isArray","JSON","stringify","detectContentTypeHeader","type","setHeaders","reduce","setParams","HttpEventType","Sent","UploadProgress","ResponseHeader","DownloadProgress","Response","User","HttpResponseBase","defaultStatus","defaultStatusText","status","statusText","ok","HttpHeaderResponse","_super","call","__WEBPACK_IMPORTED_MODULE_0_tslib__","HttpResponse","HttpErrorResponse","message","error","addBody","observe","HttpClient","handler","request","first","events$","__WEBPACK_IMPORTED_MODULE_3_rxjs_operator_concatMap__","__WEBPACK_IMPORTED_MODULE_2_rxjs_observable_of__","res$","__WEBPACK_IMPORTED_MODULE_4_rxjs_operator_filter__","event","__WEBPACK_IMPORTED_MODULE_5_rxjs_operator_map__","Error","head","jsonp","callbackParam","patch","post","put","decorators","__WEBPACK_IMPORTED_MODULE_1__angular_core__","ctorParameters","HttpInterceptorHandler","next","interceptor","intercept","HTTP_INTERCEPTORS","NoopInterceptor","nextRequestId","JsonpCallbackContext","JsonpClientBackend","callbackMap","document","nextCallback","__WEBPACK_IMPORTED_MODULE_7_rxjs_Observable__","observer","callback","node","createElement","src","finished","cancelled","data","cleanup","parentNode","removeChild","onLoad","complete","onError","addEventListener","appendChild","removeEventListener","args","__WEBPACK_IMPORTED_MODULE_6__angular_common__","JsonpInterceptor","XSSI_PREFIX","XhrFactory","build","BrowserXhr","XMLHttpRequest","HttpXhrBackend","xhrFactory","xhr","open","setRequestHeader","detectedType","reqBody","headerResponse","partialFromXhr","getAllResponseHeaders","getResponseUrl","responseURL","test","getResponseHeader","response","responseText","parse","text","sentHeaders","onDownProgress","progressEvent","loaded","lengthComputable","total","partialText","onUpProgress","progress","upload","send","abort","XSRF_COOKIE_NAME","XSRF_HEADER_NAME","HttpXsrfTokenExtractor","getToken","HttpXsrfCookieExtractor","doc","platform","cookieName","lastCookieString","lastToken","parseCount","cookieString","cookie","HttpXsrfInterceptor","tokenService","headerName","lcUrl","startsWith","token","interceptingHandler","backend","interceptors","reduceRight","jsonpCallbackContext","window","HttpClientXsrfModule","disable","ngModule","providers","provide","useClass","withOptions","useValue","useExisting","multi","HttpClientModule","imports","useFactory","deps","HttpClientJsonpModule","AbstractControlDirective","control","defineProperty","enumerable","configurable","valid","invalid","pending","disabled","enabled","errors","pristine","dirty","touched","untouched","statusChanges","valueChanges","reset","hasError","errorCode","path","getError","ControlContainer","arguments","isEmptyInputValue","NG_VALIDATORS","NG_ASYNC_VALIDATORS","EMAIL_REGEXP","Validators","min","parseFloat","isNaN","actual","max","required","requiredTrue","email","minLength","minlength","requiredLength","actualLength","maxLength","maxlength","pattern","regexStr","regex","RegExp","requiredPattern","actualValue","nullValidator","c","compose","validators","presentValidators","isPresent","_mergeErrors","_executeValidators","composeAsync","observables","_executeAsyncValidators","toObservable","__WEBPACK_IMPORTED_MODULE_4_rxjs_operator_map__","__WEBPACK_IMPORTED_MODULE_2_rxjs_observable_forkJoin__","o","r","obs","__WEBPACK_IMPORTED_MODULE_3_rxjs_observable_fromPromise__","arrayOfErrors","NG_VALUE_ACCESSOR","CHECKBOX_VALUE_ACCESSOR","CheckboxControlValueAccessor","_renderer","_elementRef","onChange","_","onTouched","writeValue","setProperty","nativeElement","registerOnChange","registerOnTouched","setDisabledState","isDisabled","selector","host","(change)","(blur)","DEFAULT_VALUE_ACCESSOR","DefaultValueAccessor","COMPOSITION_BUFFER_MODE","_compositionMode","_composing","_isAndroid","userAgent","__WEBPACK_IMPORTED_MODULE_5__angular_platform_browser__","getUserAgent","normalizedValue","_handleInput","_compositionStart","_compositionEnd","normalizeValidator","validator","validate","normalizeAsyncValidator","(input)","(compositionstart)","(compositionend)","NUMBER_VALUE_ACCESSOR","NumberValueAccessor","unimplemented","NgControl","_parent","valueAccessor","_rawValidators","_rawAsyncValidators","viewToModelUpdate","newValue","RADIO_VALUE_ACCESSOR","RadioControlValueAccessor","RadioControlRegistry","_accessors","add","accessor","remove","i","select","_isSameGroup","fireUncheck","controlPair","_control","_registry","_injector","ngOnInit","_checkName","ngOnDestroy","_state","_fn","formControlName","_throwNameError","propDecorators","RANGE_VALUE_ACCESSOR","RangeValueAccessor","SELECT_VALUE_ACCESSOR","SelectControlValueAccessor","_buildValueString","id","_optionMap","_idCounter","_compareWith","_getOptionId","valueString","_getOptionValue","_registerOption","_i","_extractId","compareWith","NgSelectOption","_element","_select","_setElementValue","ngValue","SELECT_MULTIPLE_VALUE_ACCESSOR","SelectMultipleControlValueAccessor","_buildValueString$1","optionSelectedStateSetter","ids_1","opt","_setSelected","selected","hasOwnProperty","selectedOptions","item","_value","_extractId$1","NgSelectMultipleOption","controlPath","parent","setUpControl","dir","_throwError","asyncValidator","markAsDirty","setValue","emitModelToViewChange","markAsTouched","emitModelEvent","registerOnDisabledChange","registerOnValidatorChange","updateValueAndValidity","setUpFormContainer","_noControlError","messageEnd","composeValidators","composeAsyncValidators","isPropertyUpdated","changes","viewModel","change","isFirstChange","currentValue","BUILTIN_ACCESSORS","selectValueAccessor","valueAccessors","defaultAccessor","builtinAccessor","customAccessor","constructor","isBuiltInAccessor","some","a","AbstractFormGroupDirective","_checkParentType","addFormGroup","formDirective","removeFormGroup","getFormGroup","_validators","_asyncValidators","AbstractControlStatus","cd","_cd","ngControlStatusHost","[class.ng-untouched]","[class.ng-touched]","[class.ng-pristine]","[class.ng-dirty]","[class.ng-valid]","[class.ng-invalid]","[class.ng-pending]","NgControlStatus","NgControlStatusGroup","coerceToValidator","coerceToAsyncValidator","AbstractControl","_onCollectionChange","_pristine","_touched","_onDisabledChange","_status","_errors","_valueChanges","_statusChanges","setValidators","newValidator","setAsyncValidators","clearValidators","clearAsyncValidators","opts","onlySelf","markAsUntouched","_forEachChild","_updateTouched","markAsPristine","_updatePristine","markAsPending","_updateValue","emitEvent","emit","_updateAncestors","changeFn","enable","setParent","patchValue","_setInitialStatus","_cancelExistingSubscription","_runValidator","_calculateStatus","_runAsyncValidator","_updateTreeValidity","ctrl","_allControlsDisabled","_asyncValidationSubscription","subscribe","setErrors","unsubscribe","_updateControlsErrors","_find","delimiter","FormGroup","controls","FormArray","at","x","_initObservables","_anyControlsHaveStatus","cb","_anyControls","condition","_anyControlsDirty","_anyControlsTouched","_isBoxedValue","formState","_registerOnCollectionChange","FormControl","_onChange","_applyFormState","emitViewToModelChange","_clearChangeFns","_setUpControls","registerControl","addControl","removeControl","setControl","contains","controlName","_checkAllValuesPresent","_throwIfControlMissing","getRawValue","_reduceChildren","acc","_reduceValue","initValue","_registerControl","insert","removeAt","formDirectiveProvider","NgForm","resolvedPromise","Promise","resolve","asyncValidators","_submitted","ngSubmit","form","then","container","_findContainer","getControl","group","updateModel","onSubmit","$event","onReset","resetForm","pop","(submit)","(reset)","outputs","exportAs","FormErrorExamples","TemplateDrivenErrors","modelParentException","formGroupNameException","missingNameException","modelGroupParentException","modelGroupProvider","NgModelGroup","formControlBinding","NgModel","resolvedPromise$1","_registered","ngOnChanges","_checkForErrors","_setUpControl","_updateDisabled","model","_isStandalone","_setUpStandalone","standalone","disabledValue","ReactiveErrors","controlParentException","ngModelGroupException","missingFormException","groupParentException","arrayParentException","disabledAttrWarning","console","warn","formControlBinding$1","FormControlDirective","_isControlChanged","formDirectiveProvider$1","FormGroupDirective","directives","_checkFormPresent","_updateValidators","_updateDomValue","_updateRegistrations","el","addFormArray","removeFormArray","getFormArray","newCtrl","cleanUpControl","_oldForm","sync","async","formGroupNameProvider","FormGroupName","_hasInvalidParent","formArrayNameProvider","FormArrayName","controlNameBinding","FormControlName","_added","REQUIRED_VALIDATOR","RequiredValidator","CHECKBOX_REQUIRED_VALIDATOR","CheckboxRequiredValidator","_required","[attr.required]","EMAIL_VALIDATOR","EmailValidator","_enabled","MIN_LENGTH_VALIDATOR","MinLengthValidator","_createValidator","_validator","parseInt","[attr.minlength]","MAX_LENGTH_VALIDATOR","MaxLengthValidator","[attr.maxlength]","PATTERN_VALIDATOR","PatternValidator","[attr.pattern]","FormBuilder","controlsConfig","extra","_reduceControls","array","_createControl","controlConfig","VERSION","NgNoValidate","novalidate","SHARED_FORM_DIRECTIVES","TEMPLATE_DRIVEN_DIRECTIVES","REACTIVE_DRIVEN_DIRECTIVES","InternalFormsSharedModule","declarations","FormsModule","ReactiveFormsModule","messageCount","FlashMessageType","FlashMessage","content","tooltip","isDismissed","hasTooltip","Boolean","showTooltip","common_1","__webpack_require__","core_1","forms_1","http_1","shared_module_1","user_input_plug_component_1","PlugsModule","__decorate","NgModule","CommonModule","HttpModule","SharedModule","UserInputPlugComponent","ProgressBarComponent","isReset","width","transition","Math","Input","Component","template","styles","animations_1","washIn","state","style","background","animate","washAndExpandIn","maxHeight","max-height","station_model_1","sock_js_service_1","subscription_1","util_1","dashboardUrl","devHost","dashboardStatusMap","UNREACHABLE","StationStatus","unreachable","ONLINE","online","DashboardService","sockJsService","stations","messages","DashboardService_1","validateResponse","newStations","parseResponse","applyResponse","__extends","retryMs","retryBackoff","retryMax","Number","MAX_VALUE","subscribeToUrl","hostPort","rawStation","Station","cell","label","getStationLabel","port","stationId","station_id","testDescription","test_description","testName","test_name","newStation","_b","_c","urlHost","Injectable","SockJsService","Subscription","SubscriptionState","Subject_1","Subject","retryTimeMs","currentRetryMs","retryTimeoutId","sock","unsubscribed","failed","waiting","subscribing","refresh","subscribeWithSavedParams","retryNow","cancelTimeout","debug","close","clearTimeout","sockJs","onopen","subscribed","onclose","Date","now","setTimeout","onmessage","HistoryItemStatus","HistoryItem","dutId","startTimeMillis","fileName","attachment_model_1","log_record_model_1","measurement_model_1","phase_model_1","test_state_model_1","testStateStatusCompleted","testStateStatusMap","WAITING_FOR_TEST_START","RUNNING","running","testRecordOutcomeMap","PASS","pass","FAIL","fail","ERROR","TIMEOUT","timeout","ABORTED","aborted","measurementStatusMap","MeasurementStatus","UNSET","unset","PARTIALLY_SET","phaseRecordOutcomeMap","PhaseStatus","SKIP","skip","makePhase","phase","measurements","attachments","rawAttachment","Attachment","mimeType","mimetype","phaseDescriptorId","descriptor_id","phaseName","sha1","sortByProperty","rawMeasuredValue","measured_value","measuredValue","Measurement","outcome","Phase","descriptorId","endTimeMillis","end_time_millis","start_time_millis","makeLog","log","LogRecord","level","lineNumber","lineno","loggerName","logger_name","source","timestampMillis","timestamp_millis","makeTest","rawState","testId","station","logRecords","test_record","log_records","reverse","logs","phases","running_phase_state","accumulator","dut_id","metadata","plugDescriptors","plugs","plug_descriptors","plugStates","plug_states","makePhaseFromDescriptor","descriptor","measurement","Observable_1","config_service_1","flash_message_service_1","history_service_1","station_data_1","StationService","config","flashMessage","historyService","http","phaseDescriptorPromise","testsById","testsByStation","messagesSubscription","mergeMap","StationService_1","applyPhaseDescriptors","stationUrl","getStationBaseUrl","dashboardEnabled","getTest","testState","test_uid","prependItemFromTestState","getOrRequestPhaseDescriptors","descriptors","numExecutedPhases","lastExecutedPhaseIndex","lastExecutedDescriptorIndex","lastExecuted","descriptors_1","catch","Observable","of","getTestBaseUrl","toPromise","json","messageFromErrorResponse","reject","fromPromise","oldTest","ConfigService","FlashMessageService","HistoryService","Http","defaultConfig","server_type","history_from_disk_enabled","initialize","extraKeys","extraKeys_1","location","localhostAddress","errorBody","e","_body","messageFromHttpClientErrorResponse","ErrorEvent","property","sort","b","flash_message_model_1","dismissalJob","cancelDismissal","dismissEarly","dismiss","startDismissal","addMessage","shift","dismissalDurationMs","d","__webpack_exports__","ɵPRE_STYLE","AnimationBuilder","animation","AnimationFactory","create","element","AUTO_STYLE","trigger","definitions","timings","steps","sequence","tokens","offset","keyframes","stateChangeExpr","expr","animateChild","useAnimation","query","stagger","scheduleMicroTask","NoopAnimationPlayer","_onDoneFns","_onStartFns","_onDestroyFns","_started","_destroyed","_finished","parentPlayer","totalTime","_onFinish","onStart","onDone","onDestroy","hasStarted","play","triggerMicrotask","_onStart","pause","restart","finish","destroy","setPosition","p","getPosition","AnimationGroupPlayer","_players","doneCount","destroyCount","startCount","player","_onDestroy","time","timeAtPosition","position","beforeDestroy","players","platform_browser_dynamic_1","app_module_1","main","platformBrowserDynamic","bootstrapModule","AppModule","MODULE_REF","enableProdMode","readyState","platform_browser_1","http_2","app_component_1","core_module_1","plugs_module_1","stations_module_1","hmr_1","appRef","hmrOnInit","store","hmrOnDestroy","cmpLocation","components","cmp","disposeOldHosts","createNewHosts","removeNgStyles","hmrAfterDestroy","BrowserAnimationsModule","BrowserModule","CoreModule","StationsModule","AppComponent","bootstrap","ApplicationRef","BrowserAnimationBuilder","rootRenderer","_nextAnimationId","typeData","encapsulation","None","createRenderer","entry","__WEBPACK_IMPORTED_MODULE_3__angular_animations__","issueAnimationCommand","BrowserAnimationFactory","__WEBPACK_IMPORTED_MODULE_2__angular_platform_browser__","_id","RendererAnimationPlayer","_command","_listen","eventName","listen","command","renderer","AnimationRendererFactory","delegate","engine","_zone","_currentId","_microtaskId","_animationCallbacksBuffer","_rendererCache","_cdRecurDepth","onRemovalComplete","hostElement","BaseAnimationRenderer","componentId","namespaceId","register","registerTrigger","AnimationRenderer","begin","_scheduleCountTask","Zone","current","scheduleListenerCallback","count","run","tuple","end","runOutsideAngular","flush","whenRenderingDone","__WEBPACK_IMPORTED_MODULE_4__angular_animations_browser__","destroyNode","n","namespace","createComment","createText","newChild","onInsert","insertBefore","refChild","oldChild","onRemove","selectRootElement","selectorOrNode","nextSibling","setAttribute","removeAttribute","addClass","removeClass","setStyle","flags","removeStyle","charAt","disableAnimations","target","factory","process","substr","resolveElementFromTarget","parseTriggerCallbackName","triggerName","dotIndex","substring","countId","InjectableAnimationEngine","driver","normalizer","instantiateSupportedAnimationDriver","instantiateDefaultStyleNormalizer","instantiateRendererFactory","zone","SHARED_ANIMATION_PROVIDERS","BROWSER_ANIMATIONS_PROVIDERS","BROWSER_NOOP_ANIMATIONS_PROVIDERS","NoopAnimationsModule","optimizeGroupPlayer","__WEBPACK_IMPORTED_MODULE_1__angular_animations__","normalizeKeyframes","preStyles","postStyles","normalizedKeyframes","previousOffset","previousKeyframe","kf","isSameOffset","normalizedKeyframe","prop","normalizedProp","normalizePropertyName","normalizeStyleValue","listenOnPlayer","copyAnimationEvent","makeAnimationEvent","fromState","toState","getOrSetAsInMap","defaultValue","parseTimelineCommand","separatorPos","_contains","elm1","elm2","_matches","_query","Element","matches","proto","fn_1","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","results","querySelectorAll","elm","querySelector","matchesElement","containsElement","invokeQuery","NoopAnimationDriver","computeStyle","duration","delay","easing","previousPlayers","AnimationDriver","NOOP","ONE_SECOND","ENTER_SELECTOR","LEAVE_SELECTOR","NG_TRIGGER_SELECTOR","NG_ANIMATING_SELECTOR","resolveTimingValue","match","_convertTimeValueToMS","unit","resolveTiming","allowNegativeValues","parseTimeExpression","exp","delayMatch","floor","easingVal","containsErrors","startIndex","copyObj","obj","destination","normalizeStyles","normalizedStyles","copyStyles","readPrototype","setStyles","camelProp","dashCaseToCamelCase","eraseStyles","normalizeAnimationEntry","PARAM_REGEX","SUBSTITUTION_EXPR_START","extractStyleParams","exec","lastIndex","interpolateParams","original","str","varName","localVal","iteratorToArray","iterator","arr","done","DASH_CASE_REGEXP","input","m","visitDslNode","visitor","context","visitTrigger","visitState","visitTransition","visitSequence","visitGroup","visitAnimate","visitKeyframes","visitStyle","visitReference","visitAnimateChild","visitAnimateRef","visitQuery","visitStagger","ANY_STATE","parseTransitionExpr","transitionValue","expressions","parseInnerTransitionStr","eventStr","parseAnimationAlias","alias","separator","makeLambdaFromStates","isFullAnyStateExpr","TRUE_BOOLEAN_VALUES","Set","FALSE_BOOLEAN_VALUES","lhs","rhs","LHS_MATCH_BOOLEAN","RHS_MATCH_BOOLEAN","lhsMatch","rhsMatch","SELF_TOKEN","SELF_TOKEN_REGEX","buildAnimationAst","AnimationAstBuilderVisitor","LEAVE_TOKEN_REGEX","ENTER_TOKEN_REGEX","AnimationAstBuilderContext","_resetContextStyleTimingState","currentQuerySelector","collectedStyles","currentTime","queryCount","depCount","states","transitions","def","stateDef_1","styleAst","astParams","containsDynamicStyles","missingSubs_1","params_1","isObject","stylesObj_1","sub","size","missingSubsArr","matchers","normalizeAnimationOptions","s","furthestTime","step","innerAst","timingAst","constructTimingAst","makeTimingAst","strValue","ast","dynamic","currentAnimateTimings","styleMetadata","styleMetadata_1","isEmpty","newStyleData","_styleAst","isEmptyStep","_makeStyleAst","_validateStyleAst","styleTuple","collectedEasing","styleData","styleMap","endTime","startTime","collectedEntry","updateCollectedStyle","validateStyleParams","totalKeyframesWithOffsets","offsets","offsetsOutOfOrder","keyframesOutOfRange","style$$1","offsetVal","consumeOffset","generatedOffset","limit","animateDuration","durationUpToThisFrame","parentSelector","currentQuery","normalizeSelector","hasAmpersand","find","includeSelf","optional","originalSelector","currentTransition","normalizeParams","createTimelineInstruction","preStyleProps","postStyleProps","subTimeline","ElementInstructionMap","_map","consume","instructions","existingInstructions","clear","buildAnimationTimelines","rootElement","startingStyles","finalStyles","subInstructions","AnimationTimelineBuilderVisitor","buildKeyframes","AnimationTimelineContext","currentTimeline","timelines","timeline","containsAnimation","tl","allowOnlyTimelineStyles","elementInstructions","innerContext","createSubContext","_visitSubInstructions","transformIntoNewTimeline","previousNode","instruction","instructionTimings","appendInstructionToTimeline","updateOptions","subContextCount","ctx","snapshotCurrentStyles","DEFAULT_NOOP_PREVIOUS_NODE","delayNextStep","applyStylesToKeyframe","innerTimelines","mergeTimelineCollectedStyles","_visitTiming","incrementTime","getCurrentStyleProperties","forwardFrame","applyEmptyStep","innerTimeline","forwardTime","elms","currentQueryTotal","sameElementTimeline","currentQueryIndex","parentContext","abs","maxTime","currentStaggerTime","startingTime","_driver","initialTimeline","TimelineBuilder","skipIfExists","newOptions","optionsToUpdate","newParams","paramsToUpdate_1","_copyOptions","oldParams_1","params_2","newTime","fork","updatedTimings","builder","SubTimelineBuilder","stretchStartingKeyframe","elements","_elementTimelineStylesLookup","_previousKeyframe","_currentKeyframe","_keyframes","_styleSummary","_pendingStyles","_backFill","_currentEmptyStepKeyframe","_localTimelineStyles","_globalTimelineStyles","_loadKeyframe","hasPreStyleStep","_updateStyle","flattenStyles","allStyles","allProperties","props","getFinalKeyframe","properties","details0","details1","finalKeyframes","keyframe","finalKeyframe","preProps","postProps","kf0","kf1","_stretchStartingKeyframe","newKeyframes","startingGap","newFirstKeyframe","oldFirstKeyframe","roundOffset","timeAtKeyframe","decimalPoints","mult","pow","round","Animation","errorMessage","_animationAst","buildTimelines","destinationStyles","start","dest","result","AnimationStyleNormalizer","WebAnimationsStyleNormalizer","NoopAnimationStyleNormalizer","propertyName","userProvidedProperty","normalizedProperty","strVal","DIMENSIONAL_PROP_MAP","valAndSuffixMatch","makeBooleanMap","createTransitionInstruction","isRemovalTransition","fromStyles","toStyles","queriedElements","EMPTY_OBJECT","AnimationTransitionFactory","_triggerName","_stateStyles","currentState","nextState","oneOrMoreTransitionsMatch","matchFns","buildStyles","stateName","backupStateStyler","stateStyler","backupStyles","currentOptions","nextOptions","transitionAnimationParams","currentAnimationParams","currentStateStyles","nextAnimationParams","nextStateStyles","preStyleMap","postStyleMap","isRemoval","animationOptions","queriedElementsList","AnimationStateStyles","defaultParams","combinedParams","styleObj_1","AnimationTrigger","transitionFactories","balanceProperties","fallbackTransition","createFallbackTransition","matchTransition","f","matchStyles","key1","key2","EMPTY_INSTRUCTION_MAP","TimelineAnimationEngine","_normalizer","_animations","_playersById","_buildPlayer","autoStylesMap","inst","_getPlayer","baseEvent","EMPTY_PLAYER_ARRAY","NULL_REMOVAL_STATE","setForRemoval","hasAnimation","removedBeforeQueried","NULL_REMOVED_QUERIED_STATE","REMOVAL_FLAG","StateValue","isObj","normalizeTriggerValue","absorbOptions","oldParams_2","DEFAULT_STATE_VALUE","DELETED_STATE_VALUE","AnimationTransitionNamespace","_engine","_triggers","_queue","_elementListeners","_hostClassName","isTriggerEventValid","listeners","triggersWithStates","statesByElement","NG_TRIGGER_CLASSNAME","afterFlush","_getTrigger","defaultToFallback","TransitionAnimationPlayer","playersOnElement","playersByElement","queued","isFallbackTransition","totalQueuedPlayers","index_1","objEquals","k1","k2","fromStyles_1","toStyles_1","reportError","deregister","stateMap","clearElementCache","elementPlayers","_destroyInnerNodes","containsClass","className","classList","classes","CLASSES_CACHE_KEY","innerNs","namespacesByHostElement","removeNode","doNotRecurse","childElementCount","triggerStates","players_1","markElementAsRemoved","processLeaveNode","containsPotentialParentTransition","totalAnimations","currentPlayers","playersByQueriedElement","visitedTriggers_1","listener","destroyInnerAnimations","_onRemovalComplete","insertNode","drainQueuedTransitions","microtaskId","destroyed","markedForDestroy","d0","d1","elementContainsData","containsData","TransitionAnimationEngine","newHostElements","disabledNodes","_namespaceLookup","_namespaceList","_flushFns","_whenQuietFns","collectedEnterElements","collectedLeaveElements","ns","createNamespace","_balanceNamespaceList","collectEnterElement","found","nextNamespace","_fetchNamespace","afterFlushAnimationsDone","isElementNode","details","markElementAsDisabled","_buildInstruction","subTimelines","containerElement","cleanupFns","_flushAnimations","quietFns_1","skippedPlayers","skippedPlayersMap","queuedInstructions","allPreStyleElements","allPostStyleElements","disabledElementsSet","nodesThatAreDisabled","bodyNode","getBodyNode","allEnterNodes","createIsRootFilterFn","nodes","isRoot","nodeSet","knownRootContainer","allLeaveNodes","leaveNodesWithoutAnimations","allPlayers","erroneousTransitions","stringMap","setVal_1","setVal","errors_1","enterNodesWithoutAnimations","allPreviousPlayersMap","sortedParentElements","unshift","_beforeAnimationBuild","_getPreviousPlayers","prevPlayer","replaceNodes","replacePostStylesAsPre","cloakAndComputeStyles","postStylesMap","preStylesMap","pre","rootPlayers","subPlayers","innerPlayer","_buildAnimation","setRealPlayer","parentHasPriority","parentPlayers","playersForElement","queriedPlayerResults","queriedInnerElements","j","queriedPlayers","activePlayers","removeNodesAfterAnimationDone","isQueriedElement","toStateValue","queriedElementPlayers","isRemovalAnimation_1","targetNameSpaceId","targetTriggerName","timelineInstruction","realPlayer","getRealPlayer","allQueriedPlayers","allConsumedElements","allSubElements","allNewPlayers","flattenGroupPlayers","finalPlayers","_flattenGroupPlayersRecur","pp","wrappedPlayer","deleteOrUnsetInMap","currentValues","_player","_containsRealPlayer","_queuedCallbacks","_queueEvent","cloakElement","oldValue","display","elementPropsMap","defaultStyle","cloakVals","valuesMap","failedElements","postEntry","preEntry","AnimationEngine","_triggerCache","_transitionEngine","_timelineEngine","cacheKey","buildTrigger","action","eventPhase","WebAnimationsPlayer","_initialized","previousStyles","currentSnapshot","_duration","_delay","allowPreviousPlayerStylesMerge","_preparePlayerBeforeStart","previousStyleProps","startingKeyframe_1","missingStyleProps_1","self_1","_loop_1","_computeStyle","_triggerWebAnimation","_finalKeyframe","_resetDomPlayerState","cancel","getComputedStyle","WebAnimationsDriver","playerOptions","fill","previousWebAnimationPlayers","supportsWebAnimations","configService","ref","selectedStation","configString","getAttribute","ElementRef","module","flash_messages_component_1","parentModule","FlashMessagesComponent","FlashMessageTypeToClass","__param","Optional","SkipSelf","typeToCssClass","transform","Pipe","onMouseEnter","onMouseExit","time_service_1","ElapsedTimePipe","format","getElapsedTimeString","last","endTimeMs","elapsedSeconds","elapsedMinutes","seconds","elapsedHours","pure","TimeService","FocusDirective","focusOn","focus","Directive","GenealogyNodeComponent","maxDepth","childMaxDepth","LogLevelToClassPipe","logLevels","info","warning","ObjectToSortedValuesPipe","object","sortBy","asArray","keys_1","StatusCategory","categoryToCssClass","unknownStatus","Symbol","statusToCategory","statusToText","StatusToClassPipe","StatusToTextPipe","relative","TimeAgoPipe","TooltipDirective","tooltipElement","innerHTML","firstChild","onMouseLeave","HostListener","TrimmedTextComponent","expanded","maxChars","onClick","animations_2","base_plug_1","PLUG_NAME","getPlugState","lastPromptId","convertedHtml","lastPromptHtml","focusSelf","default","setResponse","hasTextInput","hasImage","sendResponse","promptId","respond","animations","BasePlug","util_2","plugExists","Headers","Content-Type","RequestOptions","plugUrl","plugName","payload","mro","dashboard_service_1","station_list_component_1","attachments_component_1","history_component_1","logs_component_1","phase_list_component_1","phase_component_1","station_component_1","station_service_1","test_summary_component_1","StationListComponent","AttachmentsComponent","HistoryComponent","LogsComponent","PhaseComponent","PhaseListComponent","StationComponent","TestSummaryComponent","StationSelectedEvent","dashboard","onSelectStation","EventEmitter","retryCountdown","observable","currentMillis","remainingMs","isSubscribing","isReachable","manualRetry","manualReload","Output","linkForAttachment","attachment","toggleExpanded","history_item_model_1","TestSelectedEvent","onSelectTest","collapsedNumTests","history","historyFromDiskEnabled","isLoading","lastClickedItem","loadHistory","getHistory","isSelected","historyItem","selectedTest","loading","selectTest","retrieveFileName","loadItem","stack","refreshList","showMeasurements","toggleMeasurements","expand","StationDeselectedEvent","stationService","onDeselectStation","goBack","progress_bar_component_1","progressBar","completedPhases","completedPhaseCount","ViewChild","elapsed_time_pipe_1","focus_directive_1","genealogy_node_component_1","log_level_to_class_pipe_1","object_to_sorted_values_pipe_1","status_pipes_1","time_ago_pipe_1","tooltip_directive_1","trimmed_text_component_1","UPDATE_INTERVAL_MS","interval","publish","connect","critical","SockJS","cache","getCache","rawTestState","uniqueId","drawAttention","rawHistoryItems","stationHistory","rawItem","file_name","unloaded","rawHistoryItem"],"mappings":"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","file":"js/app.77df9acbfc40a7330df9.js","sourcesContent":["/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * The state of a test on a station.\n */\n\nimport { Attachment } from './attachment.model';\nimport { LogRecord } from './log-record.model';\nimport { Phase } from './phase.model';\nimport { Station } from './station.model';\n\n// Enum values must not overlap between any of the status enums.\n// See status-pipes.ts.\nexport enum TestStatus {\n waiting = 11, // Corresponds to WAITING_FOR_TEST_START.\n running,\n pass,\n fail,\n error,\n timeout,\n aborted,\n}\n\nexport class PlugDescriptor { mro: string[]; }\n\nexport class TestState {\n attachments: Attachment[];\n dutId: string;\n endTimeMillis: number|null;\n fileName: string|null; // This is null for tests *not* from the history.\n name: string;\n logs: LogRecord[];\n phases: Phase[];\n plugDescriptors: {[name: string]: PlugDescriptor};\n plugStates: {[name: string]: {}};\n startTimeMillis: number;\n station: Station;\n status: TestStatus;\n // This is the execution UID. It is null for tests retrieved from the history.\n testId: string|null;\n\n // Using the class as the interface for its own constructor allows us to call\n // the constructor in named-argument style.\n constructor(params: TestState) {\n Object.assign(this, params);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular2-template-loader!./node_modules/@angularclass/hmr-loader!./node_modules/tslint-loader!./src/app/shared/models/test-state.model.ts","import * as tslib_1 from \"tslib\";\n/**\n * @license Angular v4.4.6\n * (c) 2010-2017 Google, Inc. https://angular.io/\n * License: MIT\n */\nimport { Inject, Injectable, InjectionToken, NgModule, Optional, PLATFORM_ID } from '@angular/core';\nimport { of } from 'rxjs/observable/of';\nimport { concatMap } from 'rxjs/operator/concatMap';\nimport { filter } from 'rxjs/operator/filter';\nimport { map } from 'rxjs/operator/map';\nimport { DOCUMENT, ɵparseCookieValue } from '@angular/common';\nimport { Observable } from 'rxjs/Observable';\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Transforms an `HttpRequest` into a stream of `HttpEvent`s, one of which will likely be a\n * `HttpResponse`.\n *\n * `HttpHandler` is injectable. When injected, the handler instance dispatches requests to the\n * first interceptor in the chain, which dispatches to the second, etc, eventually reaching the\n * `HttpBackend`.\n *\n * In an `HttpInterceptor`, the `HttpHandler` parameter is the next interceptor in the chain.\n *\n * \\@experimental\n * @abstract\n */\nvar HttpHandler = (function () {\n function HttpHandler() {\n }\n /**\n * @abstract\n * @param {?} req\n * @return {?}\n */\n HttpHandler.prototype.handle = function (req) { };\n return HttpHandler;\n}());\n/**\n * A final `HttpHandler` which will dispatch the request via browser HTTP APIs to a backend.\n *\n * Interceptors sit between the `HttpClient` interface and the `HttpBackend`.\n *\n * When injected, `HttpBackend` dispatches requests directly to the backend, without going\n * through the interceptor chain.\n *\n * \\@experimental\n * @abstract\n */\nvar HttpBackend = (function () {\n function HttpBackend() {\n }\n /**\n * @abstract\n * @param {?} req\n * @return {?}\n */\n HttpBackend.prototype.handle = function (req) { };\n return HttpBackend;\n}());\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * A `HttpParameterCodec` that uses `encodeURIComponent` and `decodeURIComponent` to\n * serialize and parse URL parameter keys and values.\n *\n * \\@experimental\n */\nvar HttpUrlEncodingCodec = (function () {\n function HttpUrlEncodingCodec() {\n }\n /**\n * @param {?} k\n * @return {?}\n */\n HttpUrlEncodingCodec.prototype.encodeKey = function (k) { return standardEncoding(k); };\n /**\n * @param {?} v\n * @return {?}\n */\n HttpUrlEncodingCodec.prototype.encodeValue = function (v) { return standardEncoding(v); };\n /**\n * @param {?} k\n * @return {?}\n */\n HttpUrlEncodingCodec.prototype.decodeKey = function (k) { return decodeURIComponent(k); };\n /**\n * @param {?} v\n * @return {?}\n */\n HttpUrlEncodingCodec.prototype.decodeValue = function (v) { return decodeURIComponent(v); };\n return HttpUrlEncodingCodec;\n}());\n/**\n * @param {?} rawParams\n * @param {?} codec\n * @return {?}\n */\nfunction paramParser(rawParams, codec) {\n var /** @type {?} */ map$$1 = new Map();\n if (rawParams.length > 0) {\n var /** @type {?} */ params = rawParams.split('&');\n params.forEach(function (param) {\n var /** @type {?} */ eqIdx = param.indexOf('=');\n var _a = eqIdx == -1 ?\n [codec.decodeKey(param), ''] :\n [codec.decodeKey(param.slice(0, eqIdx)), codec.decodeValue(param.slice(eqIdx + 1))], key = _a[0], val = _a[1];\n var /** @type {?} */ list = map$$1.get(key) || [];\n list.push(val);\n map$$1.set(key, list);\n });\n }\n return map$$1;\n}\n/**\n * @param {?} v\n * @return {?}\n */\nfunction standardEncoding(v) {\n return encodeURIComponent(v)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/gi, '$')\n .replace(/%2C/gi, ',')\n .replace(/%3B/gi, ';')\n .replace(/%2B/gi, '+')\n .replace(/%3D/gi, '=')\n .replace(/%3F/gi, '?')\n .replace(/%2F/gi, '/');\n}\n/**\n * An HTTP request/response body that represents serialized parameters,\n * per the MIME type `application/x-www-form-urlencoded`.\n *\n * This class is immuatable - all mutation operations return a new instance.\n *\n * \\@experimental\n */\nvar HttpParams = (function () {\n /**\n * @param {?=} options\n */\n function HttpParams(options) {\n if (options === void 0) { options = {}; }\n this.updates = null;\n this.cloneFrom = null;\n this.encoder = options.encoder || new HttpUrlEncodingCodec();\n this.map = !!options.fromString ? paramParser(options.fromString, this.encoder) : null;\n }\n /**\n * Check whether the body has one or more values for the given parameter name.\n * @param {?} param\n * @return {?}\n */\n HttpParams.prototype.has = function (param) {\n this.init();\n return ((this.map)).has(param);\n };\n /**\n * Get the first value for the given parameter name, or `null` if it's not present.\n * @param {?} param\n * @return {?}\n */\n HttpParams.prototype.get = function (param) {\n this.init();\n var /** @type {?} */ res = ((this.map)).get(param);\n return !!res ? res[0] : null;\n };\n /**\n * Get all values for the given parameter name, or `null` if it's not present.\n * @param {?} param\n * @return {?}\n */\n HttpParams.prototype.getAll = function (param) {\n this.init();\n return ((this.map)).get(param) || null;\n };\n /**\n * Get all the parameter names for this body.\n * @return {?}\n */\n HttpParams.prototype.keys = function () {\n this.init();\n return Array.from(/** @type {?} */ ((this.map)).keys());\n };\n /**\n * Construct a new body with an appended value for the given parameter name.\n * @param {?} param\n * @param {?} value\n * @return {?}\n */\n HttpParams.prototype.append = function (param, value) { return this.clone({ param: param, value: value, op: 'a' }); };\n /**\n * Construct a new body with a new value for the given parameter name.\n * @param {?} param\n * @param {?} value\n * @return {?}\n */\n HttpParams.prototype.set = function (param, value) { return this.clone({ param: param, value: value, op: 's' }); };\n /**\n * Construct a new body with either the given value for the given parameter\n * removed, if a value is given, or all values for the given parameter removed\n * if not.\n * @param {?} param\n * @param {?=} value\n * @return {?}\n */\n HttpParams.prototype.delete = function (param, value) { return this.clone({ param: param, value: value, op: 'd' }); };\n /**\n * Serialize the body to an encoded string, where key-value pairs (separated by `=`) are\n * separated by `&`s.\n * @return {?}\n */\n HttpParams.prototype.toString = function () {\n var _this = this;\n this.init();\n return this.keys()\n .map(function (key) {\n var /** @type {?} */ eKey = _this.encoder.encodeKey(key);\n return ((((_this.map)).get(key))).map(function (value) { return eKey + '=' + _this.encoder.encodeValue(value); })\n .join('&');\n })\n .join('&');\n };\n /**\n * @param {?} update\n * @return {?}\n */\n HttpParams.prototype.clone = function (update) {\n var /** @type {?} */ clone = new HttpParams({ encoder: this.encoder });\n clone.cloneFrom = this.cloneFrom || this;\n clone.updates = (this.updates || []).concat([update]);\n return clone;\n };\n /**\n * @return {?}\n */\n HttpParams.prototype.init = function () {\n var _this = this;\n if (this.map === null) {\n this.map = new Map();\n }\n if (this.cloneFrom !== null) {\n this.cloneFrom.init();\n this.cloneFrom.keys().forEach(function (key) { return ((_this.map)).set(key, /** @type {?} */ ((((((_this.cloneFrom)).map)).get(key)))); }); /** @type {?} */\n ((this.updates)).forEach(function (update) {\n switch (update.op) {\n case 'a':\n case 's':\n var /** @type {?} */ base = (update.op === 'a' ? ((_this.map)).get(update.param) : undefined) || [];\n base.push(/** @type {?} */ ((update.value))); /** @type {?} */\n ((_this.map)).set(update.param, base);\n break;\n case 'd':\n if (update.value !== undefined) {\n var /** @type {?} */ base_1 = ((_this.map)).get(update.param) || [];\n var /** @type {?} */ idx = base_1.indexOf(update.value);\n if (idx !== -1) {\n base_1.splice(idx, 1);\n }\n if (base_1.length > 0) {\n ((_this.map)).set(update.param, base_1);\n }\n else {\n ((_this.map)).delete(update.param);\n }\n }\n else {\n ((_this.map)).delete(update.param);\n break;\n }\n }\n });\n this.cloneFrom = null;\n }\n };\n return HttpParams;\n}());\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Immutable set of Http headers, with lazy parsing.\n * \\@experimental\n */\nvar HttpHeaders = (function () {\n /**\n * @param {?=} headers\n */\n function HttpHeaders(headers) {\n var _this = this;\n /**\n * Internal map of lowercased header names to the normalized\n * form of the name (the form seen first).\n */\n this.normalizedNames = new Map();\n /**\n * Queued updates to be materialized the next initialization.\n */\n this.lazyUpdate = null;\n if (!headers) {\n this.headers = new Map();\n }\n else if (typeof headers === 'string') {\n this.lazyInit = function () {\n _this.headers = new Map();\n headers.split('\\n').forEach(function (line) {\n var index = line.indexOf(':');\n if (index > 0) {\n var name = line.slice(0, index);\n var key = name.toLowerCase();\n var value = line.slice(index + 1).trim();\n _this.maybeSetNormalizedName(name, key);\n if (_this.headers.has(key)) {\n _this.headers.get(key).push(value);\n }\n else {\n _this.headers.set(key, [value]);\n }\n }\n });\n };\n }\n else {\n this.lazyInit = function () {\n _this.headers = new Map();\n Object.keys(headers).forEach(function (name) {\n var values = headers[name];\n var key = name.toLowerCase();\n if (typeof values === 'string') {\n values = [values];\n }\n if (values.length > 0) {\n _this.headers.set(key, values);\n _this.maybeSetNormalizedName(name, key);\n }\n });\n };\n }\n }\n /**\n * Checks for existence of header by given name.\n * @param {?} name\n * @return {?}\n */\n HttpHeaders.prototype.has = function (name) {\n this.init();\n return this.headers.has(name.toLowerCase());\n };\n /**\n * Returns first header that matches given name.\n * @param {?} name\n * @return {?}\n */\n HttpHeaders.prototype.get = function (name) {\n this.init();\n var /** @type {?} */ values = this.headers.get(name.toLowerCase());\n return values && values.length > 0 ? values[0] : null;\n };\n /**\n * Returns the names of the headers\n * @return {?}\n */\n HttpHeaders.prototype.keys = function () {\n this.init();\n return Array.from(this.normalizedNames.values());\n };\n /**\n * Returns list of header values for a given name.\n * @param {?} name\n * @return {?}\n */\n HttpHeaders.prototype.getAll = function (name) {\n this.init();\n return this.headers.get(name.toLowerCase()) || null;\n };\n /**\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n HttpHeaders.prototype.append = function (name, value) {\n return this.clone({ name: name, value: value, op: 'a' });\n };\n /**\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n HttpHeaders.prototype.set = function (name, value) {\n return this.clone({ name: name, value: value, op: 's' });\n };\n /**\n * @param {?} name\n * @param {?=} value\n * @return {?}\n */\n HttpHeaders.prototype.delete = function (name, value) {\n return this.clone({ name: name, value: value, op: 'd' });\n };\n /**\n * @param {?} name\n * @param {?} lcName\n * @return {?}\n */\n HttpHeaders.prototype.maybeSetNormalizedName = function (name, lcName) {\n if (!this.normalizedNames.has(lcName)) {\n this.normalizedNames.set(lcName, name);\n }\n };\n /**\n * @return {?}\n */\n HttpHeaders.prototype.init = function () {\n var _this = this;\n if (!!this.lazyInit) {\n if (this.lazyInit instanceof HttpHeaders) {\n this.copyFrom(this.lazyInit);\n }\n else {\n this.lazyInit();\n }\n this.lazyInit = null;\n if (!!this.lazyUpdate) {\n this.lazyUpdate.forEach(function (update) { return _this.applyUpdate(update); });\n this.lazyUpdate = null;\n }\n }\n };\n /**\n * @param {?} other\n * @return {?}\n */\n HttpHeaders.prototype.copyFrom = function (other) {\n var _this = this;\n other.init();\n Array.from(other.headers.keys()).forEach(function (key) {\n _this.headers.set(key, /** @type {?} */ ((other.headers.get(key))));\n _this.normalizedNames.set(key, /** @type {?} */ ((other.normalizedNames.get(key))));\n });\n };\n /**\n * @param {?} update\n * @return {?}\n */\n HttpHeaders.prototype.clone = function (update) {\n var /** @type {?} */ clone = new HttpHeaders();\n clone.lazyInit =\n (!!this.lazyInit && this.lazyInit instanceof HttpHeaders) ? this.lazyInit : this;\n clone.lazyUpdate = (this.lazyUpdate || []).concat([update]);\n return clone;\n };\n /**\n * @param {?} update\n * @return {?}\n */\n HttpHeaders.prototype.applyUpdate = function (update) {\n var /** @type {?} */ key = update.name.toLowerCase();\n switch (update.op) {\n case 'a':\n case 's':\n var /** @type {?} */ value = ((update.value));\n if (typeof value === 'string') {\n value = [value];\n }\n if (value.length === 0) {\n return;\n }\n this.maybeSetNormalizedName(update.name, key);\n var /** @type {?} */ base = (update.op === 'a' ? this.headers.get(key) : undefined) || [];\n base.push.apply(base, value);\n this.headers.set(key, base);\n break;\n case 'd':\n var /** @type {?} */ toDelete_1 = (update.value);\n if (!toDelete_1) {\n this.headers.delete(key);\n this.normalizedNames.delete(key);\n }\n else {\n var /** @type {?} */ existing = this.headers.get(key);\n if (!existing) {\n return;\n }\n existing = existing.filter(function (value) { return toDelete_1.indexOf(value) === -1; });\n if (existing.length === 0) {\n this.headers.delete(key);\n this.normalizedNames.delete(key);\n }\n else {\n this.headers.set(key, existing);\n }\n }\n break;\n }\n };\n /**\n * \\@internal\n * @param {?} fn\n * @return {?}\n */\n HttpHeaders.prototype.forEach = function (fn) {\n var _this = this;\n this.init();\n Array.from(this.normalizedNames.keys())\n .forEach(function (key) { return fn(/** @type {?} */ ((_this.normalizedNames.get(key))), /** @type {?} */ ((_this.headers.get(key)))); });\n };\n return HttpHeaders;\n}());\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Determine whether the given HTTP method may include a body.\n * @param {?} method\n * @return {?}\n */\nfunction mightHaveBody(method) {\n switch (method) {\n case 'DELETE':\n case 'GET':\n case 'HEAD':\n case 'OPTIONS':\n case 'JSONP':\n return false;\n default:\n return true;\n }\n}\n/**\n * Safely assert whether the given value is an ArrayBuffer.\n *\n * In some execution environments ArrayBuffer is not defined.\n * @param {?} value\n * @return {?}\n */\nfunction isArrayBuffer(value) {\n return typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer;\n}\n/**\n * Safely assert whether the given value is a Blob.\n *\n * In some execution environments Blob is not defined.\n * @param {?} value\n * @return {?}\n */\nfunction isBlob(value) {\n return typeof Blob !== 'undefined' && value instanceof Blob;\n}\n/**\n * Safely assert whether the given value is a FormData instance.\n *\n * In some execution environments FormData is not defined.\n * @param {?} value\n * @return {?}\n */\nfunction isFormData(value) {\n return typeof FormData !== 'undefined' && value instanceof FormData;\n}\n/**\n * An outgoing HTTP request with an optional typed body.\n *\n * `HttpRequest` represents an outgoing request, including URL, method,\n * headers, body, and other request configuration options. Instances should be\n * assumed to be immutable. To modify a `HttpRequest`, the `clone`\n * method should be used.\n *\n * \\@experimental\n */\nvar HttpRequest = (function () {\n /**\n * @param {?} method\n * @param {?} url\n * @param {?=} third\n * @param {?=} fourth\n */\n function HttpRequest(method, url, third, fourth) {\n this.url = url;\n /**\n * The request body, or `null` if one isn't set.\n *\n * Bodies are not enforced to be immutable, as they can include a reference to any\n * user-defined data type. However, interceptors should take care to preserve\n * idempotence by treating them as such.\n */\n this.body = null;\n /**\n * Whether this request should be made in a way that exposes progress events.\n *\n * Progress events are expensive (change detection runs on each event) and so\n * they should only be requested if the consumer intends to monitor them.\n */\n this.reportProgress = false;\n /**\n * Whether this request should be sent with outgoing credentials (cookies).\n */\n this.withCredentials = false;\n /**\n * The expected response type of the server.\n *\n * This is used to parse the response appropriately before returning it to\n * the requestee.\n */\n this.responseType = 'json';\n this.method = method.toUpperCase();\n // Next, need to figure out which argument holds the HttpRequestInit\n // options, if any.\n var options;\n // Check whether a body argument is expected. The only valid way to omit\n // the body argument is to use a known no-body method like GET.\n if (mightHaveBody(this.method) || !!fourth) {\n // Body is the third argument, options are the fourth.\n this.body = third || null;\n options = fourth;\n }\n else {\n // No body required, options are the third argument. The body stays null.\n options = third;\n }\n // If options have been passed, interpret them.\n if (options) {\n // Normalize reportProgress and withCredentials.\n this.reportProgress = !!options.reportProgress;\n this.withCredentials = !!options.withCredentials;\n // Override default response type of 'json' if one is provided.\n if (!!options.responseType) {\n this.responseType = options.responseType;\n }\n // Override headers if they're provided.\n if (!!options.headers) {\n this.headers = options.headers;\n }\n if (!!options.params) {\n this.params = options.params;\n }\n }\n // If no headers have been passed in, construct a new HttpHeaders instance.\n if (!this.headers) {\n this.headers = new HttpHeaders();\n }\n // If no parameters have been passed in, construct a new HttpUrlEncodedParams instance.\n if (!this.params) {\n this.params = new HttpParams();\n this.urlWithParams = url;\n }\n else {\n // Encode the parameters to a string in preparation for inclusion in the URL.\n var params = this.params.toString();\n if (params.length === 0) {\n // No parameters, the visible URL is just the URL given at creation time.\n this.urlWithParams = url;\n }\n else {\n // Does the URL already have query parameters? Look for '?'.\n var qIdx = url.indexOf('?');\n // There are 3 cases to handle:\n // 1) No existing parameters -> append '?' followed by params.\n // 2) '?' exists and is followed by existing query string ->\n // append '&' followed by params.\n // 3) '?' exists at the end of the url -> append params directly.\n // This basically amounts to determining the character, if any, with\n // which to join the URL and parameters.\n var sep = qIdx === -1 ? '?' : (qIdx < url.length - 1 ? '&' : '');\n this.urlWithParams = url + sep + params;\n }\n }\n }\n /**\n * Transform the free-form body into a serialized format suitable for\n * transmission to the server.\n * @return {?}\n */\n HttpRequest.prototype.serializeBody = function () {\n // If no body is present, no need to serialize it.\n if (this.body === null) {\n return null;\n }\n // Check whether the body is already in a serialized form. If so,\n // it can just be returned directly.\n if (isArrayBuffer(this.body) || isBlob(this.body) || isFormData(this.body) ||\n typeof this.body === 'string') {\n return this.body;\n }\n // Check whether the body is an instance of HttpUrlEncodedParams.\n if (this.body instanceof HttpParams) {\n return this.body.toString();\n }\n // Check whether the body is an object or array, and serialize with JSON if so.\n if (typeof this.body === 'object' || typeof this.body === 'boolean' ||\n Array.isArray(this.body)) {\n return JSON.stringify(this.body);\n }\n // Fall back on toString() for everything else.\n return ((this.body)).toString();\n };\n /**\n * Examine the body and attempt to infer an appropriate MIME type\n * for it.\n *\n * If no such type can be inferred, this method will return `null`.\n * @return {?}\n */\n HttpRequest.prototype.detectContentTypeHeader = function () {\n // An empty body has no content type.\n if (this.body === null) {\n return null;\n }\n // FormData bodies rely on the browser's content type assignment.\n if (isFormData(this.body)) {\n return null;\n }\n // Blobs usually have their own content type. If it doesn't, then\n // no type can be inferred.\n if (isBlob(this.body)) {\n return this.body.type || null;\n }\n // Array buffers have unknown contents and thus no type can be inferred.\n if (isArrayBuffer(this.body)) {\n return null;\n }\n // Technically, strings could be a form of JSON data, but it's safe enough\n // to assume they're plain strings.\n if (typeof this.body === 'string') {\n return 'text/plain';\n }\n // `HttpUrlEncodedParams` has its own content-type.\n if (this.body instanceof HttpParams) {\n return 'application/x-www-form-urlencoded;charset=UTF-8';\n }\n // Arrays, objects, and numbers will be encoded as JSON.\n if (typeof this.body === 'object' || typeof this.body === 'number' ||\n Array.isArray(this.body)) {\n return 'application/json';\n }\n // No type could be inferred.\n return null;\n };\n /**\n * @param {?=} update\n * @return {?}\n */\n HttpRequest.prototype.clone = function (update) {\n if (update === void 0) { update = {}; }\n // For method, url, and responseType, take the current value unless\n // it is overridden in the update hash.\n var /** @type {?} */ method = update.method || this.method;\n var /** @type {?} */ url = update.url || this.url;\n var /** @type {?} */ responseType = update.responseType || this.responseType;\n // The body is somewhat special - a `null` value in update.body means\n // whatever current body is present is being overridden with an empty\n // body, whereas an `undefined` value in update.body implies no\n // override.\n var /** @type {?} */ body = (update.body !== undefined) ? update.body : this.body;\n // Carefully handle the boolean options to differentiate between\n // `false` and `undefined` in the update args.\n var /** @type {?} */ withCredentials = (update.withCredentials !== undefined) ? update.withCredentials : this.withCredentials;\n var /** @type {?} */ reportProgress = (update.reportProgress !== undefined) ? update.reportProgress : this.reportProgress;\n // Headers and params may be appended to if `setHeaders` or\n // `setParams` are used.\n var /** @type {?} */ headers = update.headers || this.headers;\n var /** @type {?} */ params = update.params || this.params;\n // Check whether the caller has asked to add headers.\n if (update.setHeaders !== undefined) {\n // Set every requested header.\n headers =\n Object.keys(update.setHeaders)\n .reduce(function (headers, name) { return headers.set(name, /** @type {?} */ ((update.setHeaders))[name]); }, headers);\n }\n // Check whether the caller has asked to set params.\n if (update.setParams) {\n // Set every requested param.\n params = Object.keys(update.setParams)\n .reduce(function (params, param) { return params.set(param, /** @type {?} */ ((update.setParams))[param]); }, params);\n }\n // Finally, construct the new HttpRequest using the pieces from above.\n return new HttpRequest(method, url, body, {\n params: params, headers: headers, reportProgress: reportProgress, responseType: responseType, withCredentials: withCredentials,\n });\n };\n return HttpRequest;\n}());\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar HttpEventType = {};\nHttpEventType.Sent = 0;\nHttpEventType.UploadProgress = 1;\nHttpEventType.ResponseHeader = 2;\nHttpEventType.DownloadProgress = 3;\nHttpEventType.Response = 4;\nHttpEventType.User = 5;\nHttpEventType[HttpEventType.Sent] = \"Sent\";\nHttpEventType[HttpEventType.UploadProgress] = \"UploadProgress\";\nHttpEventType[HttpEventType.ResponseHeader] = \"ResponseHeader\";\nHttpEventType[HttpEventType.DownloadProgress] = \"DownloadProgress\";\nHttpEventType[HttpEventType.Response] = \"Response\";\nHttpEventType[HttpEventType.User] = \"User\";\n/**\n * Base class for both `HttpResponse` and `HttpHeaderResponse`.\n *\n * \\@experimental\n * @abstract\n */\nvar HttpResponseBase = (function () {\n /**\n * Super-constructor for all responses.\n *\n * The single parameter accepted is an initialization hash. Any properties\n * of the response passed there will override the default values.\n * @param {?} init\n * @param {?=} defaultStatus\n * @param {?=} defaultStatusText\n */\n function HttpResponseBase(init, defaultStatus, defaultStatusText) {\n if (defaultStatus === void 0) { defaultStatus = 200; }\n if (defaultStatusText === void 0) { defaultStatusText = 'OK'; }\n // If the hash has values passed, use them to initialize the response.\n // Otherwise use the default values.\n this.headers = init.headers || new HttpHeaders();\n this.status = init.status !== undefined ? init.status : defaultStatus;\n this.statusText = init.statusText || defaultStatusText;\n this.url = init.url || null;\n // Cache the ok value to avoid defining a getter.\n this.ok = this.status >= 200 && this.status < 300;\n }\n return HttpResponseBase;\n}());\n/**\n * A partial HTTP response which only includes the status and header data,\n * but no response body.\n *\n * `HttpHeaderResponse` is a `HttpEvent` available on the response\n * event stream, only when progress events are requested.\n *\n * \\@experimental\n */\nvar HttpHeaderResponse = (function (_super) {\n tslib_1.__extends(HttpHeaderResponse, _super);\n /**\n * Create a new `HttpHeaderResponse` with the given parameters.\n * @param {?=} init\n */\n function HttpHeaderResponse(init) {\n if (init === void 0) { init = {}; }\n var _this = _super.call(this, init) || this;\n _this.type = HttpEventType.ResponseHeader;\n return _this;\n }\n /**\n * Copy this `HttpHeaderResponse`, overriding its contents with the\n * given parameter hash.\n * @param {?=} update\n * @return {?}\n */\n HttpHeaderResponse.prototype.clone = function (update) {\n if (update === void 0) { update = {}; }\n // Perform a straightforward initialization of the new HttpHeaderResponse,\n // overriding the current parameters with new ones if given.\n return new HttpHeaderResponse({\n headers: update.headers || this.headers,\n status: update.status !== undefined ? update.status : this.status,\n statusText: update.statusText || this.statusText,\n url: update.url || this.url || undefined,\n });\n };\n return HttpHeaderResponse;\n}(HttpResponseBase));\n/**\n * A full HTTP response, including a typed response body (which may be `null`\n * if one was not returned).\n *\n * `HttpResponse` is a `HttpEvent` available on the response event\n * stream.\n *\n * \\@experimental\n */\nvar HttpResponse = (function (_super) {\n tslib_1.__extends(HttpResponse, _super);\n /**\n * Construct a new `HttpResponse`.\n * @param {?=} init\n */\n function HttpResponse(init) {\n if (init === void 0) { init = {}; }\n var _this = _super.call(this, init) || this;\n _this.type = HttpEventType.Response;\n _this.body = init.body || null;\n return _this;\n }\n /**\n * @param {?=} update\n * @return {?}\n */\n HttpResponse.prototype.clone = function (update) {\n if (update === void 0) { update = {}; }\n return new HttpResponse({\n body: (update.body !== undefined) ? update.body : this.body,\n headers: update.headers || this.headers,\n status: (update.status !== undefined) ? update.status : this.status,\n statusText: update.statusText || this.statusText,\n url: update.url || this.url || undefined,\n });\n };\n return HttpResponse;\n}(HttpResponseBase));\n/**\n * A response that represents an error or failure, either from a\n * non-successful HTTP status, an error while executing the request,\n * or some other failure which occurred during the parsing of the response.\n *\n * Any error returned on the `Observable` response stream will be\n * wrapped in an `HttpErrorResponse` to provide additional context about\n * the state of the HTTP layer when the error occurred. The error property\n * will contain either a wrapped Error object or the error response returned\n * from the server.\n *\n * \\@experimental\n */\nvar HttpErrorResponse = (function (_super) {\n tslib_1.__extends(HttpErrorResponse, _super);\n /**\n * @param {?} init\n */\n function HttpErrorResponse(init) {\n var _this = \n // Initialize with a default status of 0 / Unknown Error.\n _super.call(this, init, 0, 'Unknown Error') || this;\n _this.name = 'HttpErrorResponse';\n /**\n * Errors are never okay, even when the status code is in the 2xx success range.\n */\n _this.ok = false;\n // If the response was successful, then this was a parse error. Otherwise, it was\n // a protocol-level failure of some sort. Either the request failed in transit\n // or the server returned an unsuccessful status code.\n if (_this.status >= 200 && _this.status < 300) {\n _this.message = \"Http failure during parsing for \" + (init.url || '(unknown url)');\n }\n else {\n _this.message =\n \"Http failure response for \" + (init.url || '(unknown url)') + \": \" + init.status + \" \" + init.statusText;\n }\n _this.error = init.error || null;\n return _this;\n }\n return HttpErrorResponse;\n}(HttpResponseBase));\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Construct an instance of `HttpRequestOptions` from a source `HttpMethodOptions` and\n * the given `body`. Basically, this clones the object and adds the body.\n * @template T\n * @param {?} options\n * @param {?} body\n * @return {?}\n */\nfunction addBody(options, body) {\n return {\n body: body,\n headers: options.headers,\n observe: options.observe,\n params: options.params,\n reportProgress: options.reportProgress,\n responseType: options.responseType,\n withCredentials: options.withCredentials,\n };\n}\n/**\n * Perform HTTP requests.\n *\n * `HttpClient` is available as an injectable class, with methods to perform HTTP requests.\n * Each request method has multiple signatures, and the return type varies according to which\n * signature is called (mainly the values of `observe` and `responseType`).\n *\n * \\@experimental\n */\nvar HttpClient = (function () {\n /**\n * @param {?} handler\n */\n function HttpClient(handler) {\n this.handler = handler;\n }\n /**\n * Constructs an `Observable` for a particular HTTP request that, when subscribed,\n * fires the request through the chain of registered interceptors and on to the\n * server.\n *\n * This method can be called in one of two ways. Either an `HttpRequest`\n * instance can be passed directly as the only parameter, or a method can be\n * passed as the first parameter, a string URL as the second, and an\n * options hash as the third.\n *\n * If a `HttpRequest` object is passed directly, an `Observable` of the\n * raw `HttpEvent` stream will be returned.\n *\n * If a request is instead built by providing a URL, the options object\n * determines the return type of `request()`. In addition to configuring\n * request parameters such as the outgoing headers and/or the body, the options\n * hash specifies two key pieces of information about the request: the\n * `responseType` and what to `observe`.\n *\n * The `responseType` value determines how a successful response body will be\n * parsed. If `responseType` is the default `json`, a type interface for the\n * resulting object may be passed as a type parameter to `request()`.\n *\n * The `observe` value determines the return type of `request()`, based on what\n * the consumer is interested in observing. A value of `events` will return an\n * `Observable` representing the raw `HttpEvent` stream,\n * including progress events by default. A value of `response` will return an\n * `Observable>` where the `T` parameter of `HttpResponse`\n * depends on the `responseType` and any optionally provided type parameter.\n * A value of `body` will return an `Observable` with the same `T` body type.\n * @param {?} first\n * @param {?=} url\n * @param {?=} options\n * @return {?}\n */\n HttpClient.prototype.request = function (first, url, options) {\n var _this = this;\n if (options === void 0) { options = {}; }\n var /** @type {?} */ req;\n // Firstly, check whether the primary argument is an instance of `HttpRequest`.\n if (first instanceof HttpRequest) {\n // It is. The other arguments must be undefined (per the signatures) and can be\n // ignored.\n req = (first);\n }\n else {\n // It's a string, so it represents a URL. Construct a request based on it,\n // and incorporate the remaining arguments (assuming GET unless a method is\n // provided.\n req = new HttpRequest(first, /** @type {?} */ ((url)), options.body || null, {\n headers: options.headers,\n params: options.params,\n reportProgress: options.reportProgress,\n // By default, JSON is assumed to be returned for all calls.\n responseType: options.responseType || 'json',\n withCredentials: options.withCredentials,\n });\n }\n // Start with an Observable.of() the initial request, and run the handler (which\n // includes all interceptors) inside a concatMap(). This way, the handler runs\n // inside an Observable chain, which causes interceptors to be re-run on every\n // subscription (this also makes retries re-run the handler, including interceptors).\n var /** @type {?} */ events$ = concatMap.call(of(req), function (req) { return _this.handler.handle(req); });\n // If coming via the API signature which accepts a previously constructed HttpRequest,\n // the only option is to get the event stream. Otherwise, return the event stream if\n // that is what was requested.\n if (first instanceof HttpRequest || options.observe === 'events') {\n return events$;\n }\n // The requested stream contains either the full response or the body. In either\n // case, the first step is to filter the event stream to extract a stream of\n // responses(s).\n var /** @type {?} */ res$ = filter.call(events$, function (event) { return event instanceof HttpResponse; });\n // Decide which stream to return.\n switch (options.observe || 'body') {\n case 'body':\n // The requested stream is the body. Map the response stream to the response\n // body. This could be done more simply, but a misbehaving interceptor might\n // transform the response body into a different format and ignore the requested\n // responseType. Guard against this by validating that the response is of the\n // requested type.\n switch (req.responseType) {\n case 'arraybuffer':\n return map.call(res$, function (res) {\n // Validate that the body is an ArrayBuffer.\n if (res.body !== null && !(res.body instanceof ArrayBuffer)) {\n throw new Error('Response is not an ArrayBuffer.');\n }\n return res.body;\n });\n case 'blob':\n return map.call(res$, function (res) {\n // Validate that the body is a Blob.\n if (res.body !== null && !(res.body instanceof Blob)) {\n throw new Error('Response is not a Blob.');\n }\n return res.body;\n });\n case 'text':\n return map.call(res$, function (res) {\n // Validate that the body is a string.\n if (res.body !== null && typeof res.body !== 'string') {\n throw new Error('Response is not a string.');\n }\n return res.body;\n });\n case 'json':\n default:\n // No validation needed for JSON responses, as they can be of any type.\n return map.call(res$, function (res) { return res.body; });\n }\n case 'response':\n // The response stream was requested directly, so return it.\n return res$;\n default:\n // Guard against new future observe types being added.\n throw new Error(\"Unreachable: unhandled observe type \" + options.observe + \"}\");\n }\n };\n /**\n * Constructs an `Observable` which, when subscribed, will cause the configured\n * DELETE request to be executed on the server. See the individual overloads for\n * details of `delete()`'s return type based on the provided options.\n * @param {?} url\n * @param {?=} options\n * @return {?}\n */\n HttpClient.prototype.delete = function (url, options) {\n if (options === void 0) { options = {}; }\n return this.request('DELETE', url, /** @type {?} */ (options));\n };\n /**\n * Constructs an `Observable` which, when subscribed, will cause the configured\n * GET request to be executed on the server. See the individual overloads for\n * details of `get()`'s return type based on the provided options.\n * @param {?} url\n * @param {?=} options\n * @return {?}\n */\n HttpClient.prototype.get = function (url, options) {\n if (options === void 0) { options = {}; }\n return this.request('GET', url, /** @type {?} */ (options));\n };\n /**\n * Constructs an `Observable` which, when subscribed, will cause the configured\n * HEAD request to be executed on the server. See the individual overloads for\n * details of `head()`'s return type based on the provided options.\n * @param {?} url\n * @param {?=} options\n * @return {?}\n */\n HttpClient.prototype.head = function (url, options) {\n if (options === void 0) { options = {}; }\n return this.request('HEAD', url, /** @type {?} */ (options));\n };\n /**\n * Constructs an `Observable` which, when subscribed, will cause a request\n * with the special method `JSONP` to be dispatched via the interceptor pipeline.\n *\n * A suitable interceptor must be installed (e.g. via the `HttpClientJsonpModule`).\n * If no such interceptor is reached, then the `JSONP` request will likely be\n * rejected by the configured backend.\n * @template T\n * @param {?} url\n * @param {?} callbackParam\n * @return {?}\n */\n HttpClient.prototype.jsonp = function (url, callbackParam) {\n return this.request('JSONP', url, {\n params: new HttpParams().append(callbackParam, 'JSONP_CALLBACK'),\n observe: 'body',\n responseType: 'json',\n });\n };\n /**\n * Constructs an `Observable` which, when subscribed, will cause the configured\n * OPTIONS request to be executed on the server. See the individual overloads for\n * details of `options()`'s return type based on the provided options.\n * @param {?} url\n * @param {?=} options\n * @return {?}\n */\n HttpClient.prototype.options = function (url, options) {\n if (options === void 0) { options = {}; }\n return this.request('OPTIONS', url, /** @type {?} */ (options));\n };\n /**\n * Constructs an `Observable` which, when subscribed, will cause the configured\n * PATCH request to be executed on the server. See the individual overloads for\n * details of `patch()`'s return type based on the provided options.\n * @param {?} url\n * @param {?} body\n * @param {?=} options\n * @return {?}\n */\n HttpClient.prototype.patch = function (url, body, options) {\n if (options === void 0) { options = {}; }\n return this.request('PATCH', url, addBody(options, body));\n };\n /**\n * Constructs an `Observable` which, when subscribed, will cause the configured\n * POST request to be executed on the server. See the individual overloads for\n * details of `post()`'s return type based on the provided options.\n * @param {?} url\n * @param {?} body\n * @param {?=} options\n * @return {?}\n */\n HttpClient.prototype.post = function (url, body, options) {\n if (options === void 0) { options = {}; }\n return this.request('POST', url, addBody(options, body));\n };\n /**\n * Constructs an `Observable` which, when subscribed, will cause the configured\n * POST request to be executed on the server. See the individual overloads for\n * details of `post()`'s return type based on the provided options.\n * @param {?} url\n * @param {?} body\n * @param {?=} options\n * @return {?}\n */\n HttpClient.prototype.put = function (url, body, options) {\n if (options === void 0) { options = {}; }\n return this.request('PUT', url, addBody(options, body));\n };\n return HttpClient;\n}());\nHttpClient.decorators = [\n { type: Injectable },\n];\n/**\n * @nocollapse\n */\nHttpClient.ctorParameters = function () { return [\n { type: HttpHandler, },\n]; };\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * `HttpHandler` which applies an `HttpInterceptor` to an `HttpRequest`.\n *\n * \\@experimental\n */\nvar HttpInterceptorHandler = (function () {\n /**\n * @param {?} next\n * @param {?} interceptor\n */\n function HttpInterceptorHandler(next, interceptor) {\n this.next = next;\n this.interceptor = interceptor;\n }\n /**\n * @param {?} req\n * @return {?}\n */\n HttpInterceptorHandler.prototype.handle = function (req) {\n return this.interceptor.intercept(req, this.next);\n };\n return HttpInterceptorHandler;\n}());\n/**\n * A multi-provider token which represents the array of `HttpInterceptor`s that\n * are registered.\n *\n * \\@experimental\n */\nvar HTTP_INTERCEPTORS = new InjectionToken('HTTP_INTERCEPTORS');\nvar NoopInterceptor = (function () {\n function NoopInterceptor() {\n }\n /**\n * @param {?} req\n * @param {?} next\n * @return {?}\n */\n NoopInterceptor.prototype.intercept = function (req, next) {\n return next.handle(req);\n };\n return NoopInterceptor;\n}());\nNoopInterceptor.decorators = [\n { type: Injectable },\n];\n/**\n * @nocollapse\n */\nNoopInterceptor.ctorParameters = function () { return []; };\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// Every request made through JSONP needs a callback name that's unique across the\n// whole page. Each request is assigned an id and the callback name is constructed\n// from that. The next id to be assigned is tracked in a global variable here that\n// is shared among all applications on the page.\nvar nextRequestId = 0;\n// Error text given when a JSONP script is injected, but doesn't invoke the callback\n// passed in its URL.\nvar JSONP_ERR_NO_CALLBACK = 'JSONP injected script did not invoke callback.';\n// Error text given when a request is passed to the JsonpClientBackend that doesn't\n// have a request method JSONP.\nvar JSONP_ERR_WRONG_METHOD = 'JSONP requests must use JSONP request method.';\nvar JSONP_ERR_WRONG_RESPONSE_TYPE = 'JSONP requests must use Json response type.';\n/**\n * DI token/abstract type representing a map of JSONP callbacks.\n *\n * In the browser, this should always be the `window` object.\n *\n * \\@experimental\n * @abstract\n */\nvar JsonpCallbackContext = (function () {\n function JsonpCallbackContext() {\n }\n return JsonpCallbackContext;\n}());\n/**\n * `HttpBackend` that only processes `HttpRequest` with the JSONP method,\n * by performing JSONP style requests.\n *\n * \\@experimental\n */\nvar JsonpClientBackend = (function () {\n /**\n * @param {?} callbackMap\n * @param {?} document\n */\n function JsonpClientBackend(callbackMap, document) {\n this.callbackMap = callbackMap;\n this.document = document;\n }\n /**\n * Get the name of the next callback method, by incrementing the global `nextRequestId`.\n * @return {?}\n */\n JsonpClientBackend.prototype.nextCallback = function () { return \"ng_jsonp_callback_\" + nextRequestId++; };\n /**\n * Process a JSONP request and return an event stream of the results.\n * @param {?} req\n * @return {?}\n */\n JsonpClientBackend.prototype.handle = function (req) {\n var _this = this;\n // Firstly, check both the method and response type. If either doesn't match\n // then the request was improperly routed here and cannot be handled.\n if (req.method !== 'JSONP') {\n throw new Error(JSONP_ERR_WRONG_METHOD);\n }\n else if (req.responseType !== 'json') {\n throw new Error(JSONP_ERR_WRONG_RESPONSE_TYPE);\n }\n // Everything else happens inside the Observable boundary.\n return new Observable(function (observer) {\n // The first step to make a request is to generate the callback name, and replace the\n // callback placeholder in the URL with the name. Care has to be taken here to ensure\n // a trailing &, if matched, gets inserted back into the URL in the correct place.\n var /** @type {?} */ callback = _this.nextCallback();\n var /** @type {?} */ url = req.urlWithParams.replace(/=JSONP_CALLBACK(&|$)/, \"=\" + callback + \"$1\");\n // Construct the + + +Loading... + \ No newline at end of file diff --git a/openhtf/output/web_gui/dist/js/app.7b3b5f043d8771c748e0.js b/openhtf/output/web_gui/dist/js/app.7b3b5f043d8771c748e0.js new file mode 100644 index 000000000..2e876279f --- /dev/null +++ b/openhtf/output/web_gui/dist/js/app.7b3b5f043d8771c748e0.js @@ -0,0 +1,482 @@ +webpackJsonp([1],{21:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.waiting=11]="waiting",e[e.running=12]="running",e[e.pass=13]="pass",e[e.fail=14]="fail",e[e.error=15]="error",e[e.timeout=16]="timeout",e[e.aborted=17]="aborted"}(t.TestStatus||(t.TestStatus={}));var r=function(){return function PlugDescriptor(){}}();t.PlugDescriptor=r;var i=function(){return function TestState(e){Object.assign(this,e)}}();t.TestState=i},233:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n.d(t,"HttpBackend",function(){return d}),n.d(t,"HttpHandler",function(){return p}),n.d(t,"HttpClient",function(){return C}),n.d(t,"HttpHeaders",function(){return f}),n.d(t,"HTTP_INTERCEPTORS",function(){return T}),n.d(t,"JsonpClientBackend",function(){return O}),n.d(t,"JsonpInterceptor",function(){return I}),n.d(t,"HttpClientJsonpModule",function(){return B}),n.d(t,"HttpClientModule",function(){return H}),n.d(t,"HttpClientXsrfModule",function(){return j}),n.d(t,"ɵinterceptingHandler",function(){return interceptingHandler}),n.d(t,"HttpParams",function(){return m}),n.d(t,"HttpUrlEncodingCodec",function(){return h}),n.d(t,"HttpRequest",function(){return y}),n.d(t,"HttpErrorResponse",function(){return S}),n.d(t,"HttpEventType",function(){return g}),n.d(t,"HttpHeaderResponse",function(){return b}),n.d(t,"HttpResponse",function(){return _}),n.d(t,"HttpResponseBase",function(){return v}),n.d(t,"HttpXhrBackend",function(){return D}),n.d(t,"XhrFactory",function(){return L}),n.d(t,"HttpXsrfTokenExtractor",function(){return R}),n.d(t,"ɵa",function(){return w}),n.d(t,"ɵb",function(){return P}),n.d(t,"ɵc",function(){return jsonpCallbackContext}),n.d(t,"ɵd",function(){return x}),n.d(t,"ɵg",function(){return V}),n.d(t,"ɵh",function(){return k}),n.d(t,"ɵe",function(){return M}),n.d(t,"ɵf",function(){return F});var r=n(16),i=n(2),o=n(56),s=(n.n(o),n(74)),a=(n.n(s),n(81)),u=(n.n(a),n(57)),l=(n.n(u),n(19)),c=n(0),p=(n.n(c),function(){function HttpHandler(){}return HttpHandler.prototype.handle=function(e){},HttpHandler}()),d=function(){function HttpBackend(){}return HttpBackend.prototype.handle=function(e){},HttpBackend}(),h=function(){function HttpUrlEncodingCodec(){}return HttpUrlEncodingCodec.prototype.encodeKey=function(e){return standardEncoding(e)},HttpUrlEncodingCodec.prototype.encodeValue=function(e){return standardEncoding(e)},HttpUrlEncodingCodec.prototype.decodeKey=function(e){return decodeURIComponent(e)},HttpUrlEncodingCodec.prototype.decodeValue=function(e){return decodeURIComponent(e)},HttpUrlEncodingCodec}();function standardEncoding(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/gi,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%2B/gi,"+").replace(/%3D/gi,"=").replace(/%3F/gi,"?").replace(/%2F/gi,"/")}var m=function(){function HttpParams(e){void 0===e&&(e={}),this.updates=null,this.cloneFrom=null,this.encoder=e.encoder||new h,this.map=e.fromString?function paramParser(e,t){var n=new Map;return e.length>0&&e.split("&").forEach(function(e){var r=e.indexOf("="),i=-1==r?[t.decodeKey(e),""]:[t.decodeKey(e.slice(0,r)),t.decodeValue(e.slice(r+1))],o=i[0],s=i[1],a=n.get(o)||[];a.push(s),n.set(o,a)}),n}(e.fromString,this.encoder):null}return HttpParams.prototype.has=function(e){return this.init(),this.map.has(e)},HttpParams.prototype.get=function(e){this.init();var t=this.map.get(e);return t?t[0]:null},HttpParams.prototype.getAll=function(e){return this.init(),this.map.get(e)||null},HttpParams.prototype.keys=function(){return this.init(),Array.from(this.map.keys())},HttpParams.prototype.append=function(e,t){return this.clone({param:e,value:t,op:"a"})},HttpParams.prototype.set=function(e,t){return this.clone({param:e,value:t,op:"s"})},HttpParams.prototype.delete=function(e,t){return this.clone({param:e,value:t,op:"d"})},HttpParams.prototype.toString=function(){var e=this;return this.init(),this.keys().map(function(t){var n=e.encoder.encodeKey(t);return e.map.get(t).map(function(t){return n+"="+e.encoder.encodeValue(t)}).join("&")}).join("&")},HttpParams.prototype.clone=function(e){var t=new HttpParams({encoder:this.encoder});return t.cloneFrom=this.cloneFrom||this,t.updates=(this.updates||[]).concat([e]),t},HttpParams.prototype.init=function(){var e=this;null===this.map&&(this.map=new Map),null!==this.cloneFrom&&(this.cloneFrom.init(),this.cloneFrom.keys().forEach(function(t){return e.map.set(t,e.cloneFrom.map.get(t))}),this.updates.forEach(function(t){switch(t.op){case"a":case"s":var n=("a"===t.op?e.map.get(t.param):void 0)||[];n.push(t.value),e.map.set(t.param,n);break;case"d":if(void 0===t.value){e.map.delete(t.param);break}var r=e.map.get(t.param)||[],i=r.indexOf(t.value);-1!==i&&r.splice(i,1),r.length>0?e.map.set(t.param,r):e.map.delete(t.param)}}),this.cloneFrom=null)},HttpParams}(),f=function(){function HttpHeaders(e){var t=this;this.normalizedNames=new Map,this.lazyUpdate=null,e?this.lazyInit="string"==typeof e?function(){t.headers=new Map,e.split("\n").forEach(function(e){var n=e.indexOf(":");if(n>0){var r=e.slice(0,n),i=r.toLowerCase(),o=e.slice(n+1).trim();t.maybeSetNormalizedName(r,i),t.headers.has(i)?t.headers.get(i).push(o):t.headers.set(i,[o])}})}:function(){t.headers=new Map,Object.keys(e).forEach(function(n){var r=e[n],i=n.toLowerCase();"string"==typeof r&&(r=[r]),r.length>0&&(t.headers.set(i,r),t.maybeSetNormalizedName(n,i))})}:this.headers=new Map}return HttpHeaders.prototype.has=function(e){return this.init(),this.headers.has(e.toLowerCase())},HttpHeaders.prototype.get=function(e){this.init();var t=this.headers.get(e.toLowerCase());return t&&t.length>0?t[0]:null},HttpHeaders.prototype.keys=function(){return this.init(),Array.from(this.normalizedNames.values())},HttpHeaders.prototype.getAll=function(e){return this.init(),this.headers.get(e.toLowerCase())||null},HttpHeaders.prototype.append=function(e,t){return this.clone({name:e,value:t,op:"a"})},HttpHeaders.prototype.set=function(e,t){return this.clone({name:e,value:t,op:"s"})},HttpHeaders.prototype.delete=function(e,t){return this.clone({name:e,value:t,op:"d"})},HttpHeaders.prototype.maybeSetNormalizedName=function(e,t){this.normalizedNames.has(t)||this.normalizedNames.set(t,e)},HttpHeaders.prototype.init=function(){var e=this;this.lazyInit&&(this.lazyInit instanceof HttpHeaders?this.copyFrom(this.lazyInit):this.lazyInit(),this.lazyInit=null,this.lazyUpdate&&(this.lazyUpdate.forEach(function(t){return e.applyUpdate(t)}),this.lazyUpdate=null))},HttpHeaders.prototype.copyFrom=function(e){var t=this;e.init(),Array.from(e.headers.keys()).forEach(function(n){t.headers.set(n,e.headers.get(n)),t.normalizedNames.set(n,e.normalizedNames.get(n))})},HttpHeaders.prototype.clone=function(e){var t=new HttpHeaders;return t.lazyInit=this.lazyInit&&this.lazyInit instanceof HttpHeaders?this.lazyInit:this,t.lazyUpdate=(this.lazyUpdate||[]).concat([e]),t},HttpHeaders.prototype.applyUpdate=function(e){var t=e.name.toLowerCase();switch(e.op){case"a":case"s":var n=e.value;if("string"==typeof n&&(n=[n]),0===n.length)return;this.maybeSetNormalizedName(e.name,t);var r=("a"===e.op?this.headers.get(t):void 0)||[];r.push.apply(r,n),this.headers.set(t,r);break;case"d":var i=e.value;if(i){var o=this.headers.get(t);if(!o)return;0===(o=o.filter(function(e){return-1===i.indexOf(e)})).length?(this.headers.delete(t),this.normalizedNames.delete(t)):this.headers.set(t,o)}else this.headers.delete(t),this.normalizedNames.delete(t)}},HttpHeaders.prototype.forEach=function(e){var t=this;this.init(),Array.from(this.normalizedNames.keys()).forEach(function(n){return e(t.normalizedNames.get(n),t.headers.get(n))})},HttpHeaders}(); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */function isArrayBuffer(e){return"undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer}function isBlob(e){return"undefined"!=typeof Blob&&e instanceof Blob}function isFormData(e){return"undefined"!=typeof FormData&&e instanceof FormData}var y=function(){function HttpRequest(e,t,n,r){var i;if(this.url=t,this.body=null,this.reportProgress=!1,this.withCredentials=!1,this.responseType="json",this.method=e.toUpperCase(), +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +function mightHaveBody(e){switch(e){case"DELETE":case"GET":case"HEAD":case"OPTIONS":case"JSONP":return!1;default:return!0}}(this.method)||r?(this.body=n||null,i=r):i=n,i&&(this.reportProgress=!!i.reportProgress,this.withCredentials=!!i.withCredentials,i.responseType&&(this.responseType=i.responseType),i.headers&&(this.headers=i.headers),i.params&&(this.params=i.params)),this.headers||(this.headers=new f),this.params){var o=this.params.toString();if(0===o.length)this.urlWithParams=t;else{var s=t.indexOf("?"),a=-1===s?"?":s=200&&this.status<300}}(),b=function(e){function HttpHeaderResponse(t){void 0===t&&(t={});var n=e.call(this,t)||this;return n.type=g.ResponseHeader,n}return r.a(HttpHeaderResponse,e),HttpHeaderResponse.prototype.clone=function(e){return void 0===e&&(e={}),new HttpHeaderResponse({headers:e.headers||this.headers,status:void 0!==e.status?e.status:this.status,statusText:e.statusText||this.statusText,url:e.url||this.url||void 0})},HttpHeaderResponse}(v),_=function(e){function HttpResponse(t){void 0===t&&(t={});var n=e.call(this,t)||this;return n.type=g.Response,n.body=t.body||null,n}return r.a(HttpResponse,e),HttpResponse.prototype.clone=function(e){return void 0===e&&(e={}),new HttpResponse({body:void 0!==e.body?e.body:this.body,headers:e.headers||this.headers,status:void 0!==e.status?e.status:this.status,statusText:e.statusText||this.statusText,url:e.url||this.url||void 0})},HttpResponse}(v),S=function(e){function HttpErrorResponse(t){var n=e.call(this,t,0,"Unknown Error")||this;return n.name="HttpErrorResponse",n.ok=!1,n.status>=200&&n.status<300?n.message="Http failure during parsing for "+(t.url||"(unknown url)"):n.message="Http failure response for "+(t.url||"(unknown url)")+": "+t.status+" "+t.statusText,n.error=t.error||null,n}return r.a(HttpErrorResponse,e),HttpErrorResponse}(v); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +function addBody(e,t){return{body:t,headers:e.headers,observe:e.observe,params:e.params,reportProgress:e.reportProgress,responseType:e.responseType,withCredentials:e.withCredentials}}var C=function(){function HttpClient(e){this.handler=e}return HttpClient.prototype.request=function(e,t,n){var r,i=this;void 0===n&&(n={}),r=e instanceof y?e:new y(e,t,n.body||null,{headers:n.headers,params:n.params,reportProgress:n.reportProgress,responseType:n.responseType||"json",withCredentials:n.withCredentials});var l=s.concatMap.call(Object(o.of)(r),function(e){return i.handler.handle(e)});if(e instanceof y||"events"===n.observe)return l;var c=a.filter.call(l,function(e){return e instanceof _});switch(n.observe||"body"){case"body":switch(r.responseType){case"arraybuffer":return u.map.call(c,function(e){if(null!==e.body&&!(e.body instanceof ArrayBuffer))throw new Error("Response is not an ArrayBuffer.");return e.body});case"blob":return u.map.call(c,function(e){if(null!==e.body&&!(e.body instanceof Blob))throw new Error("Response is not a Blob.");return e.body});case"text":return u.map.call(c,function(e){if(null!==e.body&&"string"!=typeof e.body)throw new Error("Response is not a string.");return e.body});case"json":default:return u.map.call(c,function(e){return e.body})}case"response":return c;default:throw new Error("Unreachable: unhandled observe type "+n.observe+"}")}},HttpClient.prototype.delete=function(e,t){return void 0===t&&(t={}),this.request("DELETE",e,t)},HttpClient.prototype.get=function(e,t){return void 0===t&&(t={}),this.request("GET",e,t)},HttpClient.prototype.head=function(e,t){return void 0===t&&(t={}),this.request("HEAD",e,t)},HttpClient.prototype.jsonp=function(e,t){return this.request("JSONP",e,{params:(new m).append(t,"JSONP_CALLBACK"),observe:"body",responseType:"json"})},HttpClient.prototype.options=function(e,t){return void 0===t&&(t={}),this.request("OPTIONS",e,t)},HttpClient.prototype.patch=function(e,t,n){return void 0===n&&(n={}),this.request("PATCH",e,addBody(n,t))},HttpClient.prototype.post=function(e,t,n){return void 0===n&&(n={}),this.request("POST",e,addBody(n,t))},HttpClient.prototype.put=function(e,t,n){return void 0===n&&(n={}),this.request("PUT",e,addBody(n,t))},HttpClient}();C.decorators=[{type:i.Injectable}],C.ctorParameters=function(){return[{type:p}]}; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +var A=function(){function HttpInterceptorHandler(e,t){this.next=e,this.interceptor=t}return HttpInterceptorHandler.prototype.handle=function(e){return this.interceptor.intercept(e,this.next)},HttpInterceptorHandler}(),T=new i.InjectionToken("HTTP_INTERCEPTORS"),w=function(){function NoopInterceptor(){}return NoopInterceptor.prototype.intercept=function(e,t){return t.handle(e)},NoopInterceptor}();w.decorators=[{type:i.Injectable}],w.ctorParameters=function(){return[]}; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +var E=0,P=function(){return function JsonpCallbackContext(){}}(),O=function(){function JsonpClientBackend(e,t){this.callbackMap=e,this.document=t}return JsonpClientBackend.prototype.nextCallback=function(){return"ng_jsonp_callback_"+E++},JsonpClientBackend.prototype.handle=function(e){var t=this;if("JSONP"!==e.method)throw new Error("JSONP requests must use JSONP request method.");if("json"!==e.responseType)throw new Error("JSONP requests must use Json response type.");return new c.Observable(function(n){var r=t.nextCallback(),i=e.urlWithParams.replace(/=JSONP_CALLBACK(&|$)/,"="+r+"$1"),o=t.document.createElement("script");o.src=i;var s=null,a=!1,u=!1;t.callbackMap[r]=function(e){delete t.callbackMap[r],u||(s=e,a=!0)};var l=function(){o.parentNode&&o.parentNode.removeChild(o),delete t.callbackMap[r]},c=function(e){u||(l(),a?(n.next(new _({body:s,status:200,statusText:"OK",url:i})),n.complete()):n.error(new S({url:i,status:0,statusText:"JSONP Error",error:new Error("JSONP injected script did not invoke callback.")})))},p=function(e){u||(l(),n.error(new S({error:e,status:0,statusText:"JSONP Error",url:i})))};return o.addEventListener("load",c),o.addEventListener("error",p),t.document.body.appendChild(o),n.next({type:g.Sent}),function(){u=!0,o.removeEventListener("load",c),o.removeEventListener("error",p),l()}})},JsonpClientBackend}();O.decorators=[{type:i.Injectable}],O.ctorParameters=function(){return[{type:P},{type:void 0,decorators:[{type:i.Inject,args:[l.DOCUMENT]}]}]};var I=function(){function JsonpInterceptor(e){this.jsonp=e}return JsonpInterceptor.prototype.intercept=function(e,t){return"JSONP"===e.method?this.jsonp.handle(e):t.handle(e)},JsonpInterceptor}();I.decorators=[{type:i.Injectable}],I.ctorParameters=function(){return[{type:O}]}; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +var N=/^\)\]\}',?\n/;var L=function(){function XhrFactory(){}return XhrFactory.prototype.build=function(){},XhrFactory}(),x=function(){function BrowserXhr(){}return BrowserXhr.prototype.build=function(){return new XMLHttpRequest},BrowserXhr}();x.decorators=[{type:i.Injectable}],x.ctorParameters=function(){return[]};var D=function(){function HttpXhrBackend(e){this.xhrFactory=e}return HttpXhrBackend.prototype.handle=function(e){var t=this;if("JSONP"===e.method)throw new Error("Attempted to construct Jsonp request without JsonpClientModule installed.");return new c.Observable(function(n){var r=t.xhrFactory.build();if(r.open(e.method,e.urlWithParams),e.withCredentials&&(r.withCredentials=!0),e.headers.forEach(function(e,t){return r.setRequestHeader(e,t.join(","))}),e.headers.has("Accept")||r.setRequestHeader("Accept","application/json, text/plain, */*"),!e.headers.has("Content-Type")){var i=e.detectContentTypeHeader();null!==i&&r.setRequestHeader("Content-Type",i)}if(e.responseType){var o=e.responseType.toLowerCase();r.responseType="json"!==o?o:"text"}var s=e.serializeBody(),a=null,u=function(){if(null!==a)return a;var t=1223===r.status?204:r.status,n=r.statusText||"OK",i=new f(r.getAllResponseHeaders()),o=function getResponseUrl(e){return"responseURL"in e&&e.responseURL?e.responseURL:/^X-Request-URL:/m.test(e.getAllResponseHeaders())?e.getResponseHeader("X-Request-URL"):null}(r)||e.url;return a=new b({headers:i,status:t,statusText:n,url:o})},l=function(){var t=u(),i=t.headers,o=t.status,s=t.statusText,a=t.url,l=null;204!==o&&(l=void 0===r.response?r.responseText:r.response),0===o&&(o=l?200:0);var c=o>=200&&o<300;if(c&&"json"===e.responseType&&"string"==typeof l){l=l.replace(N,"");try{l=JSON.parse(l)}catch(e){c=!1,l={error:e,text:l}}}else if(!c&&"json"===e.responseType&&"string"==typeof l)try{l=JSON.parse(l)}catch(e){}c?(n.next(new _({body:l,headers:i,status:o,statusText:s,url:a||void 0})),n.complete()):n.error(new S({error:l,headers:i,status:o,statusText:s,url:a||void 0}))},c=function(e){var t=new S({error:e,status:r.status||0,statusText:r.statusText||"Unknown Error"});n.error(t)},p=!1,d=function(t){p||(n.next(u()),p=!0);var i={type:g.DownloadProgress,loaded:t.loaded};t.lengthComputable&&(i.total=t.total),"text"===e.responseType&&r.responseText&&(i.partialText=r.responseText),n.next(i)},h=function(e){var t={type:g.UploadProgress,loaded:e.loaded};e.lengthComputable&&(t.total=e.total),n.next(t)};return r.addEventListener("load",l),r.addEventListener("error",c),e.reportProgress&&(r.addEventListener("progress",d),null!==s&&r.upload&&r.upload.addEventListener("progress",h)),r.send(s),n.next({type:g.Sent}),function(){r.removeEventListener("error",c),r.removeEventListener("load",l),e.reportProgress&&(r.removeEventListener("progress",d),null!==s&&r.upload&&r.upload.removeEventListener("progress",h)),r.abort()}})},HttpXhrBackend}();D.decorators=[{type:i.Injectable}],D.ctorParameters=function(){return[{type:L}]}; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +var M=new i.InjectionToken("XSRF_COOKIE_NAME"),F=new i.InjectionToken("XSRF_HEADER_NAME"),R=function(){function HttpXsrfTokenExtractor(){}return HttpXsrfTokenExtractor.prototype.getToken=function(){},HttpXsrfTokenExtractor}(),V=function(){function HttpXsrfCookieExtractor(e,t,n){this.doc=e,this.platform=t,this.cookieName=n,this.lastCookieString="",this.lastToken=null,this.parseCount=0}return HttpXsrfCookieExtractor.prototype.getToken=function(){if("server"===this.platform)return null;var e=this.doc.cookie||"";return e!==this.lastCookieString&&(this.parseCount++,this.lastToken=Object(l["ɵparseCookieValue"])(e,this.cookieName),this.lastCookieString=e),this.lastToken},HttpXsrfCookieExtractor}();V.decorators=[{type:i.Injectable}],V.ctorParameters=function(){return[{type:void 0,decorators:[{type:i.Inject,args:[l.DOCUMENT]}]},{type:void 0,decorators:[{type:i.Inject,args:[i.PLATFORM_ID]}]},{type:void 0,decorators:[{type:i.Inject,args:[M]}]}]};var k=function(){function HttpXsrfInterceptor(e,t){this.tokenService=e,this.headerName=t}return HttpXsrfInterceptor.prototype.intercept=function(e,t){var n=e.url.toLowerCase();if("GET"===e.method||"HEAD"===e.method||n.startsWith("http://")||n.startsWith("https://"))return t.handle(e);var r=this.tokenService.getToken();return null===r||e.headers.has(this.headerName)||(e=e.clone({headers:e.headers.set(this.headerName,r)})),t.handle(e)},HttpXsrfInterceptor}(); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +function interceptingHandler(e,t){return void 0===t&&(t=[]),t?t.reduceRight(function(e,t){return new A(e,t)},e):e}function jsonpCallbackContext(){return"object"==typeof window?window:{}}k.decorators=[{type:i.Injectable}],k.ctorParameters=function(){return[{type:R},{type:void 0,decorators:[{type:i.Inject,args:[F]}]}]};var j=function(){function HttpClientXsrfModule(){}return HttpClientXsrfModule.disable=function(){return{ngModule:HttpClientXsrfModule,providers:[{provide:k,useClass:w}]}},HttpClientXsrfModule.withOptions=function(e){return void 0===e&&(e={}),{ngModule:HttpClientXsrfModule,providers:[e.cookieName?{provide:M,useValue:e.cookieName}:[],e.headerName?{provide:F,useValue:e.headerName}:[]]}},HttpClientXsrfModule}();j.decorators=[{type:i.NgModule,args:[{providers:[k,{provide:T,useExisting:k,multi:!0},{provide:R,useClass:V},{provide:M,useValue:"XSRF-TOKEN"},{provide:F,useValue:"X-XSRF-TOKEN"}]}]}],j.ctorParameters=function(){return[]};var H=function(){return function HttpClientModule(){}}();H.decorators=[{type:i.NgModule,args:[{imports:[j.withOptions({cookieName:"XSRF-TOKEN",headerName:"X-XSRF-TOKEN"})],providers:[C,{provide:p,useFactory:interceptingHandler,deps:[d,[new i.Optional,new i.Inject(T)]]},D,{provide:d,useExisting:D},x,{provide:L,useExisting:x}]}]}],H.ctorParameters=function(){return[]};var B=function(){return function HttpClientJsonpModule(){}}();B.decorators=[{type:i.NgModule,args:[{providers:[O,{provide:P,useFactory:jsonpCallbackContext},{provide:T,useClass:I,multi:!0}]}]}],B.ctorParameters=function(){return[]}},234:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n.d(t,"AbstractControlDirective",function(){return l}),n.d(t,"AbstractFormGroupDirective",function(){return R}),n.d(t,"CheckboxControlValueAccessor",function(){return g}),n.d(t,"ControlContainer",function(){return c}),n.d(t,"NG_VALUE_ACCESSOR",function(){return f}),n.d(t,"COMPOSITION_BUFFER_MODE",function(){return b}),n.d(t,"DefaultValueAccessor",function(){return _}),n.d(t,"NgControl",function(){return A}),n.d(t,"NgControlStatus",function(){return j}),n.d(t,"NgControlStatusGroup",function(){return H}),n.d(t,"NgForm",function(){return K}),n.d(t,"NgModel",function(){return ie}),n.d(t,"NgModelGroup",function(){return te}),n.d(t,"RadioControlValueAccessor",function(){return E}),n.d(t,"FormControlDirective",function(){return ae}),n.d(t,"FormControlName",function(){return fe}),n.d(t,"FormGroupDirective",function(){return le}),n.d(t,"FormArrayName",function(){return he}),n.d(t,"FormGroupName",function(){return pe}),n.d(t,"NgSelectOption",function(){return L}),n.d(t,"SelectControlValueAccessor",function(){return N}),n.d(t,"SelectMultipleControlValueAccessor",function(){return D}),n.d(t,"CheckboxRequiredValidator",function(){return be}),n.d(t,"EmailValidator",function(){return Se}),n.d(t,"MaxLengthValidator",function(){return we}),n.d(t,"MinLengthValidator",function(){return Ae}),n.d(t,"PatternValidator",function(){return Pe}),n.d(t,"RequiredValidator",function(){return ve}),n.d(t,"FormBuilder",function(){return Oe}),n.d(t,"AbstractControl",function(){return B}),n.d(t,"FormArray",function(){return q}),n.d(t,"FormControl",function(){return G}),n.d(t,"FormGroup",function(){return U}),n.d(t,"NG_ASYNC_VALIDATORS",function(){return d}),n.d(t,"NG_VALIDATORS",function(){return p}),n.d(t,"Validators",function(){return m}),n.d(t,"VERSION",function(){return Ie}),n.d(t,"FormsModule",function(){return Fe}),n.d(t,"ReactiveFormsModule",function(){return Re}),n.d(t,"ɵba",function(){return Me}),n.d(t,"ɵz",function(){return De}),n.d(t,"ɵx",function(){return Le}),n.d(t,"ɵy",function(){return xe}),n.d(t,"ɵa",function(){return y}),n.d(t,"ɵb",function(){return v}),n.d(t,"ɵc",function(){return V}),n.d(t,"ɵd",function(){return k}),n.d(t,"ɵe",function(){return W}),n.d(t,"ɵf",function(){return ne}),n.d(t,"ɵg",function(){return ee}),n.d(t,"ɵbf",function(){return Ne}),n.d(t,"ɵbb",function(){return S}),n.d(t,"ɵbc",function(){return C}),n.d(t,"ɵh",function(){return T}),n.d(t,"ɵi",function(){return w}),n.d(t,"ɵbd",function(){return P}),n.d(t,"ɵbe",function(){return O}),n.d(t,"ɵj",function(){return se}),n.d(t,"ɵk",function(){return me}),n.d(t,"ɵl",function(){return ue}),n.d(t,"ɵn",function(){return de}),n.d(t,"ɵm",function(){return ce}),n.d(t,"ɵo",function(){return I}),n.d(t,"ɵq",function(){return M}),n.d(t,"ɵp",function(){return x}),n.d(t,"ɵs",function(){return ge}),n.d(t,"ɵt",function(){return _e}),n.d(t,"ɵv",function(){return Te}),n.d(t,"ɵu",function(){return Ce}),n.d(t,"ɵw",function(){return Ee}),n.d(t,"ɵr",function(){return ye});var r=n(16),i=n(2),o=n(126),s=(n.n(o),n(80)),a=(n.n(s),n(57)),u=(n.n(a),n(27)),l=function(){function AbstractControlDirective(){}return AbstractControlDirective.prototype.control=function(){},Object.defineProperty(AbstractControlDirective.prototype,"value",{get:function(){return this.control?this.control.value:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"valid",{get:function(){return this.control?this.control.valid:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"invalid",{get:function(){return this.control?this.control.invalid:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"pending",{get:function(){return this.control?this.control.pending:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"disabled",{get:function(){return this.control?this.control.disabled:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"enabled",{get:function(){return this.control?this.control.enabled:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"errors",{get:function(){return this.control?this.control.errors:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"pristine",{get:function(){return this.control?this.control.pristine:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"dirty",{get:function(){return this.control?this.control.dirty:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"touched",{get:function(){return this.control?this.control.touched:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"untouched",{get:function(){return this.control?this.control.untouched:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"statusChanges",{get:function(){return this.control?this.control.statusChanges:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"valueChanges",{get:function(){return this.control?this.control.valueChanges:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlDirective.prototype,"path",{get:function(){return null},enumerable:!0,configurable:!0}),AbstractControlDirective.prototype.reset=function(e){void 0===e&&(e=void 0),this.control&&this.control.reset(e)},AbstractControlDirective.prototype.hasError=function(e,t){return!!this.control&&this.control.hasError(e,t)},AbstractControlDirective.prototype.getError=function(e,t){return this.control?this.control.getError(e,t):null},AbstractControlDirective}(),c=function(e){function ControlContainer(){return null!==e&&e.apply(this,arguments)||this}return r.a(ControlContainer,e),Object.defineProperty(ControlContainer.prototype,"formDirective",{get:function(){return null},enumerable:!0,configurable:!0}),Object.defineProperty(ControlContainer.prototype,"path",{get:function(){return null},enumerable:!0,configurable:!0}),ControlContainer}(l); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +function isEmptyInputValue(e){return null==e||0===e.length}var p=new i.InjectionToken("NgValidators"),d=new i.InjectionToken("NgAsyncValidators"),h=/^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/,m=function(){function Validators(){}return Validators.min=function(e){return function(t){if(isEmptyInputValue(t.value)||isEmptyInputValue(e))return null;var n=parseFloat(t.value);return!isNaN(n)&&ne?{max:{max:e,actual:t.value}}:null}},Validators.required=function(e){return isEmptyInputValue(e.value)?{required:!0}:null},Validators.requiredTrue=function(e){return!0===e.value?null:{required:!0}},Validators.email=function(e){return h.test(e.value)?null:{email:!0}},Validators.minLength=function(e){return function(t){if(isEmptyInputValue(t.value))return null;var n=t.value?t.value.length:0;return ne?{maxlength:{requiredLength:e,actualLength:n}}:null}},Validators.pattern=function(e){return e?("string"==typeof e?(n="^"+e+"$",t=new RegExp(n)):(n=e.toString(),t=e),function(e){if(isEmptyInputValue(e.value))return null;var r=e.value;return t.test(r)?null:{pattern:{requiredPattern:n,actualValue:r}}}):Validators.nullValidator;var t,n},Validators.nullValidator=function(e){return null},Validators.compose=function(e){if(!e)return null;var t=e.filter(isPresent);return 0==t.length?null:function(e){return _mergeErrors(function _executeValidators(e,t){return t.map(function(t){return t(e)})}(e,t))}},Validators.composeAsync=function(e){if(!e)return null;var t=e.filter(isPresent);return 0==t.length?null:function(e){var n=function _executeAsyncValidators(e,t){return t.map(function(t){return t(e)})}(e,t).map(toObservable);return a.map.call(Object(o.forkJoin)(n),_mergeErrors)}},Validators}();function isPresent(e){return null!=e}function toObservable(e){var t=Object(i["ɵisPromise"])(e)?Object(s.fromPromise)(e):e;if(!Object(i["ɵisObservable"])(t))throw new Error("Expected validator to return Promise or Observable.");return t}function _mergeErrors(e){var t=e.reduce(function(e,t){return null!=t?Object.assign({},e,t):e},{});return 0===Object.keys(t).length?null:t} +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */var f=new i.InjectionToken("NgValueAccessor"),y={provide:f,useExisting:Object(i.forwardRef)(function(){return g}),multi:!0},g=function(){function CheckboxControlValueAccessor(e,t){this._renderer=e,this._elementRef=t,this.onChange=function(e){},this.onTouched=function(){}}return CheckboxControlValueAccessor.prototype.writeValue=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"checked",e)},CheckboxControlValueAccessor.prototype.registerOnChange=function(e){this.onChange=e},CheckboxControlValueAccessor.prototype.registerOnTouched=function(e){this.onTouched=e},CheckboxControlValueAccessor.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},CheckboxControlValueAccessor}(); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */g.decorators=[{type:i.Directive,args:[{selector:"input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]",host:{"(change)":"onChange($event.target.checked)","(blur)":"onTouched()"},providers:[y]}]}],g.ctorParameters=function(){return[{type:i.Renderer2},{type:i.ElementRef}]}; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +var v={provide:f,useExisting:Object(i.forwardRef)(function(){return _}),multi:!0};var b=new i.InjectionToken("CompositionEventMode"),_=function(){function DefaultValueAccessor(e,t,n){this._renderer=e,this._elementRef=t,this._compositionMode=n,this.onChange=function(e){},this.onTouched=function(){},this._composing=!1,null==this._compositionMode&&(this._compositionMode=!function _isAndroid(){var e=Object(u["ɵgetDOM"])()?Object(u["ɵgetDOM"])().getUserAgent():"";return/android (\d+)/.test(e.toLowerCase())}())}return DefaultValueAccessor.prototype.writeValue=function(e){var t=null==e?"":e;this._renderer.setProperty(this._elementRef.nativeElement,"value",t)},DefaultValueAccessor.prototype.registerOnChange=function(e){this.onChange=e},DefaultValueAccessor.prototype.registerOnTouched=function(e){this.onTouched=e},DefaultValueAccessor.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},DefaultValueAccessor.prototype._handleInput=function(e){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(e)},DefaultValueAccessor.prototype._compositionStart=function(){this._composing=!0},DefaultValueAccessor.prototype._compositionEnd=function(e){this._composing=!1,this._compositionMode&&this.onChange(e)},DefaultValueAccessor}(); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +function normalizeValidator(e){return e.validate?function(t){return e.validate(t)}:e}function normalizeAsyncValidator(e){return e.validate?function(t){return e.validate(t)}:e} +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */_.decorators=[{type:i.Directive,args:[{selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]",host:{"(input)":"_handleInput($event.target.value)","(blur)":"onTouched()","(compositionstart)":"_compositionStart()","(compositionend)":"_compositionEnd($event.target.value)"},providers:[v]}]}],_.ctorParameters=function(){return[{type:i.Renderer2},{type:i.ElementRef},{type:void 0,decorators:[{type:i.Optional},{type:i.Inject,args:[b]}]}]};var S={provide:f,useExisting:Object(i.forwardRef)(function(){return C}),multi:!0},C=function(){function NumberValueAccessor(e,t){this._renderer=e,this._elementRef=t,this.onChange=function(e){},this.onTouched=function(){}}return NumberValueAccessor.prototype.writeValue=function(e){var t=null==e?"":e;this._renderer.setProperty(this._elementRef.nativeElement,"value",t)},NumberValueAccessor.prototype.registerOnChange=function(e){this.onChange=function(t){e(""==t?null:parseFloat(t))}},NumberValueAccessor.prototype.registerOnTouched=function(e){this.onTouched=e},NumberValueAccessor.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},NumberValueAccessor}(); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +function unimplemented(){throw new Error("unimplemented")}C.decorators=[{type:i.Directive,args:[{selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]",host:{"(change)":"onChange($event.target.value)","(input)":"onChange($event.target.value)","(blur)":"onTouched()"},providers:[S]}]}],C.ctorParameters=function(){return[{type:i.Renderer2},{type:i.ElementRef}]};var A=function(e){function NgControl(){var t=e.apply(this,arguments)||this;return t._parent=null,t.name=null,t.valueAccessor=null,t._rawValidators=[],t._rawAsyncValidators=[],t}return r.a(NgControl,e),Object.defineProperty(NgControl.prototype,"validator",{get:function(){return unimplemented()},enumerable:!0,configurable:!0}),Object.defineProperty(NgControl.prototype,"asyncValidator",{get:function(){return unimplemented()},enumerable:!0,configurable:!0}),NgControl.prototype.viewToModelUpdate=function(e){},NgControl}(l),T={provide:f,useExisting:Object(i.forwardRef)(function(){return E}),multi:!0},w=function(){function RadioControlRegistry(){this._accessors=[]}return RadioControlRegistry.prototype.add=function(e,t){this._accessors.push([e,t])},RadioControlRegistry.prototype.remove=function(e){for(var t=this._accessors.length-1;t>=0;--t)if(this._accessors[t][1]===e)return void this._accessors.splice(t,1)},RadioControlRegistry.prototype.select=function(e){var t=this;this._accessors.forEach(function(n){t._isSameGroup(n,e)&&n[1]!==e&&n[1].fireUncheck(e.value)})},RadioControlRegistry.prototype._isSameGroup=function(e,t){return!!e[0].control&&(e[0]._parent===t._control._parent&&e[1].name===t.name)},RadioControlRegistry}(); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */w.decorators=[{type:i.Injectable}],w.ctorParameters=function(){return[]};var E=function(){function RadioControlValueAccessor(e,t,n,r){this._renderer=e,this._elementRef=t,this._registry=n,this._injector=r,this.onChange=function(){},this.onTouched=function(){}}return RadioControlValueAccessor.prototype.ngOnInit=function(){this._control=this._injector.get(A),this._checkName(),this._registry.add(this._control,this)},RadioControlValueAccessor.prototype.ngOnDestroy=function(){this._registry.remove(this)},RadioControlValueAccessor.prototype.writeValue=function(e){this._state=e===this.value,this._renderer.setProperty(this._elementRef.nativeElement,"checked",this._state)},RadioControlValueAccessor.prototype.registerOnChange=function(e){var t=this;this._fn=e,this.onChange=function(){e(t.value),t._registry.select(t)}},RadioControlValueAccessor.prototype.fireUncheck=function(e){this.writeValue(e)},RadioControlValueAccessor.prototype.registerOnTouched=function(e){this.onTouched=e},RadioControlValueAccessor.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},RadioControlValueAccessor.prototype._checkName=function(){this.name&&this.formControlName&&this.name!==this.formControlName&&this._throwNameError(),!this.name&&this.formControlName&&(this.name=this.formControlName)},RadioControlValueAccessor.prototype._throwNameError=function(){throw new Error('\n If you define both a name and a formControlName attribute on your radio button, their values\n must match. Ex: \n ')},RadioControlValueAccessor}();E.decorators=[{type:i.Directive,args:[{selector:"input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]",host:{"(change)":"onChange()","(blur)":"onTouched()"},providers:[T]}]}],E.ctorParameters=function(){return[{type:i.Renderer2},{type:i.ElementRef},{type:w},{type:i.Injector}]},E.propDecorators={name:[{type:i.Input}],formControlName:[{type:i.Input}],value:[{type:i.Input}]}; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +var P={provide:f,useExisting:Object(i.forwardRef)(function(){return O}),multi:!0},O=function(){function RangeValueAccessor(e,t){this._renderer=e,this._elementRef=t,this.onChange=function(e){},this.onTouched=function(){}}return RangeValueAccessor.prototype.writeValue=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"value",parseFloat(e))},RangeValueAccessor.prototype.registerOnChange=function(e){this.onChange=function(t){e(""==t?null:parseFloat(t))}},RangeValueAccessor.prototype.registerOnTouched=function(e){this.onTouched=e},RangeValueAccessor.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},RangeValueAccessor}();O.decorators=[{type:i.Directive,args:[{selector:"input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]",host:{"(change)":"onChange($event.target.value)","(input)":"onChange($event.target.value)","(blur)":"onTouched()"},providers:[P]}]}],O.ctorParameters=function(){return[{type:i.Renderer2},{type:i.ElementRef}]}; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +var I={provide:f,useExisting:Object(i.forwardRef)(function(){return N}),multi:!0};function _buildValueString(e,t){return null==e?""+t:(t&&"object"==typeof t&&(t="Object"),(e+": "+t).slice(0,50))}var N=function(){function SelectControlValueAccessor(e,t){this._renderer=e,this._elementRef=t,this._optionMap=new Map,this._idCounter=0,this.onChange=function(e){},this.onTouched=function(){},this._compareWith=i["ɵlooseIdentical"]}return Object.defineProperty(SelectControlValueAccessor.prototype,"compareWith",{set:function(e){if("function"!=typeof e)throw new Error("compareWith must be a function, but received "+JSON.stringify(e));this._compareWith=e},enumerable:!0,configurable:!0}),SelectControlValueAccessor.prototype.writeValue=function(e){this.value=e;var t=this._getOptionId(e);null==t&&this._renderer.setProperty(this._elementRef.nativeElement,"selectedIndex",-1);var n=_buildValueString(t,e);this._renderer.setProperty(this._elementRef.nativeElement,"value",n)},SelectControlValueAccessor.prototype.registerOnChange=function(e){var t=this;this.onChange=function(n){t.value=t._getOptionValue(n),e(t.value)}},SelectControlValueAccessor.prototype.registerOnTouched=function(e){this.onTouched=e},SelectControlValueAccessor.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},SelectControlValueAccessor.prototype._registerOption=function(){return(this._idCounter++).toString()},SelectControlValueAccessor.prototype._getOptionId=function(e){for(var t=0,n=Array.from(this._optionMap.keys());t-1)}}else t=function(e,t){e._setSelected(!1)};this._optionMap.forEach(t)},SelectMultipleControlValueAccessor.prototype.registerOnChange=function(e){var t=this;this.onChange=function(n){var r=[];if(n.hasOwnProperty("selectedOptions"))for(var i=n.selectedOptions,o=0;o1?"path: '"+e.path.join(" -> ")+"'":e.path[0]?"name: '"+e.path+"'":"unspecified name attribute",new Error(t+" "+n)}function composeValidators(e){return null!=e?m.compose(e.map(normalizeValidator)):null}function composeAsyncValidators(e){return null!=e?m.composeAsync(e.map(normalizeAsyncValidator)):null}function isPropertyUpdated(e,t){if(!e.hasOwnProperty("model"))return!1;var n=e.model;return!!n.isFirstChange()||!Object(i["ɵlooseIdentical"])(t,n.currentValue)}M.decorators=[{type:i.Directive,args:[{selector:"option"}]}],M.ctorParameters=function(){return[{type:i.ElementRef},{type:i.Renderer2},{type:D,decorators:[{type:i.Optional},{type:i.Host}]}]},M.propDecorators={ngValue:[{type:i.Input,args:["ngValue"]}],value:[{type:i.Input,args:["value"]}]};var F=[g,O,C,N,D,E];function selectValueAccessor(e,t){if(!t)return null;var n=void 0,r=void 0,i=void 0;return t.forEach(function(t){t.constructor===_?n=t:!function isBuiltInAccessor(e){return F.some(function(t){return e.constructor===t})}(t)?(i&&_throwError(e,"More than one custom value accessor matches form control with"),i=t):(r&&_throwError(e,"More than one built-in value accessor matches form control with"),r=t)}),i||(r||(n||(_throwError(e,"No valid value accessor for form control with"),null)))} +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */var R=function(e){function AbstractFormGroupDirective(){return null!==e&&e.apply(this,arguments)||this}return r.a(AbstractFormGroupDirective,e),AbstractFormGroupDirective.prototype.ngOnInit=function(){this._checkParentType(),this.formDirective.addFormGroup(this)},AbstractFormGroupDirective.prototype.ngOnDestroy=function(){this.formDirective&&this.formDirective.removeFormGroup(this)},Object.defineProperty(AbstractFormGroupDirective.prototype,"control",{get:function(){return this.formDirective.getFormGroup(this)},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractFormGroupDirective.prototype,"path",{get:function(){return controlPath(this.name,this._parent)},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractFormGroupDirective.prototype,"formDirective",{get:function(){return this._parent?this._parent.formDirective:null},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractFormGroupDirective.prototype,"validator",{get:function(){return composeValidators(this._validators)},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractFormGroupDirective.prototype,"asyncValidator",{get:function(){return composeAsyncValidators(this._asyncValidators)},enumerable:!0,configurable:!0}),AbstractFormGroupDirective.prototype._checkParentType=function(){},AbstractFormGroupDirective}(c),V=function(){function AbstractControlStatus(e){this._cd=e}return Object.defineProperty(AbstractControlStatus.prototype,"ngClassUntouched",{get:function(){return!!this._cd.control&&this._cd.control.untouched},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlStatus.prototype,"ngClassTouched",{get:function(){return!!this._cd.control&&this._cd.control.touched},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlStatus.prototype,"ngClassPristine",{get:function(){return!!this._cd.control&&this._cd.control.pristine},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlStatus.prototype,"ngClassDirty",{get:function(){return!!this._cd.control&&this._cd.control.dirty},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlStatus.prototype,"ngClassValid",{get:function(){return!!this._cd.control&&this._cd.control.valid},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlStatus.prototype,"ngClassInvalid",{get:function(){return!!this._cd.control&&this._cd.control.invalid},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControlStatus.prototype,"ngClassPending",{get:function(){return!!this._cd.control&&this._cd.control.pending},enumerable:!0,configurable:!0}),AbstractControlStatus}(),k={"[class.ng-untouched]":"ngClassUntouched","[class.ng-touched]":"ngClassTouched","[class.ng-pristine]":"ngClassPristine","[class.ng-dirty]":"ngClassDirty","[class.ng-valid]":"ngClassValid","[class.ng-invalid]":"ngClassInvalid","[class.ng-pending]":"ngClassPending"},j=function(e){function NgControlStatus(t){return e.call(this,t)||this}return r.a(NgControlStatus,e),NgControlStatus}(V); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */j.decorators=[{type:i.Directive,args:[{selector:"[formControlName],[ngModel],[formControl]",host:k}]}],j.ctorParameters=function(){return[{type:A,decorators:[{type:i.Self}]}]};var H=function(e){function NgControlStatusGroup(t){return e.call(this,t)||this}return r.a(NgControlStatusGroup,e),NgControlStatusGroup}(V);H.decorators=[{type:i.Directive,args:[{selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]",host:k}]}],H.ctorParameters=function(){return[{type:c,decorators:[{type:i.Self}]}]};function coerceToValidator(e){return Array.isArray(e)?composeValidators(e):e||null}function coerceToAsyncValidator(e){return Array.isArray(e)?composeAsyncValidators(e):e||null}var B=function(){function AbstractControl(e,t){this.validator=e,this.asyncValidator=t,this._onCollectionChange=function(){},this._pristine=!0,this._touched=!1,this._onDisabledChange=[]}return Object.defineProperty(AbstractControl.prototype,"value",{get:function(){return this._value},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControl.prototype,"parent",{get:function(){return this._parent},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControl.prototype,"status",{get:function(){return this._status},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControl.prototype,"valid",{get:function(){return"VALID"===this._status},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControl.prototype,"invalid",{get:function(){return"INVALID"===this._status},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControl.prototype,"pending",{get:function(){return"PENDING"==this._status},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControl.prototype,"disabled",{get:function(){return"DISABLED"===this._status},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControl.prototype,"enabled",{get:function(){return"DISABLED"!==this._status},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControl.prototype,"errors",{get:function(){return this._errors},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControl.prototype,"pristine",{get:function(){return this._pristine},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControl.prototype,"dirty",{get:function(){return!this.pristine},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControl.prototype,"touched",{get:function(){return this._touched},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControl.prototype,"untouched",{get:function(){return!this._touched},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControl.prototype,"valueChanges",{get:function(){return this._valueChanges},enumerable:!0,configurable:!0}),Object.defineProperty(AbstractControl.prototype,"statusChanges",{get:function(){return this._statusChanges},enumerable:!0,configurable:!0}),AbstractControl.prototype.setValidators=function(e){this.validator=coerceToValidator(e)},AbstractControl.prototype.setAsyncValidators=function(e){this.asyncValidator=coerceToAsyncValidator(e)},AbstractControl.prototype.clearValidators=function(){this.validator=null},AbstractControl.prototype.clearAsyncValidators=function(){this.asyncValidator=null},AbstractControl.prototype.markAsTouched=function(e){void 0===e&&(e={}),this._touched=!0,this._parent&&!e.onlySelf&&this._parent.markAsTouched(e)},AbstractControl.prototype.markAsUntouched=function(e){void 0===e&&(e={}),this._touched=!1,this._forEachChild(function(e){e.markAsUntouched({onlySelf:!0})}),this._parent&&!e.onlySelf&&this._parent._updateTouched(e)},AbstractControl.prototype.markAsDirty=function(e){void 0===e&&(e={}),this._pristine=!1,this._parent&&!e.onlySelf&&this._parent.markAsDirty(e)},AbstractControl.prototype.markAsPristine=function(e){void 0===e&&(e={}),this._pristine=!0,this._forEachChild(function(e){e.markAsPristine({onlySelf:!0})}),this._parent&&!e.onlySelf&&this._parent._updatePristine(e)},AbstractControl.prototype.markAsPending=function(e){void 0===e&&(e={}),this._status="PENDING",this._parent&&!e.onlySelf&&this._parent.markAsPending(e)},AbstractControl.prototype.disable=function(e){void 0===e&&(e={}),this._status="DISABLED",this._errors=null,this._forEachChild(function(e){e.disable({onlySelf:!0})}),this._updateValue(),!1!==e.emitEvent&&(this._valueChanges.emit(this._value),this._statusChanges.emit(this._status)),this._updateAncestors(!!e.onlySelf),this._onDisabledChange.forEach(function(e){return e(!0)})},AbstractControl.prototype.enable=function(e){void 0===e&&(e={}),this._status="VALID",this._forEachChild(function(e){e.enable({onlySelf:!0})}),this.updateValueAndValidity({onlySelf:!0,emitEvent:e.emitEvent}),this._updateAncestors(!!e.onlySelf),this._onDisabledChange.forEach(function(e){return e(!1)})},AbstractControl.prototype._updateAncestors=function(e){this._parent&&!e&&(this._parent.updateValueAndValidity(),this._parent._updatePristine(),this._parent._updateTouched())},AbstractControl.prototype.setParent=function(e){this._parent=e},AbstractControl.prototype.setValue=function(e,t){},AbstractControl.prototype.patchValue=function(e,t){},AbstractControl.prototype.reset=function(e,t){},AbstractControl.prototype.updateValueAndValidity=function(e){void 0===e&&(e={}),this._setInitialStatus(),this._updateValue(),this.enabled&&(this._cancelExistingSubscription(),this._errors=this._runValidator(),this._status=this._calculateStatus(),"VALID"!==this._status&&"PENDING"!==this._status||this._runAsyncValidator(e.emitEvent)),!1!==e.emitEvent&&(this._valueChanges.emit(this._value),this._statusChanges.emit(this._status)),this._parent&&!e.onlySelf&&this._parent.updateValueAndValidity(e)},AbstractControl.prototype._updateTreeValidity=function(e){void 0===e&&(e={emitEvent:!0}),this._forEachChild(function(t){return t._updateTreeValidity(e)}),this.updateValueAndValidity({onlySelf:!0,emitEvent:e.emitEvent})},AbstractControl.prototype._setInitialStatus=function(){this._status=this._allControlsDisabled()?"DISABLED":"VALID"},AbstractControl.prototype._runValidator=function(){return this.validator?this.validator(this):null},AbstractControl.prototype._runAsyncValidator=function(e){var t=this;if(this.asyncValidator){this._status="PENDING";var n=toObservable(this.asyncValidator(this));this._asyncValidationSubscription=n.subscribe(function(n){return t.setErrors(n,{emitEvent:e})})}},AbstractControl.prototype._cancelExistingSubscription=function(){this._asyncValidationSubscription&&this._asyncValidationSubscription.unsubscribe()},AbstractControl.prototype.setErrors=function(e,t){void 0===t&&(t={}),this._errors=e,this._updateControlsErrors(!1!==t.emitEvent)},AbstractControl.prototype.get=function(e){return function _find(e,t,n){return null==t?null:(t instanceof Array||(t=t.split(n)),t instanceof Array&&0===t.length?null:t.reduce(function(e,t){return e instanceof U?e.controls[t]||null:e instanceof q&&e.at(t)||null},e))}(this,e,".")},AbstractControl.prototype.getError=function(e,t){var n=t?this.get(t):this;return n&&n._errors?n._errors[e]:null},AbstractControl.prototype.hasError=function(e,t){return!!this.getError(e,t)},Object.defineProperty(AbstractControl.prototype,"root",{get:function(){for(var e=this;e._parent;)e=e._parent;return e},enumerable:!0,configurable:!0}),AbstractControl.prototype._updateControlsErrors=function(e){this._status=this._calculateStatus(),e&&this._statusChanges.emit(this._status),this._parent&&this._parent._updateControlsErrors(e)},AbstractControl.prototype._initObservables=function(){this._valueChanges=new i.EventEmitter,this._statusChanges=new i.EventEmitter},AbstractControl.prototype._calculateStatus=function(){return this._allControlsDisabled()?"DISABLED":this._errors?"INVALID":this._anyControlsHaveStatus("PENDING")?"PENDING":this._anyControlsHaveStatus("INVALID")?"INVALID":"VALID"},AbstractControl.prototype._updateValue=function(){},AbstractControl.prototype._forEachChild=function(e){},AbstractControl.prototype._anyControls=function(e){},AbstractControl.prototype._allControlsDisabled=function(){},AbstractControl.prototype._anyControlsHaveStatus=function(e){return this._anyControls(function(t){return t.status===e})},AbstractControl.prototype._anyControlsDirty=function(){return this._anyControls(function(e){return e.dirty})},AbstractControl.prototype._anyControlsTouched=function(){return this._anyControls(function(e){return e.touched})},AbstractControl.prototype._updatePristine=function(e){void 0===e&&(e={}),this._pristine=!this._anyControlsDirty(),this._parent&&!e.onlySelf&&this._parent._updatePristine(e)},AbstractControl.prototype._updateTouched=function(e){void 0===e&&(e={}),this._touched=this._anyControlsTouched(),this._parent&&!e.onlySelf&&this._parent._updateTouched(e)},AbstractControl.prototype._isBoxedValue=function(e){return"object"==typeof e&&null!==e&&2===Object.keys(e).length&&"value"in e&&"disabled"in e},AbstractControl.prototype._registerOnCollectionChange=function(e){this._onCollectionChange=e},AbstractControl}(),G=function(e){function FormControl(t,n,r){void 0===t&&(t=null);var i=e.call(this,coerceToValidator(n),coerceToAsyncValidator(r))||this;return i._onChange=[],i._applyFormState(t),i.updateValueAndValidity({onlySelf:!0,emitEvent:!1}),i._initObservables(),i}return r.a(FormControl,e),FormControl.prototype.setValue=function(e,t){var n=this;void 0===t&&(t={}),this._value=e,this._onChange.length&&!1!==t.emitModelToViewChange&&this._onChange.forEach(function(e){return e(n._value,!1!==t.emitViewToModelChange)}),this.updateValueAndValidity(t)},FormControl.prototype.patchValue=function(e,t){void 0===t&&(t={}),this.setValue(e,t)},FormControl.prototype.reset=function(e,t){void 0===e&&(e=null),void 0===t&&(t={}),this._applyFormState(e),this.markAsPristine(t),this.markAsUntouched(t),this.setValue(this._value,t)},FormControl.prototype._updateValue=function(){},FormControl.prototype._anyControls=function(e){return!1},FormControl.prototype._allControlsDisabled=function(){return this.disabled},FormControl.prototype.registerOnChange=function(e){this._onChange.push(e)},FormControl.prototype._clearChangeFns=function(){this._onChange=[],this._onDisabledChange=[],this._onCollectionChange=function(){}},FormControl.prototype.registerOnDisabledChange=function(e){this._onDisabledChange.push(e)},FormControl.prototype._forEachChild=function(e){},FormControl.prototype._applyFormState=function(e){this._isBoxedValue(e)?(this._value=e.value,e.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this._value=e},FormControl}(B),U=function(e){function FormGroup(t,n,r){var i=e.call(this,n||null,r||null)||this;return i.controls=t,i._initObservables(),i._setUpControls(),i.updateValueAndValidity({onlySelf:!0,emitEvent:!1}),i}return r.a(FormGroup,e),FormGroup.prototype.registerControl=function(e,t){return this.controls[e]?this.controls[e]:(this.controls[e]=t,t.setParent(this),t._registerOnCollectionChange(this._onCollectionChange),t)},FormGroup.prototype.addControl=function(e,t){this.registerControl(e,t),this.updateValueAndValidity(),this._onCollectionChange()},FormGroup.prototype.removeControl=function(e){this.controls[e]&&this.controls[e]._registerOnCollectionChange(function(){}),delete this.controls[e],this.updateValueAndValidity(),this._onCollectionChange()},FormGroup.prototype.setControl=function(e,t){this.controls[e]&&this.controls[e]._registerOnCollectionChange(function(){}),delete this.controls[e],t&&this.registerControl(e,t),this.updateValueAndValidity(),this._onCollectionChange()},FormGroup.prototype.contains=function(e){return this.controls.hasOwnProperty(e)&&this.controls[e].enabled},FormGroup.prototype.setValue=function(e,t){var n=this;void 0===t&&(t={}),this._checkAllValuesPresent(e),Object.keys(e).forEach(function(r){n._throwIfControlMissing(r),n.controls[r].setValue(e[r],{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t)},FormGroup.prototype.patchValue=function(e,t){var n=this;void 0===t&&(t={}),Object.keys(e).forEach(function(r){n.controls[r]&&n.controls[r].patchValue(e[r],{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t)},FormGroup.prototype.reset=function(e,t){void 0===e&&(e={}),void 0===t&&(t={}),this._forEachChild(function(n,r){n.reset(e[r],{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t),this._updatePristine(t),this._updateTouched(t)},FormGroup.prototype.getRawValue=function(){return this._reduceChildren({},function(e,t,n){return e[n]=t instanceof G?t.value:t.getRawValue(),e})},FormGroup.prototype._throwIfControlMissing=function(e){if(!Object.keys(this.controls).length)throw new Error("\n There are no form controls registered with this group yet. If you're using ngModel,\n you may want to check next tick (e.g. use setTimeout).\n ");if(!this.controls[e])throw new Error("Cannot find form control with name: "+e+".")},FormGroup.prototype._forEachChild=function(e){var t=this;Object.keys(this.controls).forEach(function(n){return e(t.controls[n],n)})},FormGroup.prototype._setUpControls=function(){var e=this;this._forEachChild(function(t){t.setParent(e),t._registerOnCollectionChange(e._onCollectionChange)})},FormGroup.prototype._updateValue=function(){this._value=this._reduceValue()},FormGroup.prototype._anyControls=function(e){var t=this,n=!1;return this._forEachChild(function(r,i){n=n||t.contains(i)&&e(r)}),n},FormGroup.prototype._reduceValue=function(){var e=this;return this._reduceChildren({},function(t,n,r){return(n.enabled||e.disabled)&&(t[r]=n.value),t})},FormGroup.prototype._reduceChildren=function(e,t){var n=e;return this._forEachChild(function(e,r){n=t(n,e,r)}),n},FormGroup.prototype._allControlsDisabled=function(){for(var e=0,t=Object.keys(this.controls);e0||this.disabled},FormGroup.prototype._checkAllValuesPresent=function(e){this._forEachChild(function(t,n){if(void 0===e[n])throw new Error("Must supply a value for form control with name: '"+n+"'.")})},FormGroup}(B),q=function(e){function FormArray(t,n,r){var i=e.call(this,n||null,r||null)||this;return i.controls=t,i._initObservables(),i._setUpControls(),i.updateValueAndValidity({onlySelf:!0,emitEvent:!1}),i}return r.a(FormArray,e),FormArray.prototype.at=function(e){return this.controls[e]},FormArray.prototype.push=function(e){this.controls.push(e),this._registerControl(e),this.updateValueAndValidity(),this._onCollectionChange()},FormArray.prototype.insert=function(e,t){this.controls.splice(e,0,t),this._registerControl(t),this.updateValueAndValidity(),this._onCollectionChange()},FormArray.prototype.removeAt=function(e){this.controls[e]&&this.controls[e]._registerOnCollectionChange(function(){}),this.controls.splice(e,1),this.updateValueAndValidity(),this._onCollectionChange()},FormArray.prototype.setControl=function(e,t){this.controls[e]&&this.controls[e]._registerOnCollectionChange(function(){}),this.controls.splice(e,1),t&&(this.controls.splice(e,0,t),this._registerControl(t)),this.updateValueAndValidity(),this._onCollectionChange()},Object.defineProperty(FormArray.prototype,"length",{get:function(){return this.controls.length},enumerable:!0,configurable:!0}),FormArray.prototype.setValue=function(e,t){var n=this;void 0===t&&(t={}),this._checkAllValuesPresent(e),e.forEach(function(e,r){n._throwIfControlMissing(r),n.at(r).setValue(e,{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t)},FormArray.prototype.patchValue=function(e,t){var n=this;void 0===t&&(t={}),e.forEach(function(e,r){n.at(r)&&n.at(r).patchValue(e,{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t)},FormArray.prototype.reset=function(e,t){void 0===e&&(e=[]),void 0===t&&(t={}),this._forEachChild(function(n,r){n.reset(e[r],{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t),this._updatePristine(t),this._updateTouched(t)},FormArray.prototype.getRawValue=function(){return this.controls.map(function(e){return e instanceof G?e.value:e.getRawValue()})},FormArray.prototype._throwIfControlMissing=function(e){if(!this.controls.length)throw new Error("\n There are no form controls registered with this array yet. If you're using ngModel,\n you may want to check next tick (e.g. use setTimeout).\n ");if(!this.at(e))throw new Error("Cannot find form control at index "+e)},FormArray.prototype._forEachChild=function(e){this.controls.forEach(function(t,n){e(t,n)})},FormArray.prototype._updateValue=function(){var e=this;this._value=this.controls.filter(function(t){return t.enabled||e.disabled}).map(function(e){return e.value})},FormArray.prototype._anyControls=function(e){return this.controls.some(function(t){return t.enabled&&e(t)})},FormArray.prototype._setUpControls=function(){var e=this;this._forEachChild(function(t){return e._registerControl(t)})},FormArray.prototype._checkAllValuesPresent=function(e){this._forEachChild(function(t,n){if(void 0===e[n])throw new Error("Must supply a value for form control at index: "+n+".")})},FormArray.prototype._allControlsDisabled=function(){for(var e=0,t=this.controls;e0||this.disabled},FormArray.prototype._registerControl=function(e){e.setParent(this),e._registerOnCollectionChange(this._onCollectionChange)},FormArray}(B),W={provide:c,useExisting:Object(i.forwardRef)(function(){return K})},z=Promise.resolve(null),K=function(e){function NgForm(t,n){var r=e.call(this)||this;return r._submitted=!1,r.ngSubmit=new i.EventEmitter,r.form=new U({},composeValidators(t),composeAsyncValidators(n)),r}return r.a(NgForm,e),Object.defineProperty(NgForm.prototype,"submitted",{get:function(){return this._submitted},enumerable:!0,configurable:!0}),Object.defineProperty(NgForm.prototype,"formDirective",{get:function(){return this},enumerable:!0,configurable:!0}),Object.defineProperty(NgForm.prototype,"control",{get:function(){return this.form},enumerable:!0,configurable:!0}),Object.defineProperty(NgForm.prototype,"path",{get:function(){return[]},enumerable:!0,configurable:!0}),Object.defineProperty(NgForm.prototype,"controls",{get:function(){return this.form.controls},enumerable:!0,configurable:!0}),NgForm.prototype.addControl=function(e){var t=this;z.then(function(){var n=t._findContainer(e.path);e._control=n.registerControl(e.name,e.control),setUpControl(e.control,e),e.control.updateValueAndValidity({emitEvent:!1})})},NgForm.prototype.getControl=function(e){return this.form.get(e.path)},NgForm.prototype.removeControl=function(e){var t=this;z.then(function(){var n=t._findContainer(e.path);n&&n.removeControl(e.name)})},NgForm.prototype.addFormGroup=function(e){var t=this;z.then(function(){var n=t._findContainer(e.path),r=new U({});setUpFormContainer(r,e),n.registerControl(e.name,r),r.updateValueAndValidity({emitEvent:!1})})},NgForm.prototype.removeFormGroup=function(e){var t=this;z.then(function(){var n=t._findContainer(e.path);n&&n.removeControl(e.name)})},NgForm.prototype.getFormGroup=function(e){return this.form.get(e.path)},NgForm.prototype.updateModel=function(e,t){var n=this;z.then(function(){n.form.get(e.path).setValue(t)})},NgForm.prototype.setValue=function(e){this.control.setValue(e)},NgForm.prototype.onSubmit=function(e){return this._submitted=!0,this.ngSubmit.emit(e),!1},NgForm.prototype.onReset=function(){this.resetForm()},NgForm.prototype.resetForm=function(e){void 0===e&&(e=void 0),this.form.reset(e),this._submitted=!1},NgForm.prototype._findContainer=function(e){return e.pop(),e.length?this.form.get(e):this.form},NgForm}(c);K.decorators=[{type:i.Directive,args:[{selector:"form:not([ngNoForm]):not([formGroup]),ngForm,[ngForm]",providers:[W],host:{"(submit)":"onSubmit($event)","(reset)":"onReset()"},outputs:["ngSubmit"],exportAs:"ngForm"}]}],K.ctorParameters=function(){return[{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[p]}]},{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[d]}]}]}; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +var Y='\n
    \n \n
    \n\n In your class:\n\n this.myGroup = new FormGroup({\n firstName: new FormControl()\n });',J='\n
    \n
    \n \n
    \n
    \n\n In your class:\n\n this.myGroup = new FormGroup({\n person: new FormGroup({ firstName: new FormControl() })\n });',Q='\n
    \n
    \n
    \n \n
    \n
    \n
    \n\n In your class:\n\n this.cityArray = new FormArray([new FormControl(\'SF\')]);\n this.myGroup = new FormGroup({\n cities: this.cityArray\n });',X='\n
    \n
    \n \n
    \n
    ',$='\n
    \n \n \n
    \n ',Z=function(){function TemplateDrivenErrors(){}return TemplateDrivenErrors.modelParentException=function(){throw new Error('\n ngModel cannot be used to register form controls with a parent formGroup directive. Try using\n formGroup\'s partner directive "formControlName" instead. Example:\n\n '+Y+"\n\n Or, if you'd like to avoid registering this form control, indicate that it's standalone in ngModelOptions:\n\n Example:\n\n "+$)},TemplateDrivenErrors.formGroupNameException=function(){throw new Error("\n ngModel cannot be used to register form controls with a parent formGroupName or formArrayName directive.\n\n Option 1: Use formControlName instead of ngModel (reactive strategy):\n\n "+J+"\n\n Option 2: Update ngModel's parent be ngModelGroup (template-driven strategy):\n\n "+X)},TemplateDrivenErrors.missingNameException=function(){throw new Error('If ngModel is used within a form tag, either the name attribute must be set or the form\n control must be defined as \'standalone\' in ngModelOptions.\n\n Example 1: \n Example 2: ')},TemplateDrivenErrors.modelGroupParentException=function(){throw new Error("\n ngModelGroup cannot be used with a parent formGroup directive.\n\n Option 1: Use formGroupName instead of ngModelGroup (reactive strategy):\n\n "+J+"\n\n Option 2: Use a regular form tag instead of the formGroup directive (template-driven strategy):\n\n "+X)},TemplateDrivenErrors}(),ee={provide:c,useExisting:Object(i.forwardRef)(function(){return te})},te=function(e){function NgModelGroup(t,n,r){var i=e.call(this)||this;return i._parent=t,i._validators=n,i._asyncValidators=r,i}return r.a(NgModelGroup,e),NgModelGroup.prototype._checkParentType=function(){this._parent instanceof NgModelGroup||this._parent instanceof K||Z.modelGroupParentException()},NgModelGroup}(R); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */te.decorators=[{type:i.Directive,args:[{selector:"[ngModelGroup]",providers:[ee],exportAs:"ngModelGroup"}]}],te.ctorParameters=function(){return[{type:c,decorators:[{type:i.Host},{type:i.SkipSelf}]},{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[p]}]},{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[d]}]}]},te.propDecorators={name:[{type:i.Input,args:["ngModelGroup"]}]}; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +var ne={provide:A,useExisting:Object(i.forwardRef)(function(){return ie})},re=Promise.resolve(null),ie=function(e){function NgModel(t,n,r,o){var s=e.call(this)||this;return s._control=new G,s._registered=!1,s.update=new i.EventEmitter,s._parent=t,s._rawValidators=n||[],s._rawAsyncValidators=r||[],s.valueAccessor=selectValueAccessor(s,o),s}return r.a(NgModel,e),NgModel.prototype.ngOnChanges=function(e){this._checkForErrors(),this._registered||this._setUpControl(),"isDisabled"in e&&this._updateDisabled(e),isPropertyUpdated(e,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)},NgModel.prototype.ngOnDestroy=function(){this.formDirective&&this.formDirective.removeControl(this)},Object.defineProperty(NgModel.prototype,"control",{get:function(){return this._control},enumerable:!0,configurable:!0}),Object.defineProperty(NgModel.prototype,"path",{get:function(){return this._parent?controlPath(this.name,this._parent):[this.name]},enumerable:!0,configurable:!0}),Object.defineProperty(NgModel.prototype,"formDirective",{get:function(){return this._parent?this._parent.formDirective:null},enumerable:!0,configurable:!0}),Object.defineProperty(NgModel.prototype,"validator",{get:function(){return composeValidators(this._rawValidators)},enumerable:!0,configurable:!0}),Object.defineProperty(NgModel.prototype,"asyncValidator",{get:function(){return composeAsyncValidators(this._rawAsyncValidators)},enumerable:!0,configurable:!0}),NgModel.prototype.viewToModelUpdate=function(e){this.viewModel=e,this.update.emit(e)},NgModel.prototype._setUpControl=function(){this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0},NgModel.prototype._isStandalone=function(){return!this._parent||!(!this.options||!this.options.standalone)},NgModel.prototype._setUpStandalone=function(){setUpControl(this._control,this),this._control.updateValueAndValidity({emitEvent:!1})},NgModel.prototype._checkForErrors=function(){this._isStandalone()||this._checkParentType(),this._checkName()},NgModel.prototype._checkParentType=function(){!(this._parent instanceof te)&&this._parent instanceof R?Z.formGroupNameException():this._parent instanceof te||this._parent instanceof K||Z.modelParentException()},NgModel.prototype._checkName=function(){this.options&&this.options.name&&(this.name=this.options.name),this._isStandalone()||this.name||Z.missingNameException()},NgModel.prototype._updateValue=function(e){var t=this;re.then(function(){t.control.setValue(e,{emitViewToModelChange:!1})})},NgModel.prototype._updateDisabled=function(e){var t=this,n=e.isDisabled.currentValue,r=""===n||n&&"false"!==n;re.then(function(){r&&!t.control.disabled?t.control.disable():!r&&t.control.disabled&&t.control.enable()})},NgModel}(A);ie.decorators=[{type:i.Directive,args:[{selector:"[ngModel]:not([formControlName]):not([formControl])",providers:[ne],exportAs:"ngModel"}]}],ie.ctorParameters=function(){return[{type:c,decorators:[{type:i.Optional},{type:i.Host}]},{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[p]}]},{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[d]}]},{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[f]}]}]},ie.propDecorators={name:[{type:i.Input}],isDisabled:[{type:i.Input,args:["disabled"]}],model:[{type:i.Input,args:["ngModel"]}],options:[{type:i.Input,args:["ngModelOptions"]}],update:[{type:i.Output,args:["ngModelChange"]}]}; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +var oe=function(){function ReactiveErrors(){}return ReactiveErrors.controlParentException=function(){throw new Error("formControlName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n "+Y)},ReactiveErrors.ngModelGroupException=function(){throw new Error('formControlName cannot be used with an ngModelGroup parent. It is only compatible with parents\n that also have a "form" prefix: formGroupName, formArrayName, or formGroup.\n\n Option 1: Update the parent to be formGroupName (reactive form strategy)\n\n '+J+"\n\n Option 2: Use ngModel instead of formControlName (template-driven strategy)\n\n "+X)},ReactiveErrors.missingFormException=function(){throw new Error("formGroup expects a FormGroup instance. Please pass one in.\n\n Example:\n\n "+Y)},ReactiveErrors.groupParentException=function(){throw new Error("formGroupName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n "+J)},ReactiveErrors.arrayParentException=function(){throw new Error("formArrayName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n "+Q)},ReactiveErrors.disabledAttrWarning=function(){console.warn("\n It looks like you're using the disabled attribute with a reactive form directive. If you set disabled to true\n when you set up this control in your component class, the disabled attribute will actually be set in the DOM for\n you. We recommend using this approach to avoid 'changed after checked' errors.\n \n Example: \n form = new FormGroup({\n first: new FormControl({value: 'Nancy', disabled: true}, Validators.required),\n last: new FormControl('Drew', Validators.required)\n });\n ")},ReactiveErrors}(),se={provide:A,useExisting:Object(i.forwardRef)(function(){return ae})},ae=function(e){function FormControlDirective(t,n,r){var o=e.call(this)||this;return o.update=new i.EventEmitter,o._rawValidators=t||[],o._rawAsyncValidators=n||[],o.valueAccessor=selectValueAccessor(o,r),o}return r.a(FormControlDirective,e),Object.defineProperty(FormControlDirective.prototype,"isDisabled",{set:function(e){oe.disabledAttrWarning()},enumerable:!0,configurable:!0}),FormControlDirective.prototype.ngOnChanges=function(e){this._isControlChanged(e)&&(setUpControl(this.form,this),this.control.disabled&&this.valueAccessor.setDisabledState&&this.valueAccessor.setDisabledState(!0),this.form.updateValueAndValidity({emitEvent:!1})),isPropertyUpdated(e,this.viewModel)&&(this.form.setValue(this.model),this.viewModel=this.model)},Object.defineProperty(FormControlDirective.prototype,"path",{get:function(){return[]},enumerable:!0,configurable:!0}),Object.defineProperty(FormControlDirective.prototype,"validator",{get:function(){return composeValidators(this._rawValidators)},enumerable:!0,configurable:!0}),Object.defineProperty(FormControlDirective.prototype,"asyncValidator",{get:function(){return composeAsyncValidators(this._rawAsyncValidators)},enumerable:!0,configurable:!0}),Object.defineProperty(FormControlDirective.prototype,"control",{get:function(){return this.form},enumerable:!0,configurable:!0}),FormControlDirective.prototype.viewToModelUpdate=function(e){this.viewModel=e,this.update.emit(e)},FormControlDirective.prototype._isControlChanged=function(e){return e.hasOwnProperty("form")},FormControlDirective}(A); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ae.decorators=[{type:i.Directive,args:[{selector:"[formControl]",providers:[se],exportAs:"ngForm"}]}],ae.ctorParameters=function(){return[{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[p]}]},{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[d]}]},{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[f]}]}]},ae.propDecorators={form:[{type:i.Input,args:["formControl"]}],model:[{type:i.Input,args:["ngModel"]}],update:[{type:i.Output,args:["ngModelChange"]}],isDisabled:[{type:i.Input,args:["disabled"]}]}; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +var ue={provide:c,useExisting:Object(i.forwardRef)(function(){return le})},le=function(e){function FormGroupDirective(t,n){var r=e.call(this)||this;return r._validators=t,r._asyncValidators=n,r._submitted=!1,r.directives=[],r.form=null,r.ngSubmit=new i.EventEmitter,r}return r.a(FormGroupDirective,e),FormGroupDirective.prototype.ngOnChanges=function(e){this._checkFormPresent(),e.hasOwnProperty("form")&&(this._updateValidators(),this._updateDomValue(),this._updateRegistrations())},Object.defineProperty(FormGroupDirective.prototype,"submitted",{get:function(){return this._submitted},enumerable:!0,configurable:!0}),Object.defineProperty(FormGroupDirective.prototype,"formDirective",{get:function(){return this},enumerable:!0,configurable:!0}),Object.defineProperty(FormGroupDirective.prototype,"control",{get:function(){return this.form},enumerable:!0,configurable:!0}),Object.defineProperty(FormGroupDirective.prototype,"path",{get:function(){return[]},enumerable:!0,configurable:!0}),FormGroupDirective.prototype.addControl=function(e){var t=this.form.get(e.path);return setUpControl(t,e),t.updateValueAndValidity({emitEvent:!1}),this.directives.push(e),t},FormGroupDirective.prototype.getControl=function(e){return this.form.get(e.path)},FormGroupDirective.prototype.removeControl=function(e){!function remove(e,t){var n=e.indexOf(t);n>-1&&e.splice(n,1)} +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */(this.directives,e)},FormGroupDirective.prototype.addFormGroup=function(e){var t=this.form.get(e.path);setUpFormContainer(t,e),t.updateValueAndValidity({emitEvent:!1})},FormGroupDirective.prototype.removeFormGroup=function(e){},FormGroupDirective.prototype.getFormGroup=function(e){return this.form.get(e.path)},FormGroupDirective.prototype.addFormArray=function(e){var t=this.form.get(e.path);setUpFormContainer(t,e),t.updateValueAndValidity({emitEvent:!1})},FormGroupDirective.prototype.removeFormArray=function(e){},FormGroupDirective.prototype.getFormArray=function(e){return this.form.get(e.path)},FormGroupDirective.prototype.updateModel=function(e,t){this.form.get(e.path).setValue(t)},FormGroupDirective.prototype.onSubmit=function(e){return this._submitted=!0,this.ngSubmit.emit(e),!1},FormGroupDirective.prototype.onReset=function(){this.resetForm()},FormGroupDirective.prototype.resetForm=function(e){void 0===e&&(e=void 0),this.form.reset(e),this._submitted=!1},FormGroupDirective.prototype._updateDomValue=function(){var e=this;this.directives.forEach(function(t){var n=e.form.get(t.path);t._control!==n&&(!function cleanUpControl(e,t){t.valueAccessor.registerOnChange(function(){return _noControlError(t)}),t.valueAccessor.registerOnTouched(function(){return _noControlError(t)}),t._rawValidators.forEach(function(e){e.registerOnValidatorChange&&e.registerOnValidatorChange(null)}),t._rawAsyncValidators.forEach(function(e){e.registerOnValidatorChange&&e.registerOnValidatorChange(null)}),e&&e._clearChangeFns()}(t._control,t),n&&setUpControl(n,t),t._control=n)}),this.form._updateTreeValidity({emitEvent:!1})},FormGroupDirective.prototype._updateRegistrations=function(){var e=this;this.form._registerOnCollectionChange(function(){return e._updateDomValue()}),this._oldForm&&this._oldForm._registerOnCollectionChange(function(){}),this._oldForm=this.form},FormGroupDirective.prototype._updateValidators=function(){var e=composeValidators(this._validators);this.form.validator=m.compose([this.form.validator,e]);var t=composeAsyncValidators(this._asyncValidators);this.form.asyncValidator=m.composeAsync([this.form.asyncValidator,t])},FormGroupDirective.prototype._checkFormPresent=function(){this.form||oe.missingFormException()},FormGroupDirective}(c);le.decorators=[{type:i.Directive,args:[{selector:"[formGroup]",providers:[ue],host:{"(submit)":"onSubmit($event)","(reset)":"onReset()"},exportAs:"ngForm"}]}],le.ctorParameters=function(){return[{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[p]}]},{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[d]}]}]},le.propDecorators={form:[{type:i.Input,args:["formGroup"]}],ngSubmit:[{type:i.Output}]};var ce={provide:c,useExisting:Object(i.forwardRef)(function(){return pe})},pe=function(e){function FormGroupName(t,n,r){var i=e.call(this)||this;return i._parent=t,i._validators=n,i._asyncValidators=r,i}return r.a(FormGroupName,e),FormGroupName.prototype._checkParentType=function(){_hasInvalidParent(this._parent)&&oe.groupParentException()},FormGroupName}(R);pe.decorators=[{type:i.Directive,args:[{selector:"[formGroupName]",providers:[ce]}]}],pe.ctorParameters=function(){return[{type:c,decorators:[{type:i.Optional},{type:i.Host},{type:i.SkipSelf}]},{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[p]}]},{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[d]}]}]},pe.propDecorators={name:[{type:i.Input,args:["formGroupName"]}]};var de={provide:c,useExisting:Object(i.forwardRef)(function(){return he})},he=function(e){function FormArrayName(t,n,r){var i=e.call(this)||this;return i._parent=t,i._validators=n,i._asyncValidators=r,i}return r.a(FormArrayName,e),FormArrayName.prototype.ngOnInit=function(){this._checkParentType(),this.formDirective.addFormArray(this)},FormArrayName.prototype.ngOnDestroy=function(){this.formDirective&&this.formDirective.removeFormArray(this)},Object.defineProperty(FormArrayName.prototype,"control",{get:function(){return this.formDirective.getFormArray(this)},enumerable:!0,configurable:!0}),Object.defineProperty(FormArrayName.prototype,"formDirective",{get:function(){return this._parent?this._parent.formDirective:null},enumerable:!0,configurable:!0}),Object.defineProperty(FormArrayName.prototype,"path",{get:function(){return controlPath(this.name,this._parent)},enumerable:!0,configurable:!0}),Object.defineProperty(FormArrayName.prototype,"validator",{get:function(){return composeValidators(this._validators)},enumerable:!0,configurable:!0}),Object.defineProperty(FormArrayName.prototype,"asyncValidator",{get:function(){return composeAsyncValidators(this._asyncValidators)},enumerable:!0,configurable:!0}),FormArrayName.prototype._checkParentType=function(){_hasInvalidParent(this._parent)&&oe.arrayParentException()},FormArrayName}(c);function _hasInvalidParent(e){return!(e instanceof pe||e instanceof le||e instanceof he)} +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */he.decorators=[{type:i.Directive,args:[{selector:"[formArrayName]",providers:[de]}]}],he.ctorParameters=function(){return[{type:c,decorators:[{type:i.Optional},{type:i.Host},{type:i.SkipSelf}]},{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[p]}]},{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[d]}]}]},he.propDecorators={name:[{type:i.Input,args:["formArrayName"]}]};var me={provide:A,useExisting:Object(i.forwardRef)(function(){return fe})},fe=function(e){function FormControlName(t,n,r,o){var s=e.call(this)||this;return s._added=!1,s.update=new i.EventEmitter,s._parent=t,s._rawValidators=n||[],s._rawAsyncValidators=r||[],s.valueAccessor=selectValueAccessor(s,o),s}return r.a(FormControlName,e),Object.defineProperty(FormControlName.prototype,"isDisabled",{set:function(e){oe.disabledAttrWarning()},enumerable:!0,configurable:!0}),FormControlName.prototype.ngOnChanges=function(e){this._added||this._setUpControl(),isPropertyUpdated(e,this.viewModel)&&(this.viewModel=this.model,this.formDirective.updateModel(this,this.model))},FormControlName.prototype.ngOnDestroy=function(){this.formDirective&&this.formDirective.removeControl(this)},FormControlName.prototype.viewToModelUpdate=function(e){this.viewModel=e,this.update.emit(e)},Object.defineProperty(FormControlName.prototype,"path",{get:function(){return controlPath(this.name,this._parent)},enumerable:!0,configurable:!0}),Object.defineProperty(FormControlName.prototype,"formDirective",{get:function(){return this._parent?this._parent.formDirective:null},enumerable:!0,configurable:!0}),Object.defineProperty(FormControlName.prototype,"validator",{get:function(){return composeValidators(this._rawValidators)},enumerable:!0,configurable:!0}),Object.defineProperty(FormControlName.prototype,"asyncValidator",{get:function(){return composeAsyncValidators(this._rawAsyncValidators)},enumerable:!0,configurable:!0}),Object.defineProperty(FormControlName.prototype,"control",{get:function(){return this._control},enumerable:!0,configurable:!0}),FormControlName.prototype._checkParentType=function(){!(this._parent instanceof pe)&&this._parent instanceof R?oe.ngModelGroupException():this._parent instanceof pe||this._parent instanceof le||this._parent instanceof he||oe.controlParentException()},FormControlName.prototype._setUpControl=function(){this._checkParentType(),this._control=this.formDirective.addControl(this),this.control.disabled&&this.valueAccessor.setDisabledState&&this.valueAccessor.setDisabledState(!0),this._added=!0},FormControlName}(A);fe.decorators=[{type:i.Directive,args:[{selector:"[formControlName]",providers:[me]}]}],fe.ctorParameters=function(){return[{type:c,decorators:[{type:i.Optional},{type:i.Host},{type:i.SkipSelf}]},{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[p]}]},{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[d]}]},{type:Array,decorators:[{type:i.Optional},{type:i.Self},{type:i.Inject,args:[f]}]}]},fe.propDecorators={name:[{type:i.Input,args:["formControlName"]}],model:[{type:i.Input,args:["ngModel"]}],update:[{type:i.Output,args:["ngModelChange"]}],isDisabled:[{type:i.Input,args:["disabled"]}]}; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +var ye={provide:p,useExisting:Object(i.forwardRef)(function(){return ve}),multi:!0},ge={provide:p,useExisting:Object(i.forwardRef)(function(){return be}),multi:!0},ve=function(){function RequiredValidator(){}return Object.defineProperty(RequiredValidator.prototype,"required",{get:function(){return this._required},set:function(e){this._required=null!=e&&!1!==e&&""+e!="false",this._onChange&&this._onChange()},enumerable:!0,configurable:!0}),RequiredValidator.prototype.validate=function(e){return this.required?m.required(e):null},RequiredValidator.prototype.registerOnValidatorChange=function(e){this._onChange=e},RequiredValidator}();ve.decorators=[{type:i.Directive,args:[{selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",providers:[ye],host:{"[attr.required]":'required ? "" : null'}}]}],ve.ctorParameters=function(){return[]},ve.propDecorators={required:[{type:i.Input}]};var be=function(e){function CheckboxRequiredValidator(){return null!==e&&e.apply(this,arguments)||this}return r.a(CheckboxRequiredValidator,e),CheckboxRequiredValidator.prototype.validate=function(e){return this.required?m.requiredTrue(e):null},CheckboxRequiredValidator}(ve);be.decorators=[{type:i.Directive,args:[{selector:"input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]",providers:[ge],host:{"[attr.required]":'required ? "" : null'}}]}],be.ctorParameters=function(){return[]};var _e={provide:p,useExisting:Object(i.forwardRef)(function(){return Se}),multi:!0},Se=function(){function EmailValidator(){}return Object.defineProperty(EmailValidator.prototype,"email",{set:function(e){this._enabled=""===e||!0===e||"true"===e,this._onChange&&this._onChange()},enumerable:!0,configurable:!0}),EmailValidator.prototype.validate=function(e){return this._enabled?m.email(e):null},EmailValidator.prototype.registerOnValidatorChange=function(e){this._onChange=e},EmailValidator}();Se.decorators=[{type:i.Directive,args:[{selector:"[email][formControlName],[email][formControl],[email][ngModel]",providers:[_e]}]}],Se.ctorParameters=function(){return[]},Se.propDecorators={email:[{type:i.Input}]};var Ce={provide:p,useExisting:Object(i.forwardRef)(function(){return Ae}),multi:!0},Ae=function(){function MinLengthValidator(){}return MinLengthValidator.prototype.ngOnChanges=function(e){"minlength"in e&&(this._createValidator(),this._onChange&&this._onChange())},MinLengthValidator.prototype.validate=function(e){return null==this.minlength?null:this._validator(e)},MinLengthValidator.prototype.registerOnValidatorChange=function(e){this._onChange=e},MinLengthValidator.prototype._createValidator=function(){this._validator=m.minLength(parseInt(this.minlength,10))},MinLengthValidator}();Ae.decorators=[{type:i.Directive,args:[{selector:"[minlength][formControlName],[minlength][formControl],[minlength][ngModel]",providers:[Ce],host:{"[attr.minlength]":"minlength ? minlength : null"}}]}],Ae.ctorParameters=function(){return[]},Ae.propDecorators={minlength:[{type:i.Input}]};var Te={provide:p,useExisting:Object(i.forwardRef)(function(){return we}),multi:!0},we=function(){function MaxLengthValidator(){}return MaxLengthValidator.prototype.ngOnChanges=function(e){"maxlength"in e&&(this._createValidator(),this._onChange&&this._onChange())},MaxLengthValidator.prototype.validate=function(e){return null!=this.maxlength?this._validator(e):null},MaxLengthValidator.prototype.registerOnValidatorChange=function(e){this._onChange=e},MaxLengthValidator.prototype._createValidator=function(){this._validator=m.maxLength(parseInt(this.maxlength,10))},MaxLengthValidator}();we.decorators=[{type:i.Directive,args:[{selector:"[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]",providers:[Te],host:{"[attr.maxlength]":"maxlength ? maxlength : null"}}]}],we.ctorParameters=function(){return[]},we.propDecorators={maxlength:[{type:i.Input}]};var Ee={provide:p,useExisting:Object(i.forwardRef)(function(){return Pe}),multi:!0},Pe=function(){function PatternValidator(){}return PatternValidator.prototype.ngOnChanges=function(e){"pattern"in e&&(this._createValidator(),this._onChange&&this._onChange())},PatternValidator.prototype.validate=function(e){return this._validator(e)},PatternValidator.prototype.registerOnValidatorChange=function(e){this._onChange=e},PatternValidator.prototype._createValidator=function(){this._validator=m.pattern(this.pattern)},PatternValidator}();Pe.decorators=[{type:i.Directive,args:[{selector:"[pattern][formControlName],[pattern][formControl],[pattern][ngModel]",providers:[Ee],host:{"[attr.pattern]":"pattern ? pattern : null"}}]}],Pe.ctorParameters=function(){return[]},Pe.propDecorators={pattern:[{type:i.Input}]}; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +var Oe=function(){function FormBuilder(){}return FormBuilder.prototype.group=function(e,t){void 0===t&&(t=null);var n=this._reduceControls(e),r=null!=t?t.validator:null,i=null!=t?t.asyncValidator:null;return new U(n,r,i)},FormBuilder.prototype.control=function(e,t,n){return new G(e,t,n)},FormBuilder.prototype.array=function(e,t,n){var r=this,i=e.map(function(e){return r._createControl(e)});return new q(i,t,n)},FormBuilder.prototype._reduceControls=function(e){var t=this,n={};return Object.keys(e).forEach(function(r){n[r]=t._createControl(e[r])}),n},FormBuilder.prototype._createControl=function(e){if(e instanceof G||e instanceof U||e instanceof q)return e;if(Array.isArray(e)){var t=e[0],n=e.length>1?e[1]:null,r=e.length>2?e[2]:null;return this.control(t,n,r)}return this.control(e)},FormBuilder}();Oe.decorators=[{type:i.Injectable}],Oe.ctorParameters=function(){return[]}; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +var Ie=new i.Version("4.4.6"),Ne=function(){return function NgNoValidate(){}}(); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */Ne.decorators=[{type:i.Directive,args:[{selector:"form:not([ngNoForm]):not([ngNativeValidate])",host:{novalidate:""}}]}],Ne.ctorParameters=function(){return[]}; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +var Le=[Ne,L,M,_,C,O,g,N,D,E,j,H,ve,Ae,we,Pe,be,Se],xe=[ie,te,K],De=[ae,le,fe,pe,he],Me=function(){return function InternalFormsSharedModule(){}}();Me.decorators=[{type:i.NgModule,args:[{declarations:Le,exports:Le}]}],Me.ctorParameters=function(){return[]}; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +var Fe=function(){return function FormsModule(){}}();Fe.decorators=[{type:i.NgModule,args:[{declarations:xe,providers:[w],exports:[Me,xe]}]}],Fe.ctorParameters=function(){return[]};var Re=function(){return function ReactiveFormsModule(){}}();Re.decorators=[{type:i.NgModule,args:[{declarations:[De],providers:[Oe,w],exports:[Me,De]}]}],Re.ctorParameters=function(){return[]}},235:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=0;!function(e){e[e.error=0]="error",e[e.warn=1]="warn"}(t.FlashMessageType||(t.FlashMessageType={}));var i=function(){return function FlashMessage(e,t,n){this.content=e,this.tooltip=t,this.type=n,this.id=r++,this.isDismissed=!1,this.hasTooltip=Boolean(t),this.showTooltip=!1}}();t.FlashMessage=i},236:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(19),i=n(2),o=n(234),s=n(29),a=n(94),u=n(584),l=function(){function PlugsModule(){}return PlugsModule=__decorate([i.NgModule({imports:[r.CommonModule,o.FormsModule,s.HttpModule,a.SharedModule],declarations:[u.UserInputPlugComponent],providers:[],exports:[r.CommonModule,s.HttpModule,u.UserInputPlugComponent]})],PlugsModule)}();t.PlugsModule=l},237:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=function(){function ProgressBarComponent(){this.isReset=!1}return Object.defineProperty(ProgressBarComponent.prototype,"barStyle",{get:function(){return this.isReset?(this.isReset=!1,{width:"0",transition:"none"}):{width:100*Math.max(0,Math.min(1,this.value))+"%"}},enumerable:!0,configurable:!0}),Object.defineProperty(ProgressBarComponent.prototype,"isComplete",{get:function(){return this.value>=1},enumerable:!0,configurable:!0}),ProgressBarComponent.prototype.reset=function(){this.isReset=!0},__decorate([r.Input(),__metadata("design:type",Number)],ProgressBarComponent.prototype,"value",void 0),ProgressBarComponent=__decorate([r.Component({selector:"htf-progress-bar",template:n(578),styles:[n(579)]})],ProgressBarComponent)}();t.ProgressBarComponent=i},238:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(48);t.washIn=[r.state("in",r.style({background:"rgba(0, 119, 255, 0.0)"})),r.transition("void => in",[r.style({background:"rgba(0, 119, 255, 0.1)"}),r.animate(1e3)])],t.washAndExpandIn=function washAndExpandIn(e){return[r.state("in",r.style({background:"rgba(0, 119, 255, 0.0)","max-height":e+"px"})),r.transition("void => in",[r.style({background:"rgba(0, 119, 255, 0.2)","max-height":"0"}),r.animate(500)])]}},239:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=n(49),o=n(97),s=n(240),a=n(26),u=a.devHost+"/sub/dashboard",l={UNREACHABLE:i.StationStatus.unreachable,ONLINE:i.StationStatus.online},c=function(e){function DashboardService(n){var r=e.call(this,n)||this;return r.stations={},r.messages.subscribe(function(e){var n=t.validateResponse(e.data),i=t.parseResponse(n);r.applyResponse(i)}),r}return __extends(DashboardService,e),t=DashboardService,DashboardService.prototype.subscribe=function(t,n,r){void 0===t&&(t=null),void 0===n&&(n=1),void 0===r&&(r=Number.MAX_VALUE),e.prototype.subscribeToUrl.call(this,u,t,n,r)},DashboardService.validateResponse=function(e){return e},DashboardService.parseResponse=function(e){for(var n={},r=0,o=Object.keys(e);r=0&&-1===s;){for(var a=e.phases[o],u=0,l=t;u1?(console.error("Unrecognized phase descriptor ID.",e.phases,t),e):((i=e.phases).splice.apply(i,[o+2,0].concat(t.slice(s+1))),e)}).catch(function(){return o.Observable.of(e)})},StationService.prototype.getOrRequestPhaseDescriptors=function(e){var t=this;if(!(e.testId in this.phaseDescriptorPromise)){var n=p.getTestBaseUrl(this.config.dashboardEnabled,e)+"/phases";this.phaseDescriptorPromise[e.testId]=this.http.get(n).toPromise().then(function(e){return e.json().data.map(h.makePhaseFromDescriptor)}).catch(function(e){var n=p.messageFromErrorResponse(e);return t.flashMessage.error("HTTP request for phase descriptors failed.",n),Promise.reject(e)})}return o.Observable.fromPromise(this.phaseDescriptorPromise[e.testId])},StationService.prototype.applyResponse=function(e,t){if(e.testId in this.testsById){var n=this.testsById[e.testId];n.status!==e.status&&(e.status===u.TestStatus.error?this.flashMessage.error("The test exited early due to an error. View the test logs for details."):e.status===u.TestStatus.timeout?this.flashMessage.warn("The test exited early due to timeout."):e.status===u.TestStatus.aborted&&this.flashMessage.warn("The test was aborted.")),Object.assign(n,e)}else this.testsById[e.testId]=e,this.testsByStation[t.hostPort]=e},StationService=t=__decorate([r.Injectable(),__metadata("design:paramtypes",[s.ConfigService,a.FlashMessageService,d.HistoryService,i.Http,l.SockJsService])],StationService);var t}(c.Subscription);t.StationService=m},25:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i={server_type:"dashboard",history_from_disk_enabled:!1},o=function(){function ConfigService(){this.config=i}return ConfigService.prototype.initialize=function(e){var t=Object.keys(e).filter(function(e){return!(e in i)});if(t.length>0){console.warn("Received unknown config keys",t);for(var n=0,r=t;nn[t]?1:e[t]0&&e.startDismissal()},500)},FlashMessageService=__decorate([r.Injectable()],FlashMessageService)}();t.FlashMessageService=o},48:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n.d(t,"AnimationBuilder",function(){return r}),n.d(t,"AnimationFactory",function(){return i}),n.d(t,"AUTO_STYLE",function(){return o}),n.d(t,"animate",function(){return animate}),n.d(t,"animateChild",function(){return animateChild}),n.d(t,"animation",function(){return animation}),n.d(t,"group",function(){return group}),n.d(t,"keyframes",function(){return keyframes}),n.d(t,"query",function(){return query}),n.d(t,"sequence",function(){return sequence}),n.d(t,"stagger",function(){return stagger}),n.d(t,"state",function(){return state}),n.d(t,"style",function(){return style}),n.d(t,"transition",function(){return transition}),n.d(t,"trigger",function(){return trigger}),n.d(t,"useAnimation",function(){return useAnimation}),n.d(t,"NoopAnimationPlayer",function(){return s}),n.d(t,"ɵAnimationGroupPlayer",function(){return a}),n.d(t,"ɵPRE_STYLE",function(){return u}); +/** + * @license Angular v4.4.6 + * (c) 2010-2017 Google, Inc. https://angular.io/ + * License: MIT + */ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +var r=function(){function AnimationBuilder(){}return AnimationBuilder.prototype.build=function(e){},AnimationBuilder}(),i=function(){function AnimationFactory(){}return AnimationFactory.prototype.create=function(e,t){},AnimationFactory}(),o="*";function trigger(e,t){return{type:7,name:e,definitions:t,options:{}}}function animate(e,t){return void 0===t&&(t=null),{type:4,styles:t,timings:e}}function group(e,t){return void 0===t&&(t=null),{type:3,steps:e,options:t}}function sequence(e,t){return void 0===t&&(t=null),{type:2,steps:e,options:t}}function style(e){return{type:6,styles:e,offset:null}}function state(e,t,n){return{type:0,name:e,styles:t,options:n}}function keyframes(e){return{type:5,steps:e}}function transition(e,t,n){return void 0===n&&(n=null),{type:1,expr:e,animation:t,options:n}}function animation(e,t){return void 0===t&&(t=null),{type:8,animation:e,options:t}}function animateChild(e){return void 0===e&&(e=null),{type:9,options:e}}function useAnimation(e,t){return void 0===t&&(t=null),{type:10,animation:e,options:t}}function query(e,t,n){return void 0===n&&(n=null),{type:11,selector:e,animation:t,options:n}}function stagger(e,t){return{type:12,timings:e,animation:t}} +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + * @param {?} cb + * @return {?} + */function scheduleMicroTask(e){Promise.resolve(null).then(e)} +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */var s=function(){function NoopAnimationPlayer(){this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._started=!1,this._destroyed=!1,this._finished=!1,this.parentPlayer=null,this.totalTime=0}return NoopAnimationPlayer.prototype._onFinish=function(){this._finished||(this._finished=!0,this._onDoneFns.forEach(function(e){return e()}),this._onDoneFns=[])},NoopAnimationPlayer.prototype.onStart=function(e){this._onStartFns.push(e)},NoopAnimationPlayer.prototype.onDone=function(e){this._onDoneFns.push(e)},NoopAnimationPlayer.prototype.onDestroy=function(e){this._onDestroyFns.push(e)},NoopAnimationPlayer.prototype.hasStarted=function(){return this._started},NoopAnimationPlayer.prototype.init=function(){},NoopAnimationPlayer.prototype.play=function(){this.hasStarted()||(this.triggerMicrotask(),this._onStart()),this._started=!0},NoopAnimationPlayer.prototype.triggerMicrotask=function(){var e=this;scheduleMicroTask(function(){return e._onFinish()})},NoopAnimationPlayer.prototype._onStart=function(){this._onStartFns.forEach(function(e){return e()}),this._onStartFns=[]},NoopAnimationPlayer.prototype.pause=function(){},NoopAnimationPlayer.prototype.restart=function(){},NoopAnimationPlayer.prototype.finish=function(){this._onFinish()},NoopAnimationPlayer.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.hasStarted()||this._onStart(),this.finish(),this._onDestroyFns.forEach(function(e){return e()}),this._onDestroyFns=[])},NoopAnimationPlayer.prototype.reset=function(){},NoopAnimationPlayer.prototype.setPosition=function(e){},NoopAnimationPlayer.prototype.getPosition=function(){return 0},NoopAnimationPlayer}(),a=function(){function AnimationGroupPlayer(e){var t=this;this._players=e,this._onDoneFns=[],this._onStartFns=[],this._finished=!1,this._started=!1,this._destroyed=!1,this._onDestroyFns=[],this.parentPlayer=null,this.totalTime=0;var n=0,r=0,i=0,o=this._players.length;0==o?scheduleMicroTask(function(){return t._onFinish()}):this._players.forEach(function(e){e.parentPlayer=t,e.onDone(function(){++n>=o&&t._onFinish()}),e.onDestroy(function(){++r>=o&&t._onDestroy()}),e.onStart(function(){++i>=o&&t._onStart()})}),this.totalTime=this._players.reduce(function(e,t){return Math.max(e,t.totalTime)},0)}return AnimationGroupPlayer.prototype._onFinish=function(){this._finished||(this._finished=!0,this._onDoneFns.forEach(function(e){return e()}),this._onDoneFns=[])},AnimationGroupPlayer.prototype.init=function(){this._players.forEach(function(e){return e.init()})},AnimationGroupPlayer.prototype.onStart=function(e){this._onStartFns.push(e)},AnimationGroupPlayer.prototype._onStart=function(){this.hasStarted()||(this._onStartFns.forEach(function(e){return e()}),this._onStartFns=[],this._started=!0)},AnimationGroupPlayer.prototype.onDone=function(e){this._onDoneFns.push(e)},AnimationGroupPlayer.prototype.onDestroy=function(e){this._onDestroyFns.push(e)},AnimationGroupPlayer.prototype.hasStarted=function(){return this._started},AnimationGroupPlayer.prototype.play=function(){this.parentPlayer||this.init(),this._onStart(),this._players.forEach(function(e){return e.play()})},AnimationGroupPlayer.prototype.pause=function(){this._players.forEach(function(e){return e.pause()})},AnimationGroupPlayer.prototype.restart=function(){this._players.forEach(function(e){return e.restart()})},AnimationGroupPlayer.prototype.finish=function(){this._onFinish(),this._players.forEach(function(e){return e.finish()})},AnimationGroupPlayer.prototype.destroy=function(){this._onDestroy()},AnimationGroupPlayer.prototype._onDestroy=function(){this._destroyed||(this._destroyed=!0,this._onFinish(),this._players.forEach(function(e){return e.destroy()}),this._onDestroyFns.forEach(function(e){return e()}),this._onDestroyFns=[])},AnimationGroupPlayer.prototype.reset=function(){this._players.forEach(function(e){return e.reset()}),this._destroyed=!1,this._finished=!1,this._started=!1},AnimationGroupPlayer.prototype.setPosition=function(e){var t=e*this.totalTime;this._players.forEach(function(e){var n=e.totalTime?Math.min(1,t/e.totalTime):1;e.setPosition(n)})},AnimationGroupPlayer.prototype.getPosition=function(){var e=0;return this._players.forEach(function(t){var n=t.getPosition();e=Math.min(n,e)}),e},Object.defineProperty(AnimationGroupPlayer.prototype,"players",{get:function(){return this._players},enumerable:!0,configurable:!0}),AnimationGroupPlayer.prototype.beforeDestroy=function(){this.players.forEach(function(e){e.beforeDestroy&&e.beforeDestroy()})},AnimationGroupPlayer}(),u="!"; +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */},49:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.online=9]="online",e[e.unreachable=10]="unreachable"}(t.StationStatus||(t.StationStatus={}));var r=function(){return function Station(e){Object.assign(this,e)}}();t.Station=r},559:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=n(111),o=n(560);function main(){return i.platformBrowserDynamic().bootstrapModule(o.AppModule).then(function(e){return e})}r.enableProdMode(),t.main=main,"complete"===document.readyState?main():document.addEventListener("DOMContentLoaded",main)},560:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=n(561),o=n(27),s=n(233),a=n(29),u=n(234),l=n(563),c=n(567),p=n(236),d=n(94),h=n(588),m=n(218),f=function(){function AppModule(e){this.appRef=e}return AppModule.prototype.hmrOnInit=function(e){console.log("HMR store",e)},AppModule.prototype.hmrOnDestroy=function(e){var t=this.appRef.components.map(function(e){return e.location.nativeElement});e.disposeOldHosts=m.createNewHosts(t),m.removeNgStyles()},AppModule.prototype.hmrAfterDestroy=function(e){e.disposeOldHosts(),delete e.disposeOldHosts},AppModule=__decorate([r.NgModule({imports:[i.BrowserAnimationsModule,o.BrowserModule,s.HttpClientModule,a.HttpModule,u.FormsModule,c.CoreModule,p.PlugsModule,d.SharedModule,h.StationsModule],declarations:[l.AppComponent],providers:[],bootstrap:[l.AppComponent]}),__metadata("design:paramtypes",[r.ApplicationRef])],AppModule)}();t.AppModule=f},561:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n.d(t,"BrowserAnimationsModule",function(){return v}),n.d(t,"NoopAnimationsModule",function(){return b}),n.d(t,"ɵBrowserAnimationBuilder",function(){return u}),n.d(t,"ɵBrowserAnimationFactory",function(){return l}),n.d(t,"ɵAnimationRenderer",function(){return h}),n.d(t,"ɵAnimationRendererFactory",function(){return p}),n.d(t,"ɵa",function(){return d}),n.d(t,"ɵf",function(){return y}),n.d(t,"ɵg",function(){return g}),n.d(t,"ɵb",function(){return m}),n.d(t,"ɵd",function(){return instantiateDefaultStyleNormalizer}),n.d(t,"ɵe",function(){return instantiateRendererFactory}),n.d(t,"ɵc",function(){return instantiateSupportedAnimationDriver});var r=n(16),i=n(2),o=n(27),s=n(48),a=n(562),u=function(e){function BrowserAnimationBuilder(t,n){var r=e.call(this)||this;r._nextAnimationId=0;var o={id:"0",encapsulation:i.ViewEncapsulation.None,styles:[],data:{animation:[]}};return r._renderer=t.createRenderer(n.body,o),r}return r.a(BrowserAnimationBuilder,e),BrowserAnimationBuilder.prototype.build=function(e){var t=this._nextAnimationId.toString();this._nextAnimationId++;var n=Array.isArray(e)?Object(s.sequence)(e):e;return issueAnimationCommand(this._renderer,null,t,"register",[n]),new l(t,this._renderer)},BrowserAnimationBuilder}(s.AnimationBuilder);u.decorators=[{type:i.Injectable}],u.ctorParameters=function(){return[{type:i.RendererFactory2},{type:void 0,decorators:[{type:i.Inject,args:[o.DOCUMENT]}]}]};var l=function(e){function BrowserAnimationFactory(t,n){var r=e.call(this)||this;return r._id=t,r._renderer=n,r}return r.a(BrowserAnimationFactory,e),BrowserAnimationFactory.prototype.create=function(e,t){return new c(this._id,e,t||{},this._renderer)},BrowserAnimationFactory}(s.AnimationFactory),c=function(){function RendererAnimationPlayer(e,t,n,r){this.id=e,this.element=t,this._renderer=r,this.parentPlayer=null,this._started=!1,this.totalTime=0,this._command("create",n)}return RendererAnimationPlayer.prototype._listen=function(e,t){return this._renderer.listen(this.element,"@@"+this.id+":"+e,t)},RendererAnimationPlayer.prototype._command=function(e){for(var t=[],n=1;n=0&&e *";case":leave":return"* => void";default:return t.push('The transition alias value "'+e+'" is not supported'),"* => *"}}(e,n));var r=e.match(/^(\*|[-\w]+)\s*()\s*(\*|[-\w]+)$/);if(null==r||r.length<4)return n.push('The provided transition expression "'+e+'" is not supported'),t;var i=r[1],o=r[2],s=r[3];t.push(makeLambdaFromStates(i,s));var a=i==C&&s==C;"<"!=o[0]||a||t.push(makeLambdaFromStates(s,i))}(e,n,t)}):n.push(e),n}var A=new Set;A.add("true"),A.add("1");var T=new Set;function makeLambdaFromStates(e,t){var n=A.has(e)||T.has(e),r=A.has(t)||T.has(t);return function(i,o){var s=e==C||e==i,a=t==C||t==o;return!s&&n&&"boolean"==typeof i&&(s=i?A.has(e):T.has(e)),!a&&r&&"boolean"==typeof o&&(a=o?A.has(t):T.has(t)),s&&a}} +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */T.add("false"),T.add("0");var w=":self",E=new RegExp("s*"+w+"s*,?","g");function buildAnimationAst(e,t){return(new I).build(e,t)}var P=new RegExp(":leave","g"),O=new RegExp(":enter","g"),I=function(){function AnimationAstBuilderVisitor(){}return AnimationAstBuilderVisitor.prototype.build=function(e,t){var n=new N(t);return this._resetContextStyleTimingState(n),visitDslNode(this,normalizeAnimationEntry(e),n)},AnimationAstBuilderVisitor.prototype._resetContextStyleTimingState=function(e){e.currentQuerySelector="",e.collectedStyles={},e.collectedStyles[""]={},e.currentTime=0},AnimationAstBuilderVisitor.prototype.visitTrigger=function(e,t){var n=this,r=t.queryCount=0,i=t.depCount=0,o=[],s=[];return e.definitions.forEach(function(e){if(n._resetContextStyleTimingState(t),0==e.type){var a=e,u=a.name;u.split(/\s*,\s*/).forEach(function(e){a.name=e,o.push(n.visitState(a,t))}),a.name=u}else if(1==e.type){var l=n.visitTransition(e,t);r+=l.queryCount,i+=l.depCount,s.push(l)}else t.errors.push("only state() and transition() definitions can sit inside of a trigger()")}),{type:7,name:e.name,states:o,transitions:s,queryCount:r,depCount:i,options:null}},AnimationAstBuilderVisitor.prototype.visitState=function(e,t){var n=this.visitStyle(e.styles,t),r=e.options&&e.options.params||null;if(n.containsDynamicStyles){var i=new Set,o=r||{};if(n.styles.forEach(function(e){if(isObject(e)){var t=e;Object.keys(t).forEach(function(e){extractStyleParams(t[e]).forEach(function(e){o.hasOwnProperty(e)||i.add(e)})})}}),i.size){var s=iteratorToArray(i.values());t.errors.push('state("'+e.name+'", ...) must define default values for all the following style substitutions: '+s.join(", "))}}return{type:0,name:e.name,style:n,options:r?{params:r}:null}},AnimationAstBuilderVisitor.prototype.visitTransition=function(e,t){t.queryCount=0,t.depCount=0;var n=visitDslNode(this,normalizeAnimationEntry(e.animation),t);return{type:1,matchers:parseTransitionExpr(e.expr,t.errors),animation:n,queryCount:t.queryCount,depCount:t.depCount,options:normalizeAnimationOptions(e.options)}},AnimationAstBuilderVisitor.prototype.visitSequence=function(e,t){var n=this;return{type:2,steps:e.steps.map(function(e){return visitDslNode(n,e,t)}),options:normalizeAnimationOptions(e.options)}},AnimationAstBuilderVisitor.prototype.visitGroup=function(e,t){var n=this,r=t.currentTime,i=0,o=e.steps.map(function(e){t.currentTime=r;var o=visitDslNode(n,e,t);return i=Math.max(i,t.currentTime),o});return t.currentTime=i,{type:3,steps:o,options:normalizeAnimationOptions(e.options)}},AnimationAstBuilderVisitor.prototype.visitAnimate=function(e,t){var n,r=function constructTimingAst(e,t){var n=null;if(e.hasOwnProperty("duration"))n=e;else if("number"==typeof e){var r=resolveTiming(e,t).duration;return makeTimingAst(r,0,"")}var i=e;if(i.split(/\s+/).some(function(e){return"{"==e.charAt(0)&&"{"==e.charAt(1)})){var o=makeTimingAst(0,0,"");return o.dynamic=!0,o.strValue=i,o}return makeTimingAst((n=n||resolveTiming(i,t)).duration,n.delay,n.easing)}(e.timings,t.errors);t.currentAnimateTimings=r;var o=e.styles?e.styles:Object(i.style)({});if(5==o.type)n=this.visitKeyframes(o,t);else{var s=e.styles,a=!1;if(!s){a=!0;var u={};r.easing&&(u.easing=r.easing),s=Object(i.style)(u)}t.currentTime+=r.duration+r.delay;var l=this.visitStyle(s,t);l.isEmptyStep=a,n=l}return t.currentAnimateTimings=null,{type:4,timings:r,style:n,options:null}},AnimationAstBuilderVisitor.prototype.visitStyle=function(e,t){var n=this._makeStyleAst(e,t);return this._validateStyleAst(n,t),n},AnimationAstBuilderVisitor.prototype._makeStyleAst=function(e,t){var n=[];Array.isArray(e.styles)?e.styles.forEach(function(e){"string"==typeof e?e==i.AUTO_STYLE?n.push(e):t.errors.push("The provided style string value "+e+" is not allowed."):n.push(e)}):n.push(e.styles);var r=!1,o=null;return n.forEach(function(e){if(isObject(e)){var t=e,n=t.easing;if(n&&(o=n,delete t.easing),!r)for(var i in t){if(t[i].toString().indexOf("{{")>=0){r=!0;break}}}}),{type:6,styles:n,easing:o,offset:e.offset,containsDynamicStyles:r,options:null}},AnimationAstBuilderVisitor.prototype._validateStyleAst=function(e,t){var n=t.currentAnimateTimings,r=t.currentTime,i=t.currentTime;n&&i>0&&(i-=n.duration+n.delay),e.styles.forEach(function(e){"string"!=typeof e&&Object.keys(e).forEach(function(n){var o=t.collectedStyles[t.currentQuerySelector],s=o[n],a=!0;s&&(i!=r&&i>=s.startTime&&r<=s.endTime&&(t.errors.push('The CSS property "'+n+'" that exists between the times of "'+s.startTime+'ms" and "'+s.endTime+'ms" is also being animated in a parallel animation between the times of "'+i+'ms" and "'+r+'ms"'),a=!1),i=s.startTime),a&&(o[n]={startTime:i,endTime:r}),t.options&&function validateStyleParams(e,t,n){var r=t.params||{},i=extractStyleParams(e);i.length&&i.forEach(function(e){r.hasOwnProperty(e)||n.push("Unable to resolve the local animation param "+e+" in the given list of values")})}(e[n],t.options,t.errors)})})},AnimationAstBuilderVisitor.prototype.visitKeyframes=function(e,t){var n=this,r={type:5,styles:[],options:null};if(!t.currentAnimateTimings)return t.errors.push("keyframes() must be placed inside of a call to animate()"),r;var i=0,o=[],s=!1,a=!1,u=0,l=e.steps.map(function(e){var r=n._makeStyleAst(e,t),l=null!=r.offset?r.offset:function consumeOffset(e){if("string"==typeof e)return null;var t=null;if(Array.isArray(e))e.forEach(function(e){if(isObject(e)&&e.hasOwnProperty("offset")){var n=e;t=parseFloat(n.offset),delete n.offset}});else if(isObject(e)&&e.hasOwnProperty("offset")){var n=e;t=parseFloat(n.offset),delete n.offset}return t}(r.styles),c=0;return null!=l&&(i++,c=r.offset=l),a=a||c<0||c>1,s=s||c0&&i0?i==d?1:p*i:o[i],a=s*f;t.currentTime=h+m.delay+a,m.duration=a,n._validateStyleAst(e,t),e.offset=s,r.styles.push(e)}),r},AnimationAstBuilderVisitor.prototype.visitReference=function(e,t){return{type:8,animation:visitDslNode(this,normalizeAnimationEntry(e.animation),t),options:normalizeAnimationOptions(e.options)}},AnimationAstBuilderVisitor.prototype.visitAnimateChild=function(e,t){return t.depCount++,{type:9,options:normalizeAnimationOptions(e.options)}},AnimationAstBuilderVisitor.prototype.visitAnimateRef=function(e,t){return{type:10,animation:this.visitReference(e.animation,t),options:normalizeAnimationOptions(e.options)}},AnimationAstBuilderVisitor.prototype.visitQuery=function(e,t){var n=t.currentQuerySelector,r=e.options||{};t.queryCount++,t.currentQuery=e;var i=function normalizeSelector(e){var t=!!e.split(/\s*,\s*/).find(function(e){return e==w});t&&(e=e.replace(E,""));return[e=e.replace(O,y).replace(P,g).replace(/@\*/g,v).replace(/@\w+/g,function(e){return v+"-"+e.substr(1)}).replace(/:animating/g,b),t]}(e.selector),o=i[0],s=i[1];t.currentQuerySelector=n.length?n+" "+o:o,getOrSetAsInMap(t.collectedStyles,t.currentQuerySelector,{});var a=visitDslNode(this,normalizeAnimationEntry(e.animation),t);return t.currentQuery=null,t.currentQuerySelector=n,{type:11,selector:o,limit:r.limit||0,optional:!!r.optional,includeSelf:s,animation:a,originalSelector:e.selector,options:normalizeAnimationOptions(e.options)}},AnimationAstBuilderVisitor.prototype.visitStagger=function(e,t){t.currentQuery||t.errors.push("stagger() can only be used inside of query()");var n="full"===e.timings?{duration:0,delay:0,easing:"full"}:resolveTiming(e.timings,t.errors,!0);return{type:12,animation:visitDslNode(this,normalizeAnimationEntry(e.animation),t),timings:n,options:null}},AnimationAstBuilderVisitor}();var N=function(){return function AnimationAstBuilderContext(e){this.errors=e,this.queryCount=0,this.depCount=0,this.currentTransition=null,this.currentQuery=null,this.currentQuerySelector=null,this.currentAnimateTimings=null,this.currentTime=0,this.collectedStyles={},this.options=null}}();function isObject(e){return!Array.isArray(e)&&"object"==typeof e}function normalizeAnimationOptions(e){return e?(e=copyObj(e)).params&&(e.params=function normalizeParams(e){return e?copyObj(e):null}(e.params)):e={},e}function makeTimingAst(e,t,n){return{duration:e,delay:t,easing:n}} +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */function createTimelineInstruction(e,t,n,r,i,o,s,a){return void 0===s&&(s=null),void 0===a&&(a=!1),{type:1,element:e,keyframes:t,preStyleProps:n,postStyleProps:r,duration:i,delay:o,totalTime:i+o,easing:s,subTimeline:a}} +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */var L=function(){function ElementInstructionMap(){this._map=new Map}return ElementInstructionMap.prototype.consume=function(e){var t=this._map.get(e);return t?this._map.delete(e):t=[],t},ElementInstructionMap.prototype.append=function(e,t){var n=this._map.get(e);n||this._map.set(e,n=[]),n.push.apply(n,t)},ElementInstructionMap.prototype.has=function(e){return this._map.has(e)},ElementInstructionMap.prototype.clear=function(){this._map.clear()},ElementInstructionMap}(); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */function buildAnimationTimelines(e,t,n,r,i,o,s,a){return void 0===r&&(r={}),void 0===i&&(i={}),void 0===a&&(a=[]),(new x).buildKeyframes(e,t,n,r,i,o,s,a)}var x=function(){function AnimationTimelineBuilderVisitor(){}return AnimationTimelineBuilderVisitor.prototype.buildKeyframes=function(e,t,n,r,i,o,s,a){void 0===a&&(a=[]),s=s||new L;var u=new M(e,t,s,a,[]);u.options=o,u.currentTimeline.setStyles([r],null,u.errors,o),visitDslNode(this,n,u);var l=u.timelines.filter(function(e){return e.containsAnimation()});if(l.length&&Object.keys(i).length){var c=l[l.length-1];c.allowOnlyTimelineStyles()||c.setStyles([i],null,u.errors,o)}return l.length?l.map(function(e){return e.buildKeyframes()}):[createTimelineInstruction(t,[],[],[],0,0,"",!1)]},AnimationTimelineBuilderVisitor.prototype.visitTrigger=function(e,t){},AnimationTimelineBuilderVisitor.prototype.visitState=function(e,t){},AnimationTimelineBuilderVisitor.prototype.visitTransition=function(e,t){},AnimationTimelineBuilderVisitor.prototype.visitAnimateChild=function(e,t){var n=t.subInstructions.consume(t.element);if(n){var r=t.createSubContext(e.options),i=t.currentTimeline.currentTime,o=this._visitSubInstructions(n,r,r.options);i!=o&&t.transformIntoNewTimeline(o)}t.previousNode=e},AnimationTimelineBuilderVisitor.prototype.visitAnimateRef=function(e,t){var n=t.createSubContext(e.options);n.transformIntoNewTimeline(),this.visitReference(e.animation,n),t.transformIntoNewTimeline(n.currentTimeline.currentTime),t.previousNode=e},AnimationTimelineBuilderVisitor.prototype._visitSubInstructions=function(e,t,n){var r=t.currentTimeline.currentTime,i=null!=n.duration?resolveTimingValue(n.duration):null,o=null!=n.delay?resolveTimingValue(n.delay):null;return 0!==i&&e.forEach(function(e){var n=t.appendInstructionToTimeline(e,i,o);r=Math.max(r,n.duration+n.delay)}),r},AnimationTimelineBuilderVisitor.prototype.visitReference=function(e,t){t.updateOptions(e.options,!0),visitDslNode(this,e.animation,t),t.previousNode=e},AnimationTimelineBuilderVisitor.prototype.visitSequence=function(e,t){var n=this,r=t.subContextCount,i=t,o=e.options;if(o&&(o.params||o.delay)&&((i=t.createSubContext(o)).transformIntoNewTimeline(),null!=o.delay)){6==i.previousNode.type&&(i.currentTimeline.snapshotCurrentStyles(),i.previousNode=D);var s=resolveTimingValue(o.delay);i.delayNextStep(s)}e.steps.length&&(e.steps.forEach(function(e){return visitDslNode(n,e,i)}),i.currentTimeline.applyStylesToKeyframe(),i.subContextCount>r&&i.transformIntoNewTimeline()),t.previousNode=e},AnimationTimelineBuilderVisitor.prototype.visitGroup=function(e,t){var n=this,r=[],i=t.currentTimeline.currentTime,o=e.options&&e.options.delay?resolveTimingValue(e.options.delay):0;e.steps.forEach(function(s){var a=t.createSubContext(e.options);o&&a.delayNextStep(o),visitDslNode(n,s,a),i=Math.max(i,a.currentTimeline.currentTime),r.push(a.currentTimeline)}),r.forEach(function(e){return t.currentTimeline.mergeTimelineCollectedStyles(e)}),t.transformIntoNewTimeline(i),t.previousNode=e},AnimationTimelineBuilderVisitor.prototype._visitTiming=function(e,t){if(e.dynamic){var n=e.strValue;return resolveTiming(t.params?interpolateParams(n,t.params,t.errors):n,t.errors)}return{duration:e.duration,delay:e.delay,easing:e.easing}},AnimationTimelineBuilderVisitor.prototype.visitAnimate=function(e,t){var n=t.currentAnimateTimings=this._visitTiming(e.timings,t),r=t.currentTimeline;n.delay&&(t.incrementTime(n.delay),r.snapshotCurrentStyles());var i=e.style;5==i.type?this.visitKeyframes(i,t):(t.incrementTime(n.duration),this.visitStyle(i,t),r.applyStylesToKeyframe()),t.currentAnimateTimings=null,t.previousNode=e},AnimationTimelineBuilderVisitor.prototype.visitStyle=function(e,t){var n=t.currentTimeline,r=t.currentAnimateTimings;!r&&n.getCurrentStyleProperties().length&&n.forwardFrame();var i=r&&r.easing||e.easing;e.isEmptyStep?n.applyEmptyStep(i):n.setStyles(e.styles,i,t.errors,t.options),t.previousNode=e},AnimationTimelineBuilderVisitor.prototype.visitKeyframes=function(e,t){var n=t.currentAnimateTimings,r=t.currentTimeline.duration,i=n.duration,o=t.createSubContext().currentTimeline;o.easing=n.easing,e.styles.forEach(function(e){var n=e.offset||0;o.forwardTime(n*i),o.setStyles(e.styles,e.easing,t.errors,t.options),o.applyStylesToKeyframe()}),t.currentTimeline.mergeTimelineCollectedStyles(o),t.transformIntoNewTimeline(r+i),t.previousNode=e},AnimationTimelineBuilderVisitor.prototype.visitQuery=function(e,t){var n=this,r=t.currentTimeline.currentTime,i=e.options||{},o=i.delay?resolveTimingValue(i.delay):0;o&&(6===t.previousNode.type||0==r&&t.currentTimeline.getCurrentStyleProperties().length)&&(t.currentTimeline.snapshotCurrentStyles(),t.previousNode=D);var s=r,a=t.invokeQuery(e.selector,e.originalSelector,e.limit,e.includeSelf,!!i.optional,t.errors);t.currentQueryTotal=a.length;var u=null;a.forEach(function(r,i){t.currentQueryIndex=i;var a=t.createSubContext(e.options,r);o&&a.delayNextStep(o),r===t.element&&(u=a.currentTimeline),visitDslNode(n,e.animation,a),a.currentTimeline.applyStylesToKeyframe();var l=a.currentTimeline.currentTime;s=Math.max(s,l)}),t.currentQueryIndex=0,t.currentQueryTotal=0,t.transformIntoNewTimeline(s),u&&(t.currentTimeline.mergeTimelineCollectedStyles(u),t.currentTimeline.snapshotCurrentStyles()),t.previousNode=e},AnimationTimelineBuilderVisitor.prototype.visitStagger=function(e,t){var n=t.parentContext,r=t.currentTimeline,i=e.timings,o=Math.abs(i.duration),s=o*(t.currentQueryTotal-1),a=o*t.currentQueryIndex;switch(i.duration<0?"reverse":i.easing){case"reverse":a=s-a;break;case"full":a=n.currentStaggerTime}var u=t.currentTimeline;a&&u.delayNextStep(a);var l=u.currentTime;visitDslNode(this,e.animation,t),t.previousNode=e,n.currentStaggerTime=r.currentTime-l+(r.startTime-n.currentTimeline.startTime)},AnimationTimelineBuilderVisitor}(),D={},M=function(){function AnimationTimelineContext(e,t,n,r,i,o){this._driver=e,this.element=t,this.subInstructions=n,this.errors=r,this.timelines=i,this.parentContext=null,this.currentAnimateTimings=null,this.previousNode=D,this.subContextCount=0,this.options={},this.currentQueryIndex=0,this.currentQueryTotal=0,this.currentStaggerTime=0,this.currentTimeline=o||new F(t,0),i.push(this.currentTimeline)}return Object.defineProperty(AnimationTimelineContext.prototype,"params",{get:function(){return this.options.params},enumerable:!0,configurable:!0}),AnimationTimelineContext.prototype.updateOptions=function(e,t){var n=this;if(e){var r=e,i=this.options;null!=r.duration&&(i.duration=resolveTimingValue(r.duration)),null!=r.delay&&(i.delay=resolveTimingValue(r.delay));var o=r.params;if(o){var s=i.params;s||(s=this.options.params={}),Object.keys(o).forEach(function(e){t&&s.hasOwnProperty(e)||(s[e]=interpolateParams(o[e],s,n.errors))})}}},AnimationTimelineContext.prototype._copyOptions=function(){var e={};if(this.options){var t=this.options.params;if(t){var n=e.params={};Object.keys(t).forEach(function(e){n[e]=t[e]})}}return e},AnimationTimelineContext.prototype.createSubContext=function(e,t,n){void 0===e&&(e=null);var r=t||this.element,i=new AnimationTimelineContext(this._driver,r,this.subInstructions,this.errors,this.timelines,this.currentTimeline.fork(r,n||0));return i.previousNode=this.previousNode,i.currentAnimateTimings=this.currentAnimateTimings,i.options=this._copyOptions(),i.updateOptions(e),i.currentQueryIndex=this.currentQueryIndex,i.currentQueryTotal=this.currentQueryTotal,i.parentContext=this,this.subContextCount++,i},AnimationTimelineContext.prototype.transformIntoNewTimeline=function(e){return this.previousNode=D,this.currentTimeline=this.currentTimeline.fork(this.element,e),this.timelines.push(this.currentTimeline),this.currentTimeline},AnimationTimelineContext.prototype.appendInstructionToTimeline=function(e,t,n){var r={duration:null!=t?t:e.duration,delay:this.currentTimeline.currentTime+(null!=n?n:0)+e.delay,easing:""},i=new R(e.element,e.keyframes,e.preStyleProps,e.postStyleProps,r,e.stretchStartingKeyframe);return this.timelines.push(i),r},AnimationTimelineContext.prototype.incrementTime=function(e){this.currentTimeline.forwardTime(this.currentTimeline.duration+e)},AnimationTimelineContext.prototype.delayNextStep=function(e){e>0&&this.currentTimeline.delayNextStep(e)},AnimationTimelineContext.prototype.invokeQuery=function(e,t,n,r,i,o){var s=[];if(r&&s.push(this.element),e.length>0){var a=1!=n,u=this._driver.query(this.element,e,a);0!==n&&(u=u.slice(0,n)),s.push.apply(s,u)}return i||0!=s.length||o.push('`query("'+t+'")` returned zero elements. (Use `query("'+t+'", { optional: true })` if you wish to allow this.)'),s},AnimationTimelineContext}(),F=function(){function TimelineBuilder(e,t,n){this.element=e,this.startTime=t,this._elementTimelineStylesLookup=n,this.duration=0,this._previousKeyframe={},this._currentKeyframe={},this._keyframes=new Map,this._styleSummary={},this._pendingStyles={},this._backFill={},this._currentEmptyStepKeyframe=null,this._elementTimelineStylesLookup||(this._elementTimelineStylesLookup=new Map),this._localTimelineStyles=Object.create(this._backFill,{}),this._globalTimelineStyles=this._elementTimelineStylesLookup.get(e),this._globalTimelineStyles||(this._globalTimelineStyles=this._localTimelineStyles,this._elementTimelineStylesLookup.set(e,this._localTimelineStyles)),this._loadKeyframe()}return TimelineBuilder.prototype.containsAnimation=function(){switch(this._keyframes.size){case 0:return!1;case 1:return this.getCurrentStyleProperties().length>0;default:return!0}},TimelineBuilder.prototype.getCurrentStyleProperties=function(){return Object.keys(this._currentKeyframe)},Object.defineProperty(TimelineBuilder.prototype,"currentTime",{get:function(){return this.startTime+this.duration},enumerable:!0,configurable:!0}),TimelineBuilder.prototype.delayNextStep=function(e){var t=1==this._keyframes.size&&Object.keys(this._pendingStyles).length;this.duration||t?(this.forwardTime(this.currentTime+e),t&&this.snapshotCurrentStyles()):this.startTime+=e},TimelineBuilder.prototype.fork=function(e,t){return this.applyStylesToKeyframe(),new TimelineBuilder(e,t||this.currentTime,this._elementTimelineStylesLookup)},TimelineBuilder.prototype._loadKeyframe=function(){this._currentKeyframe&&(this._previousKeyframe=this._currentKeyframe),this._currentKeyframe=this._keyframes.get(this.duration),this._currentKeyframe||(this._currentKeyframe=Object.create(this._backFill,{}),this._keyframes.set(this.duration,this._currentKeyframe))},TimelineBuilder.prototype.forwardFrame=function(){this.duration+=1,this._loadKeyframe()},TimelineBuilder.prototype.forwardTime=function(e){this.applyStylesToKeyframe(),this.duration=e,this._loadKeyframe()},TimelineBuilder.prototype._updateStyle=function(e,t){this._localTimelineStyles[e]=t,this._globalTimelineStyles[e]=t,this._styleSummary[e]={time:this.currentTime,value:t}},TimelineBuilder.prototype.allowOnlyTimelineStyles=function(){return this._currentEmptyStepKeyframe!==this._currentKeyframe},TimelineBuilder.prototype.applyEmptyStep=function(e){var t=this;e&&(this._previousKeyframe.easing=e),Object.keys(this._globalTimelineStyles).forEach(function(e){t._backFill[e]=t._globalTimelineStyles[e]||i.AUTO_STYLE,t._currentKeyframe[e]=i.AUTO_STYLE}),this._currentEmptyStepKeyframe=this._currentKeyframe},TimelineBuilder.prototype.setStyles=function(e,t,n,r){var o=this;t&&(this._previousKeyframe.easing=t);var s=r&&r.params||{},a=function flattenStyles(e,t){var n,r={};return e.forEach(function(e){"*"===e?(n=n||Object.keys(t)).forEach(function(e){r[e]=i.AUTO_STYLE}):copyStyles(e,!1,r)}),r} +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */(e,this._globalTimelineStyles);Object.keys(a).forEach(function(e){var t=interpolateParams(a[e],s,n);o._pendingStyles[e]=t,o._localTimelineStyles.hasOwnProperty(e)||(o._backFill[e]=o._globalTimelineStyles.hasOwnProperty(e)?o._globalTimelineStyles[e]:i.AUTO_STYLE),o._updateStyle(e,t)})},TimelineBuilder.prototype.applyStylesToKeyframe=function(){var e=this,t=this._pendingStyles,n=Object.keys(t);0!=n.length&&(this._pendingStyles={},n.forEach(function(n){var r=t[n];e._currentKeyframe[n]=r}),Object.keys(this._localTimelineStyles).forEach(function(t){e._currentKeyframe.hasOwnProperty(t)||(e._currentKeyframe[t]=e._localTimelineStyles[t])}))},TimelineBuilder.prototype.snapshotCurrentStyles=function(){var e=this;Object.keys(this._localTimelineStyles).forEach(function(t){var n=e._localTimelineStyles[t];e._pendingStyles[t]=n,e._updateStyle(t,n)})},TimelineBuilder.prototype.getFinalKeyframe=function(){return this._keyframes.get(this.duration)},Object.defineProperty(TimelineBuilder.prototype,"properties",{get:function(){var e=[];for(var t in this._currentKeyframe)e.push(t);return e},enumerable:!0,configurable:!0}),TimelineBuilder.prototype.mergeTimelineCollectedStyles=function(e){var t=this;Object.keys(e._styleSummary).forEach(function(n){var r=t._styleSummary[n],i=e._styleSummary[n];(!r||i.time>r.time)&&t._updateStyle(n,i.value)})},TimelineBuilder.prototype.buildKeyframes=function(){var e=this;this.applyStylesToKeyframe();var t=new Set,n=new Set,r=1===this._keyframes.size&&0===this.duration,o=[];this._keyframes.forEach(function(s,a){var u=copyStyles(s,!0);Object.keys(u).forEach(function(e){var r=u[e];r==i["ɵPRE_STYLE"]?t.add(e):r==i.AUTO_STYLE&&n.add(e)}),r||(u.offset=a/e.duration),o.push(u)});var s=t.size?iteratorToArray(t.values()):[],a=n.size?iteratorToArray(n.values()):[];if(r){var u=o[0],l=copyObj(u);u.offset=0,l.offset=1,o=[u,l]}return createTimelineInstruction(this.element,o,s,a,this.duration,this.startTime,this.easing,!1)},TimelineBuilder}(),R=function(e){function SubTimelineBuilder(t,n,r,i,o,s){void 0===s&&(s=!1);var a=e.call(this,t,o.delay)||this;return a.element=t,a.keyframes=n,a.preStyleProps=r,a.postStyleProps=i,a._stretchStartingKeyframe=s,a.timings={duration:o.duration,delay:o.delay,easing:o.easing},a}return r.a(SubTimelineBuilder,e),SubTimelineBuilder.prototype.containsAnimation=function(){return this.keyframes.length>1},SubTimelineBuilder.prototype.buildKeyframes=function(){var e=this.keyframes,t=this.timings,n=t.delay,r=t.duration,i=t.easing;if(this._stretchStartingKeyframe&&n){var o=[],s=r+n,a=n/s,u=copyStyles(e[0],!1);u.offset=0,o.push(u);var l=copyStyles(e[0],!1);l.offset=roundOffset(a),o.push(l);for(var c=e.length-1,p=1;p<=c;p++){var d=copyStyles(e[p],!1),h=n+d.offset*r;d.offset=roundOffset(h/s),o.push(d)}r=s,n=0,i="",e=o}return createTimelineInstruction(this.element,e,this.preStyleProps,this.postStyleProps,r,n,i,!0)},SubTimelineBuilder}(F);function roundOffset(e,t){void 0===t&&(t=3);var n=Math.pow(10,t-1);return Math.round(e*n)/n}!function(){function Animation(e,t){this._driver=e;var n=[],r=buildAnimationAst(t,n);if(n.length){var i="animation validation failed:\n"+n.join("\n");throw new Error(i)}this._animationAst=r}Animation.prototype.buildTimelines=function(e,t,n,r,i){var o=Array.isArray(t)?normalizeStyles(t):t,s=Array.isArray(n)?normalizeStyles(n):n,a=[];i=i||new L;var u=buildAnimationTimelines(this._driver,e,this._animationAst,o,s,r,i,a);if(a.length){var l="animation building failed:\n"+a.join("\n");throw new Error(l)}return u}}(); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */var V=function(){return function AnimationStyleNormalizer(){}}(),k=(function(){function NoopAnimationStyleNormalizer(){}NoopAnimationStyleNormalizer.prototype.normalizePropertyName=function(e,t){return e},NoopAnimationStyleNormalizer.prototype.normalizeStyleValue=function(e,t,n,r){return n}}(),function(e){function WebAnimationsStyleNormalizer(){return null!==e&&e.apply(this,arguments)||this}return r.a(WebAnimationsStyleNormalizer,e),WebAnimationsStyleNormalizer.prototype.normalizePropertyName=function(e,t){return dashCaseToCamelCase(e)},WebAnimationsStyleNormalizer.prototype.normalizeStyleValue=function(e,t,n,r){var i="",o=n.toString().trim();if(j[t]&&0!==n&&"0"!==n)if("number"==typeof n)i="px";else{var s=n.match(/^[+-]?[\d\.]+([a-z]*)$/);s&&0==s[1].length&&r.push("Please provide a CSS unit value for "+e+":"+n)}return o+i},WebAnimationsStyleNormalizer}(V)),j=function makeBooleanMap(e){var t={};return e.forEach(function(e){return t[e]=!0}),t} +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */("width,height,minWidth,minHeight,maxWidth,maxHeight,left,top,bottom,right,fontSize,outlineWidth,outlineOffset,paddingTop,paddingLeft,paddingBottom,paddingRight,marginTop,marginLeft,marginBottom,marginRight,borderRadius,borderWidth,borderTopWidth,borderLeftWidth,borderRightWidth,borderBottomWidth,textIndent,perspective".split(","));function createTransitionInstruction(e,t,n,r,i,o,s,a,u,l,c,p){return{type:0,element:e,triggerName:t,isRemovalTransition:i,fromState:n,fromStyles:o,toState:r,toStyles:s,timelines:a,queriedElements:u,preStyleProps:l,postStyleProps:c,errors:p}} +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */var H={},B=function(){function AnimationTransitionFactory(e,t,n){this._triggerName=e,this.ast=t,this._stateStyles=n}return AnimationTransitionFactory.prototype.match=function(e,t){return function oneOrMoreTransitionsMatch(e,t,n){return e.some(function(e){return e(t,n)})}(this.ast.matchers,e,t)},AnimationTransitionFactory.prototype.buildStyles=function(e,t,n){var r=this._stateStyles["*"],i=this._stateStyles[e],o=r?r.buildStyles(t,n):{};return i?i.buildStyles(t,n):o},AnimationTransitionFactory.prototype.build=function(e,t,n,r,i,o,s){var a=[],u=this.ast.options&&this.ast.options.params||H,l=i&&i.params||H,c=this.buildStyles(n,l,a),p=o&&o.params||H,d=this.buildStyles(r,p,a),h=new Set,m=new Map,f=new Map,y="void"===r,g={params:Object.assign({},u,p)},v=buildAnimationTimelines(e,t,this.ast.animation,c,d,g,s,a);if(a.length)return createTransitionInstruction(t,this._triggerName,n,r,y,c,d,[],[],m,f,a);v.forEach(function(e){var n=e.element,r=getOrSetAsInMap(m,n,{});e.preStyleProps.forEach(function(e){return r[e]=!0});var i=getOrSetAsInMap(f,n,{});e.postStyleProps.forEach(function(e){return i[e]=!0}),n!==t&&h.add(n)});var b=iteratorToArray(h.values());return createTransitionInstruction(t,this._triggerName,n,r,y,c,d,v,b,m,f)},AnimationTransitionFactory}();var G=function(){function AnimationStateStyles(e,t){this.styles=e,this.defaultParams=t}return AnimationStateStyles.prototype.buildStyles=function(e,t){var n={},r=copyObj(this.defaultParams);return Object.keys(e).forEach(function(t){var n=e[t];null!=n&&(r[t]=n)}),this.styles.styles.forEach(function(e){if("string"!=typeof e){var i=e;Object.keys(i).forEach(function(e){var o=i[e];o.length>1&&(o=interpolateParams(o,r,t)),n[e]=o})}}),n},AnimationStateStyles}(); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */var U=function(){function AnimationTrigger(e,t){var n=this;this.name=e,this.ast=t,this.transitionFactories=[],this.states={},t.states.forEach(function(e){var t=e.options&&e.options.params||{};n.states[e.name]=new G(e.style,t)}),balanceProperties(this.states,"true","1"),balanceProperties(this.states,"false","0"),t.transitions.forEach(function(t){n.transitionFactories.push(new B(e,t,n.states))}),this.fallbackTransition=function createFallbackTransition(e,t){return new B(e,{type:1,animation:{type:2,steps:[],options:null},matchers:[function(e,t){return!0}],options:null,queryCount:0,depCount:0},t)}(e,this.states)}return Object.defineProperty(AnimationTrigger.prototype,"containsQueries",{get:function(){return this.ast.queryCount>0},enumerable:!0,configurable:!0}),AnimationTrigger.prototype.matchTransition=function(e,t){return this.transitionFactories.find(function(n){return n.match(e,t)})||null},AnimationTrigger.prototype.matchStyles=function(e,t,n){return this.fallbackTransition.buildStyles(e,t,n)},AnimationTrigger}();function balanceProperties(e,t,n){e.hasOwnProperty(t)?e.hasOwnProperty(n)||(e[n]=e[t]):e.hasOwnProperty(n)&&(e[t]=e[n])} +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */var q=new L,W=function(){function TimelineAnimationEngine(e,t){this._driver=e,this._normalizer=t,this._animations={},this._playersById={},this.players=[]}return TimelineAnimationEngine.prototype.register=function(e,t){var n=[],r=buildAnimationAst(t,n);if(n.length)throw new Error("Unable to build the animation due to the following errors: "+n.join("\n"));this._animations[e]=r},TimelineAnimationEngine.prototype._buildPlayer=function(e,t,n){var r=e.element,i=normalizeKeyframes(this._driver,this._normalizer,0,e.keyframes,t,n);return this._driver.animate(r,i,e.duration,e.delay,e.easing,[])},TimelineAnimationEngine.prototype.create=function(e,t,n){var r=this;void 0===n&&(n={});var o,s=[],a=this._animations[e],u=new Map;if(a?(o=buildAnimationTimelines(this._driver,t,a,{},{},n,q,s)).forEach(function(e){var t=getOrSetAsInMap(u,e.element,{});e.postStyleProps.forEach(function(e){return t[e]=null})}):(s.push("The requested animation doesn't exist or has already been destroyed"),o=[]),s.length)throw new Error("Unable to create the animation due to the following errors: "+s.join("\n"));u.forEach(function(e,t){Object.keys(e).forEach(function(n){e[n]=r._driver.computeStyle(t,n,i.AUTO_STYLE)})});var l=optimizeGroupPlayer(o.map(function(e){var t=u.get(e.element);return r._buildPlayer(e,{},t)}));return this._playersById[e]=l,l.onDestroy(function(){return r.destroy(e)}),this.players.push(l),l},TimelineAnimationEngine.prototype.destroy=function(e){var t=this._getPlayer(e);t.destroy(),delete this._playersById[e];var n=this.players.indexOf(t);n>=0&&this.players.splice(n,1)},TimelineAnimationEngine.prototype._getPlayer=function(e){var t=this._playersById[e];if(!t)throw new Error("Unable to find the timeline player referenced by "+e);return t},TimelineAnimationEngine.prototype.listen=function(e,t,n,r){var i=makeAnimationEvent(t,"","","");return listenOnPlayer(this._getPlayer(e),n,i,r),function(){}},TimelineAnimationEngine.prototype.command=function(e,t,n,r){if("register"!=n)if("create"!=n){var i=this._getPlayer(e);switch(n){case"play":i.play();break;case"pause":i.pause();break;case"reset":i.reset();break;case"restart":i.restart();break;case"finish":i.finish();break;case"init":i.init();break;case"setPosition":i.setPosition(parseFloat(r[0]));break;case"destroy":this.destroy(e)}}else{var o=r[0]||{};this.create(e,t,o)}else this.register(e,r[0])},TimelineAnimationEngine}(),z=[],K={namespaceId:"",setForRemoval:null,hasAnimation:!1,removedBeforeQueried:!1},Y={namespaceId:"",setForRemoval:null,hasAnimation:!1,removedBeforeQueried:!0},J="__ng_removed",Q=function(){function StateValue(e){var t=e&&e.hasOwnProperty("value"),n=t?e.value:e;if(this.value=function normalizeTriggerValue(e){return null!=e?e:null}(n),t){var r=copyObj(e);delete r.value,this.options=r}else this.options={};this.options.params||(this.options.params={})}return Object.defineProperty(StateValue.prototype,"params",{get:function(){return this.options.params},enumerable:!0,configurable:!0}),StateValue.prototype.absorbOptions=function(e){var t=e.params;if(t){var n=this.options.params;Object.keys(t).forEach(function(e){null==n[e]&&(n[e]=t[e])})}},StateValue}(),X=new Q("void"),$=new Q("DELETED"),Z=function(){function AnimationTransitionNamespace(e,t,n){this.id=e,this.hostElement=t,this._engine=n,this.players=[],this._triggers={},this._queue=[],this._elementListeners=new Map,this._hostClassName="ng-tns-"+e,addClass(t,this._hostClassName)}return AnimationTransitionNamespace.prototype.listen=function(e,t,n,r){var i=this;if(!this._triggers.hasOwnProperty(t))throw new Error('Unable to listen on the animation trigger event "'+n+'" because the animation trigger "'+t+"\" doesn't exist!");if(null==n||0==n.length)throw new Error('Unable to listen on the animation trigger "'+t+'" because the provided event is undefined!');if(!function isTriggerEventValid(e){return"start"==e||"done"==e}(n))throw new Error('The provided animation trigger event "'+n+'" for the animation trigger "'+t+'" is not supported!');var o=getOrSetAsInMap(this._elementListeners,e,[]),s={name:t,phase:n,callback:r};o.push(s);var a=getOrSetAsInMap(this._engine.statesByElement,e,{});return a.hasOwnProperty(t)||(addClass(e,"ng-trigger"),addClass(e,"ng-trigger-"+t),a[t]=null),function(){i._engine.afterFlush(function(){var e=o.indexOf(s);e>=0&&o.splice(e,1),i._triggers[t]||delete a[t]})}},AnimationTransitionNamespace.prototype.register=function(e,t){return!this._triggers[e]&&(this._triggers[e]=t,!0)},AnimationTransitionNamespace.prototype._getTrigger=function(e){var t=this._triggers[e];if(!t)throw new Error('The provided animation trigger "'+e+'" has not been registered!');return t},AnimationTransitionNamespace.prototype.trigger=function(e,t,n,r){var i=this;void 0===r&&(r=!0);var o=this._getTrigger(t),s=new te(this.id,t,e),a=this._engine.statesByElement.get(e);a||(addClass(e,"ng-trigger"),addClass(e,"ng-trigger-"+t),this._engine.statesByElement.set(e,a={}));var u=a[t],l=new Q(n);if(!(n&&n.hasOwnProperty("value"))&&u&&l.absorbOptions(u.options),a[t]=l,u){if(u===$)return s}else u=X;if("void"===l.value||u.value!==l.value){var c=getOrSetAsInMap(this._engine.playersByElement,e,[]);c.forEach(function(e){e.namespaceId==i.id&&e.triggerName==t&&e.queued&&e.destroy()});var p=o.matchTransition(u.value,l.value),d=!1;if(!p){if(!r)return;p=o.fallbackTransition,d=!0}return this._engine.totalQueuedPlayers++,this._queue.push({element:e,triggerName:t,transition:p,fromState:u,toState:l,player:s,isFallbackTransition:d}),d||(addClass(e,"ng-animate-queued"),s.onStart(function(){removeClass(e,"ng-animate-queued")})),s.onDone(function(){var t=i.players.indexOf(s);t>=0&&i.players.splice(t,1);var n=i._engine.playersByElement.get(e);if(n){var r=n.indexOf(s);r>=0&&n.splice(r,1)}}),this.players.push(s),c.push(s),s}if(!function objEquals(e,t){var n=Object.keys(e),r=Object.keys(t);if(n.length!=r.length)return!1;for(var i=0;i=0){for(var r=!1,i=n;i>=0;i--){var o=this._namespaceList[i];if(this.driver.containsElement(o.hostElement,t)){this._namespaceList.splice(i+1,0,e),r=!0;break}}r||this._namespaceList.splice(0,0,e)}else this._namespaceList.push(e);return this.namespacesByHostElement.set(t,e),e},TransitionAnimationEngine.prototype.register=function(e,t){var n=this._namespaceLookup[e];return n||(n=this.createNamespace(e,t)),n},TransitionAnimationEngine.prototype.registerTrigger=function(e,t,n){var r=this._namespaceLookup[e];r&&r.register(t,n)&&this.totalAnimations++},TransitionAnimationEngine.prototype.destroy=function(e,t){var n=this;if(e){var r=this._fetchNamespace(e);this.afterFlush(function(){n.namespacesByHostElement.delete(r.hostElement),delete n._namespaceLookup[e];var t=n._namespaceList.indexOf(r);t>=0&&n._namespaceList.splice(t,1)}),this.afterFlushAnimationsDone(function(){return r.destroy(t)})}},TransitionAnimationEngine.prototype._fetchNamespace=function(e){return this._namespaceLookup[e]},TransitionAnimationEngine.prototype.trigger=function(e,t,n,r){return!!isElementNode(t)&&(this._fetchNamespace(e).trigger(t,n,r),!0)},TransitionAnimationEngine.prototype.insertNode=function(e,t,n,r){if(isElementNode(t)){var i=t[J];i&&i.setForRemoval&&(i.setForRemoval=!1),e&&this._fetchNamespace(e).insertNode(t,n),r&&this.collectEnterElement(t)}},TransitionAnimationEngine.prototype.collectEnterElement=function(e){this.collectedEnterElements.push(e)},TransitionAnimationEngine.prototype.markElementAsDisabled=function(e,t){t?this.disabledNodes.has(e)||(this.disabledNodes.add(e),addClass(e,"ng-animate-disabled")):this.disabledNodes.has(e)&&(this.disabledNodes.delete(e),removeClass(e,"ng-animate-disabled"))},TransitionAnimationEngine.prototype.removeNode=function(e,t,n,r){if(isElementNode(t)){var i=e?this._fetchNamespace(e):null;i?i.removeNode(t,n,r):this.markElementAsRemoved(e,t,!1,n)}else this._onRemovalComplete(t,n)},TransitionAnimationEngine.prototype.markElementAsRemoved=function(e,t,n,r){this.collectedLeaveElements.push(t),t[J]={namespaceId:e,setForRemoval:r,hasAnimation:n,removedBeforeQueried:!1}},TransitionAnimationEngine.prototype.listen=function(e,t,n,r,i){return isElementNode(t)?this._fetchNamespace(e).listen(t,n,r,i):function(){}},TransitionAnimationEngine.prototype._buildInstruction=function(e,t){return e.transition.build(this.driver,e.element,e.fromState.value,e.toState.value,e.fromState.options,e.toState.options,t)},TransitionAnimationEngine.prototype.destroyInnerAnimations=function(e){var t=this,n=this.driver.query(e,v,!0);n.forEach(function(e){var n=t.playersByElement.get(e);n&&n.forEach(function(e){e.queued?e.markedForDestroy=!0:e.destroy()});var r=t.statesByElement.get(e);r&&Object.keys(r).forEach(function(e){return r[e]=$})}),0!=this.playersByQueriedElement.size&&(n=this.driver.query(e,b,!0)).length&&n.forEach(function(e){var n=t.playersByQueriedElement.get(e);n&&n.forEach(function(e){return e.finish()})})},TransitionAnimationEngine.prototype.whenRenderingDone=function(){var e=this;return new Promise(function(t){if(e.players.length)return optimizeGroupPlayer(e.players).onDone(function(){return t()});t()})},TransitionAnimationEngine.prototype.processLeaveNode=function(e){var t=this,n=e[J];if(n&&n.setForRemoval){if(e[J]=K,n.namespaceId){this.destroyInnerAnimations(e);var r=this._fetchNamespace(n.namespaceId);r&&r.clearElementCache(e)}this._onRemovalComplete(e,n.setForRemoval)}this.driver.matchesElement(e,".ng-animate-disabled")&&this.markElementAsDisabled(e,!1),this.driver.query(e,".ng-animate-disabled",!0).forEach(function(n){t.markElementAsDisabled(e,!1)})},TransitionAnimationEngine.prototype.flush=function(e){var t=this;void 0===e&&(e=-1);var n=[];if(this.newHostElements.size&&(this.newHostElements.forEach(function(e,n){return t._balanceNamespaceList(e,n)}),this.newHostElements.clear()),this._namespaceList.length&&(this.totalQueuedPlayers||this.collectedLeaveElements.length)){var r=[];try{n=this._flushAnimations(r,e)}finally{for(var i=0;i=0;m--){this._namespaceList[m].drainQueuedTransitions(t).forEach(function(e){var t=e.player;g.push(t);var i=e.element;if(d&&n.driver.containsElement(d,i)){var s=n._buildInstruction(e,r);if(s.errors&&s.errors.length)v.push(s);else{if(e.isFallbackTransition)return t.onStart(function(){return eraseStyles(i,s.fromStyles)}),t.onDestroy(function(){return setStyles(i,s.toStyles)}),void o.push(t);s.timelines.forEach(function(e){return e.stretchStartingKeyframe=!0}),r.append(i,s.timelines);var p={instruction:s,player:t,element:i};a.push(p),s.queriedElements.forEach(function(e){return getOrSetAsInMap(u,e,[]).push(t)}),s.preStyleProps.forEach(function(e,t){var n=Object.keys(e);if(n.length){var r=l.get(t);r||l.set(t,r=new Set),n.forEach(function(e){return r.add(e)})}}),s.postStyleProps.forEach(function(e,t){var n=Object.keys(e),r=c.get(t);r||c.set(t,r=new Set),n.forEach(function(e){return r.add(e)})})}}else t.destroy()})}if(v.length){var _=[];v.forEach(function(e){_.push("@"+e.triggerName+" has failed due to:\n"),e.errors.forEach(function(e){return _.push("- "+e+"\n")})}),g.forEach(function(e){return e.destroy()}),this.reportError(_)}var S=new Set;for(m=0;m0?this.driver.animate(e.element,t,e.duration,e.delay,e.easing,n):new i.NoopAnimationPlayer},TransitionAnimationEngine}(),te=function(){function TransitionAnimationPlayer(e,t,n){this.namespaceId=e,this.triggerName=t,this.element=n,this._player=new i.NoopAnimationPlayer,this._containsRealPlayer=!1,this._queuedCallbacks={},this._destroyed=!1,this.markedForDestroy=!1}return Object.defineProperty(TransitionAnimationPlayer.prototype,"queued",{get:function(){return 0==this._containsRealPlayer},enumerable:!0,configurable:!0}),Object.defineProperty(TransitionAnimationPlayer.prototype,"destroyed",{get:function(){return this._destroyed},enumerable:!0,configurable:!0}),TransitionAnimationPlayer.prototype.setRealPlayer=function(e){var t=this;this._containsRealPlayer||(this._player=e,Object.keys(this._queuedCallbacks).forEach(function(n){t._queuedCallbacks[n].forEach(function(t){return listenOnPlayer(e,n,void 0,t)})}),this._queuedCallbacks={},this._containsRealPlayer=!0)},TransitionAnimationPlayer.prototype.getRealPlayer=function(){return this._player},TransitionAnimationPlayer.prototype._queueEvent=function(e,t){getOrSetAsInMap(this._queuedCallbacks,e,[]).push(t)},TransitionAnimationPlayer.prototype.onDone=function(e){this.queued&&this._queueEvent("done",e),this._player.onDone(e)},TransitionAnimationPlayer.prototype.onStart=function(e){this.queued&&this._queueEvent("start",e),this._player.onStart(e)},TransitionAnimationPlayer.prototype.onDestroy=function(e){this.queued&&this._queueEvent("destroy",e),this._player.onDestroy(e)},TransitionAnimationPlayer.prototype.init=function(){this._player.init()},TransitionAnimationPlayer.prototype.hasStarted=function(){return!this.queued&&this._player.hasStarted()},TransitionAnimationPlayer.prototype.play=function(){!this.queued&&this._player.play()},TransitionAnimationPlayer.prototype.pause=function(){!this.queued&&this._player.pause()},TransitionAnimationPlayer.prototype.restart=function(){!this.queued&&this._player.restart()},TransitionAnimationPlayer.prototype.finish=function(){this._player.finish()},TransitionAnimationPlayer.prototype.destroy=function(){this._destroyed=!0,this._player.destroy()},TransitionAnimationPlayer.prototype.reset=function(){!this.queued&&this._player.reset()},TransitionAnimationPlayer.prototype.setPosition=function(e){this.queued||this._player.setPosition(e)},TransitionAnimationPlayer.prototype.getPosition=function(){return this.queued?0:this._player.getPosition()},Object.defineProperty(TransitionAnimationPlayer.prototype,"totalTime",{get:function(){return this._player.totalTime},enumerable:!0,configurable:!0}),TransitionAnimationPlayer}();function isElementNode(e){return e&&1===e.nodeType}function cloakElement(e,t){var n=e.style.display;return e.style.display=null!=t?t:"none",n}function cloakAndComputeStyles(e,t,n,r){var i=[];t.forEach(function(e){return i.push(cloakElement(e))});var o=new Map,s=[];n.forEach(function(t,n){var i={};t.forEach(function(t){var o=i[t]=e.computeStyle(n,t,r);o&&0!=o.length||(n[J]=Y,s.push(n))}),o.set(n,i)});var a=0;return t.forEach(function(e){return cloakElement(e,i[a++])}),[o,s]}var ne="$$classes";function addClass(e,t){if(e.classList)e.classList.add(t);else{var n=e[ne];n||(n=e[ne]={}),n[t]=!0}}function removeClass(e,t){if(e.classList)e.classList.remove(t);else{var n=e[ne];n&&delete n[t]}}function removeNodesAfterAnimationDone(e,t,n){optimizeGroupPlayer(n).onDone(function(){return e.processLeaveNode(t)})}function replacePostStylesAsPre(e,t,n){var r=n.get(e);if(!r)return!1;var i=t.get(e);return i?r.forEach(function(e){return i.add(e)}):t.set(e,r),n.delete(e),!0} +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */var re=function(){function AnimationEngine(e,t){var n=this;this._triggerCache={},this.onRemovalComplete=function(e,t){},this._transitionEngine=new ee(e,t),this._timelineEngine=new W(e,t),this._transitionEngine.onRemovalComplete=function(e,t){return n.onRemovalComplete(e,t)}}return AnimationEngine.prototype.registerTrigger=function(e,t,n,r,i){var o=e+"-"+r,s=this._triggerCache[o];if(!s){var a=[],u=buildAnimationAst(i,a);if(a.length)throw new Error('The animation trigger "'+r+'" has failed to build due to the following errors:\n - '+a.join("\n - "));s=function buildTrigger(e,t){return new U(e,t)}(r,u),this._triggerCache[o]=s}this._transitionEngine.registerTrigger(t,r,s)},AnimationEngine.prototype.register=function(e,t){this._transitionEngine.register(e,t)},AnimationEngine.prototype.destroy=function(e,t){this._transitionEngine.destroy(e,t)},AnimationEngine.prototype.onInsert=function(e,t,n,r){this._transitionEngine.insertNode(e,t,n,r)},AnimationEngine.prototype.onRemove=function(e,t,n){this._transitionEngine.removeNode(e,t,n)},AnimationEngine.prototype.disableAnimations=function(e,t){this._transitionEngine.markElementAsDisabled(e,t)},AnimationEngine.prototype.process=function(e,t,n,r){if("@"==n.charAt(0)){var i=parseTimelineCommand(n),o=i[0],s=i[1],a=r;this._timelineEngine.command(o,t,s,a)}else this._transitionEngine.trigger(e,t,n,r)},AnimationEngine.prototype.listen=function(e,t,n,r,i){if("@"==n.charAt(0)){var o=parseTimelineCommand(n),s=o[0],a=o[1];return this._timelineEngine.listen(s,t,a,i)}return this._transitionEngine.listen(e,t,n,r,i)},AnimationEngine.prototype.flush=function(e){void 0===e&&(e=-1),this._transitionEngine.flush(e)},Object.defineProperty(AnimationEngine.prototype,"players",{get:function(){return this._transitionEngine.players.concat(this._timelineEngine.players)},enumerable:!0,configurable:!0}),AnimationEngine.prototype.whenRenderingDone=function(){return this._transitionEngine.whenRenderingDone()},AnimationEngine}(),ie=function(){function WebAnimationsPlayer(e,t,n,r){void 0===r&&(r=[]);var i=this;this.element=e,this.keyframes=t,this.options=n,this.previousPlayers=r,this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._initialized=!1,this._finished=!1,this._started=!1,this._destroyed=!1,this.time=0,this.parentPlayer=null,this.previousStyles={},this.currentSnapshot={},this._duration=n.duration,this._delay=n.delay||0,this.time=this._duration+this._delay,function allowPreviousPlayerStylesMerge(e,t){return 0===e||0===t}(this._duration,this._delay)&&r.forEach(function(e){var t=e.currentSnapshot;Object.keys(t).forEach(function(e){return i.previousStyles[e]=t[e]})})}return WebAnimationsPlayer.prototype._onFinish=function(){this._finished||(this._finished=!0,this._onDoneFns.forEach(function(e){return e()}),this._onDoneFns=[])},WebAnimationsPlayer.prototype.init=function(){this._buildPlayer(),this._preparePlayerBeforeStart()},WebAnimationsPlayer.prototype._buildPlayer=function(){var e=this;if(!this._initialized){this._initialized=!0;var t=this.keyframes.map(function(e){return copyStyles(e,!1)}),n=Object.keys(this.previousStyles);if(n.length){var r=t[0],i=[];if(n.forEach(function(t){r.hasOwnProperty(t)||i.push(t),r[t]=e.previousStyles[t]}),i.length)for(var o=this,s=function(){var e=t[a];i.forEach(function(t){e[t]=_computeStyle(o.element,t)})},a=1;a\n\n
    \n
    \n

    OpenHTF

    \n

    Hardware Testing Framework.

    \n
    \n
    \n\n
    \n \n \n\n \n \n
    \n'},566:function(e,t){e.exports='/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nh1 {\n color: #323232;\n font-size: 20px;\n margin: 0; }\n\nh2 {\n color: #949a9f;\n font-size: 12px;\n margin-left: 5px; }\n'},567:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(19),i=n(2),o=n(25),s=n(32),a=n(568),u=function(){function CoreModule(e){if(e)throw new Error("CoreModule is already loaded. Import it in the AppModule only")}return CoreModule=__decorate([i.NgModule({imports:[r.CommonModule],declarations:[a.FlashMessagesComponent,a.FlashMessageTypeToClass],providers:[o.ConfigService,s.FlashMessageService],exports:[r.CommonModule,a.FlashMessagesComponent]}),__param(0,i.Optional()),__param(0,i.SkipSelf()),__metadata("design:paramtypes",[CoreModule])],CoreModule)}();t.CoreModule=u},568:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=n(235),o=n(32),s=((u={})[i.FlashMessageType.error]="ng-flash-message-error",u[i.FlashMessageType.warn]="ng-flash-message-warn",u),a=function(){function FlashMessageTypeToClass(){}return FlashMessageTypeToClass.prototype.transform=function(e){return s[e]},FlashMessageTypeToClass=__decorate([r.Pipe({name:"flashMessageTypeToClass"})],FlashMessageTypeToClass)}();t.FlashMessageTypeToClass=a;var u,l=function(){function FlashMessagesComponent(e){this.flashMessage=e}return Object.defineProperty(FlashMessagesComponent.prototype,"message",{get:function(){if(this.flashMessage.messages.length>0)return this.flashMessage.messages[0]},enumerable:!0,configurable:!0}),FlashMessagesComponent.prototype.dismiss=function(){this.flashMessage.dismissEarly()},FlashMessagesComponent.prototype.onMouseEnter=function(e){this.flashMessage.cancelDismissal(),e.showTooltip=e.hasTooltip},FlashMessagesComponent.prototype.onMouseExit=function(e){this.flashMessage.startDismissal(),e.showTooltip=!1},FlashMessagesComponent=__decorate([r.Component({selector:"htf-flash-messages",template:n(569),styles:[n(570)]}),__metadata("design:paramtypes",[o.FlashMessageService])],FlashMessagesComponent)}();t.FlashMessagesComponent=l},569:function(e,t){e.exports='\x3c!--\n Copyright 2022 Google LLC\n\n Licensed under the Apache License, Version 2.0 (the "License");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an "AS IS" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n--\x3e\n\n
    \n \n \n X\n \n {{ message.content }}\n
    \n\n \x3c!-- Avoid whitespace since flash-message-tooltip uses white-space: pre --\x3e\n {{ message.tooltip }}\n\n'},570:function(e,t){e.exports='/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n@keyframes flash-message-enter {\n 0% {\n top: -32px; }\n 100% {\n top: 0; } }\n\n@keyframes flash-message-exit {\n 0% {\n top: 0; }\n 100% {\n top: -32px; } }\n\n.flash-message {\n animation: flash-message-enter 400ms forwards;\n border-bottom-left-radius: 10px;\n border-bottom-right-radius: 10px;\n height: 32px;\n left: 50%;\n line-height: 31px;\n min-width: 400px;\n opacity: .9;\n padding: 0 20px;\n position: fixed;\n text-align: center;\n top: 0;\n transform: translateX(-50%);\n white-space: nowrap;\n z-index: 2; }\n .flash-message.flash-message--has-tooltip {\n cursor: pointer; }\n .flash-message.flash-message--is-dismissed {\n animation: flash-message-exit 400ms forwards; }\n .flash-message.ng-flash-message-error {\n background: #ff5d4e;\n color: #fff; }\n .flash-message.ng-flash-message-warn {\n background: #ffe54d;\n color: #323232; }\n\n.flash-message-tooltip {\n background: rgba(0, 0, 0, 0.7);\n border-radius: 3px;\n color: #fff;\n font-size: 12px;\n left: 50%;\n line-height: initial;\n max-width: 500px;\n opacity: 0;\n padding: 10px;\n position: fixed;\n text-align: left;\n top: 40px;\n transform: translateX(-50%);\n transition: 200ms ease opacity;\n white-space: pre-wrap;\n word-wrap: break-word;\n z-index: 2; }\n .flash-message-tooltip.flash-message-tooltip--is-visible {\n opacity: 1; }\n\n.flash-message-dismissal-button {\n -webkit-appearance: initial;\n background: transparent;\n border: 0;\n padding: 0;\n border-radius: 50%;\n border: 1px solid #fff;\n color: inherit;\n display: inline-block;\n float: left;\n font-size: 11px;\n height: 18px;\n left: -6px;\n padding-left: 1px;\n position: relative;\n top: 6px;\n width: 18px; }\n .flash-message-dismissal-button:focus, .flash-message-dismissal-button:active {\n outline: none; }\n\n.flash-message.ng-flash-message-warn .flash-message-dismissal-button {\n border-color: #323232; }\n'},571:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=n(95),o=function(){function ElapsedTimePipe(e){this.time=e}return ElapsedTimePipe.prototype.transform=function(e,t){return void 0===t&&(t="%s"),t.replace("%s",this.getElapsedTimeString(e))},ElapsedTimePipe.prototype.getElapsedTimeString=function(e){if(null===this.time.last)return"0s";var t=e.endTimeMillis||this.time.last,n=Math.round((t-e.startTimeMillis)/1e3),r=Math.floor(n/60);if(0===r)return n+"s";var i=n-60*r,o=Math.floor(r/60);return 0===o?r+"m "+i+"s":o+"h "+(r-60*o)+"m "+i+"s"},ElapsedTimePipe=__decorate([r.Pipe({name:"elapsedTime",pure:!1}),__metadata("design:paramtypes",[i.TimeService])],ElapsedTimePipe)}();t.ElapsedTimePipe=o},572:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=function(){function FocusDirective(e){this.ref=e}return FocusDirective.prototype.ngOnChanges=function(){this.focusOn&&this.ref.nativeElement.focus()},__decorate([r.Input("htfFocus"),__metadata("design:type",Boolean)],FocusDirective.prototype,"focusOn",void 0),FocusDirective=__decorate([r.Directive({selector:"[htfFocus]"}),__metadata("design:paramtypes",[r.ElementRef])],FocusDirective)}();t.FocusDirective=i},573:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=function(){function GenealogyNodeComponent(){}return GenealogyNodeComponent.prototype.ngOnInit=function(){null===this.maxDepth?this.childMaxDepth=null:this.childMaxDepth=this.maxDepth-1,void 0===this.isRoot&&(this.isRoot=!0)},__decorate([r.Input(),__metadata("design:type",Boolean)],GenealogyNodeComponent.prototype,"isFirst",void 0),__decorate([r.Input(),__metadata("design:type",Boolean)],GenealogyNodeComponent.prototype,"isRoot",void 0),__decorate([r.Input(),__metadata("design:type",Object)],GenealogyNodeComponent.prototype,"node",void 0),__decorate([r.Input(),__metadata("design:type",Number)],GenealogyNodeComponent.prototype,"maxDepth",void 0),GenealogyNodeComponent=__decorate([r.Component({selector:"htf-genealogy-node",template:n(574),styles:[n(575)]})],GenealogyNodeComponent)}();t.GenealogyNodeComponent=i},574:function(e,t){e.exports='\x3c!--\n Copyright 2022 Google LLC\n\n Licensed under the Apache License, Version 2.0 (the "License");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an "AS IS" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n--\x3e\n\n
    \n {{ node.component.serial }}\n {{ node.component.instance_name }}\n ({{ node.component.part_number }})\n
    \n\n
      \n
    • \n \n \n
    • \n
    \n'},575:function(e,t){e.exports='/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n.component-info {\n border: 1px solid #323232;\n display: inline-block;\n margin-bottom: 10px;\n padding: 5px;\n position: relative; }\n\n.component-info:not(.is-root)::before {\n border-bottom: 1px solid #323232;\n border-left: 1px solid #323232;\n content: \'\';\n height: calc(100% + 11px);\n left: -21px;\n position: absolute;\n top: calc(-50% - 11px);\n width: 20px; }\n\n.component-info:not(.is-root).is-first::before {\n height: calc(50% + 11px);\n top: -11px; }\n\nul {\n list-style: none;\n margin: 0;\n padding: 0;\n padding-left: 40px; }\n\n.serial-number {\n font-weight: bold; }\n'},576:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=n(96),o=function(){function LogLevelToClassPipe(){}return LogLevelToClassPipe.prototype.transform=function(e){if(e)return e<=i.logLevels.debug?"ng-log-level-debug":e<=i.logLevels.info?"ng-log-level-info":e<=i.logLevels.warning?"ng-log-level-warning":e<=i.logLevels.error?"ng-log-level-error":"ng-log-level-critical"},LogLevelToClassPipe=__decorate([r.Pipe({name:"logLevelToClass"})],LogLevelToClassPipe)}();t.LogLevelToClassPipe=o},577:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=function(){function ObjectToSortedValuesPipe(){}return ObjectToSortedValuesPipe.prototype.transform=function(e,t){void 0===t&&(t=null);var n=[],r=Object.keys(e);null===t&&r.sort();for(var i=0,o=r;in[t]?1:0}),n},ObjectToSortedValuesPipe=__decorate([r.Pipe({name:"objectToSortedValues",pure:!1})],ObjectToSortedValuesPipe)}();t.ObjectToSortedValuesPipe=i},578:function(e,t){e.exports='\x3c!--\n Copyright 2022 Google LLC\n\n Licensed under the Apache License, Version 2.0 (the "License");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an "AS IS" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n--\x3e\n\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n'},579:function(e,t){e.exports='/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n.outer {\n height: 100%;\n width: 100%;\n background: #e5e5e5;\n border-radius: 3px;\n overflow: hidden; }\n .outer.is-complete {\n animation: htf-progress-bar-pulse 2s infinite; }\n\n.inner-wrapper {\n height: 100%;\n left: -10px;\n position: relative;\n width: calc(100% + 20px); }\n\n.inner {\n background: rgba(0, 119, 255, 0.8);\n height: 100%;\n transition: width .4s ease;\n transform: skewX(-30deg); }\n\n.stripes {\n transform: skewX(45deg);\n height: 100%;\n width: 100%;\n background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.08) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.08) 50%, rgba(255, 255, 255, 0.08) 75%, transparent 75%, transparent);\n background-size: 50px 50px;\n animation: move 4s linear infinite; }\n\n@keyframes htf-progress-bar-pulse {\n 0% {\n box-shadow: 0 0 0 0 rgba(0, 119, 255, 0.25); }\n 70% {\n box-shadow: 0 0 0 8px rgba(0, 119, 255, 0); }\n 100% {\n box-shadow: 0 0 0 0 rgba(0, 119, 255, 0); } }\n\n@keyframes move {\n 0% {\n background-position: 0 0; }\n 100% {\n background-position: 50px 50px; } }\n'},580:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r,i=n(2),o=n(98),s=n(66),a=n(49),u=n(21);!function(e){e[e.fail=0]="fail",e[e.online=1]="online",e[e.pass=2]="pass",e[e.pending=3]="pending",e[e.running=4]="running",e[e.unreachable=5]="unreachable",e[e.warning=6]="warning"}(r||(r={}));var l=((m={})[r.fail]="ng-status-fail",m[r.online]="ng-status-online",m[r.pass]="ng-status-pass",m[r.pending]="ng-status-pending",m[r.running]="ng-status-running",m[r.unreachable]="ng-status-unreachable",m[r.warning]="ng-status-warning",m),c=Symbol("unknownStatus"),p=((f={})[o.MeasurementStatus.unset]=r.pending,f[o.MeasurementStatus.pass]=r.pass,f[o.MeasurementStatus.fail]=r.fail,f[s.PhaseStatus.waiting]=r.pending,f[s.PhaseStatus.running]=r.running,f[s.PhaseStatus.pass]=r.pass,f[s.PhaseStatus.fail]=r.fail,f[s.PhaseStatus.skip]=r.unreachable,f[s.PhaseStatus.error]=r.warning,f[a.StationStatus.online]=r.online,f[a.StationStatus.unreachable]=r.unreachable,f[u.TestStatus.waiting]=r.pending,f[u.TestStatus.running]=r.running,f[u.TestStatus.pass]=r.pass,f[u.TestStatus.fail]=r.fail,f[u.TestStatus.error]=r.warning,f[u.TestStatus.timeout]=r.warning,f[u.TestStatus.aborted]=r.warning,f[c]=r.warning,f),d=((y={})[o.MeasurementStatus.unset]="Unset",y[o.MeasurementStatus.pass]="Pass",y[o.MeasurementStatus.fail]="Fail",y[s.PhaseStatus.waiting]="Waiting",y[s.PhaseStatus.running]="Running",y[s.PhaseStatus.pass]="Pass",y[s.PhaseStatus.fail]="Fail",y[s.PhaseStatus.skip]="Skip",y[s.PhaseStatus.error]="Error",y[a.StationStatus.online]="Online",y[a.StationStatus.unreachable]="Unreachable",y[u.TestStatus.waiting]="Waiting",y[u.TestStatus.running]="Running",y[u.TestStatus.pass]="Pass",y[u.TestStatus.fail]="Fail",y[u.TestStatus.error]="Error",y[u.TestStatus.timeout]="Timeout",y[u.TestStatus.aborted]="Aborted",y[c]="Unknown",y),h=function(){function StatusToClassPipe(){}return StatusToClassPipe.prototype.transform=function(e){return e in p?l[p[e]]:(console.error('Unknown status "'+e+'".'),l[p[c]])},StatusToClassPipe=__decorate([i.Pipe({name:"statusToClass"})],StatusToClassPipe)}();t.StatusToClassPipe=h;var m,f,y,g=function(){function StatusToTextPipe(){}return StatusToTextPipe.prototype.transform=function(e){return e in p?d[e]:(console.error('Unknown status "'+e+'".'),d[c])},StatusToTextPipe=__decorate([i.Pipe({name:"statusToText"})],StatusToTextPipe)}();t.StatusToTextPipe=g},581:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=function(e){return"—"},o=function(){function TimeAgoPipe(){}return TimeAgoPipe.prototype.transform=function(e){return i(e)},TimeAgoPipe=__decorate([r.Pipe({name:"timeAgo",pure:!1})],TimeAgoPipe)}();t.TimeAgoPipe=o},582:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=function(){function TooltipDirective(e){this.ref=e}return TooltipDirective.prototype.ngOnInit=function(){if(0!==this.text.length){this.tooltipElement=document.createElement("div"),this.tooltipElement.innerHTML=this.text,this.tooltipElement.classList.add("ng-tooltip");var e=this.ref.nativeElement;e.classList.add("ng-tooltip-host"),e.insertBefore(this.tooltipElement,e.firstChild)}},TooltipDirective.prototype.onMouseEnter=function(){this.text.length>0&&this.tooltipElement.classList.add("ng-tooltip--is-visible")},TooltipDirective.prototype.onMouseLeave=function(){this.text.length>0&&this.tooltipElement.classList.remove("ng-tooltip--is-visible")},__decorate([r.Input("htfTooltip"),__metadata("design:type",String)],TooltipDirective.prototype,"text",void 0),__decorate([r.HostListener("mouseenter"),__metadata("design:type",Function),__metadata("design:paramtypes",[]),__metadata("design:returntype",void 0)],TooltipDirective.prototype,"onMouseEnter",null),__decorate([r.HostListener("mouseleave"),__metadata("design:type",Function),__metadata("design:paramtypes",[]),__metadata("design:returntype",void 0)],TooltipDirective.prototype,"onMouseLeave",null),TooltipDirective=__decorate([r.Directive({selector:"[htfTooltip]"}),__metadata("design:paramtypes",[r.ElementRef])],TooltipDirective)}();t.TooltipDirective=i},583:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=function(){function TrimmedTextComponent(){this.expanded=!1}return Object.defineProperty(TrimmedTextComponent.prototype,"buttonLabel",{get:function(){return!this.content||this.content.length<=this.maxChars?null:this.expanded?"collapse":"expand"},enumerable:!0,configurable:!0}),Object.defineProperty(TrimmedTextComponent.prototype,"trimmedContent",{get:function(){return!this.content||this.expanded||this.content.length<=this.maxChars?this.content:this.content.slice(0,this.maxChars-"…".length)+"…"},enumerable:!0,configurable:!0}),TrimmedTextComponent.prototype.onClick=function(){this.expanded=!this.expanded},__decorate([r.Input(),__metadata("design:type",Number)],TrimmedTextComponent.prototype,"maxChars",void 0),__decorate([r.Input(),__metadata("design:type",String)],TrimmedTextComponent.prototype,"content",void 0),TrimmedTextComponent=__decorate([r.Component({selector:"htf-trimmed-text",template:'\n {{ trimmedContent }}\n \n'})],TrimmedTextComponent)}();t.TrimmedTextComponent=i},584:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(48),i=n(2),o=n(29),s=n(25),a=n(32),u=n(238),l=n(585),c="openhtf.plugs.user_input.UserInput",p=function(e){function UserInputPlugComponent(t,n,r,i){var o=e.call(this,c,t,n,r)||this;return o.ref=i,o}return __extends(UserInputPlugComponent,e),Object.defineProperty(UserInputPlugComponent.prototype,"error",{get:function(){return this.getPlugState().error},enumerable:!0,configurable:!0}),Object.defineProperty(UserInputPlugComponent.prototype,"prompt",{get:function(){var e=this.getPlugState();if(this.lastPromptId!==e.id){this.lastPromptId=e.id;var t=e.message.replace(/ /g,"
    ");this.lastPromptHtml=t,this.focusSelf(),e.default&&this.setResponse(e.default)}return this.lastPromptHtml},enumerable:!0,configurable:!0}),UserInputPlugComponent.prototype.hasTextInput=function(){return this.getPlugState()["text-input"]},UserInputPlugComponent.prototype.hasImage=function(){return this.getPlugState()["image-url"]},Object.defineProperty(UserInputPlugComponent.prototype,"Image_URL",{get:function(){return this.getPlugState()["image-url"]},enumerable:!0,configurable:!0}),UserInputPlugComponent.prototype.sendResponse=function(e){var t,n=this.getPlugState().id;this.hasTextInput()?(t=e.value,e.value=""):t="",this.respond("respond",[n,t])},UserInputPlugComponent.prototype.getPlugState=function(){return e.prototype.getPlugState.call(this)},UserInputPlugComponent.prototype.focusSelf=function(){var e=this.ref.nativeElement.querySelector("input");e&&e.focus()},UserInputPlugComponent.prototype.setResponse=function(e){var t=this.ref.nativeElement.querySelector("input");t&&(t.value=e)},UserInputPlugComponent=__decorate([i.Component({animations:[r.trigger("animateIn",u.washIn)],selector:"htf-user-input-plug",template:n(586),styles:[n(587)]}),__metadata("design:paramtypes",[s.ConfigService,o.Http,a.FlashMessageService,i.ElementRef])],UserInputPlugComponent)}(l.BasePlug);t.UserInputPlugComponent=p},585:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=n(29),o=n(21),s=n(26),a=n(26),u=function(){function BasePlug(e,t,n,r){this.className=e,this.config=t,this.http=n,this.flashMessage=r}return BasePlug.prototype.plugExists=function(){return Boolean(this.test&&this.getPlugState())},BasePlug.prototype.respond=function(e,t){var n=this,r=new i.Headers({"Content-Type":"application/json"}),o=new i.RequestOptions({headers:r}),u=a.getTestBaseUrl(this.config.dashboardEnabled,this.test)+"/plugs/"+this.plugName,l=JSON.stringify({method:e,args:t});this.http.post(u,l,o).subscribe(function(){},function(e){var t=s.messageFromErrorResponse(e);n.flashMessage.error("An error occurred trying to respond to plug "+n.plugName+".",t)})},BasePlug.prototype.getPlugState=function(){if(this.plugName&&this.test.plugStates[this.plugName])return this.test.plugStates[this.plugName];for(var e=0,t=Object.keys(this.test.plugStates);e\n\n \x3c!-- Wrap contents in an extra div for the background color animation. --\x3e\n
    \n\n
    \n
    Operator input
    \n
    \n\n
    \n\n user-input-image\n\n
    \n\n \n\n
    \n {{ error }}\n
    \n\n
    \n \n {{ hasTextInput() ? \'Submit\' : \'Okay\' }}\n \n
    \n\n
    \n\n
    \n\n'},587:function(e,t){e.exports='/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n:host ::ng-deep ol,\n:host ::ng-deep ul {\n padding-left: 25px;\n margin: 0; }\n\n.user-input-has-error {\n border-color: #ff5d4e; }\n .user-input-has-error:focus {\n border-color: #e71400; }\n\n.user-input-error-text {\n color: #ff5d4e;\n font-size: 12px; }\n'},588:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(19),i=n(2),o=n(236),s=n(94),a=n(239),u=n(589),l=n(592),c=n(595),p=n(99),d=n(599),h=n(602),m=n(604),f=n(607),y=n(243),g=n(610),v=function(){function StationsModule(){}return StationsModule=__decorate([i.NgModule({imports:[r.CommonModule,o.PlugsModule,s.SharedModule],declarations:[u.StationListComponent,l.AttachmentsComponent,c.HistoryComponent,d.LogsComponent,m.PhaseComponent,h.PhaseListComponent,f.StationComponent,g.TestSummaryComponent],providers:[a.DashboardService,p.HistoryService,y.StationService],exports:[r.CommonModule,f.StationComponent,u.StationListComponent]})],StationsModule)}();t.StationsModule=v},589:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=n(25),o=n(49),s=n(95),a=n(239),u=function(){return function StationSelectedEvent(e){this.station=e}}();t.StationSelectedEvent=u;var l=function(){function StationListComponent(e,t,n){var i=this;if(this.dashboard=e,this.time=t,this.onSelectStation=new r.EventEmitter,this.retryCountdown=this.time.observable.map(function(e){var t=i.dashboard.retryTimeMs-e;return"Retrying in "+Math.round(t/1e3)+"s."}),this.stations=e.stations,!n.dashboardEnabled)var o=e.messages.subscribe(function(){for(var e=0,t=Object.keys(i.stations);e0},enumerable:!0,configurable:!0}),Object.defineProperty(StationListComponent.prototype,"hasError",{get:function(){return this.dashboard.hasError},enumerable:!0,configurable:!0}),Object.defineProperty(StationListComponent.prototype,"isLoading",{get:function(){return this.dashboard.isSubscribing},enumerable:!0,configurable:!0}),Object.defineProperty(StationListComponent.prototype,"stationCount",{get:function(){return Object.keys(this.stations).length},enumerable:!0,configurable:!0}),StationListComponent.prototype.ngOnInit=function(){this.dashboard.subscribe(200,1.5,1500)},StationListComponent.prototype.ngOnDestroy=function(){this.dashboard.unsubscribe()},StationListComponent.prototype.isReachable=function(e){return e.status!==o.StationStatus.unreachable},StationListComponent.prototype.select=function(e){this.onSelectStation.emit(new u(e))},StationListComponent.prototype.manualRetry=function(){this.dashboard.retryNow()},StationListComponent.prototype.manualReload=function(){this.dashboard.refresh()},__decorate([r.Input(),__metadata("design:type",o.Station)],StationListComponent.prototype,"selectedStation",void 0),__decorate([r.Output(),__metadata("design:type",Object)],StationListComponent.prototype,"onSelectStation",void 0),StationListComponent=__decorate([r.Component({selector:"htf-station-list",template:n(590),styles:[n(591)]}),__metadata("design:paramtypes",[a.DashboardService,s.TimeService,i.ConfigService])],StationListComponent)}();t.StationListComponent=l},590:function(e,t){e.exports='\x3c!--\n Copyright 2022 Google LLC\n\n Licensed under the Apache License, Version 2.0 (the "License");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an "AS IS" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n--\x3e\n\n\n\n
      \n
    • \n \n\n
      \n
      \n {{ station.label }} ({{ station.status | statusToText }})\n
      \n
      \n
      \n {{ station.host }}:{{ station.port }}\n
      \n
      \n
      \n {{ station.testDescription }}\n
      \n\n \n
    • \n
    \n\n
    \n Could not connect to the server.\n {{ (retryCountdown | async) || \'Retrying in…\' }}\n \n Try again.\n \n
    \n'},591:function(e,t){e.exports='/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n.nav-bar {\n color: #949a9f;\n display: -ms-flexbox;\n display: flex;\n font-size: 12px;\n margin-bottom: 14px; }\n\n.station-list {\n list-style: none;\n margin: 0;\n padding: 0; }\n\n.station-list li {\n background: #fff;\n border-radius: 3px;\n border: 1px solid #ccc;\n margin-bottom: 14px; }\n\n.station-list li button {\n -webkit-appearance: initial;\n background: transparent;\n border: 0;\n padding: 0;\n box-shadow: inset 0 0 0 0 #07f;\n cursor: pointer;\n overflow: hidden;\n padding: 15px 20px;\n text-overflow: ellipsis;\n transition: 300ms ease box-shadow;\n white-space: nowrap;\n width: 100%; }\n .station-list li button:focus, .station-list li button:active {\n outline: none; }\n .station-list li button:hover, .station-list li button:active {\n box-shadow: inset 0 -3px 0 0 #07f; }\n .station-list li button:hover .station-label,\n .station-list li button:hover .station-description, .station-list li button:active .station-label,\n .station-list li button:active .station-description {\n color: #07f; }\n .station-list li button:focus .station-label,\n .station-list li button:focus .station-description {\n color: #07f; }\n .station-list li button.is-unreachable {\n color: #949a9f; }\n\n.station-label {\n font-size: 16px;\n transition: 300ms ease color; }\n\n.station-description {\n color: #949a9f;\n transition: 300ms ease color; }\n'},592:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=n(25),o=n(21),s=n(26),a=function(){function AttachmentsComponent(e){this.config=e,this.expanded=!1}return AttachmentsComponent.prototype.linkForAttachment=function(e){return null!==this.test.testId&&this.test.status===o.TestStatus.running?s.getTestBaseUrl(this.config.dashboardEnabled,this.test)+"/phases/"+e.phaseDescriptorId+"/attachments/"+e.name:null!==this.test.fileName?s.getStationBaseUrl(this.config.dashboardEnabled,this.test.station)+"/history/"+this.test.fileName+"/attachments/"+e.name+"?sha1="+e.sha1:null},AttachmentsComponent.prototype.toggleExpanded=function(){this.expanded=!this.expanded},__decorate([r.Input(),__metadata("design:type",o.TestState)],AttachmentsComponent.prototype,"test",void 0),AttachmentsComponent=__decorate([r.Component({selector:"htf-attachments",template:n(593),styles:[n(594)]}),__metadata("design:paramtypes",[i.ConfigService])],AttachmentsComponent)}();t.AttachmentsComponent=a},593:function(e,t){e.exports='\x3c!--\n Copyright 2022 Google LLC\n\n Licensed under the Apache License, Version 2.0 (the "License");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an "AS IS" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n--\x3e\n\n
    \n\n
    \n
    Attachments
    \n
    \n \n {{ expanded? \'Collapse\' : \'Expand\' }}\n \n
    \n\n \n There are no attachments yet.\n
    \n\n \n Expand to view\n {{ test.attachments.length }}\n {{ test.attachments.length === 1 ? \'attachment\' : \'attachments\' }}.\n \n\n
      \n \n {{ attachment.name }}\n \n {{ attachment.name }}\n \n  {{ attachment.mimeType }}\n \n From phase: {{ attachment.phaseName }}\n \n
    \n\n\n'},594:function(e,t){e.exports='/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nul {\n list-style: none;\n margin: 0;\n padding: 0; }\n\nli {\n -ms-flex-align: baseline;\n align-items: baseline;\n display: -ms-flexbox;\n display: flex;\n padding: 10px 15px;\n border-bottom: 1px solid #e5e5e5; }\n li:last-of-type {\n border-bottom: 0; }\n'},595:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(48),i=n(2),o=n(32),s=n(238),a=n(49),u=n(21),l=n(26),c=n(241),p=n(99),d=function(){return function TestSelectedEvent(e){this.test=e}}();t.TestSelectedEvent=d;var h=function(){function HistoryComponent(e,t){this.historyService=e,this.flashMessage=t,this.onSelectTest=new i.EventEmitter,this.collapsedNumTests=5,this.HistoryItemStatus=c.HistoryItemStatus,this.TestStatus=u.TestStatus,this.expanded=!1,this.hasError=!1,this.history=[],this.historyFromDiskEnabled=!1,this.isLoading=!1,this.lastClickedItem=null}return HistoryComponent.prototype.ngOnChanges=function(e){"station"in e&&this.station.status===a.StationStatus.online&&(this.loadHistory(),this.history=this.historyService.getHistory(this.station))},HistoryComponent.prototype.isSelected=function(e){return e.status===c.HistoryItemStatus.loaded&&e.testState===this.selectedTest},HistoryComponent.prototype.onClick=function(e){var t=this;if(this.lastClickedItem=e,e.status!==c.HistoryItemStatus.loading)return e.status===c.HistoryItemStatus.loaded?(this.selectTest(e.testState),void(e.testState===this.selectedTest&&null===e.testState.fileName&&this.historyService.retrieveFileName(this.station,e).catch(function(){t.historyFromDiskEnabled&&t.flashMessage.warn("Could not retrieve history from disk, so attachments are not available. You may try again later.")}))):void this.historyService.loadItem(this.station,e).then(function(n){t.lastClickedItem===e&&t.selectTest(n)}).catch(function(e){console.error(e.stack);var n=l.messageFromErrorResponse(e);t.flashMessage.error("Error loading history item.",n)})},HistoryComponent.prototype.toggleExpanded=function(){this.expanded=!this.expanded},HistoryComponent.prototype.loadHistory=function(){var e=this;this.hasError=!1,this.isLoading=!0,this.historyFromDiskEnabled=!1,this.historyService.refreshList(this.station).then(function(){e.isLoading=!1,e.historyFromDiskEnabled=!0}).catch(function(t){e.isLoading=!1,e.hasError=!0,e.historyFromDiskEnabled=404!==t.status})},HistoryComponent.prototype.selectTest=function(e){e===this.selectedTest?this.selectedTest=null:this.selectedTest=e,this.onSelectTest.emit(new d(this.selectedTest))},__decorate([i.Input(),__metadata("design:type",u.TestState)],HistoryComponent.prototype,"selectedTest",void 0),__decorate([i.Input(),__metadata("design:type",a.Station)],HistoryComponent.prototype,"station",void 0),__decorate([i.Output(),__metadata("design:type",Object)],HistoryComponent.prototype,"onSelectTest",void 0),HistoryComponent=__decorate([i.Component({animations:[r.trigger("animateIn",s.washAndExpandIn(48))],selector:"htf-history",template:n(597),styles:[n(598)]}),__metadata("design:paramtypes",[p.HistoryService,o.FlashMessageService])],HistoryComponent)}();t.HistoryComponent=h},596:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){return function Attachment(e){Object.assign(this,e)}}();t.Attachment=r},597:function(e,t){e.exports='\x3c!--\n Copyright 2022 Google LLC\n\n Licensed under the Apache License, Version 2.0 (the "License");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an "AS IS" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n--\x3e\n\n
    \n\n
    \n
    History
    \n
    \n \n {{ expanded? \'Collapse\' : \'Expand\' }}\n \n
    \n\n
      \n \n \n\n \x3c!-- Wrap list item contents in an extra div to enable a “slide down” animation effect. --\x3e\n
      \n
      \n
      \n {{ historyItem.dutId || historyItem.fileName }}\n
      \n
      \n Started {{ historyItem.startTimeMillis | timeAgo }}\n
      \n
      \n
      \n Click to load.\n
      \n
      \n Loading...\n
      \n
      \n An error occurred.\n
      \n \n {{ historyItem.testState.status | statusToText }}\n
      \n
    \n \n \n
  • \n Not showing {{ history.length - collapsedNumTests }} additional test\n {{ history.length - collapsedNumTests === 1? \'run\' : \'runs\'}}.\n
  • \n
  • \n There are no known completed test runs.\n
  • \n
  • \n Loading history from the server...\n
  • \n
  • \n History from disk is disabled.\n
  • \n
  • \n \n Could not retrieve test history from the server.\n \n
  • \n \n\n\n'},598:function(e,t){e.exports='/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n.history-item-container {\n cursor: pointer;\n overflow: hidden; }\n .history-item-container.is-selected {\n background: rgba(0, 119, 255, 0.2);\n border: 2px solid rgba(0, 119, 255, 0.8); }\n\n.history-item {\n height: 48px;\n line-height: 47px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none; }\n\n.history-item-name-container {\n -ms-flex-positive: 1;\n flex-grow: 1;\n line-height: initial;\n min-width: 0; }\n\n.history-item-name {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap; }\n\n.history-item-status {\n color: #949a9f;\n font-size: 12px;\n padding: 10px 0;\n text-align: center;\n margin-left: 15px;\n margin-right: -15px;\n min-width: 100px; }\n\n.status-text {\n color: #949a9f;\n font-size: 12px;\n padding: 10px 0;\n text-align: center; }\n'},599:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=n(96),o=n(21),s=function(){function LogsComponent(){this.expanded=!1}return Object.defineProperty(LogsComponent.prototype,"collapsedErrorCount",{get:function(){for(var e=0,t=0,n=this.test.logs;ti.logLevels.warning&&(e+=1)}return this.test.logs[0].level>i.logLevels.warning&&(e-=1),e},enumerable:!0,configurable:!0}),LogsComponent.prototype.toggleExpanded=function(){this.expanded=!this.expanded},__decorate([r.Input(),__metadata("design:type",o.TestState)],LogsComponent.prototype,"test",void 0),LogsComponent=__decorate([r.Component({selector:"htf-logs",template:n(600),styles:[n(601)]})],LogsComponent)}();t.LogsComponent=s},600:function(e,t){e.exports='\x3c!--\n Copyright 2022 Google LLC\n\n Licensed under the Apache License, Version 2.0 (the "License");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an "AS IS" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n--\x3e\n\n
    \n\n
    \n
    Logs
    \n
    \n \n {{ expanded? \'Collapse\' : \'Expand\' }}\n \n
    \n\n \n There are no logs yet.\n
    \n\n
      \n
    • \n\n
      \n {{ test.logs[0].timestampMillis | date:\'mediumTime\' }}\n
      {{ test.logs[0].loggerName }}
      \n
      \n\n
      {{ test.logs[0].message }}
      \n\n
    • \n \n Not showing {{ test.logs.length - 1 }} additional log\n {{ test.logs.length - 1 === 1? \'message\' : \'messages\'}}. \n \n {{ collapsedErrorCount }} additional\n {{ collapsedErrorCount === 1? \'error\' : \'errors\' }}.\n \n \n
    \n\n
      \n \n\n
      \n {{ log.timestampMillis | date:\'mediumTime\' }}\n
      {{ log.loggerName }}
      \n
      \n\n
      {{ log.message }}
      \n\n \n
    \n\n\n'},601:function(e,t){e.exports='/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nul {\n list-style: none;\n margin: 0;\n padding: 0;\n font-size: 12px; }\n\nli {\n display: -ms-flexbox;\n display: flex;\n padding: 10px 15px;\n border-bottom: 1px solid #e5e5e5; }\n li:last-of-type {\n border-bottom: 0; }\n\n.log-message {\n font-family: monospace, serif; }\n\n.timestamp-column {\n font-size: 10px;\n margin-right: 10px;\n max-width: 170px;\n min-width: 170px; }\n\n.logger-name {\n color: #949a9f; }\n\n.log-message-content {\n white-space: pre-wrap;\n word-break: break-all; }\n\n.ng-log-level-warning {\n background: rgba(255, 229, 77, 0.2); }\n\n.ng-log-level-error {\n background: rgba(255, 93, 78, 0.25); }\n\n.ng-log-level-critical {\n background: rgba(255, 93, 78, 0.45); }\n'},602:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=n(21),o=function(){function PhaseListComponent(){this.showMeasurements=!1}return PhaseListComponent.prototype.toggleMeasurements=function(){this.showMeasurements=!this.showMeasurements},__decorate([r.Input(),__metadata("design:type",i.TestState)],PhaseListComponent.prototype,"test",void 0),PhaseListComponent=__decorate([r.Component({selector:"htf-phase-list",template:n(603)})],PhaseListComponent)}();t.PhaseListComponent=o},603:function(e,t){e.exports='\x3c!--\n Copyright 2022 Google LLC\n\n Licensed under the Apache License, Version 2.0 (the "License");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an "AS IS" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n--\x3e\n\n
    \n\n
    \n
    Phases
    \n
    \n \n {{ showMeasurements ? \'Collapse\' : \'Expand\' }} all\n \n
    \n\n
      \n
    • \n \n \n
    • \n
    \n\n
    \n'},604:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=n(98),o=n(66),s=function(){function PhaseComponent(){this.MeasurementStatus=i.MeasurementStatus,this.PhaseStatus=o.PhaseStatus}return Object.defineProperty(PhaseComponent.prototype,"showMeasurements",{get:function(){return this.expand&&this.phase.measurements.length>0||this.phase.status==o.PhaseStatus.fail||this.phase.status==o.PhaseStatus.running},enumerable:!0,configurable:!0}),__decorate([r.Input(),__metadata("design:type",o.Phase)],PhaseComponent.prototype,"phase",void 0),__decorate([r.Input(),__metadata("design:type",Boolean)],PhaseComponent.prototype,"expand",void 0),PhaseComponent=__decorate([r.Component({selector:"htf-phase",template:n(605),styles:[n(606)]})],PhaseComponent)}();t.PhaseComponent=s},605:function(e,t){e.exports='\x3c!--\n Copyright 2022 Google LLC\n\n Licensed under the Apache License, Version 2.0 (the "License");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an "AS IS" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n--\x3e\n\n
    \n \n {{ phase.name }}\n \n  {{ phase | elapsedTime:\'(%s)\' }}\n \n \n\n
    \n \n {{ phase.status | statusToText }}\n
    \n\n\n\n \n Measurement name\n Value\n Validators\n Result\n \n \n \n {{ measurement.name }}\n \n \n \n \n {{ measurement.validators }}\n \n Pass\n Fail\n \n \n \n \n\n'},606:function(e,t){e.exports='/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n.header-with-measurements {\n border-bottom: 1px solid #e5e5e5; }\n\n.measurement-list {\n border-collapse: separate;\n border-right: 100px solid rgba(50, 50, 50, 0.1);\n border-spacing: 0 3px;\n font-size: 12px;\n padding: 10px 15px;\n width: 100%; }\n .measurement-list.ng-status-fail {\n border-right-color: rgba(255, 93, 78, 0.1); }\n .measurement-list.ng-status-pass {\n border-right-color: rgba(0, 232, 157, 0.1); }\n .measurement-list.ng-status-running {\n border-right-color: rgba(0, 119, 255, 0.1); }\n .measurement-list thead {\n text-decoration: underline; }\n .measurement-list tbody {\n vertical-align: top; }\n .measurement-list td {\n padding: 0; }\n .measurement-list .measurement-column-name {\n width: 30%;\n padding-right: 5px; }\n .measurement-list .measurement-column-value {\n width: 30%;\n padding-right: 5px; }\n .measurement-list .measurement-column-validators {\n width: 30%;\n padding-right: 5px; }\n .measurement-list .measurement-column-result {\n text-align: right; }\n'},607:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=n(25),o=n(49),s=n(243),a=function(){return function StationDeselectedEvent(){}}();t.StationDeselectedEvent=a;var u=function(){function StationComponent(e,t){this.stationService=e,this.config=t,this.onDeselectStation=new r.EventEmitter,this.selectedTest=null}return Object.defineProperty(StationComponent.prototype,"activeTest",{get:function(){return null!==this.selectedTest?this.selectedTest:this.stationService.getTest(this.selectedStation)},enumerable:!0,configurable:!0}),Object.defineProperty(StationComponent.prototype,"dashboardEnabled",{get:function(){return this.config.dashboardEnabled},enumerable:!0,configurable:!0}),Object.defineProperty(StationComponent.prototype,"hasError",{get:function(){return this.stationService.hasError},enumerable:!0,configurable:!0}),Object.defineProperty(StationComponent.prototype,"isLoading",{get:function(){return this.stationService.isSubscribing},enumerable:!0,configurable:!0}),Object.defineProperty(StationComponent.prototype,"isOnline",{get:function(){return!(this.hasError||this.isLoading)},enumerable:!0,configurable:!0}),StationComponent.prototype.ngOnInit=function(){this.stationService.subscribe(this.selectedStation,200,1.08,1500)},StationComponent.prototype.ngOnDestroy=function(){this.stationService.unsubscribe()},StationComponent.prototype.goBack=function(){this.onDeselectStation.emit(new a)},StationComponent.prototype.manualReload=function(){this.stationService.refresh()},StationComponent.prototype.onSelectTest=function(e){this.selectedTest=e},__decorate([r.Input(),__metadata("design:type",o.Station)],StationComponent.prototype,"selectedStation",void 0),__decorate([r.Output(),__metadata("design:type",Object)],StationComponent.prototype,"onDeselectStation",void 0),StationComponent=__decorate([r.Component({selector:"htf-station",template:n(608),styles:[n(609)]}),__metadata("design:paramtypes",[s.StationService,i.ConfigService])],StationComponent)}();t.StationComponent=u},608:function(e,t){e.exports='\x3c!--\n Copyright 2022 Google LLC\n\n Licensed under the Apache License, Version 2.0 (the "License");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an "AS IS" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n--\x3e\n\n
    \n\n \n\n
    \n
    \n
    {{ selectedStation.label }}
    \n
    \n Status: Connected\n Status: Offline\n
    \n
    \n {{ selectedStation.testDescription }}\n
    \n {{ selectedStation.host }}:{{ selectedStation.port }}\n
    \n
    \n\n
    \n
    \n \n
    \n\n
    \n
    \n \n
    \n
    Displaying test record for a previous test run
    \n  ({{ selectedTest.startTimeMillis | timeAgo }})\n
    \n \n Return to current test\n \n
    \n
    \n\n \n \n \n \n
    \n\n
    \n \n \n
    \n
    \n\n
    \n\n\n'},609:function(e,t){e.exports='/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n.nav-bar {\n display: -ms-flexbox;\n display: flex;\n font-size: 12px;\n margin-bottom: 12px; }\n\n.status-bar {\n margin-bottom: 16px; }\n\n.status-bar-row {\n -ms-flex-align: baseline;\n align-items: baseline;\n display: -ms-flexbox;\n display: flex; }\n\n.past-test-warning {\n color: #ff5d4e; }\n .past-test-warning .htf-layout-widget-header {\n border: 0; }\n'},610:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=n(66),o=n(21),s=n(237),a=function(){function TestSummaryComponent(){}return TestSummaryComponent.prototype.ngOnChanges=function(e){"test"in e&&this.progressBar&&this.progressBar.reset()},Object.defineProperty(TestSummaryComponent.prototype,"completedPhaseCount",{get:function(){if(this.test.status===o.TestStatus.waiting)return 0;if(this.test.status===o.TestStatus.pass)return this.test.phases.length;for(var e=0,t=0,n=this.test.phases;t\n\n
    \n
    Current test: {{ test.name }}
    \n
    \n  {{ test | elapsedTime:\'(%s)\' }}\n
    \n
    \n \n {{ test.status | statusToText }}\n
    \n \n\n
    \n
    \n
    \n DUT: {{ test.dutId === null ? \'—\' : test.dutId }}\n
    \n
    \n
    \n Started: {{ test.startTimeMillis ? (test.startTimeMillis | date:\'medium\') : \'—\' }}\n
    \n
    \n
    \n\n
    \n
    \n Ran {{ completedPhaseCount }} of {{ this.test.phases.length }}\n {{ completedPhaseCount === 1? \'phase\' : \'phases\' }}\n
    \n \n
    \n\n
    \n \n
    \n\n\n\x3c!-- Empty state --\x3e\n
    \n
    \n
    Test: —
    \n
    \n
    \n
    \n No test information to display\n
    \n
    \n
    \n'},612:function(e,t){e.exports='/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n.htf-status-indicator {\n line-height: 53px; }\n\n.progress-bar-container {\n -ms-flex-align: center;\n align-items: center;\n display: -ms-flexbox;\n display: flex;\n font-size: 12px;\n white-space: nowrap; }\n\nhtf-progress-bar {\n display: block;\n -ms-flex-positive: 1;\n flex-grow: 1;\n height: 22px;\n margin-left: 15px;\n width: 100%; }\n\n.phase-container {\n padding: 0; }\n\n:host ::ng-deep htf-phase .phase-name {\n font-weight: bold; }\n :host ::ng-deep htf-phase .phase-name::before {\n content: \'Current phase: \'; }\n'},66:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.waiting=3]="waiting",e[e.running=4]="running",e[e.pass=5]="pass",e[e.fail=6]="fail",e[e.skip=7]="skip",e[e.error=8]="error"}(t.PhaseStatus||(t.PhaseStatus={}));var r=function(){return function Phase(e){Object.assign(this,e)}}();t.Phase=r},94:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(19),i=n(2),o=n(29),s=n(571),a=n(572),u=n(573),l=n(576),c=n(577),p=n(237),d=n(97),h=n(580),m=n(581),f=n(95),y=n(582),g=n(583),v=function(){function SharedModule(){}return SharedModule=__decorate([i.NgModule({imports:[r.CommonModule,o.HttpModule],declarations:[s.ElapsedTimePipe,a.FocusDirective,u.GenealogyNodeComponent,l.LogLevelToClassPipe,c.ObjectToSortedValuesPipe,p.ProgressBarComponent,h.StatusToClassPipe,h.StatusToTextPipe,m.TimeAgoPipe,g.TrimmedTextComponent,y.TooltipDirective],providers:[d.SockJsService,f.TimeService],exports:[r.CommonModule,s.ElapsedTimePipe,a.FocusDirective,u.GenealogyNodeComponent,l.LogLevelToClassPipe,c.ObjectToSortedValuesPipe,p.ProgressBarComponent,h.StatusToClassPipe,h.StatusToTextPipe,m.TimeAgoPipe,g.TrimmedTextComponent,y.TooltipDirective]})],SharedModule)}();t.SharedModule=v},95:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n(128),n(161),n(173);var r=n(2),i=n(0),o=100,s=function(){function TimeService(){var e=this;this.observable=i.Observable.interval(o).map(function(){return e.last=Date.now(),e.last}).publish(),this.last=null,this.observable.connect()}return TimeService=__decorate([r.Injectable(),__metadata("design:paramtypes",[])],TimeService)}();t.TimeService=s},96:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.logLevels={debug:10,info:20,warning:30,error:40,critical:50};var r=function(){return function LogRecord(e){Object.assign(this,e)}}();t.LogRecord=r},97:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),i=function(){function SockJsService(){this.sockJs=SockJS}return SockJsService=__decorate([r.Injectable()],SockJsService)}();t.SockJsService=i},98:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.unset=0]="unset",e[e.pass=1]="pass",e[e.fail=2]="fail"}(t.MeasurementStatus||(t.MeasurementStatus={}));var r=function(){return function Measurement(e){Object.assign(this,e)}}();t.Measurement=r},99:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(233),i=n(2),o=n(25),s=n(32),a=n(26),u=n(241),l=n(242),c=function(){function HistoryService(e,t,n){this.config=e,this.http=t,this.flashMessage=n,this.cache={},this.history={}}return HistoryService.prototype.getCache=function(e){return e.hostPort in this.cache||(this.cache[e.hostPort]={}),this.cache[e.hostPort]},HistoryService.prototype.getHistory=function(e){return e.hostPort in this.history||(this.history[e.hostPort]=[]),this.history[e.hostPort]},HistoryService.prototype.loadItem=function(e,t){var n=this;if(t.status===u.HistoryItemStatus.loading||t.status===u.HistoryItemStatus.loaded)throw new Error("Cannot load a history item that is loading or has loaded.");var r=a.getStationBaseUrl(this.config.dashboardEnabled,e)+"/history/"+t.fileName;return t.status=u.HistoryItemStatus.loading,this.http.get(r).toPromise().then(function(r){var i=t.fileName,o=l.makeTest(r,null,i,e);return n.getCache(e)[t.uniqueId]=o,t.status=u.HistoryItemStatus.loaded,t.testState=o,o}).catch(function(e){return t.status=u.HistoryItemStatus.error,Promise.reject(e)})},HistoryService.prototype.prependItemFromTestState=function(e,t){var n=new u.HistoryItem({drawAttention:!0,dutId:t.dutId,fileName:null,startTimeMillis:t.startTimeMillis,status:u.HistoryItemStatus.loaded,testState:t});this.getCache(e)[n.uniqueId]=t,this.getHistory(e).unshift(n)},HistoryService.prototype.refreshList=function(e){var t=this,n=a.getStationBaseUrl(this.config.dashboardEnabled,e)+"/history";return this.http.get(n).toPromise().then(function(n){var r=n.data;t.getHistory(e).length=0;var i,o=r.map(function(n){var r=new u.HistoryItem({drawAttention:!1,dutId:n.dut_id,fileName:n.file_name,startTimeMillis:n.start_time_millis,status:u.HistoryItemStatus.unloaded,testState:null});if(r.uniqueId in t.getCache(e)){var i=t.getCache(e)[r.uniqueId];r.status=u.HistoryItemStatus.loaded,r.testState=i}return r});a.sortByProperty(o,"startTimeMillis",!0),(i=t.history[e.hostPort]).push.apply(i,o)}).catch(function(e){if(404===e.status)console.info("History from disk appears to be disabled.");else{var n=a.messageFromHttpClientErrorResponse(e);t.flashMessage.error("HTTP request for history failed.",n)}return Promise.reject(e)})},HistoryService.prototype.retrieveFileName=function(e,t){if(t.status!==u.HistoryItemStatus.loaded)throw new Error("Cannot retrieve file name for a history item that is not loaded.");var n=a.getStationBaseUrl(this.config.dashboardEnabled,e)+"/history?dutId="+t.dutId+"&startTimeMillis="+t.startTimeMillis;return this.http.get(n).toPromise().then(function(e){var n=e.data;if(0===n.length)return Promise.reject(new Error("Server returned no history items."));if(n.length>1)return Promise.reject(new Error("Server returned more than one history item."));var r=n[0];t.fileName=r.file_name,t.testState.fileName=r.file_name})},HistoryService=__decorate([i.Injectable(),__metadata("design:paramtypes",[o.ConfigService,r.HttpClient,s.FlashMessageService])],HistoryService)}();t.HistoryService=c}},[559]); +//# sourceMappingURL=app.7b3b5f043d8771c748e0.js.map \ No newline at end of file diff --git a/openhtf/output/web_gui/dist/js/app.7b3b5f043d8771c748e0.js.map b/openhtf/output/web_gui/dist/js/app.7b3b5f043d8771c748e0.js.map new file mode 100644 index 000000000..8448f57b1 --- /dev/null +++ b/openhtf/output/web_gui/dist/js/app.7b3b5f043d8771c748e0.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./src/app/shared/models/test-state.model.ts","webpack:///./node_modules/@angular/common/@angular/common/http.es5.js","webpack:///./node_modules/@angular/forms/@angular/forms.es5.js","webpack:///./src/app/core/flash-message.model.ts","webpack:///./src/app/plugs/plugs.module.ts","webpack:///./src/app/shared/progress-bar.component.ts","webpack:///./src/app/shared/animations.ts","webpack:///./src/app/stations/station-list/dashboard.service.ts","webpack:///./src/app/shared/subscription.ts","webpack:///./src/app/stations/station/history-item.model.ts","webpack:///./src/app/stations/station/station-data.ts","webpack:///./src/app/stations/station/station.service.ts","webpack:///./src/app/core/config.service.ts","webpack:///./src/app/shared/util.ts","webpack:///./src/app/core/flash-message.service.ts","webpack:///./node_modules/@angular/animations/@angular/animations.es5.js","webpack:///./src/app/shared/models/station.model.ts","webpack:///./src/main.ts","webpack:///./src/app/app.module.ts","webpack:///./node_modules/@angular/platform-browser/@angular/platform-browser/animations.es5.js","webpack:///./node_modules/@angular/animations/@angular/animations/browser.es5.js","webpack:///./src/app/app.component.ts","webpack:///./src/app/app.component.html","webpack:///./src/app/app.component.scss","webpack:///./src/app/core/core.module.ts","webpack:///./src/app/core/flash-messages.component.ts","webpack:///./src/app/core/flash-messages.component.html","webpack:///./src/app/core/flash-messages.component.scss","webpack:///./src/app/shared/elapsed-time.pipe.ts","webpack:///./src/app/shared/focus.directive.ts","webpack:///./src/app/shared/genealogy-node.component.ts","webpack:///./src/app/shared/genealogy-node.component.html","webpack:///./src/app/shared/genealogy-node.component.scss","webpack:///./src/app/shared/log-level-to-class.pipe.ts","webpack:///./src/app/shared/object-to-sorted-values.pipe.ts","webpack:///./src/app/shared/progress-bar.component.html","webpack:///./src/app/shared/progress-bar.component.scss","webpack:///./src/app/shared/status-pipes.ts","webpack:///./src/app/shared/time-ago.pipe.ts","webpack:///./src/app/shared/tooltip.directive.ts","webpack:///./src/app/shared/trimmed-text.component.ts","webpack:///./src/app/plugs/user-input-plug.component.ts","webpack:///./src/app/plugs/base-plug.ts","webpack:///./src/app/plugs/user-input-plug.component.html","webpack:///./src/app/plugs/user-input-plug.component.scss","webpack:///./src/app/stations/stations.module.ts","webpack:///./src/app/stations/station-list/station-list.component.ts","webpack:///./src/app/stations/station-list/station-list.component.html","webpack:///./src/app/stations/station-list/station-list.component.scss","webpack:///./src/app/stations/station/attachments.component.ts","webpack:///./src/app/stations/station/attachments.component.html","webpack:///./src/app/stations/station/attachments.component.scss","webpack:///./src/app/stations/station/history.component.ts","webpack:///./src/app/shared/models/attachment.model.ts","webpack:///./src/app/stations/station/history.component.html","webpack:///./src/app/stations/station/history.component.scss","webpack:///./src/app/stations/station/logs.component.ts","webpack:///./src/app/stations/station/logs.component.html","webpack:///./src/app/stations/station/logs.component.scss","webpack:///./src/app/stations/station/phase-list.component.ts","webpack:///./src/app/stations/station/phase-list.component.html","webpack:///./src/app/stations/station/phase.component.ts","webpack:///./src/app/stations/station/phase.component.html","webpack:///./src/app/stations/station/phase.component.scss","webpack:///./src/app/stations/station/station.component.ts","webpack:///./src/app/stations/station/station.component.html","webpack:///./src/app/stations/station/station.component.scss","webpack:///./src/app/stations/station/test-summary.component.ts","webpack:///./src/app/stations/station/test-summary.component.html","webpack:///./src/app/stations/station/test-summary.component.scss","webpack:///./src/app/shared/models/phase.model.ts","webpack:///./src/app/shared/shared.module.ts","webpack:///./src/app/shared/time.service.ts","webpack:///./src/app/shared/models/log-record.model.ts","webpack:///./src/app/shared/sock-js.service.ts","webpack:///./src/app/shared/models/measurement.model.ts","webpack:///./src/app/stations/station/history.service.ts"],"names":["TestStatus","exports","PlugDescriptor","TestState","params","Object","assign","this","HttpHandler","prototype","handle","req","HttpBackend","HttpUrlEncodingCodec","encodeKey","k","standardEncoding","encodeValue","v","decodeKey","decodeURIComponent","decodeValue","encodeURIComponent","replace","HttpParams","options","updates","cloneFrom","encoder","map","fromString","paramParser","rawParams","codec","map$$1","Map","length","split","forEach","param","eqIdx","indexOf","_a","slice","key","val","list","get","push","set","has","init","res","getAll","keys","Array","from","append","value","clone","op","delete","toString","_this","eKey","join","update","concat","base","undefined","base_1","idx","splice","HttpHeaders","headers","normalizedNames","lazyUpdate","lazyInit","line","index","name","toLowerCase","trim","maybeSetNormalizedName","values","lcName","copyFrom","applyUpdate","other","apply","toDelete_1","existing","filter","fn","isArrayBuffer","ArrayBuffer","isBlob","Blob","isFormData","FormData","HttpRequest","method","url","third","fourth","body","reportProgress","withCredentials","responseType","toUpperCase","mightHaveBody","urlWithParams","qIdx","sep","serializeBody","isArray","JSON","stringify","detectContentTypeHeader","type","setHeaders","reduce","setParams","HttpEventType","Sent","UploadProgress","ResponseHeader","DownloadProgress","Response","User","HttpResponseBase","defaultStatus","defaultStatusText","status","statusText","ok","HttpHeaderResponse","_super","call","__WEBPACK_IMPORTED_MODULE_0_tslib__","HttpResponse","HttpErrorResponse","message","error","addBody","observe","HttpClient","handler","request","first","events$","__WEBPACK_IMPORTED_MODULE_3_rxjs_operator_concatMap__","__WEBPACK_IMPORTED_MODULE_2_rxjs_observable_of__","res$","__WEBPACK_IMPORTED_MODULE_4_rxjs_operator_filter__","event","__WEBPACK_IMPORTED_MODULE_5_rxjs_operator_map__","Error","head","jsonp","callbackParam","patch","post","put","decorators","__WEBPACK_IMPORTED_MODULE_1__angular_core__","ctorParameters","HttpInterceptorHandler","next","interceptor","intercept","HTTP_INTERCEPTORS","NoopInterceptor","nextRequestId","JsonpCallbackContext","JsonpClientBackend","callbackMap","document","nextCallback","__WEBPACK_IMPORTED_MODULE_7_rxjs_Observable__","observer","callback","node","createElement","src","finished","cancelled","data","cleanup","parentNode","removeChild","onLoad","complete","onError","addEventListener","appendChild","removeEventListener","args","__WEBPACK_IMPORTED_MODULE_6__angular_common__","JsonpInterceptor","XSSI_PREFIX","XhrFactory","build","BrowserXhr","XMLHttpRequest","HttpXhrBackend","xhrFactory","xhr","open","setRequestHeader","detectedType","reqBody","headerResponse","partialFromXhr","getAllResponseHeaders","getResponseUrl","responseURL","test","getResponseHeader","response","responseText","parse","text","sentHeaders","onDownProgress","progressEvent","loaded","lengthComputable","total","partialText","onUpProgress","progress","upload","send","abort","XSRF_COOKIE_NAME","XSRF_HEADER_NAME","HttpXsrfTokenExtractor","getToken","HttpXsrfCookieExtractor","doc","platform","cookieName","lastCookieString","lastToken","parseCount","cookieString","cookie","HttpXsrfInterceptor","tokenService","headerName","lcUrl","startsWith","token","interceptingHandler","backend","interceptors","reduceRight","jsonpCallbackContext","window","HttpClientXsrfModule","disable","ngModule","providers","provide","useClass","withOptions","useValue","useExisting","multi","HttpClientModule","imports","useFactory","deps","HttpClientJsonpModule","AbstractControlDirective","control","defineProperty","enumerable","configurable","valid","invalid","pending","disabled","enabled","errors","pristine","dirty","touched","untouched","statusChanges","valueChanges","reset","hasError","errorCode","path","getError","ControlContainer","arguments","isEmptyInputValue","NG_VALIDATORS","NG_ASYNC_VALIDATORS","EMAIL_REGEXP","Validators","min","parseFloat","isNaN","actual","max","required","requiredTrue","email","minLength","minlength","requiredLength","actualLength","maxLength","maxlength","pattern","regexStr","regex","RegExp","requiredPattern","actualValue","nullValidator","c","compose","validators","presentValidators","isPresent","_mergeErrors","_executeValidators","composeAsync","observables","_executeAsyncValidators","toObservable","__WEBPACK_IMPORTED_MODULE_4_rxjs_operator_map__","__WEBPACK_IMPORTED_MODULE_2_rxjs_observable_forkJoin__","o","r","obs","__WEBPACK_IMPORTED_MODULE_3_rxjs_observable_fromPromise__","arrayOfErrors","NG_VALUE_ACCESSOR","CHECKBOX_VALUE_ACCESSOR","CheckboxControlValueAccessor","_renderer","_elementRef","onChange","_","onTouched","writeValue","setProperty","nativeElement","registerOnChange","registerOnTouched","setDisabledState","isDisabled","selector","host","(change)","(blur)","DEFAULT_VALUE_ACCESSOR","DefaultValueAccessor","COMPOSITION_BUFFER_MODE","_compositionMode","_composing","_isAndroid","userAgent","__WEBPACK_IMPORTED_MODULE_5__angular_platform_browser__","getUserAgent","normalizedValue","_handleInput","_compositionStart","_compositionEnd","normalizeValidator","validator","validate","normalizeAsyncValidator","(input)","(compositionstart)","(compositionend)","NUMBER_VALUE_ACCESSOR","NumberValueAccessor","unimplemented","NgControl","_parent","valueAccessor","_rawValidators","_rawAsyncValidators","viewToModelUpdate","newValue","RADIO_VALUE_ACCESSOR","RadioControlValueAccessor","RadioControlRegistry","_accessors","add","accessor","remove","i","select","_isSameGroup","fireUncheck","controlPair","_control","_registry","_injector","ngOnInit","_checkName","ngOnDestroy","_state","_fn","formControlName","_throwNameError","propDecorators","RANGE_VALUE_ACCESSOR","RangeValueAccessor","SELECT_VALUE_ACCESSOR","SelectControlValueAccessor","_buildValueString","id","_optionMap","_idCounter","_compareWith","_getOptionId","valueString","_getOptionValue","_registerOption","_i","_extractId","compareWith","NgSelectOption","_element","_select","_setElementValue","ngValue","SELECT_MULTIPLE_VALUE_ACCESSOR","SelectMultipleControlValueAccessor","_buildValueString$1","optionSelectedStateSetter","ids_1","opt","_setSelected","selected","hasOwnProperty","selectedOptions","item","_value","_extractId$1","NgSelectMultipleOption","controlPath","parent","setUpControl","dir","_throwError","asyncValidator","markAsDirty","setValue","emitModelToViewChange","markAsTouched","emitModelEvent","registerOnDisabledChange","registerOnValidatorChange","updateValueAndValidity","setUpFormContainer","_noControlError","messageEnd","composeValidators","composeAsyncValidators","isPropertyUpdated","changes","viewModel","change","isFirstChange","currentValue","BUILTIN_ACCESSORS","selectValueAccessor","valueAccessors","defaultAccessor","builtinAccessor","customAccessor","constructor","isBuiltInAccessor","some","a","AbstractFormGroupDirective","_checkParentType","addFormGroup","formDirective","removeFormGroup","getFormGroup","_validators","_asyncValidators","AbstractControlStatus","cd","_cd","ngControlStatusHost","[class.ng-untouched]","[class.ng-touched]","[class.ng-pristine]","[class.ng-dirty]","[class.ng-valid]","[class.ng-invalid]","[class.ng-pending]","NgControlStatus","NgControlStatusGroup","coerceToValidator","coerceToAsyncValidator","AbstractControl","_onCollectionChange","_pristine","_touched","_onDisabledChange","_status","_errors","_valueChanges","_statusChanges","setValidators","newValidator","setAsyncValidators","clearValidators","clearAsyncValidators","opts","onlySelf","markAsUntouched","_forEachChild","_updateTouched","markAsPristine","_updatePristine","markAsPending","_updateValue","emitEvent","emit","_updateAncestors","changeFn","enable","setParent","patchValue","_setInitialStatus","_cancelExistingSubscription","_runValidator","_calculateStatus","_runAsyncValidator","_updateTreeValidity","ctrl","_allControlsDisabled","_asyncValidationSubscription","subscribe","setErrors","unsubscribe","_updateControlsErrors","_find","delimiter","FormGroup","controls","FormArray","at","x","_initObservables","_anyControlsHaveStatus","cb","_anyControls","condition","_anyControlsDirty","_anyControlsTouched","_isBoxedValue","formState","_registerOnCollectionChange","FormControl","_onChange","_applyFormState","emitViewToModelChange","_clearChangeFns","_setUpControls","registerControl","addControl","removeControl","setControl","contains","controlName","_checkAllValuesPresent","_throwIfControlMissing","getRawValue","_reduceChildren","acc","_reduceValue","initValue","_registerControl","insert","removeAt","formDirectiveProvider","NgForm","resolvedPromise","Promise","resolve","asyncValidators","_submitted","ngSubmit","form","then","container","_findContainer","getControl","group","updateModel","onSubmit","$event","onReset","resetForm","pop","(submit)","(reset)","outputs","exportAs","FormErrorExamples","TemplateDrivenErrors","modelParentException","formGroupNameException","missingNameException","modelGroupParentException","modelGroupProvider","NgModelGroup","formControlBinding","NgModel","resolvedPromise$1","_registered","ngOnChanges","_checkForErrors","_setUpControl","_updateDisabled","model","_isStandalone","_setUpStandalone","standalone","disabledValue","ReactiveErrors","controlParentException","ngModelGroupException","missingFormException","groupParentException","arrayParentException","disabledAttrWarning","console","warn","formControlBinding$1","FormControlDirective","_isControlChanged","formDirectiveProvider$1","FormGroupDirective","directives","_checkFormPresent","_updateValidators","_updateDomValue","_updateRegistrations","el","addFormArray","removeFormArray","getFormArray","newCtrl","cleanUpControl","_oldForm","sync","async","formGroupNameProvider","FormGroupName","_hasInvalidParent","formArrayNameProvider","FormArrayName","controlNameBinding","FormControlName","_added","REQUIRED_VALIDATOR","RequiredValidator","CHECKBOX_REQUIRED_VALIDATOR","CheckboxRequiredValidator","_required","[attr.required]","EMAIL_VALIDATOR","EmailValidator","_enabled","MIN_LENGTH_VALIDATOR","MinLengthValidator","_createValidator","_validator","parseInt","[attr.minlength]","MAX_LENGTH_VALIDATOR","MaxLengthValidator","[attr.maxlength]","PATTERN_VALIDATOR","PatternValidator","[attr.pattern]","FormBuilder","controlsConfig","extra","_reduceControls","array","_createControl","controlConfig","VERSION","NgNoValidate","novalidate","SHARED_FORM_DIRECTIVES","TEMPLATE_DRIVEN_DIRECTIVES","REACTIVE_DRIVEN_DIRECTIVES","InternalFormsSharedModule","declarations","FormsModule","ReactiveFormsModule","messageCount","FlashMessageType","FlashMessage","content","tooltip","isDismissed","hasTooltip","Boolean","showTooltip","common_1","__webpack_require__","core_1","forms_1","http_1","shared_module_1","user_input_plug_component_1","PlugsModule","__decorate","NgModule","CommonModule","HttpModule","SharedModule","UserInputPlugComponent","ProgressBarComponent","isReset","width","transition","Math","Input","Component","template","styles","animations_1","washIn","state","style","background","animate","washAndExpandIn","maxHeight","max-height","station_model_1","sock_js_service_1","subscription_1","util_1","dashboardUrl","devHost","dashboardStatusMap","UNREACHABLE","StationStatus","unreachable","ONLINE","online","DashboardService","sockJsService","stations","messages","DashboardService_1","validateResponse","newStations","parseResponse","applyResponse","__extends","retryMs","retryBackoff","retryMax","Number","MAX_VALUE","subscribeToUrl","hostPort","rawStation","Station","cell","label","getStationLabel","port","stationId","station_id","testDescription","test_description","testName","test_name","newStation","_b","_c","urlHost","Injectable","SockJsService","Subscription","SubscriptionState","Subject_1","Subject","retryTimeMs","currentRetryMs","retryTimeoutId","sock","unsubscribed","failed","waiting","subscribing","refresh","subscribeWithSavedParams","retryNow","cancelTimeout","debug","close","clearTimeout","sockJs","onopen","subscribed","onclose","Date","now","setTimeout","onmessage","HistoryItemStatus","HistoryItem","dutId","startTimeMillis","fileName","attachment_model_1","log_record_model_1","measurement_model_1","phase_model_1","test_state_model_1","testStateStatusCompleted","testStateStatusMap","WAITING_FOR_TEST_START","RUNNING","running","testRecordOutcomeMap","PASS","pass","FAIL","fail","ERROR","TIMEOUT","timeout","ABORTED","aborted","measurementStatusMap","MeasurementStatus","UNSET","unset","PARTIALLY_SET","phaseRecordOutcomeMap","PhaseStatus","SKIP","skip","makePhase","phase","measurements","attachments","rawAttachment","Attachment","mimeType","mimetype","phaseDescriptorId","descriptor_id","phaseName","sha1","sortByProperty","rawMeasuredValue","measured_value","measuredValue","Measurement","outcome","Phase","descriptorId","endTimeMillis","end_time_millis","start_time_millis","makeLog","log","LogRecord","level","lineNumber","lineno","loggerName","logger_name","source","timestampMillis","timestamp_millis","makeTest","rawState","testId","station","logRecords","test_record","log_records","reverse","logs","phases","running_phase_state","accumulator","dut_id","metadata","plugDescriptors","plugs","plug_descriptors","plugStates","plug_states","makePhaseFromDescriptor","descriptor","measurement","Observable_1","config_service_1","flash_message_service_1","history_service_1","station_data_1","StationService","config","flashMessage","historyService","http","phaseDescriptorPromise","testsById","testsByStation","messagesSubscription","mergeMap","StationService_1","applyPhaseDescriptors","stationUrl","getStationBaseUrl","dashboardEnabled","getTest","testState","test_uid","prependItemFromTestState","getOrRequestPhaseDescriptors","descriptors","numExecutedPhases","lastExecutedPhaseIndex","lastExecutedDescriptorIndex","lastExecuted","descriptors_1","catch","Observable","of","getTestBaseUrl","toPromise","json","messageFromErrorResponse","reject","fromPromise","oldTest","ConfigService","FlashMessageService","HistoryService","Http","defaultConfig","server_type","history_from_disk_enabled","initialize","extraKeys","extraKeys_1","location","localhostAddress","errorBody","e","_body","messageFromHttpClientErrorResponse","ErrorEvent","property","sort","b","flash_message_model_1","dismissalJob","cancelDismissal","dismissEarly","dismiss","startDismissal","addMessage","shift","dismissalDurationMs","d","__webpack_exports__","ɵPRE_STYLE","AnimationBuilder","animation","AnimationFactory","create","element","AUTO_STYLE","trigger","definitions","timings","steps","sequence","tokens","offset","keyframes","stateChangeExpr","expr","animateChild","useAnimation","query","stagger","scheduleMicroTask","NoopAnimationPlayer","_onDoneFns","_onStartFns","_onDestroyFns","_started","_destroyed","_finished","parentPlayer","totalTime","_onFinish","onStart","onDone","onDestroy","hasStarted","play","triggerMicrotask","_onStart","pause","restart","finish","destroy","setPosition","p","getPosition","AnimationGroupPlayer","_players","doneCount","destroyCount","startCount","player","_onDestroy","time","timeAtPosition","position","beforeDestroy","players","platform_browser_dynamic_1","app_module_1","main","platformBrowserDynamic","bootstrapModule","AppModule","MODULE_REF","enableProdMode","readyState","platform_browser_1","http_2","app_component_1","core_module_1","plugs_module_1","stations_module_1","hmr_1","appRef","hmrOnInit","store","hmrOnDestroy","cmpLocation","components","cmp","disposeOldHosts","createNewHosts","removeNgStyles","hmrAfterDestroy","BrowserAnimationsModule","BrowserModule","CoreModule","StationsModule","AppComponent","bootstrap","ApplicationRef","BrowserAnimationBuilder","rootRenderer","_nextAnimationId","typeData","encapsulation","None","createRenderer","entry","__WEBPACK_IMPORTED_MODULE_3__angular_animations__","issueAnimationCommand","BrowserAnimationFactory","__WEBPACK_IMPORTED_MODULE_2__angular_platform_browser__","_id","RendererAnimationPlayer","_command","_listen","eventName","listen","command","renderer","AnimationRendererFactory","delegate","engine","_zone","_currentId","_microtaskId","_animationCallbacksBuffer","_rendererCache","_cdRecurDepth","onRemovalComplete","hostElement","BaseAnimationRenderer","componentId","namespaceId","register","registerTrigger","AnimationRenderer","begin","_scheduleCountTask","Zone","current","scheduleListenerCallback","count","run","tuple","end","runOutsideAngular","flush","whenRenderingDone","__WEBPACK_IMPORTED_MODULE_4__angular_animations_browser__","destroyNode","n","namespace","createComment","createText","newChild","onInsert","insertBefore","refChild","oldChild","onRemove","selectRootElement","selectorOrNode","nextSibling","setAttribute","removeAttribute","addClass","removeClass","setStyle","flags","removeStyle","charAt","disableAnimations","target","factory","process","substr","resolveElementFromTarget","parseTriggerCallbackName","triggerName","dotIndex","substring","countId","InjectableAnimationEngine","driver","normalizer","instantiateSupportedAnimationDriver","instantiateDefaultStyleNormalizer","instantiateRendererFactory","zone","SHARED_ANIMATION_PROVIDERS","BROWSER_ANIMATIONS_PROVIDERS","BROWSER_NOOP_ANIMATIONS_PROVIDERS","NoopAnimationsModule","optimizeGroupPlayer","__WEBPACK_IMPORTED_MODULE_1__angular_animations__","normalizeKeyframes","preStyles","postStyles","normalizedKeyframes","previousOffset","previousKeyframe","kf","isSameOffset","normalizedKeyframe","prop","normalizedProp","normalizePropertyName","normalizeStyleValue","listenOnPlayer","copyAnimationEvent","makeAnimationEvent","fromState","toState","getOrSetAsInMap","defaultValue","parseTimelineCommand","separatorPos","_contains","elm1","elm2","_matches","_query","Element","matches","proto","fn_1","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","results","querySelectorAll","elm","querySelector","matchesElement","containsElement","invokeQuery","NoopAnimationDriver","computeStyle","duration","delay","easing","previousPlayers","AnimationDriver","NOOP","ONE_SECOND","ENTER_SELECTOR","LEAVE_SELECTOR","NG_TRIGGER_SELECTOR","NG_ANIMATING_SELECTOR","resolveTimingValue","match","_convertTimeValueToMS","unit","resolveTiming","allowNegativeValues","parseTimeExpression","exp","delayMatch","floor","easingVal","containsErrors","startIndex","copyObj","obj","destination","normalizeStyles","normalizedStyles","copyStyles","readPrototype","setStyles","camelProp","dashCaseToCamelCase","eraseStyles","normalizeAnimationEntry","PARAM_REGEX","SUBSTITUTION_EXPR_START","extractStyleParams","exec","lastIndex","interpolateParams","original","str","varName","localVal","iteratorToArray","iterator","arr","done","DASH_CASE_REGEXP","input","m","visitDslNode","visitor","context","visitTrigger","visitState","visitTransition","visitSequence","visitGroup","visitAnimate","visitKeyframes","visitStyle","visitReference","visitAnimateChild","visitAnimateRef","visitQuery","visitStagger","ANY_STATE","parseTransitionExpr","transitionValue","expressions","parseInnerTransitionStr","eventStr","parseAnimationAlias","alias","separator","makeLambdaFromStates","isFullAnyStateExpr","TRUE_BOOLEAN_VALUES","Set","FALSE_BOOLEAN_VALUES","lhs","rhs","LHS_MATCH_BOOLEAN","RHS_MATCH_BOOLEAN","lhsMatch","rhsMatch","SELF_TOKEN","SELF_TOKEN_REGEX","buildAnimationAst","AnimationAstBuilderVisitor","LEAVE_TOKEN_REGEX","ENTER_TOKEN_REGEX","AnimationAstBuilderContext","_resetContextStyleTimingState","currentQuerySelector","collectedStyles","currentTime","queryCount","depCount","states","transitions","def","stateDef_1","styleAst","astParams","containsDynamicStyles","missingSubs_1","params_1","isObject","stylesObj_1","sub","size","missingSubsArr","matchers","normalizeAnimationOptions","s","furthestTime","step","innerAst","timingAst","constructTimingAst","makeTimingAst","strValue","ast","dynamic","currentAnimateTimings","styleMetadata","styleMetadata_1","isEmpty","newStyleData","_styleAst","isEmptyStep","_makeStyleAst","_validateStyleAst","styleTuple","collectedEasing","styleData","styleMap","endTime","startTime","collectedEntry","updateCollectedStyle","validateStyleParams","totalKeyframesWithOffsets","offsets","offsetsOutOfOrder","keyframesOutOfRange","style$$1","offsetVal","consumeOffset","generatedOffset","limit","animateDuration","durationUpToThisFrame","parentSelector","currentQuery","normalizeSelector","hasAmpersand","find","includeSelf","optional","originalSelector","currentTransition","normalizeParams","createTimelineInstruction","preStyleProps","postStyleProps","subTimeline","ElementInstructionMap","_map","consume","instructions","existingInstructions","clear","buildAnimationTimelines","rootElement","startingStyles","finalStyles","subInstructions","AnimationTimelineBuilderVisitor","buildKeyframes","AnimationTimelineContext","currentTimeline","timelines","timeline","containsAnimation","tl","allowOnlyTimelineStyles","elementInstructions","innerContext","createSubContext","_visitSubInstructions","transformIntoNewTimeline","previousNode","instruction","instructionTimings","appendInstructionToTimeline","updateOptions","subContextCount","ctx","snapshotCurrentStyles","DEFAULT_NOOP_PREVIOUS_NODE","delayNextStep","applyStylesToKeyframe","innerTimelines","mergeTimelineCollectedStyles","_visitTiming","incrementTime","getCurrentStyleProperties","forwardFrame","applyEmptyStep","innerTimeline","forwardTime","elms","currentQueryTotal","sameElementTimeline","currentQueryIndex","parentContext","abs","maxTime","currentStaggerTime","startingTime","_driver","initialTimeline","TimelineBuilder","skipIfExists","newOptions","optionsToUpdate","newParams","paramsToUpdate_1","_copyOptions","oldParams_1","params_2","newTime","fork","updatedTimings","builder","SubTimelineBuilder","stretchStartingKeyframe","elements","_elementTimelineStylesLookup","_previousKeyframe","_currentKeyframe","_keyframes","_styleSummary","_pendingStyles","_backFill","_currentEmptyStepKeyframe","_localTimelineStyles","_globalTimelineStyles","_loadKeyframe","hasPreStyleStep","_updateStyle","flattenStyles","allStyles","allProperties","props","getFinalKeyframe","properties","details0","details1","finalKeyframes","keyframe","finalKeyframe","preProps","postProps","kf0","kf1","_stretchStartingKeyframe","newKeyframes","startingGap","newFirstKeyframe","oldFirstKeyframe","roundOffset","timeAtKeyframe","decimalPoints","mult","pow","round","Animation","errorMessage","_animationAst","buildTimelines","destinationStyles","start","dest","result","AnimationStyleNormalizer","WebAnimationsStyleNormalizer","NoopAnimationStyleNormalizer","propertyName","userProvidedProperty","normalizedProperty","strVal","DIMENSIONAL_PROP_MAP","valAndSuffixMatch","makeBooleanMap","createTransitionInstruction","isRemovalTransition","fromStyles","toStyles","queriedElements","EMPTY_OBJECT","AnimationTransitionFactory","_triggerName","_stateStyles","currentState","nextState","oneOrMoreTransitionsMatch","matchFns","buildStyles","stateName","backupStateStyler","stateStyler","backupStyles","currentOptions","nextOptions","transitionAnimationParams","currentAnimationParams","currentStateStyles","nextAnimationParams","nextStateStyles","preStyleMap","postStyleMap","isRemoval","animationOptions","queriedElementsList","AnimationStateStyles","defaultParams","combinedParams","styleObj_1","AnimationTrigger","transitionFactories","balanceProperties","fallbackTransition","createFallbackTransition","matchTransition","f","matchStyles","key1","key2","EMPTY_INSTRUCTION_MAP","TimelineAnimationEngine","_normalizer","_animations","_playersById","_buildPlayer","autoStylesMap","inst","_getPlayer","baseEvent","EMPTY_PLAYER_ARRAY","NULL_REMOVAL_STATE","setForRemoval","hasAnimation","removedBeforeQueried","NULL_REMOVED_QUERIED_STATE","REMOVAL_FLAG","StateValue","isObj","normalizeTriggerValue","absorbOptions","oldParams_2","DEFAULT_STATE_VALUE","DELETED_STATE_VALUE","AnimationTransitionNamespace","_engine","_triggers","_queue","_elementListeners","_hostClassName","isTriggerEventValid","listeners","triggersWithStates","statesByElement","NG_TRIGGER_CLASSNAME","afterFlush","_getTrigger","defaultToFallback","TransitionAnimationPlayer","playersOnElement","playersByElement","queued","isFallbackTransition","totalQueuedPlayers","index_1","objEquals","k1","k2","fromStyles_1","toStyles_1","reportError","deregister","stateMap","clearElementCache","elementPlayers","_destroyInnerNodes","containsClass","className","classList","classes","CLASSES_CACHE_KEY","innerNs","namespacesByHostElement","removeNode","doNotRecurse","childElementCount","triggerStates","players_1","markElementAsRemoved","processLeaveNode","containsPotentialParentTransition","totalAnimations","currentPlayers","playersByQueriedElement","visitedTriggers_1","listener","destroyInnerAnimations","_onRemovalComplete","insertNode","drainQueuedTransitions","microtaskId","destroyed","markedForDestroy","d0","d1","elementContainsData","containsData","TransitionAnimationEngine","newHostElements","disabledNodes","_namespaceLookup","_namespaceList","_flushFns","_whenQuietFns","collectedEnterElements","collectedLeaveElements","ns","createNamespace","_balanceNamespaceList","collectEnterElement","found","nextNamespace","_fetchNamespace","afterFlushAnimationsDone","isElementNode","details","markElementAsDisabled","_buildInstruction","subTimelines","containerElement","cleanupFns","_flushAnimations","quietFns_1","skippedPlayers","skippedPlayersMap","queuedInstructions","allPreStyleElements","allPostStyleElements","disabledElementsSet","nodesThatAreDisabled","bodyNode","getBodyNode","allEnterNodes","createIsRootFilterFn","nodes","isRoot","nodeSet","knownRootContainer","allLeaveNodes","leaveNodesWithoutAnimations","allPlayers","erroneousTransitions","stringMap","setVal_1","setVal","errors_1","enterNodesWithoutAnimations","allPreviousPlayersMap","sortedParentElements","unshift","_beforeAnimationBuild","_getPreviousPlayers","prevPlayer","replaceNodes","replacePostStylesAsPre","cloakAndComputeStyles","postStylesMap","preStylesMap","pre","rootPlayers","subPlayers","innerPlayer","_buildAnimation","setRealPlayer","parentHasPriority","parentPlayers","playersForElement","queriedPlayerResults","queriedInnerElements","j","queriedPlayers","activePlayers","removeNodesAfterAnimationDone","isQueriedElement","toStateValue","queriedElementPlayers","isRemovalAnimation_1","targetNameSpaceId","targetTriggerName","timelineInstruction","realPlayer","getRealPlayer","allQueriedPlayers","allConsumedElements","allSubElements","allNewPlayers","flattenGroupPlayers","finalPlayers","_flattenGroupPlayersRecur","pp","wrappedPlayer","deleteOrUnsetInMap","currentValues","_player","_containsRealPlayer","_queuedCallbacks","_queueEvent","cloakElement","oldValue","display","elementPropsMap","defaultStyle","cloakVals","valuesMap","failedElements","postEntry","preEntry","AnimationEngine","_triggerCache","_transitionEngine","_timelineEngine","cacheKey","buildTrigger","action","eventPhase","WebAnimationsPlayer","_initialized","previousStyles","currentSnapshot","_duration","_delay","allowPreviousPlayerStylesMerge","_preparePlayerBeforeStart","previousStyleProps","startingKeyframe_1","missingStyleProps_1","self_1","_loop_1","_computeStyle","_triggerWebAnimation","_finalKeyframe","_resetDomPlayerState","cancel","getComputedStyle","WebAnimationsDriver","playerOptions","fill","previousWebAnimationPlayers","supportsWebAnimations","configService","ref","selectedStation","configString","getAttribute","ElementRef","module","flash_messages_component_1","parentModule","FlashMessagesComponent","FlashMessageTypeToClass","__param","Optional","SkipSelf","typeToCssClass","transform","Pipe","onMouseEnter","onMouseExit","time_service_1","ElapsedTimePipe","format","getElapsedTimeString","last","endTimeMs","elapsedSeconds","elapsedMinutes","seconds","elapsedHours","pure","TimeService","FocusDirective","focusOn","focus","Directive","GenealogyNodeComponent","maxDepth","childMaxDepth","LogLevelToClassPipe","logLevels","info","warning","ObjectToSortedValuesPipe","object","sortBy","asArray","keys_1","StatusCategory","categoryToCssClass","unknownStatus","Symbol","statusToCategory","statusToText","StatusToClassPipe","StatusToTextPipe","relative","TimeAgoPipe","TooltipDirective","tooltipElement","innerHTML","firstChild","onMouseLeave","HostListener","TrimmedTextComponent","expanded","maxChars","onClick","animations_2","base_plug_1","PLUG_NAME","getPlugState","lastPromptId","convertedHtml","lastPromptHtml","focusSelf","default","setResponse","hasTextInput","hasImage","sendResponse","promptId","respond","animations","BasePlug","util_2","plugExists","Headers","Content-Type","RequestOptions","plugUrl","plugName","payload","mro","dashboard_service_1","station_list_component_1","attachments_component_1","history_component_1","logs_component_1","phase_list_component_1","phase_component_1","station_component_1","station_service_1","test_summary_component_1","StationListComponent","AttachmentsComponent","HistoryComponent","LogsComponent","PhaseComponent","PhaseListComponent","StationComponent","TestSummaryComponent","StationSelectedEvent","dashboard","onSelectStation","EventEmitter","retryCountdown","observable","currentMillis","remainingMs","isSubscribing","isReachable","manualRetry","manualReload","Output","linkForAttachment","attachment","toggleExpanded","history_item_model_1","TestSelectedEvent","onSelectTest","collapsedNumTests","history","historyFromDiskEnabled","isLoading","lastClickedItem","loadHistory","getHistory","isSelected","historyItem","selectedTest","loading","selectTest","retrieveFileName","loadItem","stack","refreshList","showMeasurements","toggleMeasurements","expand","StationDeselectedEvent","stationService","onDeselectStation","goBack","progress_bar_component_1","progressBar","completedPhases","completedPhaseCount","ViewChild","elapsed_time_pipe_1","focus_directive_1","genealogy_node_component_1","log_level_to_class_pipe_1","object_to_sorted_values_pipe_1","status_pipes_1","time_ago_pipe_1","tooltip_directive_1","trimmed_text_component_1","UPDATE_INTERVAL_MS","interval","publish","connect","critical","SockJS","cache","getCache","rawTestState","uniqueId","drawAttention","rawHistoryItems","stationHistory","rawItem","file_name","unloaded","rawHistoryItem"],"mappings":"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","file":"js/app.7b3b5f043d8771c748e0.js","sourcesContent":["/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * The state of a test on a station.\n */\n\nimport { Attachment } from './attachment.model';\nimport { LogRecord } from './log-record.model';\nimport { Phase } from './phase.model';\nimport { Station } from './station.model';\n\n// Enum values must not overlap between any of the status enums.\n// See status-pipes.ts.\nexport enum TestStatus {\n waiting = 11, // Corresponds to WAITING_FOR_TEST_START.\n running,\n pass,\n fail,\n error,\n timeout,\n aborted,\n}\n\nexport class PlugDescriptor { mro: string[]; }\n\nexport class TestState {\n attachments: Attachment[];\n dutId: string;\n endTimeMillis: number|null;\n fileName: string|null; // This is null for tests *not* from the history.\n name: string;\n logs: LogRecord[];\n phases: Phase[];\n plugDescriptors: {[name: string]: PlugDescriptor};\n plugStates: {[name: string]: {}};\n startTimeMillis: number;\n station: Station;\n status: TestStatus;\n // This is the execution UID. It is null for tests retrieved from the history.\n testId: string|null;\n\n // Using the class as the interface for its own constructor allows us to call\n // the constructor in named-argument style.\n constructor(params: TestState) {\n Object.assign(this, params);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular2-template-loader!./node_modules/@angularclass/hmr-loader!./node_modules/tslint-loader!./src/app/shared/models/test-state.model.ts","import * as tslib_1 from \"tslib\";\n/**\n * @license Angular v4.4.6\n * (c) 2010-2017 Google, Inc. https://angular.io/\n * License: MIT\n */\nimport { Inject, Injectable, InjectionToken, NgModule, Optional, PLATFORM_ID } from '@angular/core';\nimport { of } from 'rxjs/observable/of';\nimport { concatMap } from 'rxjs/operator/concatMap';\nimport { filter } from 'rxjs/operator/filter';\nimport { map } from 'rxjs/operator/map';\nimport { DOCUMENT, ɵparseCookieValue } from '@angular/common';\nimport { Observable } from 'rxjs/Observable';\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Transforms an `HttpRequest` into a stream of `HttpEvent`s, one of which will likely be a\n * `HttpResponse`.\n *\n * `HttpHandler` is injectable. When injected, the handler instance dispatches requests to the\n * first interceptor in the chain, which dispatches to the second, etc, eventually reaching the\n * `HttpBackend`.\n *\n * In an `HttpInterceptor`, the `HttpHandler` parameter is the next interceptor in the chain.\n *\n * \\@experimental\n * @abstract\n */\nvar HttpHandler = (function () {\n function HttpHandler() {\n }\n /**\n * @abstract\n * @param {?} req\n * @return {?}\n */\n HttpHandler.prototype.handle = function (req) { };\n return HttpHandler;\n}());\n/**\n * A final `HttpHandler` which will dispatch the request via browser HTTP APIs to a backend.\n *\n * Interceptors sit between the `HttpClient` interface and the `HttpBackend`.\n *\n * When injected, `HttpBackend` dispatches requests directly to the backend, without going\n * through the interceptor chain.\n *\n * \\@experimental\n * @abstract\n */\nvar HttpBackend = (function () {\n function HttpBackend() {\n }\n /**\n * @abstract\n * @param {?} req\n * @return {?}\n */\n HttpBackend.prototype.handle = function (req) { };\n return HttpBackend;\n}());\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * A `HttpParameterCodec` that uses `encodeURIComponent` and `decodeURIComponent` to\n * serialize and parse URL parameter keys and values.\n *\n * \\@experimental\n */\nvar HttpUrlEncodingCodec = (function () {\n function HttpUrlEncodingCodec() {\n }\n /**\n * @param {?} k\n * @return {?}\n */\n HttpUrlEncodingCodec.prototype.encodeKey = function (k) { return standardEncoding(k); };\n /**\n * @param {?} v\n * @return {?}\n */\n HttpUrlEncodingCodec.prototype.encodeValue = function (v) { return standardEncoding(v); };\n /**\n * @param {?} k\n * @return {?}\n */\n HttpUrlEncodingCodec.prototype.decodeKey = function (k) { return decodeURIComponent(k); };\n /**\n * @param {?} v\n * @return {?}\n */\n HttpUrlEncodingCodec.prototype.decodeValue = function (v) { return decodeURIComponent(v); };\n return HttpUrlEncodingCodec;\n}());\n/**\n * @param {?} rawParams\n * @param {?} codec\n * @return {?}\n */\nfunction paramParser(rawParams, codec) {\n var /** @type {?} */ map$$1 = new Map();\n if (rawParams.length > 0) {\n var /** @type {?} */ params = rawParams.split('&');\n params.forEach(function (param) {\n var /** @type {?} */ eqIdx = param.indexOf('=');\n var _a = eqIdx == -1 ?\n [codec.decodeKey(param), ''] :\n [codec.decodeKey(param.slice(0, eqIdx)), codec.decodeValue(param.slice(eqIdx + 1))], key = _a[0], val = _a[1];\n var /** @type {?} */ list = map$$1.get(key) || [];\n list.push(val);\n map$$1.set(key, list);\n });\n }\n return map$$1;\n}\n/**\n * @param {?} v\n * @return {?}\n */\nfunction standardEncoding(v) {\n return encodeURIComponent(v)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/gi, '$')\n .replace(/%2C/gi, ',')\n .replace(/%3B/gi, ';')\n .replace(/%2B/gi, '+')\n .replace(/%3D/gi, '=')\n .replace(/%3F/gi, '?')\n .replace(/%2F/gi, '/');\n}\n/**\n * An HTTP request/response body that represents serialized parameters,\n * per the MIME type `application/x-www-form-urlencoded`.\n *\n * This class is immuatable - all mutation operations return a new instance.\n *\n * \\@experimental\n */\nvar HttpParams = (function () {\n /**\n * @param {?=} options\n */\n function HttpParams(options) {\n if (options === void 0) { options = {}; }\n this.updates = null;\n this.cloneFrom = null;\n this.encoder = options.encoder || new HttpUrlEncodingCodec();\n this.map = !!options.fromString ? paramParser(options.fromString, this.encoder) : null;\n }\n /**\n * Check whether the body has one or more values for the given parameter name.\n * @param {?} param\n * @return {?}\n */\n HttpParams.prototype.has = function (param) {\n this.init();\n return ((this.map)).has(param);\n };\n /**\n * Get the first value for the given parameter name, or `null` if it's not present.\n * @param {?} param\n * @return {?}\n */\n HttpParams.prototype.get = function (param) {\n this.init();\n var /** @type {?} */ res = ((this.map)).get(param);\n return !!res ? res[0] : null;\n };\n /**\n * Get all values for the given parameter name, or `null` if it's not present.\n * @param {?} param\n * @return {?}\n */\n HttpParams.prototype.getAll = function (param) {\n this.init();\n return ((this.map)).get(param) || null;\n };\n /**\n * Get all the parameter names for this body.\n * @return {?}\n */\n HttpParams.prototype.keys = function () {\n this.init();\n return Array.from(/** @type {?} */ ((this.map)).keys());\n };\n /**\n * Construct a new body with an appended value for the given parameter name.\n * @param {?} param\n * @param {?} value\n * @return {?}\n */\n HttpParams.prototype.append = function (param, value) { return this.clone({ param: param, value: value, op: 'a' }); };\n /**\n * Construct a new body with a new value for the given parameter name.\n * @param {?} param\n * @param {?} value\n * @return {?}\n */\n HttpParams.prototype.set = function (param, value) { return this.clone({ param: param, value: value, op: 's' }); };\n /**\n * Construct a new body with either the given value for the given parameter\n * removed, if a value is given, or all values for the given parameter removed\n * if not.\n * @param {?} param\n * @param {?=} value\n * @return {?}\n */\n HttpParams.prototype.delete = function (param, value) { return this.clone({ param: param, value: value, op: 'd' }); };\n /**\n * Serialize the body to an encoded string, where key-value pairs (separated by `=`) are\n * separated by `&`s.\n * @return {?}\n */\n HttpParams.prototype.toString = function () {\n var _this = this;\n this.init();\n return this.keys()\n .map(function (key) {\n var /** @type {?} */ eKey = _this.encoder.encodeKey(key);\n return ((((_this.map)).get(key))).map(function (value) { return eKey + '=' + _this.encoder.encodeValue(value); })\n .join('&');\n })\n .join('&');\n };\n /**\n * @param {?} update\n * @return {?}\n */\n HttpParams.prototype.clone = function (update) {\n var /** @type {?} */ clone = new HttpParams({ encoder: this.encoder });\n clone.cloneFrom = this.cloneFrom || this;\n clone.updates = (this.updates || []).concat([update]);\n return clone;\n };\n /**\n * @return {?}\n */\n HttpParams.prototype.init = function () {\n var _this = this;\n if (this.map === null) {\n this.map = new Map();\n }\n if (this.cloneFrom !== null) {\n this.cloneFrom.init();\n this.cloneFrom.keys().forEach(function (key) { return ((_this.map)).set(key, /** @type {?} */ ((((((_this.cloneFrom)).map)).get(key)))); }); /** @type {?} */\n ((this.updates)).forEach(function (update) {\n switch (update.op) {\n case 'a':\n case 's':\n var /** @type {?} */ base = (update.op === 'a' ? ((_this.map)).get(update.param) : undefined) || [];\n base.push(/** @type {?} */ ((update.value))); /** @type {?} */\n ((_this.map)).set(update.param, base);\n break;\n case 'd':\n if (update.value !== undefined) {\n var /** @type {?} */ base_1 = ((_this.map)).get(update.param) || [];\n var /** @type {?} */ idx = base_1.indexOf(update.value);\n if (idx !== -1) {\n base_1.splice(idx, 1);\n }\n if (base_1.length > 0) {\n ((_this.map)).set(update.param, base_1);\n }\n else {\n ((_this.map)).delete(update.param);\n }\n }\n else {\n ((_this.map)).delete(update.param);\n break;\n }\n }\n });\n this.cloneFrom = null;\n }\n };\n return HttpParams;\n}());\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Immutable set of Http headers, with lazy parsing.\n * \\@experimental\n */\nvar HttpHeaders = (function () {\n /**\n * @param {?=} headers\n */\n function HttpHeaders(headers) {\n var _this = this;\n /**\n * Internal map of lowercased header names to the normalized\n * form of the name (the form seen first).\n */\n this.normalizedNames = new Map();\n /**\n * Queued updates to be materialized the next initialization.\n */\n this.lazyUpdate = null;\n if (!headers) {\n this.headers = new Map();\n }\n else if (typeof headers === 'string') {\n this.lazyInit = function () {\n _this.headers = new Map();\n headers.split('\\n').forEach(function (line) {\n var index = line.indexOf(':');\n if (index > 0) {\n var name = line.slice(0, index);\n var key = name.toLowerCase();\n var value = line.slice(index + 1).trim();\n _this.maybeSetNormalizedName(name, key);\n if (_this.headers.has(key)) {\n _this.headers.get(key).push(value);\n }\n else {\n _this.headers.set(key, [value]);\n }\n }\n });\n };\n }\n else {\n this.lazyInit = function () {\n _this.headers = new Map();\n Object.keys(headers).forEach(function (name) {\n var values = headers[name];\n var key = name.toLowerCase();\n if (typeof values === 'string') {\n values = [values];\n }\n if (values.length > 0) {\n _this.headers.set(key, values);\n _this.maybeSetNormalizedName(name, key);\n }\n });\n };\n }\n }\n /**\n * Checks for existence of header by given name.\n * @param {?} name\n * @return {?}\n */\n HttpHeaders.prototype.has = function (name) {\n this.init();\n return this.headers.has(name.toLowerCase());\n };\n /**\n * Returns first header that matches given name.\n * @param {?} name\n * @return {?}\n */\n HttpHeaders.prototype.get = function (name) {\n this.init();\n var /** @type {?} */ values = this.headers.get(name.toLowerCase());\n return values && values.length > 0 ? values[0] : null;\n };\n /**\n * Returns the names of the headers\n * @return {?}\n */\n HttpHeaders.prototype.keys = function () {\n this.init();\n return Array.from(this.normalizedNames.values());\n };\n /**\n * Returns list of header values for a given name.\n * @param {?} name\n * @return {?}\n */\n HttpHeaders.prototype.getAll = function (name) {\n this.init();\n return this.headers.get(name.toLowerCase()) || null;\n };\n /**\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n HttpHeaders.prototype.append = function (name, value) {\n return this.clone({ name: name, value: value, op: 'a' });\n };\n /**\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n HttpHeaders.prototype.set = function (name, value) {\n return this.clone({ name: name, value: value, op: 's' });\n };\n /**\n * @param {?} name\n * @param {?=} value\n * @return {?}\n */\n HttpHeaders.prototype.delete = function (name, value) {\n return this.clone({ name: name, value: value, op: 'd' });\n };\n /**\n * @param {?} name\n * @param {?} lcName\n * @return {?}\n */\n HttpHeaders.prototype.maybeSetNormalizedName = function (name, lcName) {\n if (!this.normalizedNames.has(lcName)) {\n this.normalizedNames.set(lcName, name);\n }\n };\n /**\n * @return {?}\n */\n HttpHeaders.prototype.init = function () {\n var _this = this;\n if (!!this.lazyInit) {\n if (this.lazyInit instanceof HttpHeaders) {\n this.copyFrom(this.lazyInit);\n }\n else {\n this.lazyInit();\n }\n this.lazyInit = null;\n if (!!this.lazyUpdate) {\n this.lazyUpdate.forEach(function (update) { return _this.applyUpdate(update); });\n this.lazyUpdate = null;\n }\n }\n };\n /**\n * @param {?} other\n * @return {?}\n */\n HttpHeaders.prototype.copyFrom = function (other) {\n var _this = this;\n other.init();\n Array.from(other.headers.keys()).forEach(function (key) {\n _this.headers.set(key, /** @type {?} */ ((other.headers.get(key))));\n _this.normalizedNames.set(key, /** @type {?} */ ((other.normalizedNames.get(key))));\n });\n };\n /**\n * @param {?} update\n * @return {?}\n */\n HttpHeaders.prototype.clone = function (update) {\n var /** @type {?} */ clone = new HttpHeaders();\n clone.lazyInit =\n (!!this.lazyInit && this.lazyInit instanceof HttpHeaders) ? this.lazyInit : this;\n clone.lazyUpdate = (this.lazyUpdate || []).concat([update]);\n return clone;\n };\n /**\n * @param {?} update\n * @return {?}\n */\n HttpHeaders.prototype.applyUpdate = function (update) {\n var /** @type {?} */ key = update.name.toLowerCase();\n switch (update.op) {\n case 'a':\n case 's':\n var /** @type {?} */ value = ((update.value));\n if (typeof value === 'string') {\n value = [value];\n }\n if (value.length === 0) {\n return;\n }\n this.maybeSetNormalizedName(update.name, key);\n var /** @type {?} */ base = (update.op === 'a' ? this.headers.get(key) : undefined) || [];\n base.push.apply(base, value);\n this.headers.set(key, base);\n break;\n case 'd':\n var /** @type {?} */ toDelete_1 = (update.value);\n if (!toDelete_1) {\n this.headers.delete(key);\n this.normalizedNames.delete(key);\n }\n else {\n var /** @type {?} */ existing = this.headers.get(key);\n if (!existing) {\n return;\n }\n existing = existing.filter(function (value) { return toDelete_1.indexOf(value) === -1; });\n if (existing.length === 0) {\n this.headers.delete(key);\n this.normalizedNames.delete(key);\n }\n else {\n this.headers.set(key, existing);\n }\n }\n break;\n }\n };\n /**\n * \\@internal\n * @param {?} fn\n * @return {?}\n */\n HttpHeaders.prototype.forEach = function (fn) {\n var _this = this;\n this.init();\n Array.from(this.normalizedNames.keys())\n .forEach(function (key) { return fn(/** @type {?} */ ((_this.normalizedNames.get(key))), /** @type {?} */ ((_this.headers.get(key)))); });\n };\n return HttpHeaders;\n}());\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Determine whether the given HTTP method may include a body.\n * @param {?} method\n * @return {?}\n */\nfunction mightHaveBody(method) {\n switch (method) {\n case 'DELETE':\n case 'GET':\n case 'HEAD':\n case 'OPTIONS':\n case 'JSONP':\n return false;\n default:\n return true;\n }\n}\n/**\n * Safely assert whether the given value is an ArrayBuffer.\n *\n * In some execution environments ArrayBuffer is not defined.\n * @param {?} value\n * @return {?}\n */\nfunction isArrayBuffer(value) {\n return typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer;\n}\n/**\n * Safely assert whether the given value is a Blob.\n *\n * In some execution environments Blob is not defined.\n * @param {?} value\n * @return {?}\n */\nfunction isBlob(value) {\n return typeof Blob !== 'undefined' && value instanceof Blob;\n}\n/**\n * Safely assert whether the given value is a FormData instance.\n *\n * In some execution environments FormData is not defined.\n * @param {?} value\n * @return {?}\n */\nfunction isFormData(value) {\n return typeof FormData !== 'undefined' && value instanceof FormData;\n}\n/**\n * An outgoing HTTP request with an optional typed body.\n *\n * `HttpRequest` represents an outgoing request, including URL, method,\n * headers, body, and other request configuration options. Instances should be\n * assumed to be immutable. To modify a `HttpRequest`, the `clone`\n * method should be used.\n *\n * \\@experimental\n */\nvar HttpRequest = (function () {\n /**\n * @param {?} method\n * @param {?} url\n * @param {?=} third\n * @param {?=} fourth\n */\n function HttpRequest(method, url, third, fourth) {\n this.url = url;\n /**\n * The request body, or `null` if one isn't set.\n *\n * Bodies are not enforced to be immutable, as they can include a reference to any\n * user-defined data type. However, interceptors should take care to preserve\n * idempotence by treating them as such.\n */\n this.body = null;\n /**\n * Whether this request should be made in a way that exposes progress events.\n *\n * Progress events are expensive (change detection runs on each event) and so\n * they should only be requested if the consumer intends to monitor them.\n */\n this.reportProgress = false;\n /**\n * Whether this request should be sent with outgoing credentials (cookies).\n */\n this.withCredentials = false;\n /**\n * The expected response type of the server.\n *\n * This is used to parse the response appropriately before returning it to\n * the requestee.\n */\n this.responseType = 'json';\n this.method = method.toUpperCase();\n // Next, need to figure out which argument holds the HttpRequestInit\n // options, if any.\n var options;\n // Check whether a body argument is expected. The only valid way to omit\n // the body argument is to use a known no-body method like GET.\n if (mightHaveBody(this.method) || !!fourth) {\n // Body is the third argument, options are the fourth.\n this.body = third || null;\n options = fourth;\n }\n else {\n // No body required, options are the third argument. The body stays null.\n options = third;\n }\n // If options have been passed, interpret them.\n if (options) {\n // Normalize reportProgress and withCredentials.\n this.reportProgress = !!options.reportProgress;\n this.withCredentials = !!options.withCredentials;\n // Override default response type of 'json' if one is provided.\n if (!!options.responseType) {\n this.responseType = options.responseType;\n }\n // Override headers if they're provided.\n if (!!options.headers) {\n this.headers = options.headers;\n }\n if (!!options.params) {\n this.params = options.params;\n }\n }\n // If no headers have been passed in, construct a new HttpHeaders instance.\n if (!this.headers) {\n this.headers = new HttpHeaders();\n }\n // If no parameters have been passed in, construct a new HttpUrlEncodedParams instance.\n if (!this.params) {\n this.params = new HttpParams();\n this.urlWithParams = url;\n }\n else {\n // Encode the parameters to a string in preparation for inclusion in the URL.\n var params = this.params.toString();\n if (params.length === 0) {\n // No parameters, the visible URL is just the URL given at creation time.\n this.urlWithParams = url;\n }\n else {\n // Does the URL already have query parameters? Look for '?'.\n var qIdx = url.indexOf('?');\n // There are 3 cases to handle:\n // 1) No existing parameters -> append '?' followed by params.\n // 2) '?' exists and is followed by existing query string ->\n // append '&' followed by params.\n // 3) '?' exists at the end of the url -> append params directly.\n // This basically amounts to determining the character, if any, with\n // which to join the URL and parameters.\n var sep = qIdx === -1 ? '?' : (qIdx < url.length - 1 ? '&' : '');\n this.urlWithParams = url + sep + params;\n }\n }\n }\n /**\n * Transform the free-form body into a serialized format suitable for\n * transmission to the server.\n * @return {?}\n */\n HttpRequest.prototype.serializeBody = function () {\n // If no body is present, no need to serialize it.\n if (this.body === null) {\n return null;\n }\n // Check whether the body is already in a serialized form. If so,\n // it can just be returned directly.\n if (isArrayBuffer(this.body) || isBlob(this.body) || isFormData(this.body) ||\n typeof this.body === 'string') {\n return this.body;\n }\n // Check whether the body is an instance of HttpUrlEncodedParams.\n if (this.body instanceof HttpParams) {\n return this.body.toString();\n }\n // Check whether the body is an object or array, and serialize with JSON if so.\n if (typeof this.body === 'object' || typeof this.body === 'boolean' ||\n Array.isArray(this.body)) {\n return JSON.stringify(this.body);\n }\n // Fall back on toString() for everything else.\n return ((this.body)).toString();\n };\n /**\n * Examine the body and attempt to infer an appropriate MIME type\n * for it.\n *\n * If no such type can be inferred, this method will return `null`.\n * @return {?}\n */\n HttpRequest.prototype.detectContentTypeHeader = function () {\n // An empty body has no content type.\n if (this.body === null) {\n return null;\n }\n // FormData bodies rely on the browser's content type assignment.\n if (isFormData(this.body)) {\n return null;\n }\n // Blobs usually have their own content type. If it doesn't, then\n // no type can be inferred.\n if (isBlob(this.body)) {\n return this.body.type || null;\n }\n // Array buffers have unknown contents and thus no type can be inferred.\n if (isArrayBuffer(this.body)) {\n return null;\n }\n // Technically, strings could be a form of JSON data, but it's safe enough\n // to assume they're plain strings.\n if (typeof this.body === 'string') {\n return 'text/plain';\n }\n // `HttpUrlEncodedParams` has its own content-type.\n if (this.body instanceof HttpParams) {\n return 'application/x-www-form-urlencoded;charset=UTF-8';\n }\n // Arrays, objects, and numbers will be encoded as JSON.\n if (typeof this.body === 'object' || typeof this.body === 'number' ||\n Array.isArray(this.body)) {\n return 'application/json';\n }\n // No type could be inferred.\n return null;\n };\n /**\n * @param {?=} update\n * @return {?}\n */\n HttpRequest.prototype.clone = function (update) {\n if (update === void 0) { update = {}; }\n // For method, url, and responseType, take the current value unless\n // it is overridden in the update hash.\n var /** @type {?} */ method = update.method || this.method;\n var /** @type {?} */ url = update.url || this.url;\n var /** @type {?} */ responseType = update.responseType || this.responseType;\n // The body is somewhat special - a `null` value in update.body means\n // whatever current body is present is being overridden with an empty\n // body, whereas an `undefined` value in update.body implies no\n // override.\n var /** @type {?} */ body = (update.body !== undefined) ? update.body : this.body;\n // Carefully handle the boolean options to differentiate between\n // `false` and `undefined` in the update args.\n var /** @type {?} */ withCredentials = (update.withCredentials !== undefined) ? update.withCredentials : this.withCredentials;\n var /** @type {?} */ reportProgress = (update.reportProgress !== undefined) ? update.reportProgress : this.reportProgress;\n // Headers and params may be appended to if `setHeaders` or\n // `setParams` are used.\n var /** @type {?} */ headers = update.headers || this.headers;\n var /** @type {?} */ params = update.params || this.params;\n // Check whether the caller has asked to add headers.\n if (update.setHeaders !== undefined) {\n // Set every requested header.\n headers =\n Object.keys(update.setHeaders)\n .reduce(function (headers, name) { return headers.set(name, /** @type {?} */ ((update.setHeaders))[name]); }, headers);\n }\n // Check whether the caller has asked to set params.\n if (update.setParams) {\n // Set every requested param.\n params = Object.keys(update.setParams)\n .reduce(function (params, param) { return params.set(param, /** @type {?} */ ((update.setParams))[param]); }, params);\n }\n // Finally, construct the new HttpRequest using the pieces from above.\n return new HttpRequest(method, url, body, {\n params: params, headers: headers, reportProgress: reportProgress, responseType: responseType, withCredentials: withCredentials,\n });\n };\n return HttpRequest;\n}());\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar HttpEventType = {};\nHttpEventType.Sent = 0;\nHttpEventType.UploadProgress = 1;\nHttpEventType.ResponseHeader = 2;\nHttpEventType.DownloadProgress = 3;\nHttpEventType.Response = 4;\nHttpEventType.User = 5;\nHttpEventType[HttpEventType.Sent] = \"Sent\";\nHttpEventType[HttpEventType.UploadProgress] = \"UploadProgress\";\nHttpEventType[HttpEventType.ResponseHeader] = \"ResponseHeader\";\nHttpEventType[HttpEventType.DownloadProgress] = \"DownloadProgress\";\nHttpEventType[HttpEventType.Response] = \"Response\";\nHttpEventType[HttpEventType.User] = \"User\";\n/**\n * Base class for both `HttpResponse` and `HttpHeaderResponse`.\n *\n * \\@experimental\n * @abstract\n */\nvar HttpResponseBase = (function () {\n /**\n * Super-constructor for all responses.\n *\n * The single parameter accepted is an initialization hash. Any properties\n * of the response passed there will override the default values.\n * @param {?} init\n * @param {?=} defaultStatus\n * @param {?=} defaultStatusText\n */\n function HttpResponseBase(init, defaultStatus, defaultStatusText) {\n if (defaultStatus === void 0) { defaultStatus = 200; }\n if (defaultStatusText === void 0) { defaultStatusText = 'OK'; }\n // If the hash has values passed, use them to initialize the response.\n // Otherwise use the default values.\n this.headers = init.headers || new HttpHeaders();\n this.status = init.status !== undefined ? init.status : defaultStatus;\n this.statusText = init.statusText || defaultStatusText;\n this.url = init.url || null;\n // Cache the ok value to avoid defining a getter.\n this.ok = this.status >= 200 && this.status < 300;\n }\n return HttpResponseBase;\n}());\n/**\n * A partial HTTP response which only includes the status and header data,\n * but no response body.\n *\n * `HttpHeaderResponse` is a `HttpEvent` available on the response\n * event stream, only when progress events are requested.\n *\n * \\@experimental\n */\nvar HttpHeaderResponse = (function (_super) {\n tslib_1.__extends(HttpHeaderResponse, _super);\n /**\n * Create a new `HttpHeaderResponse` with the given parameters.\n * @param {?=} init\n */\n function HttpHeaderResponse(init) {\n if (init === void 0) { init = {}; }\n var _this = _super.call(this, init) || this;\n _this.type = HttpEventType.ResponseHeader;\n return _this;\n }\n /**\n * Copy this `HttpHeaderResponse`, overriding its contents with the\n * given parameter hash.\n * @param {?=} update\n * @return {?}\n */\n HttpHeaderResponse.prototype.clone = function (update) {\n if (update === void 0) { update = {}; }\n // Perform a straightforward initialization of the new HttpHeaderResponse,\n // overriding the current parameters with new ones if given.\n return new HttpHeaderResponse({\n headers: update.headers || this.headers,\n status: update.status !== undefined ? update.status : this.status,\n statusText: update.statusText || this.statusText,\n url: update.url || this.url || undefined,\n });\n };\n return HttpHeaderResponse;\n}(HttpResponseBase));\n/**\n * A full HTTP response, including a typed response body (which may be `null`\n * if one was not returned).\n *\n * `HttpResponse` is a `HttpEvent` available on the response event\n * stream.\n *\n * \\@experimental\n */\nvar HttpResponse = (function (_super) {\n tslib_1.__extends(HttpResponse, _super);\n /**\n * Construct a new `HttpResponse`.\n * @param {?=} init\n */\n function HttpResponse(init) {\n if (init === void 0) { init = {}; }\n var _this = _super.call(this, init) || this;\n _this.type = HttpEventType.Response;\n _this.body = init.body || null;\n return _this;\n }\n /**\n * @param {?=} update\n * @return {?}\n */\n HttpResponse.prototype.clone = function (update) {\n if (update === void 0) { update = {}; }\n return new HttpResponse({\n body: (update.body !== undefined) ? update.body : this.body,\n headers: update.headers || this.headers,\n status: (update.status !== undefined) ? update.status : this.status,\n statusText: update.statusText || this.statusText,\n url: update.url || this.url || undefined,\n });\n };\n return HttpResponse;\n}(HttpResponseBase));\n/**\n * A response that represents an error or failure, either from a\n * non-successful HTTP status, an error while executing the request,\n * or some other failure which occurred during the parsing of the response.\n *\n * Any error returned on the `Observable` response stream will be\n * wrapped in an `HttpErrorResponse` to provide additional context about\n * the state of the HTTP layer when the error occurred. The error property\n * will contain either a wrapped Error object or the error response returned\n * from the server.\n *\n * \\@experimental\n */\nvar HttpErrorResponse = (function (_super) {\n tslib_1.__extends(HttpErrorResponse, _super);\n /**\n * @param {?} init\n */\n function HttpErrorResponse(init) {\n var _this = \n // Initialize with a default status of 0 / Unknown Error.\n _super.call(this, init, 0, 'Unknown Error') || this;\n _this.name = 'HttpErrorResponse';\n /**\n * Errors are never okay, even when the status code is in the 2xx success range.\n */\n _this.ok = false;\n // If the response was successful, then this was a parse error. Otherwise, it was\n // a protocol-level failure of some sort. Either the request failed in transit\n // or the server returned an unsuccessful status code.\n if (_this.status >= 200 && _this.status < 300) {\n _this.message = \"Http failure during parsing for \" + (init.url || '(unknown url)');\n }\n else {\n _this.message =\n \"Http failure response for \" + (init.url || '(unknown url)') + \": \" + init.status + \" \" + init.statusText;\n }\n _this.error = init.error || null;\n return _this;\n }\n return HttpErrorResponse;\n}(HttpResponseBase));\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Construct an instance of `HttpRequestOptions` from a source `HttpMethodOptions` and\n * the given `body`. Basically, this clones the object and adds the body.\n * @template T\n * @param {?} options\n * @param {?} body\n * @return {?}\n */\nfunction addBody(options, body) {\n return {\n body: body,\n headers: options.headers,\n observe: options.observe,\n params: options.params,\n reportProgress: options.reportProgress,\n responseType: options.responseType,\n withCredentials: options.withCredentials,\n };\n}\n/**\n * Perform HTTP requests.\n *\n * `HttpClient` is available as an injectable class, with methods to perform HTTP requests.\n * Each request method has multiple signatures, and the return type varies according to which\n * signature is called (mainly the values of `observe` and `responseType`).\n *\n * \\@experimental\n */\nvar HttpClient = (function () {\n /**\n * @param {?} handler\n */\n function HttpClient(handler) {\n this.handler = handler;\n }\n /**\n * Constructs an `Observable` for a particular HTTP request that, when subscribed,\n * fires the request through the chain of registered interceptors and on to the\n * server.\n *\n * This method can be called in one of two ways. Either an `HttpRequest`\n * instance can be passed directly as the only parameter, or a method can be\n * passed as the first parameter, a string URL as the second, and an\n * options hash as the third.\n *\n * If a `HttpRequest` object is passed directly, an `Observable` of the\n * raw `HttpEvent` stream will be returned.\n *\n * If a request is instead built by providing a URL, the options object\n * determines the return type of `request()`. In addition to configuring\n * request parameters such as the outgoing headers and/or the body, the options\n * hash specifies two key pieces of information about the request: the\n * `responseType` and what to `observe`.\n *\n * The `responseType` value determines how a successful response body will be\n * parsed. If `responseType` is the default `json`, a type interface for the\n * resulting object may be passed as a type parameter to `request()`.\n *\n * The `observe` value determines the return type of `request()`, based on what\n * the consumer is interested in observing. A value of `events` will return an\n * `Observable` representing the raw `HttpEvent` stream,\n * including progress events by default. A value of `response` will return an\n * `Observable>` where the `T` parameter of `HttpResponse`\n * depends on the `responseType` and any optionally provided type parameter.\n * A value of `body` will return an `Observable` with the same `T` body type.\n * @param {?} first\n * @param {?=} url\n * @param {?=} options\n * @return {?}\n */\n HttpClient.prototype.request = function (first, url, options) {\n var _this = this;\n if (options === void 0) { options = {}; }\n var /** @type {?} */ req;\n // Firstly, check whether the primary argument is an instance of `HttpRequest`.\n if (first instanceof HttpRequest) {\n // It is. The other arguments must be undefined (per the signatures) and can be\n // ignored.\n req = (first);\n }\n else {\n // It's a string, so it represents a URL. Construct a request based on it,\n // and incorporate the remaining arguments (assuming GET unless a method is\n // provided.\n req = new HttpRequest(first, /** @type {?} */ ((url)), options.body || null, {\n headers: options.headers,\n params: options.params,\n reportProgress: options.reportProgress,\n // By default, JSON is assumed to be returned for all calls.\n responseType: options.responseType || 'json',\n withCredentials: options.withCredentials,\n });\n }\n // Start with an Observable.of() the initial request, and run the handler (which\n // includes all interceptors) inside a concatMap(). This way, the handler runs\n // inside an Observable chain, which causes interceptors to be re-run on every\n // subscription (this also makes retries re-run the handler, including interceptors).\n var /** @type {?} */ events$ = concatMap.call(of(req), function (req) { return _this.handler.handle(req); });\n // If coming via the API signature which accepts a previously constructed HttpRequest,\n // the only option is to get the event stream. Otherwise, return the event stream if\n // that is what was requested.\n if (first instanceof HttpRequest || options.observe === 'events') {\n return events$;\n }\n // The requested stream contains either the full response or the body. In either\n // case, the first step is to filter the event stream to extract a stream of\n // responses(s).\n var /** @type {?} */ res$ = filter.call(events$, function (event) { return event instanceof HttpResponse; });\n // Decide which stream to return.\n switch (options.observe || 'body') {\n case 'body':\n // The requested stream is the body. Map the response stream to the response\n // body. This could be done more simply, but a misbehaving interceptor might\n // transform the response body into a different format and ignore the requested\n // responseType. Guard against this by validating that the response is of the\n // requested type.\n switch (req.responseType) {\n case 'arraybuffer':\n return map.call(res$, function (res) {\n // Validate that the body is an ArrayBuffer.\n if (res.body !== null && !(res.body instanceof ArrayBuffer)) {\n throw new Error('Response is not an ArrayBuffer.');\n }\n return res.body;\n });\n case 'blob':\n return map.call(res$, function (res) {\n // Validate that the body is a Blob.\n if (res.body !== null && !(res.body instanceof Blob)) {\n throw new Error('Response is not a Blob.');\n }\n return res.body;\n });\n case 'text':\n return map.call(res$, function (res) {\n // Validate that the body is a string.\n if (res.body !== null && typeof res.body !== 'string') {\n throw new Error('Response is not a string.');\n }\n return res.body;\n });\n case 'json':\n default:\n // No validation needed for JSON responses, as they can be of any type.\n return map.call(res$, function (res) { return res.body; });\n }\n case 'response':\n // The response stream was requested directly, so return it.\n return res$;\n default:\n // Guard against new future observe types being added.\n throw new Error(\"Unreachable: unhandled observe type \" + options.observe + \"}\");\n }\n };\n /**\n * Constructs an `Observable` which, when subscribed, will cause the configured\n * DELETE request to be executed on the server. See the individual overloads for\n * details of `delete()`'s return type based on the provided options.\n * @param {?} url\n * @param {?=} options\n * @return {?}\n */\n HttpClient.prototype.delete = function (url, options) {\n if (options === void 0) { options = {}; }\n return this.request('DELETE', url, /** @type {?} */ (options));\n };\n /**\n * Constructs an `Observable` which, when subscribed, will cause the configured\n * GET request to be executed on the server. See the individual overloads for\n * details of `get()`'s return type based on the provided options.\n * @param {?} url\n * @param {?=} options\n * @return {?}\n */\n HttpClient.prototype.get = function (url, options) {\n if (options === void 0) { options = {}; }\n return this.request('GET', url, /** @type {?} */ (options));\n };\n /**\n * Constructs an `Observable` which, when subscribed, will cause the configured\n * HEAD request to be executed on the server. See the individual overloads for\n * details of `head()`'s return type based on the provided options.\n * @param {?} url\n * @param {?=} options\n * @return {?}\n */\n HttpClient.prototype.head = function (url, options) {\n if (options === void 0) { options = {}; }\n return this.request('HEAD', url, /** @type {?} */ (options));\n };\n /**\n * Constructs an `Observable` which, when subscribed, will cause a request\n * with the special method `JSONP` to be dispatched via the interceptor pipeline.\n *\n * A suitable interceptor must be installed (e.g. via the `HttpClientJsonpModule`).\n * If no such interceptor is reached, then the `JSONP` request will likely be\n * rejected by the configured backend.\n * @template T\n * @param {?} url\n * @param {?} callbackParam\n * @return {?}\n */\n HttpClient.prototype.jsonp = function (url, callbackParam) {\n return this.request('JSONP', url, {\n params: new HttpParams().append(callbackParam, 'JSONP_CALLBACK'),\n observe: 'body',\n responseType: 'json',\n });\n };\n /**\n * Constructs an `Observable` which, when subscribed, will cause the configured\n * OPTIONS request to be executed on the server. See the individual overloads for\n * details of `options()`'s return type based on the provided options.\n * @param {?} url\n * @param {?=} options\n * @return {?}\n */\n HttpClient.prototype.options = function (url, options) {\n if (options === void 0) { options = {}; }\n return this.request('OPTIONS', url, /** @type {?} */ (options));\n };\n /**\n * Constructs an `Observable` which, when subscribed, will cause the configured\n * PATCH request to be executed on the server. See the individual overloads for\n * details of `patch()`'s return type based on the provided options.\n * @param {?} url\n * @param {?} body\n * @param {?=} options\n * @return {?}\n */\n HttpClient.prototype.patch = function (url, body, options) {\n if (options === void 0) { options = {}; }\n return this.request('PATCH', url, addBody(options, body));\n };\n /**\n * Constructs an `Observable` which, when subscribed, will cause the configured\n * POST request to be executed on the server. See the individual overloads for\n * details of `post()`'s return type based on the provided options.\n * @param {?} url\n * @param {?} body\n * @param {?=} options\n * @return {?}\n */\n HttpClient.prototype.post = function (url, body, options) {\n if (options === void 0) { options = {}; }\n return this.request('POST', url, addBody(options, body));\n };\n /**\n * Constructs an `Observable` which, when subscribed, will cause the configured\n * POST request to be executed on the server. See the individual overloads for\n * details of `post()`'s return type based on the provided options.\n * @param {?} url\n * @param {?} body\n * @param {?=} options\n * @return {?}\n */\n HttpClient.prototype.put = function (url, body, options) {\n if (options === void 0) { options = {}; }\n return this.request('PUT', url, addBody(options, body));\n };\n return HttpClient;\n}());\nHttpClient.decorators = [\n { type: Injectable },\n];\n/**\n * @nocollapse\n */\nHttpClient.ctorParameters = function () { return [\n { type: HttpHandler, },\n]; };\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * `HttpHandler` which applies an `HttpInterceptor` to an `HttpRequest`.\n *\n * \\@experimental\n */\nvar HttpInterceptorHandler = (function () {\n /**\n * @param {?} next\n * @param {?} interceptor\n */\n function HttpInterceptorHandler(next, interceptor) {\n this.next = next;\n this.interceptor = interceptor;\n }\n /**\n * @param {?} req\n * @return {?}\n */\n HttpInterceptorHandler.prototype.handle = function (req) {\n return this.interceptor.intercept(req, this.next);\n };\n return HttpInterceptorHandler;\n}());\n/**\n * A multi-provider token which represents the array of `HttpInterceptor`s that\n * are registered.\n *\n * \\@experimental\n */\nvar HTTP_INTERCEPTORS = new InjectionToken('HTTP_INTERCEPTORS');\nvar NoopInterceptor = (function () {\n function NoopInterceptor() {\n }\n /**\n * @param {?} req\n * @param {?} next\n * @return {?}\n */\n NoopInterceptor.prototype.intercept = function (req, next) {\n return next.handle(req);\n };\n return NoopInterceptor;\n}());\nNoopInterceptor.decorators = [\n { type: Injectable },\n];\n/**\n * @nocollapse\n */\nNoopInterceptor.ctorParameters = function () { return []; };\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// Every request made through JSONP needs a callback name that's unique across the\n// whole page. Each request is assigned an id and the callback name is constructed\n// from that. The next id to be assigned is tracked in a global variable here that\n// is shared among all applications on the page.\nvar nextRequestId = 0;\n// Error text given when a JSONP script is injected, but doesn't invoke the callback\n// passed in its URL.\nvar JSONP_ERR_NO_CALLBACK = 'JSONP injected script did not invoke callback.';\n// Error text given when a request is passed to the JsonpClientBackend that doesn't\n// have a request method JSONP.\nvar JSONP_ERR_WRONG_METHOD = 'JSONP requests must use JSONP request method.';\nvar JSONP_ERR_WRONG_RESPONSE_TYPE = 'JSONP requests must use Json response type.';\n/**\n * DI token/abstract type representing a map of JSONP callbacks.\n *\n * In the browser, this should always be the `window` object.\n *\n * \\@experimental\n * @abstract\n */\nvar JsonpCallbackContext = (function () {\n function JsonpCallbackContext() {\n }\n return JsonpCallbackContext;\n}());\n/**\n * `HttpBackend` that only processes `HttpRequest` with the JSONP method,\n * by performing JSONP style requests.\n *\n * \\@experimental\n */\nvar JsonpClientBackend = (function () {\n /**\n * @param {?} callbackMap\n * @param {?} document\n */\n function JsonpClientBackend(callbackMap, document) {\n this.callbackMap = callbackMap;\n this.document = document;\n }\n /**\n * Get the name of the next callback method, by incrementing the global `nextRequestId`.\n * @return {?}\n */\n JsonpClientBackend.prototype.nextCallback = function () { return \"ng_jsonp_callback_\" + nextRequestId++; };\n /**\n * Process a JSONP request and return an event stream of the results.\n * @param {?} req\n * @return {?}\n */\n JsonpClientBackend.prototype.handle = function (req) {\n var _this = this;\n // Firstly, check both the method and response type. If either doesn't match\n // then the request was improperly routed here and cannot be handled.\n if (req.method !== 'JSONP') {\n throw new Error(JSONP_ERR_WRONG_METHOD);\n }\n else if (req.responseType !== 'json') {\n throw new Error(JSONP_ERR_WRONG_RESPONSE_TYPE);\n }\n // Everything else happens inside the Observable boundary.\n return new Observable(function (observer) {\n // The first step to make a request is to generate the callback name, and replace the\n // callback placeholder in the URL with the name. Care has to be taken here to ensure\n // a trailing &, if matched, gets inserted back into the URL in the correct place.\n var /** @type {?} */ callback = _this.nextCallback();\n var /** @type {?} */ url = req.urlWithParams.replace(/=JSONP_CALLBACK(&|$)/, \"=\" + callback + \"$1\");\n // Construct the