mirror of
https://github.com/microsoft/FLAML.git
synced 2026-02-16 21:52:25 +08:00
Compare commits
9 Commits
main
...
copilot/ad
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fdba27860a | ||
|
|
0990d8fe17 | ||
|
|
aaa50d34a3 | ||
|
|
815ed5b05f | ||
|
|
0bcd84ac90 | ||
|
|
3e760be864 | ||
|
|
82de6d34c4 | ||
|
|
4f665af707 | ||
|
|
3fdc2fc19c |
1
.github/copilot-instructions.md
vendored
1
.github/copilot-instructions.md
vendored
@@ -135,7 +135,6 @@ The repository uses pre-commit hooks for:
|
||||
- Ensure all tests pass before requesting review
|
||||
- Update documentation if adding new features
|
||||
- Follow the PR template in `.github/PULL_REQUEST_TEMPLATE.md`
|
||||
- ALWAYS run `pre-commit run --all-files` before each commit to avoid formatting issues
|
||||
|
||||
## Project Structure
|
||||
|
||||
|
||||
2
.github/workflows/CD.yml
vendored
2
.github/workflows/CD.yml
vendored
@@ -33,7 +33,7 @@ jobs:
|
||||
- name: Build
|
||||
shell: pwsh
|
||||
run: |
|
||||
pip install twine wheel "setuptools<82"
|
||||
pip install twine wheel setuptools
|
||||
python setup.py sdist bdist_wheel
|
||||
- name: Publish to PyPI
|
||||
env:
|
||||
|
||||
4
.github/workflows/deploy-website.yml
vendored
4
.github/workflows/deploy-website.yml
vendored
@@ -41,7 +41,7 @@ jobs:
|
||||
- name: pydoc-markdown install
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install pydoc-markdown==4.7.0 "setuptools<82"
|
||||
pip install pydoc-markdown==4.7.0 setuptools
|
||||
- name: pydoc-markdown run
|
||||
run: |
|
||||
pydoc-markdown
|
||||
@@ -77,7 +77,7 @@ jobs:
|
||||
- name: pydoc-markdown install
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install pydoc-markdown==4.7.0 "setuptools<82"
|
||||
pip install pydoc-markdown==4.7.0 setuptools
|
||||
- name: pydoc-markdown run
|
||||
run: |
|
||||
pydoc-markdown
|
||||
|
||||
4
.github/workflows/pre-commit.yml
vendored
4
.github/workflows/pre-commit.yml
vendored
@@ -1,7 +1,9 @@
|
||||
name: Code formatting
|
||||
|
||||
# see: https://help.github.com/en/actions/reference/events-that-trigger-workflows
|
||||
on:
|
||||
on: # Trigger the workflow on push or pull request, but only for the main branch
|
||||
push:
|
||||
branches: [main]
|
||||
pull_request: {}
|
||||
|
||||
defaults:
|
||||
|
||||
3
.github/workflows/python-package.yml
vendored
3
.github/workflows/python-package.yml
vendored
@@ -60,7 +60,7 @@ jobs:
|
||||
export LDFLAGS="$LDFLAGS -Wl,-rpath,/usr/local/opt/libomp/lib -L/usr/local/opt/libomp/lib -lomp"
|
||||
- name: Install packages and dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip wheel "setuptools<82"
|
||||
python -m pip install --upgrade pip wheel setuptools
|
||||
pip install -e .
|
||||
python -c "import flaml"
|
||||
pip install -e .[test]
|
||||
@@ -121,7 +121,6 @@ jobs:
|
||||
file: ./coverage.xml
|
||||
flags: unittests
|
||||
- name: Save dependencies
|
||||
if: github.ref == 'refs/heads/main'
|
||||
shell: bash
|
||||
run: |
|
||||
git config --global user.name 'github-actions[bot]'
|
||||
|
||||
163
examples/multi_target_regression_demo.py
Normal file
163
examples/multi_target_regression_demo.py
Normal file
@@ -0,0 +1,163 @@
|
||||
"""
|
||||
Demo script showing multi-target regression support in FLAML AutoML.
|
||||
|
||||
This script demonstrates:
|
||||
1. Creating a multi-target regression dataset
|
||||
2. Training an AutoML model with multi-target support
|
||||
3. Making predictions with multi-target output
|
||||
4. Comparing with single-target approach using MultiOutputRegressor wrapper
|
||||
"""
|
||||
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
from sklearn.datasets import make_regression
|
||||
from sklearn.metrics import mean_squared_error, r2_score
|
||||
from sklearn.model_selection import train_test_split
|
||||
|
||||
from flaml import AutoML
|
||||
|
||||
# Create synthetic multi-target regression data
|
||||
print("=" * 60)
|
||||
print("Creating Multi-Target Regression Dataset")
|
||||
print("=" * 60)
|
||||
|
||||
X, y = make_regression(
|
||||
n_samples=500,
|
||||
n_features=20,
|
||||
n_targets=3, # 3 target variables
|
||||
random_state=42,
|
||||
noise=0.1,
|
||||
)
|
||||
|
||||
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
|
||||
|
||||
print(f"Training set: X_train shape = {X_train.shape}, y_train shape = {y_train.shape}")
|
||||
print(f"Test set: X_test shape = {X_test.shape}, y_test shape = {y_test.shape}")
|
||||
print()
|
||||
|
||||
# Train AutoML with multi-target support
|
||||
print("=" * 60)
|
||||
print("Training AutoML with Multi-Target Support")
|
||||
print("=" * 60)
|
||||
|
||||
automl = AutoML()
|
||||
automl.fit(
|
||||
X_train,
|
||||
y_train,
|
||||
task="regression",
|
||||
time_budget=30, # 30 seconds
|
||||
verbose=0,
|
||||
)
|
||||
|
||||
print(f"Best estimator: {automl.best_estimator}")
|
||||
print(f"Best loss: {automl.best_loss:.4f}")
|
||||
print()
|
||||
|
||||
# Make predictions
|
||||
print("=" * 60)
|
||||
print("Making Predictions")
|
||||
print("=" * 60)
|
||||
|
||||
y_pred = automl.predict(X_test)
|
||||
print(f"Predictions shape: {y_pred.shape}")
|
||||
print(f"First 3 predictions:\n{y_pred[:3]}")
|
||||
print()
|
||||
|
||||
# Evaluate performance
|
||||
print("=" * 60)
|
||||
print("Performance Metrics")
|
||||
print("=" * 60)
|
||||
|
||||
# Overall metrics (averaged across all targets)
|
||||
mse_overall = mean_squared_error(y_test, y_pred)
|
||||
r2_overall = r2_score(y_test, y_pred)
|
||||
|
||||
print(f"Overall MSE: {mse_overall:.4f}")
|
||||
print(f"Overall R²: {r2_overall:.4f}")
|
||||
print()
|
||||
|
||||
# Per-target metrics
|
||||
print("Per-Target Metrics:")
|
||||
for i in range(y_test.shape[1]):
|
||||
mse_i = mean_squared_error(y_test[:, i], y_pred[:, i])
|
||||
r2_i = r2_score(y_test[:, i], y_pred[:, i])
|
||||
print(f" Target {i}: MSE = {mse_i:.4f}, R² = {r2_i:.4f}")
|
||||
print()
|
||||
|
||||
# Compare with pandas DataFrame input
|
||||
print("=" * 60)
|
||||
print("Testing with Pandas DataFrame")
|
||||
print("=" * 60)
|
||||
|
||||
X_df = pd.DataFrame(X_train, columns=[f"feature_{i}" for i in range(X_train.shape[1])])
|
||||
y_df = pd.DataFrame(y_train, columns=[f"target_{i}" for i in range(y_train.shape[1])])
|
||||
|
||||
automl_df = AutoML()
|
||||
automl_df.fit(
|
||||
X_df,
|
||||
y_df,
|
||||
task="regression",
|
||||
time_budget=30,
|
||||
verbose=0,
|
||||
)
|
||||
|
||||
print(f"Best estimator (DataFrame): {automl_df.best_estimator}")
|
||||
print(f"Best loss (DataFrame): {automl_df.best_loss:.4f}")
|
||||
print()
|
||||
|
||||
# Demonstrate filtering of unsupported estimators
|
||||
print("=" * 60)
|
||||
print("Demonstrating Estimator Filtering")
|
||||
print("=" * 60)
|
||||
|
||||
print("Attempting to use LightGBM (unsupported for multi-target)...")
|
||||
try:
|
||||
automl_lgbm = AutoML()
|
||||
automl_lgbm.fit(
|
||||
X_train,
|
||||
y_train,
|
||||
task="regression",
|
||||
time_budget=5,
|
||||
estimator_list=["lgbm"], # LightGBM doesn't support multi-target
|
||||
verbose=0,
|
||||
)
|
||||
print("ERROR: LightGBM should not work with multi-target!")
|
||||
except ValueError as e:
|
||||
print(f"✓ Expected error: {e}")
|
||||
print()
|
||||
|
||||
# Compare supported estimators
|
||||
print("=" * 60)
|
||||
print("Comparing Supported Estimators")
|
||||
print("=" * 60)
|
||||
|
||||
for estimator in ["xgboost", "catboost"]:
|
||||
try:
|
||||
print(f"\nTesting {estimator}...")
|
||||
automl_est = AutoML()
|
||||
automl_est.fit(
|
||||
X_train[:200], # Use subset for speed
|
||||
y_train[:200],
|
||||
task="regression",
|
||||
time_budget=10,
|
||||
estimator_list=[estimator],
|
||||
verbose=0,
|
||||
)
|
||||
y_pred_est = automl_est.predict(X_test)
|
||||
mse_est = mean_squared_error(y_test, y_pred_est)
|
||||
print(f" ✓ {estimator}: MSE = {mse_est:.4f}")
|
||||
except ImportError:
|
||||
print(f" ⊗ {estimator}: Not installed")
|
||||
except Exception as e:
|
||||
print(f" ✗ {estimator}: Error - {e}")
|
||||
|
||||
print()
|
||||
print("=" * 60)
|
||||
print("Demo Complete!")
|
||||
print("=" * 60)
|
||||
print("\nKey Takeaways:")
|
||||
print("1. FLAML now supports multi-target regression natively")
|
||||
print("2. Only XGBoost and CatBoost are supported for multi-target")
|
||||
print("3. Works with both numpy arrays and pandas DataFrames")
|
||||
print("4. Predictions maintain the (n_samples, n_targets) shape")
|
||||
print("5. Sklearn metrics automatically average across targets")
|
||||
@@ -827,8 +827,11 @@ class AutoML(BaseEstimator):
|
||||
X = self._state.task.preprocess(X, self._transformer)
|
||||
y_pred = estimator.predict(X, **pred_kwargs)
|
||||
|
||||
if isinstance(y_pred, np.ndarray) and y_pred.ndim > 1 and isinstance(y_pred, np.ndarray):
|
||||
y_pred = y_pred.flatten()
|
||||
# Only flatten if not multi-target regression
|
||||
if isinstance(y_pred, np.ndarray) and y_pred.ndim > 1:
|
||||
is_multi_target = getattr(self._state, "is_multi_target", False)
|
||||
if not is_multi_target:
|
||||
y_pred = y_pred.flatten()
|
||||
if self._label_transformer:
|
||||
return self._label_transformer.inverse_transform(Series(y_pred.astype(int)))
|
||||
else:
|
||||
@@ -1847,7 +1850,9 @@ class AutoML(BaseEstimator):
|
||||
must be the timestamp column (datetime type). Other columns in
|
||||
the dataframe are assumed to be exogenous variables (categorical or numeric).
|
||||
When using ray, X_train can be a ray.ObjectRef.
|
||||
y_train: A numpy array or a pandas series of labels in shape (n, ).
|
||||
y_train: A numpy array, pandas series, or pandas dataframe of labels in shape (n, )
|
||||
for single-target tasks or (n, k) for multi-target regression tasks.
|
||||
For multi-target regression, only XGBoost and CatBoost estimators are supported.
|
||||
dataframe: A dataframe of training data including label column.
|
||||
For time series forecast tasks, dataframe must be specified and must have
|
||||
at least two columns, timestamp and label, where the first
|
||||
@@ -2490,7 +2495,8 @@ class AutoML(BaseEstimator):
|
||||
self._state.error_metric = error_metric
|
||||
|
||||
is_spark_dataframe = isinstance(X_train, psDataFrame) or isinstance(dataframe, psDataFrame)
|
||||
estimator_list = task.default_estimator_list(estimator_list, is_spark_dataframe)
|
||||
is_multi_target = getattr(self._state, "is_multi_target", False)
|
||||
estimator_list = task.default_estimator_list(estimator_list, is_spark_dataframe, is_multi_target)
|
||||
|
||||
if is_spark_dataframe and self._use_spark:
|
||||
# For spark dataframe, use_spark must be False because spark models are trained in parallel themselves
|
||||
|
||||
@@ -373,7 +373,18 @@ class DataTransformer:
|
||||
datetime_columns,
|
||||
)
|
||||
self._drop = drop
|
||||
if task.is_classification() or not pd.api.types.is_numeric_dtype(y) and not task.is_nlg():
|
||||
|
||||
# Check if y is multi-target (DataFrame or 2D array with multiple targets)
|
||||
is_multi_target = False
|
||||
if isinstance(y, DataFrame) and y.shape[1] > 1:
|
||||
is_multi_target = True
|
||||
elif isinstance(y, np.ndarray) and y.ndim == 2 and y.shape[1] > 1:
|
||||
is_multi_target = True
|
||||
|
||||
# Skip label encoding for multi-target regression
|
||||
if is_multi_target and task.is_regression():
|
||||
self.label_transformer = None
|
||||
elif task.is_classification() or not pd.api.types.is_numeric_dtype(y) and not task.is_nlg():
|
||||
if not task.is_token_classification():
|
||||
from sklearn.preprocessing import LabelEncoder
|
||||
|
||||
|
||||
@@ -26,13 +26,6 @@ from sklearn.preprocessing import Normalizer
|
||||
from sklearn.svm import LinearSVC
|
||||
from xgboost import __version__ as xgboost_version
|
||||
|
||||
try:
|
||||
from sklearn.utils._tags import ClassifierTags, RegressorTags
|
||||
|
||||
SKLEARN_TAGS_AVAILABLE = True
|
||||
except ImportError:
|
||||
SKLEARN_TAGS_AVAILABLE = False
|
||||
|
||||
from flaml import tune
|
||||
from flaml.automl.data import group_counts
|
||||
from flaml.automl.spark import ERROR as SPARK_ERROR
|
||||
@@ -155,25 +148,6 @@ class BaseEstimator(sklearn.base.ClassifierMixin, sklearn.base.BaseEstimator):
|
||||
params["_estimator_type"] = self._estimator_type
|
||||
return params
|
||||
|
||||
def __sklearn_tags__(self):
|
||||
"""Override sklearn tags to respect the _estimator_type attribute.
|
||||
|
||||
This is needed for sklearn 1.7+ which uses get_tags() instead of
|
||||
checking _estimator_type directly. Since BaseEstimator inherits from
|
||||
ClassifierMixin, it would otherwise always be tagged as a classifier.
|
||||
"""
|
||||
tags = super().__sklearn_tags__()
|
||||
if hasattr(self, "_estimator_type") and SKLEARN_TAGS_AVAILABLE:
|
||||
if self._estimator_type == "regressor":
|
||||
tags.estimator_type = "regressor"
|
||||
tags.regressor_tags = RegressorTags()
|
||||
tags.classifier_tags = None
|
||||
elif self._estimator_type == "classifier":
|
||||
tags.estimator_type = "classifier"
|
||||
tags.classifier_tags = ClassifierTags()
|
||||
tags.regressor_tags = None
|
||||
return tags
|
||||
|
||||
@property
|
||||
def classes_(self):
|
||||
return self._model.classes_
|
||||
@@ -1196,31 +1170,16 @@ class TransformersEstimator(BaseEstimator):
|
||||
control.should_save = True
|
||||
control.should_evaluate = True
|
||||
|
||||
# Use processing_class for transformers >= 4.44.0, tokenizer for older versions
|
||||
trainer_kwargs = {
|
||||
"args": self._training_args,
|
||||
"model_init": self._model_init,
|
||||
"train_dataset": train_dataset,
|
||||
"eval_dataset": eval_dataset,
|
||||
"data_collator": self.data_collator,
|
||||
"compute_metrics": self._compute_metrics_by_dataset_name,
|
||||
"callbacks": [EarlyStoppingCallbackForAuto],
|
||||
}
|
||||
|
||||
# Check if processing_class parameter is supported (transformers >= 4.44.0)
|
||||
try:
|
||||
import transformers
|
||||
from packaging import version
|
||||
|
||||
if version.parse(transformers.__version__) >= version.parse("4.44.0"):
|
||||
trainer_kwargs["processing_class"] = self.tokenizer
|
||||
else:
|
||||
trainer_kwargs["tokenizer"] = self.tokenizer
|
||||
except (ImportError, AttributeError, ValueError):
|
||||
# Fallback to tokenizer if version check fails
|
||||
trainer_kwargs["tokenizer"] = self.tokenizer
|
||||
|
||||
self._trainer = TrainerForAuto(**trainer_kwargs)
|
||||
self._trainer = TrainerForAuto(
|
||||
args=self._training_args,
|
||||
model_init=self._model_init,
|
||||
train_dataset=train_dataset,
|
||||
eval_dataset=eval_dataset,
|
||||
tokenizer=self.tokenizer,
|
||||
data_collator=self.data_collator,
|
||||
compute_metrics=self._compute_metrics_by_dataset_name,
|
||||
callbacks=[EarlyStoppingCallbackForAuto],
|
||||
)
|
||||
|
||||
if self._task in NLG_TASKS:
|
||||
setattr(self._trainer, "_is_seq2seq", True)
|
||||
@@ -2153,6 +2112,18 @@ class CatBoostEstimator(BaseEstimator):
|
||||
cat_features = list(X_train.select_dtypes(include="category").columns)
|
||||
else:
|
||||
cat_features = []
|
||||
|
||||
# Detect multi-target regression and set appropriate loss function
|
||||
is_multi_target = False
|
||||
if self._task.is_regression():
|
||||
if isinstance(y_train, np.ndarray) and y_train.ndim == 2 and y_train.shape[1] > 1:
|
||||
is_multi_target = True
|
||||
elif isinstance(y_train, DataFrame) and y_train.shape[1] > 1:
|
||||
is_multi_target = True
|
||||
|
||||
if is_multi_target and "loss_function" not in self.params:
|
||||
self.params["loss_function"] = "MultiRMSE"
|
||||
|
||||
use_best_model = kwargs.get("use_best_model", True)
|
||||
n = max(int(len(y_train) * 0.9), len(y_train) - 1000) if use_best_model else len(y_train)
|
||||
X_tr, y_tr = X_train[:n], y_train[:n]
|
||||
|
||||
@@ -211,28 +211,29 @@ def tokenize_onedataframe(
|
||||
hf_args=None,
|
||||
prefix_str=None,
|
||||
):
|
||||
_, tokenized_column_names = tokenize_row(
|
||||
dict(X.iloc[0]),
|
||||
tokenizer,
|
||||
prefix=(prefix_str,) if task is SUMMARIZATION else None,
|
||||
task=task,
|
||||
hf_args=hf_args,
|
||||
return_column_name=True,
|
||||
)
|
||||
d = X.apply(
|
||||
lambda x: tokenize_row(
|
||||
x,
|
||||
with tokenizer.as_target_tokenizer():
|
||||
_, tokenized_column_names = tokenize_row(
|
||||
dict(X.iloc[0]),
|
||||
tokenizer,
|
||||
prefix=(prefix_str,) if task is SUMMARIZATION else None,
|
||||
task=task,
|
||||
hf_args=hf_args,
|
||||
),
|
||||
axis=1,
|
||||
result_type="expand",
|
||||
)
|
||||
X_tokenized = pd.DataFrame(columns=tokenized_column_names)
|
||||
X_tokenized[tokenized_column_names] = d
|
||||
return X_tokenized
|
||||
return_column_name=True,
|
||||
)
|
||||
d = X.apply(
|
||||
lambda x: tokenize_row(
|
||||
x,
|
||||
tokenizer,
|
||||
prefix=(prefix_str,) if task is SUMMARIZATION else None,
|
||||
task=task,
|
||||
hf_args=hf_args,
|
||||
),
|
||||
axis=1,
|
||||
result_type="expand",
|
||||
)
|
||||
X_tokenized = pd.DataFrame(columns=tokenized_column_names)
|
||||
X_tokenized[tokenized_column_names] = d
|
||||
return X_tokenized
|
||||
|
||||
|
||||
def tokenize_row(
|
||||
|
||||
@@ -119,13 +119,15 @@ class GenericTask(Task):
|
||||
"a Scipy sparse matrix or a pyspark.pandas dataframe."
|
||||
)
|
||||
assert isinstance(
|
||||
y_train_all, (np.ndarray, pd.Series, psSeries)
|
||||
), "y_train_all must be a numpy array, a pandas series or a pyspark.pandas series."
|
||||
y_train_all, (np.ndarray, pd.Series, pd.DataFrame, psSeries)
|
||||
), "y_train_all must be a numpy array, a pandas series, a pandas dataframe or a pyspark.pandas series."
|
||||
assert X_train_all.size != 0 and y_train_all.size != 0, "Input data must not be empty."
|
||||
if isinstance(X_train_all, np.ndarray) and len(X_train_all.shape) == 1:
|
||||
X_train_all = np.reshape(X_train_all, (X_train_all.size, 1))
|
||||
if isinstance(y_train_all, np.ndarray):
|
||||
y_train_all = y_train_all.flatten()
|
||||
# Only flatten if it's truly 1D (not multi-target)
|
||||
if y_train_all.ndim == 1 or (y_train_all.ndim == 2 and y_train_all.shape[1] == 1):
|
||||
y_train_all = y_train_all.flatten()
|
||||
assert X_train_all.shape[0] == y_train_all.shape[0], "# rows in X_train must match length of y_train."
|
||||
if isinstance(X_train_all, psDataFrame):
|
||||
X_train_all = X_train_all.spark.cache() # cache data to improve compute speed
|
||||
@@ -219,6 +221,20 @@ class GenericTask(Task):
|
||||
automl._X_train_all.columns.to_list() if hasattr(automl._X_train_all, "columns") else None
|
||||
)
|
||||
|
||||
# Detect multi-target regression
|
||||
is_multi_target = False
|
||||
n_targets = 1
|
||||
if self.is_regression():
|
||||
if isinstance(automl._y_train_all, np.ndarray) and automl._y_train_all.ndim == 2:
|
||||
is_multi_target = True
|
||||
n_targets = automl._y_train_all.shape[1]
|
||||
elif isinstance(automl._y_train_all, pd.DataFrame):
|
||||
is_multi_target = True
|
||||
n_targets = automl._y_train_all.shape[1]
|
||||
|
||||
state.is_multi_target = is_multi_target
|
||||
state.n_targets = n_targets
|
||||
|
||||
automl._sample_weight_full = state.fit_kwargs.get(
|
||||
"sample_weight"
|
||||
) # NOTE: _validate_data is before kwargs is updated to fit_kwargs_by_estimator
|
||||
@@ -227,14 +243,16 @@ class GenericTask(Task):
|
||||
"X_val must be None, a numpy array, a pandas dataframe, "
|
||||
"a Scipy sparse matrix or a pyspark.pandas dataframe."
|
||||
)
|
||||
assert isinstance(y_val, (np.ndarray, pd.Series, psSeries)), (
|
||||
"y_val must be None, a numpy array, a pandas series " "or a pyspark.pandas series."
|
||||
assert isinstance(y_val, (np.ndarray, pd.Series, pd.DataFrame, psSeries)), (
|
||||
"y_val must be None, a numpy array, a pandas series, a pandas dataframe " "or a pyspark.pandas series."
|
||||
)
|
||||
assert X_val.size != 0 and y_val.size != 0, (
|
||||
"Validation data are expected to be nonempty. " "Use None for X_val and y_val if no validation data."
|
||||
)
|
||||
if isinstance(y_val, np.ndarray):
|
||||
y_val = y_val.flatten()
|
||||
# Only flatten if it's truly 1D (not multi-target)
|
||||
if y_val.ndim == 1 or (y_val.ndim == 2 and y_val.shape[1] == 1):
|
||||
y_val = y_val.flatten()
|
||||
assert X_val.shape[0] == y_val.shape[0], "# rows in X_val must match length of y_val."
|
||||
if automl._transformer:
|
||||
state.X_val = automl._transformer.transform(X_val)
|
||||
@@ -1217,7 +1235,10 @@ class GenericTask(Task):
|
||||
else:
|
||||
X_train, X_val = X_train_split[train_index], X_train_split[val_index]
|
||||
if not is_spark_dataframe:
|
||||
y_train, y_val = y_train_split[train_index], y_train_split[val_index]
|
||||
if isinstance(y_train_split, (pd.DataFrame, pd.Series)):
|
||||
y_train, y_val = y_train_split.iloc[train_index], y_train_split.iloc[val_index]
|
||||
else:
|
||||
y_train, y_val = y_train_split[train_index], y_train_split[val_index]
|
||||
if weight is not None:
|
||||
fit_kwargs["sample_weight"] = (
|
||||
weight[train_index] if isinstance(weight, np.ndarray) else weight.iloc[train_index]
|
||||
@@ -1266,7 +1287,9 @@ class GenericTask(Task):
|
||||
pred_time /= n
|
||||
return val_loss, metric, train_time, pred_time
|
||||
|
||||
def default_estimator_list(self, estimator_list: List[str], is_spark_dataframe: bool = False) -> List[str]:
|
||||
def default_estimator_list(
|
||||
self, estimator_list: List[str], is_spark_dataframe: bool = False, is_multi_target: bool = False
|
||||
) -> List[str]:
|
||||
if "auto" != estimator_list:
|
||||
n_estimators = len(estimator_list)
|
||||
if is_spark_dataframe:
|
||||
@@ -1295,6 +1318,23 @@ class GenericTask(Task):
|
||||
"Non-spark dataframes only support estimator names not ending with `_spark`. Non-supported "
|
||||
"estimators are removed."
|
||||
)
|
||||
|
||||
# Filter out unsupported estimators for multi-target regression
|
||||
if is_multi_target and self.is_regression():
|
||||
# List of estimators that support multi-target regression natively
|
||||
multi_target_supported = ["xgboost", "xgb_limitdepth", "catboost"]
|
||||
original_len = len(estimator_list)
|
||||
estimator_list = [est for est in estimator_list if est in multi_target_supported]
|
||||
if len(estimator_list) == 0:
|
||||
raise ValueError(
|
||||
"Multi-target regression only supports estimators: xgboost, xgb_limitdepth, catboost. "
|
||||
"Non-supported estimators are removed. No estimator is left."
|
||||
)
|
||||
elif original_len != len(estimator_list):
|
||||
logger.warning(
|
||||
"Multi-target regression only supports estimators: xgboost, xgb_limitdepth, catboost. "
|
||||
"Non-supported estimators are removed."
|
||||
)
|
||||
return estimator_list
|
||||
if self.is_rank():
|
||||
estimator_list = ["lgbm", "xgboost", "xgb_limitdepth", "lgbm_spark"]
|
||||
@@ -1344,6 +1384,18 @@ class GenericTask(Task):
|
||||
for est in estimator_list
|
||||
if (est.endswith("_spark") if is_spark_dataframe else not est.endswith("_spark"))
|
||||
]
|
||||
|
||||
# Filter for multi-target regression support
|
||||
if is_multi_target and self.is_regression():
|
||||
# List of estimators that support multi-target regression natively
|
||||
multi_target_supported = ["xgboost", "xgb_limitdepth", "catboost"]
|
||||
estimator_list = [est for est in estimator_list if est in multi_target_supported]
|
||||
if len(estimator_list) == 0:
|
||||
raise ValueError(
|
||||
"Multi-target regression only supports estimators: xgboost, xgb_limitdepth, catboost. "
|
||||
"No supported estimator is available."
|
||||
)
|
||||
|
||||
return estimator_list
|
||||
|
||||
def default_metric(self, metric: str) -> str:
|
||||
|
||||
@@ -253,6 +253,7 @@ class Task(ABC):
|
||||
self,
|
||||
estimator_list: Union[List[str], str] = "auto",
|
||||
is_spark_dataframe: bool = False,
|
||||
is_multi_target: bool = False,
|
||||
) -> List[str]:
|
||||
"""Return the list of default estimators registered for this task type.
|
||||
|
||||
@@ -262,6 +263,7 @@ class Task(ABC):
|
||||
Args:
|
||||
estimator_list: Either 'auto' or a list of estimator names to be validated.
|
||||
is_spark_dataframe: True if the data is a spark dataframe.
|
||||
is_multi_target: True if the task involves multi-target regression.
|
||||
|
||||
Returns:
|
||||
A list of valid estimator names for this task type.
|
||||
|
||||
@@ -458,7 +458,9 @@ class TimeSeriesTask(Task):
|
||||
pred_time /= n
|
||||
return val_loss, metric, train_time, pred_time
|
||||
|
||||
def default_estimator_list(self, estimator_list: List[str], is_spark_dataframe: bool) -> List[str]:
|
||||
def default_estimator_list(
|
||||
self, estimator_list: List[str], is_spark_dataframe: bool, is_multi_target: bool = False
|
||||
) -> List[str]:
|
||||
assert not is_spark_dataframe, "Spark is not yet supported for time series"
|
||||
|
||||
# TODO: why not do this if/then in the calling function?
|
||||
|
||||
196
test/automl/test_multi_target.py
Normal file
196
test/automl/test_multi_target.py
Normal file
@@ -0,0 +1,196 @@
|
||||
"""Tests for multi-target regression support in FLAML AutoML."""
|
||||
import unittest
|
||||
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
import pytest
|
||||
from sklearn.datasets import make_regression
|
||||
from sklearn.model_selection import train_test_split
|
||||
|
||||
from flaml import AutoML
|
||||
|
||||
|
||||
class TestMultiTargetRegression(unittest.TestCase):
|
||||
"""Test multi-target regression functionality."""
|
||||
|
||||
def setUp(self):
|
||||
"""Create multi-target regression datasets for testing."""
|
||||
# Create synthetic multi-target regression data
|
||||
self.X, self.y = make_regression(n_samples=200, n_features=10, n_targets=3, random_state=42, noise=0.1)
|
||||
self.X_train, self.X_test, self.y_train, self.y_test = train_test_split(
|
||||
self.X, self.y, test_size=0.2, random_state=42
|
||||
)
|
||||
|
||||
def test_multi_target_with_xgboost(self):
|
||||
"""Test multi-target regression with XGBoost."""
|
||||
automl = AutoML()
|
||||
automl.fit(
|
||||
self.X_train,
|
||||
self.y_train,
|
||||
task="regression",
|
||||
time_budget=5,
|
||||
estimator_list=["xgboost"],
|
||||
verbose=0,
|
||||
)
|
||||
|
||||
# Check that the model was trained
|
||||
self.assertIsNotNone(automl.model)
|
||||
self.assertEqual(automl.best_estimator, "xgboost")
|
||||
|
||||
# Check predictions shape
|
||||
y_pred = automl.predict(self.X_test)
|
||||
self.assertEqual(y_pred.shape, self.y_test.shape)
|
||||
self.assertEqual(y_pred.ndim, 2)
|
||||
|
||||
def test_multi_target_with_catboost(self):
|
||||
"""Test multi-target regression with CatBoost."""
|
||||
try:
|
||||
import catboost # noqa: F401
|
||||
except ImportError:
|
||||
pytest.skip("CatBoost not installed")
|
||||
|
||||
automl = AutoML()
|
||||
automl.fit(
|
||||
self.X_train,
|
||||
self.y_train,
|
||||
task="regression",
|
||||
time_budget=5,
|
||||
estimator_list=["catboost"],
|
||||
verbose=0,
|
||||
)
|
||||
|
||||
# Check that the model was trained
|
||||
self.assertIsNotNone(automl.model)
|
||||
self.assertEqual(automl.best_estimator, "catboost")
|
||||
|
||||
# Check predictions shape
|
||||
y_pred = automl.predict(self.X_test)
|
||||
self.assertEqual(y_pred.shape, self.y_test.shape)
|
||||
self.assertEqual(y_pred.ndim, 2)
|
||||
|
||||
def test_unsupported_estimator_filtered_out(self):
|
||||
"""Test that unsupported estimators are filtered for multi-target."""
|
||||
automl = AutoML()
|
||||
with self.assertRaises(ValueError) as context:
|
||||
automl.fit(
|
||||
self.X_train,
|
||||
self.y_train,
|
||||
task="regression",
|
||||
time_budget=5,
|
||||
estimator_list=["lgbm"],
|
||||
verbose=0,
|
||||
)
|
||||
self.assertIn("Multi-target regression only supports", str(context.exception))
|
||||
|
||||
def test_auto_estimator_list(self):
|
||||
"""Test that auto estimator list works with multi-target."""
|
||||
automl = AutoML()
|
||||
automl.fit(
|
||||
self.X_train,
|
||||
self.y_train,
|
||||
task="regression",
|
||||
time_budget=10,
|
||||
verbose=0,
|
||||
)
|
||||
|
||||
# Check that only supported estimators were used
|
||||
self.assertIn(automl.best_estimator, ["xgboost", "xgb_limitdepth", "catboost"])
|
||||
|
||||
# Check predictions shape
|
||||
y_pred = automl.predict(self.X_test)
|
||||
self.assertEqual(y_pred.shape, self.y_test.shape)
|
||||
|
||||
def test_multi_target_with_validation_set(self):
|
||||
"""Test multi-target regression with explicit validation set."""
|
||||
X_train_sub, X_val, y_train_sub, y_val = train_test_split(
|
||||
self.X_train, self.y_train, test_size=0.2, random_state=42
|
||||
)
|
||||
|
||||
automl = AutoML()
|
||||
automl.fit(
|
||||
X_train_sub,
|
||||
y_train_sub,
|
||||
X_val=X_val,
|
||||
y_val=y_val,
|
||||
task="regression",
|
||||
time_budget=5,
|
||||
estimator_list=["xgboost"],
|
||||
verbose=0,
|
||||
)
|
||||
|
||||
# Check that the model was trained
|
||||
self.assertIsNotNone(automl.model)
|
||||
|
||||
# Check predictions shape
|
||||
y_pred = automl.predict(self.X_test)
|
||||
self.assertEqual(y_pred.shape, self.y_test.shape)
|
||||
|
||||
def test_multi_target_with_dataframe(self):
|
||||
"""Test multi-target regression with pandas DataFrame."""
|
||||
X_df = pd.DataFrame(self.X_train, columns=[f"feature_{i}" for i in range(self.X_train.shape[1])])
|
||||
y_df = pd.DataFrame(self.y_train, columns=[f"target_{i}" for i in range(self.y_train.shape[1])])
|
||||
|
||||
automl = AutoML()
|
||||
automl.fit(
|
||||
X_df,
|
||||
y_df,
|
||||
task="regression",
|
||||
time_budget=5,
|
||||
estimator_list=["xgboost"],
|
||||
verbose=0,
|
||||
)
|
||||
|
||||
# Check that the model was trained
|
||||
self.assertIsNotNone(automl.model)
|
||||
|
||||
# Check predictions shape
|
||||
X_test_df = pd.DataFrame(self.X_test, columns=[f"feature_{i}" for i in range(self.X_test.shape[1])])
|
||||
y_pred = automl.predict(X_test_df)
|
||||
self.assertEqual(y_pred.shape, self.y_test.shape)
|
||||
|
||||
def test_single_target_still_works(self):
|
||||
"""Test that single-target regression still works correctly."""
|
||||
X, y = make_regression(n_samples=200, n_features=10, n_targets=1, random_state=42)
|
||||
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
|
||||
|
||||
automl = AutoML()
|
||||
automl.fit(
|
||||
X_train,
|
||||
y_train,
|
||||
task="regression",
|
||||
time_budget=5,
|
||||
estimator_list=["lgbm", "xgboost"],
|
||||
verbose=0,
|
||||
)
|
||||
|
||||
# Check that the model was trained
|
||||
self.assertIsNotNone(automl.model)
|
||||
|
||||
# Check predictions shape (should be 1D or (n, 1))
|
||||
y_pred = automl.predict(X_test)
|
||||
self.assertEqual(len(y_pred), len(y_test))
|
||||
|
||||
def test_multi_target_cv(self):
|
||||
"""Test multi-target regression with cross-validation."""
|
||||
automl = AutoML()
|
||||
automl.fit(
|
||||
self.X_train,
|
||||
self.y_train,
|
||||
task="regression",
|
||||
time_budget=10,
|
||||
eval_method="cv",
|
||||
n_splits=3,
|
||||
estimator_list=["xgboost"],
|
||||
verbose=0,
|
||||
)
|
||||
|
||||
# Check that the model was trained
|
||||
self.assertIsNotNone(automl.model)
|
||||
|
||||
# Check predictions shape
|
||||
y_pred = automl.predict(self.X_test)
|
||||
self.assertEqual(y_pred.shape, self.y_test.shape)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
@@ -1,89 +0,0 @@
|
||||
"""Test sklearn 1.7+ compatibility for estimator type detection.
|
||||
|
||||
This test ensures that FLAML estimators are properly recognized as
|
||||
regressors or classifiers by sklearn's is_regressor() and is_classifier()
|
||||
functions, which is required for sklearn 1.7+ ensemble methods.
|
||||
"""
|
||||
|
||||
import pytest
|
||||
from sklearn.base import is_classifier, is_regressor
|
||||
|
||||
from flaml.automl.model import (
|
||||
ExtraTreesEstimator,
|
||||
LGBMEstimator,
|
||||
RandomForestEstimator,
|
||||
XGBoostSklearnEstimator,
|
||||
)
|
||||
|
||||
|
||||
def test_extra_trees_regressor_type():
|
||||
"""Test that ExtraTreesEstimator with regression task is recognized as regressor."""
|
||||
est = ExtraTreesEstimator(task="regression")
|
||||
assert is_regressor(est), "ExtraTreesEstimator(task='regression') should be recognized as a regressor"
|
||||
assert not is_classifier(est), "ExtraTreesEstimator(task='regression') should not be recognized as a classifier"
|
||||
|
||||
|
||||
def test_extra_trees_classifier_type():
|
||||
"""Test that ExtraTreesEstimator with classification task is recognized as classifier."""
|
||||
est = ExtraTreesEstimator(task="binary")
|
||||
assert is_classifier(est), "ExtraTreesEstimator(task='binary') should be recognized as a classifier"
|
||||
assert not is_regressor(est), "ExtraTreesEstimator(task='binary') should not be recognized as a regressor"
|
||||
|
||||
est = ExtraTreesEstimator(task="multiclass")
|
||||
assert is_classifier(est), "ExtraTreesEstimator(task='multiclass') should be recognized as a classifier"
|
||||
assert not is_regressor(est), "ExtraTreesEstimator(task='multiclass') should not be recognized as a regressor"
|
||||
|
||||
|
||||
def test_random_forest_regressor_type():
|
||||
"""Test that RandomForestEstimator with regression task is recognized as regressor."""
|
||||
est = RandomForestEstimator(task="regression")
|
||||
assert is_regressor(est), "RandomForestEstimator(task='regression') should be recognized as a regressor"
|
||||
assert not is_classifier(est), "RandomForestEstimator(task='regression') should not be recognized as a classifier"
|
||||
|
||||
|
||||
def test_random_forest_classifier_type():
|
||||
"""Test that RandomForestEstimator with classification task is recognized as classifier."""
|
||||
est = RandomForestEstimator(task="binary")
|
||||
assert is_classifier(est), "RandomForestEstimator(task='binary') should be recognized as a classifier"
|
||||
assert not is_regressor(est), "RandomForestEstimator(task='binary') should not be recognized as a regressor"
|
||||
|
||||
|
||||
def test_lgbm_regressor_type():
|
||||
"""Test that LGBMEstimator with regression task is recognized as regressor."""
|
||||
est = LGBMEstimator(task="regression")
|
||||
assert is_regressor(est), "LGBMEstimator(task='regression') should be recognized as a regressor"
|
||||
assert not is_classifier(est), "LGBMEstimator(task='regression') should not be recognized as a classifier"
|
||||
|
||||
|
||||
def test_lgbm_classifier_type():
|
||||
"""Test that LGBMEstimator with classification task is recognized as classifier."""
|
||||
est = LGBMEstimator(task="binary")
|
||||
assert is_classifier(est), "LGBMEstimator(task='binary') should be recognized as a classifier"
|
||||
assert not is_regressor(est), "LGBMEstimator(task='binary') should not be recognized as a regressor"
|
||||
|
||||
|
||||
def test_xgboost_regressor_type():
|
||||
"""Test that XGBoostSklearnEstimator with regression task is recognized as regressor."""
|
||||
est = XGBoostSklearnEstimator(task="regression")
|
||||
assert is_regressor(est), "XGBoostSklearnEstimator(task='regression') should be recognized as a regressor"
|
||||
assert not is_classifier(est), "XGBoostSklearnEstimator(task='regression') should not be recognized as a classifier"
|
||||
|
||||
|
||||
def test_xgboost_classifier_type():
|
||||
"""Test that XGBoostSklearnEstimator with classification task is recognized as classifier."""
|
||||
est = XGBoostSklearnEstimator(task="binary")
|
||||
assert is_classifier(est), "XGBoostSklearnEstimator(task='binary') should be recognized as a classifier"
|
||||
assert not is_regressor(est), "XGBoostSklearnEstimator(task='binary') should not be recognized as a regressor"
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
# Run all tests
|
||||
test_extra_trees_regressor_type()
|
||||
test_extra_trees_classifier_type()
|
||||
test_random_forest_regressor_type()
|
||||
test_random_forest_classifier_type()
|
||||
test_lgbm_regressor_type()
|
||||
test_lgbm_classifier_type()
|
||||
test_xgboost_regressor_type()
|
||||
test_xgboost_classifier_type()
|
||||
print("All sklearn 1.7+ compatibility tests passed!")
|
||||
@@ -1843,7 +1843,7 @@
|
||||
"@jridgewell/resolve-uri" "^3.1.0"
|
||||
"@jridgewell/sourcemap-codec" "^1.4.14"
|
||||
|
||||
"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25":
|
||||
"@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25":
|
||||
version "0.3.25"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0"
|
||||
integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
|
||||
@@ -2218,26 +2218,10 @@
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/eslint-scope@^3.7.7":
|
||||
version "3.7.7"
|
||||
resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5"
|
||||
integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==
|
||||
dependencies:
|
||||
"@types/eslint" "*"
|
||||
"@types/estree" "*"
|
||||
|
||||
"@types/eslint@*":
|
||||
version "9.6.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-9.6.1.tgz#d5795ad732ce81715f27f75da913004a56751584"
|
||||
integrity sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==
|
||||
dependencies:
|
||||
"@types/estree" "*"
|
||||
"@types/json-schema" "*"
|
||||
|
||||
"@types/estree@*", "@types/estree@^1.0.8":
|
||||
version "1.0.8"
|
||||
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e"
|
||||
integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==
|
||||
"@types/estree@^1.0.5":
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4"
|
||||
integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==
|
||||
|
||||
"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18":
|
||||
version "4.17.31"
|
||||
@@ -2287,11 +2271,6 @@
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/json-schema@*", "@types/json-schema@^7.0.15":
|
||||
version "7.0.15"
|
||||
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841"
|
||||
integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
|
||||
|
||||
"@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9":
|
||||
version "7.0.11"
|
||||
resolved "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3"
|
||||
@@ -2428,125 +2407,125 @@
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1":
|
||||
version "1.14.1"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.14.1.tgz#a9f6a07f2b03c95c8d38c4536a1fdfb521ff55b6"
|
||||
integrity sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==
|
||||
"@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1":
|
||||
version "1.12.1"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.12.1.tgz#bb16a0e8b1914f979f45864c23819cc3e3f0d4bb"
|
||||
integrity sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==
|
||||
dependencies:
|
||||
"@webassemblyjs/helper-numbers" "1.13.2"
|
||||
"@webassemblyjs/helper-wasm-bytecode" "1.13.2"
|
||||
"@webassemblyjs/helper-numbers" "1.11.6"
|
||||
"@webassemblyjs/helper-wasm-bytecode" "1.11.6"
|
||||
|
||||
"@webassemblyjs/floating-point-hex-parser@1.13.2":
|
||||
version "1.13.2"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz#fcca1eeddb1cc4e7b6eed4fc7956d6813b21b9fb"
|
||||
integrity sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==
|
||||
"@webassemblyjs/floating-point-hex-parser@1.11.6":
|
||||
version "1.11.6"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431"
|
||||
integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==
|
||||
|
||||
"@webassemblyjs/helper-api-error@1.13.2":
|
||||
version "1.13.2"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz#e0a16152248bc38daee76dd7e21f15c5ef3ab1e7"
|
||||
integrity sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==
|
||||
"@webassemblyjs/helper-api-error@1.11.6":
|
||||
version "1.11.6"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768"
|
||||
integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==
|
||||
|
||||
"@webassemblyjs/helper-buffer@1.14.1":
|
||||
version "1.14.1"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz#822a9bc603166531f7d5df84e67b5bf99b72b96b"
|
||||
integrity sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==
|
||||
"@webassemblyjs/helper-buffer@1.12.1":
|
||||
version "1.12.1"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz#6df20d272ea5439bf20ab3492b7fb70e9bfcb3f6"
|
||||
integrity sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==
|
||||
|
||||
"@webassemblyjs/helper-numbers@1.13.2":
|
||||
version "1.13.2"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz#dbd932548e7119f4b8a7877fd5a8d20e63490b2d"
|
||||
integrity sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==
|
||||
"@webassemblyjs/helper-numbers@1.11.6":
|
||||
version "1.11.6"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5"
|
||||
integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==
|
||||
dependencies:
|
||||
"@webassemblyjs/floating-point-hex-parser" "1.13.2"
|
||||
"@webassemblyjs/helper-api-error" "1.13.2"
|
||||
"@webassemblyjs/floating-point-hex-parser" "1.11.6"
|
||||
"@webassemblyjs/helper-api-error" "1.11.6"
|
||||
"@xtuc/long" "4.2.2"
|
||||
|
||||
"@webassemblyjs/helper-wasm-bytecode@1.13.2":
|
||||
version "1.13.2"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz#e556108758f448aae84c850e593ce18a0eb31e0b"
|
||||
integrity sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==
|
||||
"@webassemblyjs/helper-wasm-bytecode@1.11.6":
|
||||
version "1.11.6"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9"
|
||||
integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==
|
||||
|
||||
"@webassemblyjs/helper-wasm-section@1.14.1":
|
||||
version "1.14.1"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz#9629dda9c4430eab54b591053d6dc6f3ba050348"
|
||||
integrity sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==
|
||||
"@webassemblyjs/helper-wasm-section@1.12.1":
|
||||
version "1.12.1"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz#3da623233ae1a60409b509a52ade9bc22a37f7bf"
|
||||
integrity sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==
|
||||
dependencies:
|
||||
"@webassemblyjs/ast" "1.14.1"
|
||||
"@webassemblyjs/helper-buffer" "1.14.1"
|
||||
"@webassemblyjs/helper-wasm-bytecode" "1.13.2"
|
||||
"@webassemblyjs/wasm-gen" "1.14.1"
|
||||
"@webassemblyjs/ast" "1.12.1"
|
||||
"@webassemblyjs/helper-buffer" "1.12.1"
|
||||
"@webassemblyjs/helper-wasm-bytecode" "1.11.6"
|
||||
"@webassemblyjs/wasm-gen" "1.12.1"
|
||||
|
||||
"@webassemblyjs/ieee754@1.13.2":
|
||||
version "1.13.2"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz#1c5eaace1d606ada2c7fd7045ea9356c59ee0dba"
|
||||
integrity sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==
|
||||
"@webassemblyjs/ieee754@1.11.6":
|
||||
version "1.11.6"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a"
|
||||
integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==
|
||||
dependencies:
|
||||
"@xtuc/ieee754" "^1.2.0"
|
||||
|
||||
"@webassemblyjs/leb128@1.13.2":
|
||||
version "1.13.2"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.13.2.tgz#57c5c3deb0105d02ce25fa3fd74f4ebc9fd0bbb0"
|
||||
integrity sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==
|
||||
"@webassemblyjs/leb128@1.11.6":
|
||||
version "1.11.6"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7"
|
||||
integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==
|
||||
dependencies:
|
||||
"@xtuc/long" "4.2.2"
|
||||
|
||||
"@webassemblyjs/utf8@1.13.2":
|
||||
version "1.13.2"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.13.2.tgz#917a20e93f71ad5602966c2d685ae0c6c21f60f1"
|
||||
integrity sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==
|
||||
"@webassemblyjs/utf8@1.11.6":
|
||||
version "1.11.6"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a"
|
||||
integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==
|
||||
|
||||
"@webassemblyjs/wasm-edit@^1.14.1":
|
||||
version "1.14.1"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz#ac6689f502219b59198ddec42dcd496b1004d597"
|
||||
integrity sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==
|
||||
"@webassemblyjs/wasm-edit@^1.12.1":
|
||||
version "1.12.1"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz#9f9f3ff52a14c980939be0ef9d5df9ebc678ae3b"
|
||||
integrity sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==
|
||||
dependencies:
|
||||
"@webassemblyjs/ast" "1.14.1"
|
||||
"@webassemblyjs/helper-buffer" "1.14.1"
|
||||
"@webassemblyjs/helper-wasm-bytecode" "1.13.2"
|
||||
"@webassemblyjs/helper-wasm-section" "1.14.1"
|
||||
"@webassemblyjs/wasm-gen" "1.14.1"
|
||||
"@webassemblyjs/wasm-opt" "1.14.1"
|
||||
"@webassemblyjs/wasm-parser" "1.14.1"
|
||||
"@webassemblyjs/wast-printer" "1.14.1"
|
||||
"@webassemblyjs/ast" "1.12.1"
|
||||
"@webassemblyjs/helper-buffer" "1.12.1"
|
||||
"@webassemblyjs/helper-wasm-bytecode" "1.11.6"
|
||||
"@webassemblyjs/helper-wasm-section" "1.12.1"
|
||||
"@webassemblyjs/wasm-gen" "1.12.1"
|
||||
"@webassemblyjs/wasm-opt" "1.12.1"
|
||||
"@webassemblyjs/wasm-parser" "1.12.1"
|
||||
"@webassemblyjs/wast-printer" "1.12.1"
|
||||
|
||||
"@webassemblyjs/wasm-gen@1.14.1":
|
||||
version "1.14.1"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz#991e7f0c090cb0bb62bbac882076e3d219da9570"
|
||||
integrity sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==
|
||||
"@webassemblyjs/wasm-gen@1.12.1":
|
||||
version "1.12.1"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz#a6520601da1b5700448273666a71ad0a45d78547"
|
||||
integrity sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==
|
||||
dependencies:
|
||||
"@webassemblyjs/ast" "1.14.1"
|
||||
"@webassemblyjs/helper-wasm-bytecode" "1.13.2"
|
||||
"@webassemblyjs/ieee754" "1.13.2"
|
||||
"@webassemblyjs/leb128" "1.13.2"
|
||||
"@webassemblyjs/utf8" "1.13.2"
|
||||
"@webassemblyjs/ast" "1.12.1"
|
||||
"@webassemblyjs/helper-wasm-bytecode" "1.11.6"
|
||||
"@webassemblyjs/ieee754" "1.11.6"
|
||||
"@webassemblyjs/leb128" "1.11.6"
|
||||
"@webassemblyjs/utf8" "1.11.6"
|
||||
|
||||
"@webassemblyjs/wasm-opt@1.14.1":
|
||||
version "1.14.1"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz#e6f71ed7ccae46781c206017d3c14c50efa8106b"
|
||||
integrity sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==
|
||||
"@webassemblyjs/wasm-opt@1.12.1":
|
||||
version "1.12.1"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz#9e6e81475dfcfb62dab574ac2dda38226c232bc5"
|
||||
integrity sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==
|
||||
dependencies:
|
||||
"@webassemblyjs/ast" "1.14.1"
|
||||
"@webassemblyjs/helper-buffer" "1.14.1"
|
||||
"@webassemblyjs/wasm-gen" "1.14.1"
|
||||
"@webassemblyjs/wasm-parser" "1.14.1"
|
||||
"@webassemblyjs/ast" "1.12.1"
|
||||
"@webassemblyjs/helper-buffer" "1.12.1"
|
||||
"@webassemblyjs/wasm-gen" "1.12.1"
|
||||
"@webassemblyjs/wasm-parser" "1.12.1"
|
||||
|
||||
"@webassemblyjs/wasm-parser@1.14.1", "@webassemblyjs/wasm-parser@^1.14.1":
|
||||
version "1.14.1"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz#b3e13f1893605ca78b52c68e54cf6a865f90b9fb"
|
||||
integrity sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==
|
||||
"@webassemblyjs/wasm-parser@1.12.1", "@webassemblyjs/wasm-parser@^1.12.1":
|
||||
version "1.12.1"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz#c47acb90e6f083391e3fa61d113650eea1e95937"
|
||||
integrity sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==
|
||||
dependencies:
|
||||
"@webassemblyjs/ast" "1.14.1"
|
||||
"@webassemblyjs/helper-api-error" "1.13.2"
|
||||
"@webassemblyjs/helper-wasm-bytecode" "1.13.2"
|
||||
"@webassemblyjs/ieee754" "1.13.2"
|
||||
"@webassemblyjs/leb128" "1.13.2"
|
||||
"@webassemblyjs/utf8" "1.13.2"
|
||||
"@webassemblyjs/ast" "1.12.1"
|
||||
"@webassemblyjs/helper-api-error" "1.11.6"
|
||||
"@webassemblyjs/helper-wasm-bytecode" "1.11.6"
|
||||
"@webassemblyjs/ieee754" "1.11.6"
|
||||
"@webassemblyjs/leb128" "1.11.6"
|
||||
"@webassemblyjs/utf8" "1.11.6"
|
||||
|
||||
"@webassemblyjs/wast-printer@1.14.1":
|
||||
version "1.14.1"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz#3bb3e9638a8ae5fdaf9610e7a06b4d9f9aa6fe07"
|
||||
integrity sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==
|
||||
"@webassemblyjs/wast-printer@1.12.1":
|
||||
version "1.12.1"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz#bcecf661d7d1abdaf989d8341a4833e33e2b31ac"
|
||||
integrity sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==
|
||||
dependencies:
|
||||
"@webassemblyjs/ast" "1.14.1"
|
||||
"@webassemblyjs/ast" "1.12.1"
|
||||
"@xtuc/long" "4.2.2"
|
||||
|
||||
"@xtuc/ieee754@^1.2.0":
|
||||
@@ -2572,10 +2551,10 @@ acorn-dynamic-import@^4.0.0:
|
||||
resolved "https://registry.npmmirror.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948"
|
||||
integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==
|
||||
|
||||
acorn-import-phases@^1.0.3:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz#16eb850ba99a056cb7cbfe872ffb8972e18c8bd7"
|
||||
integrity sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==
|
||||
acorn-import-attributes@^1.9.5:
|
||||
version "1.9.5"
|
||||
resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef"
|
||||
integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==
|
||||
|
||||
acorn-jsx@^5.0.1:
|
||||
version "5.3.2"
|
||||
@@ -2592,15 +2571,15 @@ acorn@^6.1.1:
|
||||
resolved "https://registry.npmmirror.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6"
|
||||
integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==
|
||||
|
||||
acorn@^8.0.4, acorn@^8.5.0:
|
||||
acorn@^8.0.4, acorn@^8.5.0, acorn@^8.7.1:
|
||||
version "8.8.1"
|
||||
resolved "https://registry.npmmirror.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73"
|
||||
integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==
|
||||
|
||||
acorn@^8.15.0:
|
||||
version "8.15.0"
|
||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816"
|
||||
integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==
|
||||
acorn@^8.8.2:
|
||||
version "8.12.1"
|
||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248"
|
||||
integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==
|
||||
|
||||
address@^1.0.1, address@^1.1.2:
|
||||
version "1.2.1"
|
||||
@@ -2627,7 +2606,7 @@ ajv-keywords@^3.4.1, ajv-keywords@^3.5.2:
|
||||
resolved "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
|
||||
integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
|
||||
|
||||
ajv-keywords@^5.0.0, ajv-keywords@^5.1.0:
|
||||
ajv-keywords@^5.0.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16"
|
||||
integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==
|
||||
@@ -2654,16 +2633,6 @@ ajv@^8.0.0, ajv@^8.8.0:
|
||||
require-from-string "^2.0.2"
|
||||
uri-js "^4.2.2"
|
||||
|
||||
ajv@^8.9.0:
|
||||
version "8.17.1"
|
||||
resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6"
|
||||
integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==
|
||||
dependencies:
|
||||
fast-deep-equal "^3.1.3"
|
||||
fast-uri "^3.0.1"
|
||||
json-schema-traverse "^1.0.0"
|
||||
require-from-string "^2.0.2"
|
||||
|
||||
algoliasearch-helper@^3.5.5:
|
||||
version "3.26.0"
|
||||
resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.26.0.tgz#d6e283396a9fc5bf944f365dc3b712570314363f"
|
||||
@@ -2873,11 +2842,6 @@ base16@^1.0.0:
|
||||
resolved "https://registry.npmmirror.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70"
|
||||
integrity sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==
|
||||
|
||||
baseline-browser-mapping@^2.9.0:
|
||||
version "2.9.19"
|
||||
resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz#3e508c43c46d961eb4d7d2e5b8d1dd0f9ee4f488"
|
||||
integrity sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==
|
||||
|
||||
batch@0.6.1:
|
||||
version "0.6.1"
|
||||
resolved "https://registry.npmmirror.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
|
||||
@@ -2965,16 +2929,15 @@ browserslist@^4.0.0, browserslist@^4.16.5, browserslist@^4.16.6, browserslist@^4
|
||||
node-releases "^2.0.6"
|
||||
update-browserslist-db "^1.0.9"
|
||||
|
||||
browserslist@^4.28.1:
|
||||
version "4.28.1"
|
||||
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.1.tgz#7f534594628c53c63101079e27e40de490456a95"
|
||||
integrity sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==
|
||||
browserslist@^4.21.10:
|
||||
version "4.23.3"
|
||||
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.3.tgz#debb029d3c93ebc97ffbc8d9cbb03403e227c800"
|
||||
integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==
|
||||
dependencies:
|
||||
baseline-browser-mapping "^2.9.0"
|
||||
caniuse-lite "^1.0.30001759"
|
||||
electron-to-chromium "^1.5.263"
|
||||
node-releases "^2.0.27"
|
||||
update-browserslist-db "^1.2.0"
|
||||
caniuse-lite "^1.0.30001646"
|
||||
electron-to-chromium "^1.5.4"
|
||||
node-releases "^2.0.18"
|
||||
update-browserslist-db "^1.1.0"
|
||||
|
||||
buble-jsx-only@^0.19.8:
|
||||
version "0.19.8"
|
||||
@@ -3074,16 +3037,11 @@ caniuse-api@^3.0.0:
|
||||
lodash.memoize "^4.1.2"
|
||||
lodash.uniq "^4.5.0"
|
||||
|
||||
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001400, caniuse-lite@^1.0.30001426:
|
||||
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001400, caniuse-lite@^1.0.30001426, caniuse-lite@^1.0.30001646:
|
||||
version "1.0.30001718"
|
||||
resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001718.tgz"
|
||||
integrity sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==
|
||||
|
||||
caniuse-lite@^1.0.30001759:
|
||||
version "1.0.30001769"
|
||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001769.tgz#1ad91594fad7dc233777c2781879ab5409f7d9c2"
|
||||
integrity sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==
|
||||
|
||||
ccount@^1.0.0, ccount@^1.0.3:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.npmmirror.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043"
|
||||
@@ -3891,10 +3849,10 @@ electron-to-chromium@^1.4.251:
|
||||
resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592"
|
||||
integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==
|
||||
|
||||
electron-to-chromium@^1.5.263:
|
||||
version "1.5.286"
|
||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz#142be1ab5e1cd5044954db0e5898f60a4960384e"
|
||||
integrity sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==
|
||||
electron-to-chromium@^1.5.4:
|
||||
version "1.5.14"
|
||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.14.tgz#8de5fd941f4deede999f90503c4b5923fbe1962b"
|
||||
integrity sha512-bEfPECb3fJ15eaDnu9LEJ2vPGD6W1vt7vZleSVyFhYuMIKm3vz/g9lt7IvEzgdwj58RjbPKUF2rXTCN/UW47tQ==
|
||||
|
||||
emoji-regex@^8.0.0:
|
||||
version "8.0.0"
|
||||
@@ -3928,13 +3886,13 @@ end-of-stream@^1.1.0:
|
||||
dependencies:
|
||||
once "^1.4.0"
|
||||
|
||||
enhanced-resolve@^5.19.0:
|
||||
version "5.19.0"
|
||||
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz#6687446a15e969eaa63c2fa2694510e17ae6d97c"
|
||||
integrity sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==
|
||||
enhanced-resolve@^5.17.1:
|
||||
version "5.17.1"
|
||||
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15"
|
||||
integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==
|
||||
dependencies:
|
||||
graceful-fs "^4.2.4"
|
||||
tapable "^2.3.0"
|
||||
tapable "^2.2.0"
|
||||
|
||||
entities@^2.0.0:
|
||||
version "2.2.0"
|
||||
@@ -4000,10 +3958,10 @@ es-errors@^1.3.0:
|
||||
resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
|
||||
integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
|
||||
|
||||
es-module-lexer@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-2.0.0.tgz#f657cd7a9448dcdda9c070a3cb75e5dc1e85f5b1"
|
||||
integrity sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==
|
||||
es-module-lexer@^1.2.1:
|
||||
version "1.5.4"
|
||||
resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.4.tgz#a8efec3a3da991e60efa6b633a7cad6ab8d26b78"
|
||||
integrity sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==
|
||||
|
||||
es-to-primitive@^1.2.1:
|
||||
version "1.2.1"
|
||||
@@ -4019,7 +3977,7 @@ escalade@^3.1.1:
|
||||
resolved "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
|
||||
integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
|
||||
|
||||
escalade@^3.2.0:
|
||||
escalade@^3.1.2:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5"
|
||||
integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
|
||||
@@ -4197,11 +4155,6 @@ fast-json-stable-stringify@^2.0.0:
|
||||
resolved "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
|
||||
integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
|
||||
|
||||
fast-uri@^3.0.1:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.0.tgz#66eecff6c764c0df9b762e62ca7edcfb53b4edfa"
|
||||
integrity sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==
|
||||
|
||||
fast-url-parser@1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.npmmirror.com/fast-url-parser/-/fast-url-parser-1.1.3.tgz#f4af3ea9f34d8a271cf58ad2b3759f431f0b318d"
|
||||
@@ -5473,10 +5426,10 @@ lines-and-columns@^1.1.6:
|
||||
resolved "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
|
||||
integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
|
||||
|
||||
loader-runner@^4.3.1:
|
||||
version "4.3.1"
|
||||
resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.1.tgz#6c76ed29b0ccce9af379208299f07f876de737e3"
|
||||
integrity sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==
|
||||
loader-runner@^4.2.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.npmmirror.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1"
|
||||
integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==
|
||||
|
||||
loader-utils@2.0.4, loader-utils@^2.0.0:
|
||||
version "2.0.4"
|
||||
@@ -5535,9 +5488,9 @@ lodash.uniq@4.5.0, lodash.uniq@^4.5.0:
|
||||
integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==
|
||||
|
||||
lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21:
|
||||
version "4.17.23"
|
||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.23.tgz#f113b0378386103be4f6893388c73d0bde7f2c5a"
|
||||
integrity sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==
|
||||
version "4.17.21"
|
||||
resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
|
||||
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
|
||||
|
||||
loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0:
|
||||
version "1.4.0"
|
||||
@@ -5834,10 +5787,10 @@ node-forge@1.3.0, node-forge@^1:
|
||||
resolved "https://registry.npmmirror.com/node-forge/-/node-forge-1.3.0.tgz#37a874ea723855f37db091e6c186e5b67a01d4b2"
|
||||
integrity sha512-08ARB91bUi6zNKzVmaj3QO7cr397uiDT2nJ63cHjyNtCTWIgvS47j3eT0WfzUwS9+6Z5YshRaoasFkXCKrIYbA==
|
||||
|
||||
node-releases@^2.0.27:
|
||||
version "2.0.27"
|
||||
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.27.tgz#eedca519205cf20f650f61d56b070db111231e4e"
|
||||
integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==
|
||||
node-releases@^2.0.18:
|
||||
version "2.0.18"
|
||||
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f"
|
||||
integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==
|
||||
|
||||
node-releases@^2.0.6:
|
||||
version "2.0.6"
|
||||
@@ -6187,10 +6140,10 @@ picocolors@^1.0.0:
|
||||
resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
|
||||
integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
|
||||
|
||||
picocolors@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
|
||||
integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
|
||||
picocolors@^1.0.1:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.0.tgz#5358b76a78cde483ba5cef6a9dc9671440b27d59"
|
||||
integrity sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==
|
||||
|
||||
picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1:
|
||||
version "2.3.1"
|
||||
@@ -7274,6 +7227,15 @@ schema-utils@^3.0.0, schema-utils@^3.1.1:
|
||||
ajv "^6.12.5"
|
||||
ajv-keywords "^3.5.2"
|
||||
|
||||
schema-utils@^3.2.0:
|
||||
version "3.3.0"
|
||||
resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe"
|
||||
integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==
|
||||
dependencies:
|
||||
"@types/json-schema" "^7.0.8"
|
||||
ajv "^6.12.5"
|
||||
ajv-keywords "^3.5.2"
|
||||
|
||||
schema-utils@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7"
|
||||
@@ -7284,16 +7246,6 @@ schema-utils@^4.0.0:
|
||||
ajv-formats "^2.1.1"
|
||||
ajv-keywords "^5.0.0"
|
||||
|
||||
schema-utils@^4.3.0, schema-utils@^4.3.3:
|
||||
version "4.3.3"
|
||||
resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.3.tgz#5b1850912fa31df90716963d45d9121fdfc09f46"
|
||||
integrity sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==
|
||||
dependencies:
|
||||
"@types/json-schema" "^7.0.9"
|
||||
ajv "^8.9.0"
|
||||
ajv-formats "^2.1.1"
|
||||
ajv-keywords "^5.1.0"
|
||||
|
||||
section-matter@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npmmirror.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167"
|
||||
@@ -7357,7 +7309,7 @@ send@0.19.0:
|
||||
range-parser "~1.2.1"
|
||||
statuses "2.0.1"
|
||||
|
||||
serialize-javascript@^6.0.0, serialize-javascript@^6.0.2:
|
||||
serialize-javascript@^6.0.0, serialize-javascript@^6.0.1:
|
||||
version "6.0.2"
|
||||
resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2"
|
||||
integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==
|
||||
@@ -7786,16 +7738,11 @@ tapable@^1.0.0:
|
||||
resolved "https://registry.npmmirror.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
|
||||
integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
|
||||
|
||||
tapable@^2.0.0:
|
||||
tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.npmmirror.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
|
||||
integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
|
||||
|
||||
tapable@^2.3.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.0.tgz#7e3ea6d5ca31ba8e078b560f0d83ce9a14aa8be6"
|
||||
integrity sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==
|
||||
|
||||
terser-webpack-plugin@^5.2.4:
|
||||
version "5.3.6"
|
||||
resolved "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz#5590aec31aa3c6f771ce1b1acca60639eab3195c"
|
||||
@@ -7807,16 +7754,16 @@ terser-webpack-plugin@^5.2.4:
|
||||
serialize-javascript "^6.0.0"
|
||||
terser "^5.14.1"
|
||||
|
||||
terser-webpack-plugin@^5.3.16:
|
||||
version "5.3.16"
|
||||
resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz#741e448cc3f93d8026ebe4f7ef9e4afacfd56330"
|
||||
integrity sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==
|
||||
terser-webpack-plugin@^5.3.10:
|
||||
version "5.3.10"
|
||||
resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199"
|
||||
integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==
|
||||
dependencies:
|
||||
"@jridgewell/trace-mapping" "^0.3.25"
|
||||
"@jridgewell/trace-mapping" "^0.3.20"
|
||||
jest-worker "^27.4.5"
|
||||
schema-utils "^4.3.0"
|
||||
serialize-javascript "^6.0.2"
|
||||
terser "^5.31.1"
|
||||
schema-utils "^3.1.1"
|
||||
serialize-javascript "^6.0.1"
|
||||
terser "^5.26.0"
|
||||
|
||||
terser@^5.10.0, terser@^5.14.1:
|
||||
version "5.15.1"
|
||||
@@ -7828,13 +7775,13 @@ terser@^5.10.0, terser@^5.14.1:
|
||||
commander "^2.20.0"
|
||||
source-map-support "~0.5.20"
|
||||
|
||||
terser@^5.31.1:
|
||||
version "5.46.0"
|
||||
resolved "https://registry.yarnpkg.com/terser/-/terser-5.46.0.tgz#1b81e560d584bbdd74a8ede87b4d9477b0ff9695"
|
||||
integrity sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==
|
||||
terser@^5.26.0:
|
||||
version "5.31.6"
|
||||
resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.6.tgz#c63858a0f0703988d0266a82fcbf2d7ba76422b1"
|
||||
integrity sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==
|
||||
dependencies:
|
||||
"@jridgewell/source-map" "^0.3.3"
|
||||
acorn "^8.15.0"
|
||||
acorn "^8.8.2"
|
||||
commander "^2.20.0"
|
||||
source-map-support "~0.5.20"
|
||||
|
||||
@@ -8108,13 +8055,13 @@ update-browserslist-db@^1.0.9:
|
||||
escalade "^3.1.1"
|
||||
picocolors "^1.0.0"
|
||||
|
||||
update-browserslist-db@^1.2.0:
|
||||
version "1.2.3"
|
||||
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz#64d76db58713136acbeb4c49114366cc6cc2e80d"
|
||||
integrity sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==
|
||||
update-browserslist-db@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e"
|
||||
integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==
|
||||
dependencies:
|
||||
escalade "^3.2.0"
|
||||
picocolors "^1.1.1"
|
||||
escalade "^3.1.2"
|
||||
picocolors "^1.0.1"
|
||||
|
||||
update-notifier@^5.1.0:
|
||||
version "5.1.0"
|
||||
@@ -8248,10 +8195,10 @@ wait-on@^6.0.0:
|
||||
minimist "^1.2.5"
|
||||
rxjs "^7.5.4"
|
||||
|
||||
watchpack@^2.5.1:
|
||||
version "2.5.1"
|
||||
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.5.1.tgz#dd38b601f669e0cbf567cb802e75cead82cde102"
|
||||
integrity sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==
|
||||
watchpack@^2.4.1:
|
||||
version "2.4.2"
|
||||
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.2.tgz#2feeaed67412e7c33184e5a79ca738fbd38564da"
|
||||
integrity sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==
|
||||
dependencies:
|
||||
glob-to-regexp "^0.4.1"
|
||||
graceful-fs "^4.1.2"
|
||||
@@ -8350,46 +8297,39 @@ webpack-sources@^1.1.0:
|
||||
source-list-map "^2.0.0"
|
||||
source-map "~0.6.1"
|
||||
|
||||
webpack-sources@^3.2.2:
|
||||
webpack-sources@^3.2.2, webpack-sources@^3.2.3:
|
||||
version "3.2.3"
|
||||
resolved "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde"
|
||||
integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
|
||||
|
||||
webpack-sources@^3.3.3:
|
||||
version "3.3.3"
|
||||
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.3.3.tgz#d4bf7f9909675d7a070ff14d0ef2a4f3c982c723"
|
||||
integrity sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==
|
||||
|
||||
webpack@^5.61.0, webpack@^5.73.0:
|
||||
version "5.105.0"
|
||||
resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.105.0.tgz#38b5e6c5db8cbe81debbd16e089335ada05ea23a"
|
||||
integrity sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw==
|
||||
version "5.94.0"
|
||||
resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.94.0.tgz#77a6089c716e7ab90c1c67574a28da518a20970f"
|
||||
integrity sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==
|
||||
dependencies:
|
||||
"@types/eslint-scope" "^3.7.7"
|
||||
"@types/estree" "^1.0.8"
|
||||
"@types/json-schema" "^7.0.15"
|
||||
"@webassemblyjs/ast" "^1.14.1"
|
||||
"@webassemblyjs/wasm-edit" "^1.14.1"
|
||||
"@webassemblyjs/wasm-parser" "^1.14.1"
|
||||
acorn "^8.15.0"
|
||||
acorn-import-phases "^1.0.3"
|
||||
browserslist "^4.28.1"
|
||||
"@types/estree" "^1.0.5"
|
||||
"@webassemblyjs/ast" "^1.12.1"
|
||||
"@webassemblyjs/wasm-edit" "^1.12.1"
|
||||
"@webassemblyjs/wasm-parser" "^1.12.1"
|
||||
acorn "^8.7.1"
|
||||
acorn-import-attributes "^1.9.5"
|
||||
browserslist "^4.21.10"
|
||||
chrome-trace-event "^1.0.2"
|
||||
enhanced-resolve "^5.19.0"
|
||||
es-module-lexer "^2.0.0"
|
||||
enhanced-resolve "^5.17.1"
|
||||
es-module-lexer "^1.2.1"
|
||||
eslint-scope "5.1.1"
|
||||
events "^3.2.0"
|
||||
glob-to-regexp "^0.4.1"
|
||||
graceful-fs "^4.2.11"
|
||||
json-parse-even-better-errors "^2.3.1"
|
||||
loader-runner "^4.3.1"
|
||||
loader-runner "^4.2.0"
|
||||
mime-types "^2.1.27"
|
||||
neo-async "^2.6.2"
|
||||
schema-utils "^4.3.3"
|
||||
tapable "^2.3.0"
|
||||
terser-webpack-plugin "^5.3.16"
|
||||
watchpack "^2.5.1"
|
||||
webpack-sources "^3.3.3"
|
||||
schema-utils "^3.2.0"
|
||||
tapable "^2.1.1"
|
||||
terser-webpack-plugin "^5.3.10"
|
||||
watchpack "^2.4.1"
|
||||
webpack-sources "^3.2.3"
|
||||
|
||||
webpackbar@^5.0.0-3:
|
||||
version "5.0.2"
|
||||
|
||||
Reference in New Issue
Block a user